From 0dfaf0a4e1905a9137d3f2f691620529aeb3b4fa Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 18 Feb 2007 02:34:09 -0800 Subject: [PATCH] git-svn: allow metadata options to be specified with 'init' and 'clone' 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 --- Documentation/git-svn.txt | 24 ++++++++++++++++-------- git-svn.perl | 13 +++++++++++++ 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt index bd163cfad6..da68f6d738 100644 --- a/Documentation/git-svn.txt +++ b/Documentation/git-svn.txt @@ -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=:: + Set the 'rewriteRoot' option in the [svn-remote] config. + --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..noMetadata: +svn.noMetadata:: +svn-remote..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..noMetadata: this, either. Using this conflicts with the 'useSvmProps' option for (hopefully) obvious reasons. -svn.useSvmProps: -svn-remote..useSvmProps: +svn.useSvmProps:: +svn-remote..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..useSvmProps: URL and UUID, and use it when generating metadata in commit messages. -svn.useSvnsyncProps: -svn-remote..useSvnsyncprops: +svn.useSvnsyncProps:: +svn-remote..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..rewriteRoot +svn-remote..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 diff --git a/git-svn.perl b/git-svn.perl index 1bcf058ef6..dc78dcf8cf 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -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 { -- 2.11.4.GIT