git-svn: allow metadata options to be specified with 'init' and 'clone'
authorEric Wong <normalperson@yhbt.net>
Sun, 18 Feb 2007 10:34:09 +0000 (02:34 -0800)
committerEric Wong <normalperson@yhbt.net>
Fri, 23 Feb 2007 08:57:13 +0000 (00:57 -0800)
Since the options that affect the way metadata is handled in
git-svn, should be consistently set/unset throughout history
imported by git-svn; it makes sense to allow the user to set
certain options from the command-line that will write to the
config file when initially creating the repository.

Also, fix some formatting issues while we're updating
documentation.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Documentation/git-svn.txt
git-svn.perl

index bd163cf..da68f6d 100644 (file)
@@ -49,6 +49,15 @@ COMMANDS
        (--tags=project/tags') or a full url
        (--tags=https://foo.org/project/tags)
 
+--no-metadata::
+       Set the 'noMetadata' option in the [svn-remote] config.
+--use-svm-props::
+       Set the 'useSvmProps' option in the [svn-remote] config.
+--use-svnsync-props::
+       Set the 'useSvnsyncProps' option in the [svn-remote] config.
+--rewrite-root=<URL>::
+       Set the 'rewriteRoot' option in the [svn-remote] config.
+
 --prefix=<prefix>
        This allows one to specify a prefix which is prepended
        to the names of remotes if trunk/branches/tags are
@@ -307,8 +316,8 @@ CONFIG FILE-ONLY OPTIONS
 ------------------------
 --
 
-svn.noMetadata:
-svn-remote.<name>.noMetadata:
+svn.noMetadata::
+svn-remote.<name>.noMetadata::
        This gets rid of the git-svn-id: lines at the end of every commit.
 
        If you lose your .git/svn/git-svn/.rev_db file, git-svn will not
@@ -319,8 +328,8 @@ svn-remote.<name>.noMetadata:
        this, either.  Using this conflicts with the 'useSvmProps'
        option for (hopefully) obvious reasons.
 
-svn.useSvmProps:
-svn-remote.<name>.useSvmProps:
+svn.useSvmProps::
+svn-remote.<name>.useSvmProps::
        This allows git-svn to re-map repository URLs and UUIDs from
        mirrors created using SVN::Mirror (or svk) for metadata.
 
@@ -332,20 +341,19 @@ svn-remote.<name>.useSvmProps:
        URL and UUID, and use it when generating metadata in commit
        messages.
 
-svn.useSvnsyncProps:
-svn-remote.<name>.useSvnsyncprops:
+svn.useSvnsyncProps::
+svn-remote.<name>.useSvnsyncprops::
        Similar to the useSvmProps option; this is for users
        of the svnsync(1) command distributed with SVN 1.4.x and
        later.
 
-svn-remote.<name>.rewriteRoot
+svn-remote.<name>.rewriteRoot::
        This allows users to create repositories from alternate
        URLs.  For example, an administrator could run git-svn on the
        server locally (accessing via file://) but wish to distribute
        the repository with a public http:// or svn:// URL in the
        metadata so users of it will see the public URL.
 
-
 Since the noMetadata, rewriteRoot, useSvnsyncProps and useSvmProps
 options all affect the metadata generated and used by git-svn; they
 *must* be set in the configuration file before any history is imported
index 1bcf058..dc78dcf 100755 (executable)
@@ -75,9 +75,14 @@ my %fc_opts = ( 'follow-parent|follow!' => \$Git::SVN::_follow_parent,
                %remote_opts );
 
 my ($_trunk, $_tags, $_branches);
+my %icv;
 my %init_opts = ( 'template=s' => \$_template, 'shared:s' => \$_shared,
                   'trunk|T=s' => \$_trunk, 'tags|t=s' => \$_tags,
                   'branches|b=s' => \$_branches, 'prefix=s' => \$_prefix,
+                 'no-metadata' => sub { $icv{noMetadata} = 1 },
+                 'use-svm-props' => sub { $icv{useSvmProps} = 1 },
+                 'use-svnsync-props' => sub { $icv{useSvnsyncProps} = 1 },
+                 'rewrite-root=s' => sub { $icv{rewriteRoot} = $_[1] },
                   %remote_opts );
 my %cmt_opts = ( 'edit|e' => \$_edit,
                'rmdir' => \$SVN::Git::Editor::_rmdir,
@@ -234,6 +239,14 @@ sub do_git_init_db {
                }
                command_noisy(@init_db);
        }
+       my $set;
+       my $pfx = "svn-remote.$Git::SVN::default_repo_id";
+       foreach my $i (keys %icv) {
+               die "'$set' and '$i' cannot both be set\n" if $set;
+               next unless defined $icv{$i};
+               command_noisy('config', "$pfx.$i", $icv{$i});
+               $set = $i;
+       }
 }
 
 sub init_subdir {