You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Eric Dorland <er...@kuroneko.ca> on 2006/12/10 01:51:58 UTC

[PATCH] Add a --prefix-file switch to svndumpfilter

Hello,

I was recently extracting a project out of a fairly large svn repo, that 
had been converted from a CVS repo, so I needed a rather large number of 
exclude prefixes, more than I could pass as arguments to svndumpfilter. 
So the attached patch adds a --prefix-file switch which allows one to 
pass a file containing newline separated prefix paths instead of passing 
them on the command line. Hopefully it passes muster :)

Re: [PATCH] Add a --prefix-file switch to svndumpfilter

Posted by "Hyrum K. Wright" <hy...@mail.utexas.edu>.
Hyrum K. Wright wrote:
> Eric Dorland wrote:
>> Hello,
>>
>> I was recently extracting a project out of a fairly large svn repo, that
>> had been converted from a CVS repo, so I needed a rather large number of
>> exclude prefixes, more than I could pass as arguments to svndumpfilter.
>> So the attached patch adds a --prefix-file switch which allows one to
>> pass a file containing newline separated prefix paths instead of passing
>> them on the command line. Hopefully it passes muster :)
> 
> Ping...
> 
> Would a committer take a moment to comment on Eric's patch?  If nothing
> happens I'll file an issue in a few days.

Filed as issue 2697.

-Hyrum


Re: [PATCH] Add a --prefix-file switch to svndumpfilter

Posted by "Hyrum K. Wright" <hy...@mail.utexas.edu>.
Eric Dorland wrote:
> Hello,
> 
> I was recently extracting a project out of a fairly large svn repo, that
> had been converted from a CVS repo, so I needed a rather large number of
> exclude prefixes, more than I could pass as arguments to svndumpfilter.
> So the attached patch adds a --prefix-file switch which allows one to
> pass a file containing newline separated prefix paths instead of passing
> them on the command line. Hopefully it passes muster :)

Ping...

Would a committer take a moment to comment on Eric's patch?  If nothing
happens I'll file an issue in a few days.

(Personally, I think the feature is useful, and using '-F' or
'--targets' in this context would make sense.)

-Hyrum

> 
> ------------------------------------------------------------------------
> 
> --- subversion-1.4.2dfsg1/subversion/svndumpfilter/main.c	2006-07-12 13:07:21.000000000 -0400
> +++ subversion-1.4.2dfsg1.new/subversion/svndumpfilter/main.c	2006-12-03 17:36:15.000000000 -0500
> @@ -766,6 +766,7 @@
>      svndumpfilter__drop_empty_revs = SVN_OPT_FIRST_LONGOPT_ID,
>      svndumpfilter__renumber_revs,
>      svndumpfilter__preserve_revprops,
> +    svndumpfilter__prefix_file,
>      svndumpfilter__quiet,
>      svndumpfilter__version
>    };
> @@ -792,6 +793,8 @@
>       N_("Renumber revisions left after filtering.") },
>      {"preserve-revprops",  svndumpfilter__preserve_revprops, 0,
>       N_("Don't filter revision properties.") },
> +    {"prefix-file", svndumpfilter__prefix_file, 1,
> +     N_("Read prefix paths from file ARG.")},
>      {NULL}
>    };
>  
> @@ -805,13 +808,15 @@
>       N_("Filter out nodes with given prefixes from dumpstream.\n"
>          "usage: svndumpfilter exclude PATH_PREFIX...\n"),
>       {svndumpfilter__drop_empty_revs, svndumpfilter__renumber_revs,
> -      svndumpfilter__preserve_revprops, svndumpfilter__quiet} },
> +      svndumpfilter__preserve_revprops, svndumpfilter__prefix_file,
> +      svndumpfilter__quiet} },
>  
>      {"include", subcommand_include, {0},
>       N_("Filter out nodes without given prefixes from dumpstream.\n"
>          "usage: svndumpfilter include PATH_PREFIX...\n"),
>       {svndumpfilter__drop_empty_revs, svndumpfilter__renumber_revs,
> -      svndumpfilter__preserve_revprops, svndumpfilter__quiet} },
> +      svndumpfilter__preserve_revprops, svndumpfilter__prefix_file,
> +      svndumpfilter__quiet} },
>  
>      {"help", subcommand_help, {"?", "h"},
>       N_("Describe the usage of this program or its subcommands.\n"
> @@ -833,6 +838,7 @@
>    svn_boolean_t help;                    /* --help or -?        */
>    svn_boolean_t renumber_revs;           /* --renumber-revs     */
>    svn_boolean_t preserve_revprops;       /* --preserve-revprops */
> +  const char *prefix_file;               /* --prefix-file       */
>    apr_array_header_t *prefixes;          /* mainargs.           */
>  };
>  
> @@ -1168,6 +1174,9 @@
>          case svndumpfilter__preserve_revprops:
>            opt_state.preserve_revprops = TRUE;
>            break;
> +	case svndumpfilter__prefix_file:
> +	  opt_state.prefix_file = opt_arg;
> +	  break;
>          default:
>            {
>              subcommand_help(NULL, NULL, pool);
> @@ -1238,15 +1247,7 @@
>  
>    if (subcommand->cmd_func != subcommand_help)
>      {
> -      if (os->ind >= os->argc)
> -        {
> -          svn_error_clear(svn_cmdline_fprintf
> -                          (stderr, pool,
> -                           _("\nError: no prefixes supplied.\n")));
> -          svn_pool_destroy(pool);
> -          return EXIT_FAILURE;
> -        }
> -
> +      
>        opt_state.prefixes = apr_array_make(pool, os->argc - os->ind,
>                                            sizeof(const char *));
>        for (i = os->ind ; i< os->argc; i++)
> @@ -1260,6 +1261,46 @@
>            prefix = svn_path_join("/", prefix, pool);
>            APR_ARRAY_PUSH(opt_state.prefixes, const char *) = prefix;
>          }
> +      if (opt_state.prefix_file) 
> +	{
> +	  apr_file_t *prefix_file;
> +	  svn_stream_t *stream;
> +	  svn_stringbuf_t *line;
> +	  const char *prefix;
> +	  svn_boolean_t eof;
> +
> +	  SVN_INT_ERR(svn_io_file_open(&prefix_file, opt_state.prefix_file, 
> +				       APR_FOPEN_READ, 0, pool));
> +	  stream = svn_stream_from_aprfile2(prefix_file, FALSE, pool);
> +	  
> +	  while (TRUE)
> +	    {
> +	      SVN_INT_ERR(svn_stream_readline(stream, &line, "\n", &eof, 
> +					      pool));
> +	      if (eof)
> +		break;
> +	      
> +	      if (!svn_stringbuf_isempty(line))
> +		{
> +		  SVN_INT_ERR(svn_utf_cstring_to_utf8(&prefix, line->data, 
> +						      pool));
> +		  prefix = svn_path_internal_style(prefix, pool);
> +		  prefix = svn_path_join("/", prefix, pool);
> +		  APR_ARRAY_PUSH(opt_state.prefixes, const char *) = prefix;
> +		}
> +	    }
> +	  
> +	  svn_stream_close(stream);
> +	}
> +      
> +      if (apr_is_empty_array(opt_state.prefixes))
> +        {
> +          svn_error_clear(svn_cmdline_fprintf
> +                          (stderr, pool,
> +                           _("\nError: no prefixes supplied.\n")));
> +          svn_pool_destroy(pool);
> +          return EXIT_FAILURE;
> +        }
>      }
>  
>