* [PATCH 0/4] some git-svnimport improvements @ 2006-02-26 5:03 Karl Hasselström 2006-02-26 5:11 ` [PATCH 1/4] Mention -r in usage summary Karl Hasselström ` (3 more replies) 0 siblings, 4 replies; 12+ messages in thread From: Karl Hasselström @ 2006-02-26 5:03 UTC (permalink / raw) To: Git Mailing List This patch series teaches git-svnimport about the svn:executable and svn:ignore Subversion properties (try to guess from their names what they do!), and lets the user specify a file with username -> Full Name <email@address> mappings. I vaguely recall some discussion some time ago about the format of this kind of username mapping file, but I ended up just picking the simplest format I could think of since that was the boring part. ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/4] Mention -r in usage summary 2006-02-26 5:03 [PATCH 0/4] some git-svnimport improvements Karl Hasselström @ 2006-02-26 5:11 ` Karl Hasselström 2006-02-26 5:11 ` [PATCH 2/4] Convert executable flag Karl Hasselström ` (2 subsequent siblings) 3 siblings, 0 replies; 12+ messages in thread From: Karl Hasselström @ 2006-02-26 5:11 UTC (permalink / raw) To: Git Mailing List I added the -r option to git-svnimport some time ago, but forgot to update the usage summary in the documentation. Signed-off-by: Karl Hasselström <kha@treskal.com> --- Documentation/git-svnimport.txt | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Documentation/git-svnimport.txt b/Documentation/git-svnimport.txt index 5c543d5..b5c7721 100644 --- a/Documentation/git-svnimport.txt +++ b/Documentation/git-svnimport.txt @@ -10,10 +10,10 @@ git-svnimport - Import a SVN repository SYNOPSIS -------- 'git-svnimport' [ -o <branch-for-HEAD> ] [ -h ] [ -v ] [ -d | -D ] - [ -C <GIT_repository> ] [ -i ] [ -u ] [-l limit_rev] - [ -b branch_subdir ] [ -T trunk_subdir ] [ -t tag_subdir ] - [ -s start_chg ] [ -m ] [ -M regex ] - <SVN_repository_URL> [ <path> ] + [ -C <GIT_repository> ] [ -i ] [ -u ] [-l limit_rev] + [ -b branch_subdir ] [ -T trunk_subdir ] [ -t tag_subdir ] + [ -s start_chg ] [ -m ] [ -r ] [ -M regex ] + <SVN_repository_URL> [ <path> ] DESCRIPTION ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/4] Convert executable flag 2006-02-26 5:03 [PATCH 0/4] some git-svnimport improvements Karl Hasselström 2006-02-26 5:11 ` [PATCH 1/4] Mention -r in usage summary Karl Hasselström @ 2006-02-26 5:11 ` Karl Hasselström 2006-02-26 5:11 ` [PATCH 3/4] Convert the svn:ignore property Karl Hasselström 2006-02-26 5:11 ` [PATCH 4/4] Read author names and emails from a file Karl Hasselström 3 siblings, 0 replies; 12+ messages in thread From: Karl Hasselström @ 2006-02-26 5:11 UTC (permalink / raw) To: Git Mailing List Convert the svn:executable property to file mode 755 when converting an SVN repository to GIT. Signed-off-by: Karl Hasselström <kha@treskal.com> --- git-svnimport.perl | 20 +++++++++++++------- 1 files changed, 13 insertions(+), 7 deletions(-) diff --git a/git-svnimport.perl b/git-svnimport.perl index ee2940f..6603b96 100755 --- a/git-svnimport.perl +++ b/git-svnimport.perl @@ -112,16 +112,22 @@ sub file { DIR => File::Spec->tmpdir(), UNLINK => 1); print "... $rev $path ...\n" if $opt_v; - my $pool = SVN::Pool->new(); - eval { $self->{'svn'}->get_file($path,$rev,$fh,$pool); }; - $pool->clear; + my (undef, $properties); + eval { (undef, $properties) + = $self->{'svn'}->get_file($path,$rev,$fh); }; if($@) { return undef if $@ =~ /Attempted to get checksum/; die $@; } + my $mode; + if (exists $properties->{'svn:executable'}) { + $mode = '0755'; + } else { + $mode = '0644'; + } close ($fh); - return $name; + return ($name, $mode); } package main; @@ -296,7 +302,7 @@ sub get_file($$$) { my $svnpath = revert_split_path($branch,$path); # now get it - my $name; + my ($name,$mode); if($opt_d) { my($req,$res); @@ -316,8 +322,9 @@ sub get_file($$$) { return undef if $res->code == 301; # directory? die $res->status_line." at $url\n"; } + $mode = '0644'; # can't obtain mode via direct http request? } else { - $name = $svn->file("$svnpath",$rev); + ($name,$mode) = $svn->file("$svnpath",$rev); return undef unless defined $name; } @@ -331,7 +338,6 @@ sub get_file($$$) { chomp $sha; close $F; unlink $name; - my $mode = "0644"; # SV does not seem to store any file modes return [$mode, $sha, $path]; } ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/4] Convert the svn:ignore property 2006-02-26 5:03 [PATCH 0/4] some git-svnimport improvements Karl Hasselström 2006-02-26 5:11 ` [PATCH 1/4] Mention -r in usage summary Karl Hasselström 2006-02-26 5:11 ` [PATCH 2/4] Convert executable flag Karl Hasselström @ 2006-02-26 5:11 ` Karl Hasselström 2006-02-26 5:11 ` [PATCH 4/4] Read author names and emails from a file Karl Hasselström 3 siblings, 0 replies; 12+ messages in thread From: Karl Hasselström @ 2006-02-26 5:11 UTC (permalink / raw) To: Git Mailing List Put the value of the svn:ignore property in a regular file when converting a Subversion repository to GIT. The Subversion and GIT ignore syntaxes are similar enough that it often just works to set the filename to .gitignore and do nothing else. Signed-off-by: Karl Hasselström <kha@treskal.com> --- Documentation/git-svnimport.txt | 8 +++++ git-svnimport.perl | 60 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 64 insertions(+), 4 deletions(-) diff --git a/Documentation/git-svnimport.txt b/Documentation/git-svnimport.txt index b5c7721..c95ff84 100644 --- a/Documentation/git-svnimport.txt +++ b/Documentation/git-svnimport.txt @@ -13,7 +13,7 @@ SYNOPSIS [ -C <GIT_repository> ] [ -i ] [ -u ] [-l limit_rev] [ -b branch_subdir ] [ -T trunk_subdir ] [ -t tag_subdir ] [ -s start_chg ] [ -m ] [ -r ] [ -M regex ] - <SVN_repository_URL> [ <path> ] + [ -I <ignorefile_name> ] <SVN_repository_URL> [ <path> ] DESCRIPTION @@ -65,6 +65,12 @@ When importing incrementally, you might Prepend 'rX: ' to commit messages, where X is the imported subversion revision. +-I <ignorefile_name>:: + Import the svn:ignore directory property to files with this + name in each directory. (The Subversion and GIT ignore + syntaxes are similar enough that using the Subversion patterns + directly with "-I .gitignore" will almost always just work.) + -m:: Attempt to detect merges based on the commit message. This option will enable default regexes that try to capture the name source diff --git a/git-svnimport.perl b/git-svnimport.perl index 6603b96..0dd9fab 100755 --- a/git-svnimport.perl +++ b/git-svnimport.perl @@ -29,19 +29,21 @@ die "Need SVN:Core 1.2.1 or better" if $ $SIG{'PIPE'}="IGNORE"; $ENV{'TZ'}="UTC"; -our($opt_h,$opt_o,$opt_v,$opt_u,$opt_C,$opt_i,$opt_m,$opt_M,$opt_t,$opt_T,$opt_b,$opt_r,$opt_s,$opt_l,$opt_d,$opt_D); +our($opt_h,$opt_o,$opt_v,$opt_u,$opt_C,$opt_i,$opt_m,$opt_M,$opt_t,$opt_T, + $opt_b,$opt_r,$opt_I,$opt_s,$opt_l,$opt_d,$opt_D); sub usage() { print STDERR <<END; Usage: ${\basename $0} # fetch/update GIT from SVN [-o branch-for-HEAD] [-h] [-v] [-l max_rev] [-C GIT_repository] [-t tagname] [-T trunkname] [-b branchname] - [-d|-D] [-i] [-u] [-r] [-s start_chg] [-m] [-M regex] [SVN_URL] + [-d|-D] [-i] [-u] [-r] [-I ignorefilename] [-s start_chg] + [-m] [-M regex] [SVN_URL] END exit(1); } -getopts("b:C:dDhil:mM:o:rs:t:T:uv") or usage(); +getopts("b:C:dDhiI:l:mM:o:rs:t:T:uv") or usage(); usage if $opt_h; my $tag_name = $opt_t || "tags"; @@ -130,6 +132,24 @@ sub file { return ($name, $mode); } +sub ignore { + my($self,$path,$rev) = @_; + + print "... $rev $path ...\n" if $opt_v; + my (undef,undef,$properties) + = $self->{'svn'}->get_dir($path,$rev,undef); + if (exists $properties->{'svn:ignore'}) { + my ($fh, $name) = tempfile('gitsvn.XXXXXX', + DIR => File::Spec->tmpdir(), + UNLINK => 1); + print $fh $properties->{'svn:ignore'}; + close($fh); + return $name; + } else { + return undef; + } +} + package main; use URI; @@ -341,6 +361,34 @@ sub get_file($$$) { return [$mode, $sha, $path]; } +sub get_ignore($$$$$) { + my($new,$old,$rev,$branch,$path) = @_; + + return unless $opt_I; + my $svnpath = revert_split_path($branch,$path); + my $name = $svn->ignore("$svnpath",$rev); + if ($path eq '/') { + $path = $opt_I; + } else { + $path = File::Spec->catfile($path,$opt_I); + } + if (defined $name) { + my $pid = open(my $F, '-|'); + die $! unless defined $pid; + if (!$pid) { + exec("git-hash-object", "-w", $name) + or die "Cannot create object: $!\n"; + } + my $sha = <$F>; + chomp $sha; + close $F; + unlink $name; + push(@$new,['0644',$sha,$path]); + } else { + push(@$old,$path); + } +} + sub split_path($$) { my($rev,$path) = @_; my $branch; @@ -546,6 +594,9 @@ sub commit { my $opath = $action->[3]; print STDERR "$revision: $branch: could not fetch '$opath'\n"; } + } elsif ($node_kind eq $SVN::Node::dir) { + get_ignore(\@new, \@old, $revision, + $branch,$path); } } elsif ($action->[0] eq "D") { push(@old,$path); @@ -554,6 +605,9 @@ sub commit { if ($node_kind eq $SVN::Node::file) { my $f = get_file($revision,$branch,$path); push(@new,$f) if $f; + } elsif ($node_kind eq $SVN::Node::dir) { + get_ignore(\@new, \@old, $revision, + $branch,$path); } } else { die "$revision: unknown action '".$action->[0]."' for $path\n"; ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 4/4] Read author names and emails from a file 2006-02-26 5:03 [PATCH 0/4] some git-svnimport improvements Karl Hasselström ` (2 preceding siblings ...) 2006-02-26 5:11 ` [PATCH 3/4] Convert the svn:ignore property Karl Hasselström @ 2006-02-26 5:11 ` Karl Hasselström 2006-02-26 11:49 ` Andreas Ericsson 3 siblings, 1 reply; 12+ messages in thread From: Karl Hasselström @ 2006-02-26 5:11 UTC (permalink / raw) To: Git Mailing List Read a file with lines on the form username User's Full Name <email@addres.org> and use "User's Full Name <email@addres.org>" as the GIT author and committer for Subversion commits made by "username". If encountering a commit made by a user not in the list, abort. Signed-off-by: Karl Hasselström <kha@treskal.com> --- Documentation/git-svnimport.txt | 13 ++++++++++++- git-svnimport.perl | 23 ++++++++++++++++++++--- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/Documentation/git-svnimport.txt b/Documentation/git-svnimport.txt index c95ff84..e0e3a5d 100644 --- a/Documentation/git-svnimport.txt +++ b/Documentation/git-svnimport.txt @@ -13,7 +13,8 @@ SYNOPSIS [ -C <GIT_repository> ] [ -i ] [ -u ] [-l limit_rev] [ -b branch_subdir ] [ -T trunk_subdir ] [ -t tag_subdir ] [ -s start_chg ] [ -m ] [ -r ] [ -M regex ] - [ -I <ignorefile_name> ] <SVN_repository_URL> [ <path> ] + [ -I <ignorefile_name> ] [ -A <author_file> ] + <SVN_repository_URL> [ <path> ] DESCRIPTION @@ -71,6 +72,16 @@ When importing incrementally, you might syntaxes are similar enough that using the Subversion patterns directly with "-I .gitignore" will almost always just work.) +-A <author_file>:: + Read a file with lines on the form + + username User's Full Name <email@addres.org> + + and use "User's Full Name <email@addres.org>" as the GIT + author and committer for Subversion commits made by + "username". If encountering a commit made by a user not in the + list, abort. + -m:: Attempt to detect merges based on the commit message. This option will enable default regexes that try to capture the name source diff --git a/git-svnimport.perl b/git-svnimport.perl index 0dd9fab..75ce8e0 100755 --- a/git-svnimport.perl +++ b/git-svnimport.perl @@ -30,7 +30,7 @@ $SIG{'PIPE'}="IGNORE"; $ENV{'TZ'}="UTC"; our($opt_h,$opt_o,$opt_v,$opt_u,$opt_C,$opt_i,$opt_m,$opt_M,$opt_t,$opt_T, - $opt_b,$opt_r,$opt_I,$opt_s,$opt_l,$opt_d,$opt_D); + $opt_b,$opt_r,$opt_I,$opt_A,$opt_s,$opt_l,$opt_d,$opt_D); sub usage() { print STDERR <<END; @@ -38,12 +38,12 @@ Usage: ${\basename $0} # fetch/updat [-o branch-for-HEAD] [-h] [-v] [-l max_rev] [-C GIT_repository] [-t tagname] [-T trunkname] [-b branchname] [-d|-D] [-i] [-u] [-r] [-I ignorefilename] [-s start_chg] - [-m] [-M regex] [SVN_URL] + [-m] [-M regex] [-A author_file] [SVN_URL] END exit(1); } -getopts("b:C:dDhiI:l:mM:o:rs:t:T:uv") or usage(); +getopts("A:b:C:dDhiI:l:mM:o:rs:t:T:uv") or usage(); usage if $opt_h; my $tag_name = $opt_t || "tags"; @@ -68,6 +68,19 @@ if ($opt_M) { push (@mergerx, qr/$opt_M/); } +our %users = (); +if ($opt_A) { + die "Cannot open $opt_A\n" unless -f $opt_A; + open(my $authors,$opt_A); + while(<$authors>) { + chomp; + next unless /^(\S+)\s+(.+?)\s+<(\S+)>$/; + (my $user,my $name,my $email) = ($1,$2,$3); + $users{$user} = [$name,$email]; + } + close($authors); +} + select(STDERR); $|=1; select(STDOUT); @@ -485,6 +498,10 @@ sub commit { if (not defined $author) { $author_name = $author_email = "unknown"; + } elsif ($opt_A) { + die "User $author is not listed in $opt_A\n" + unless exists $users{$author}; + ($author_name,$author_email) = @{$users{$author}}; } elsif ($author =~ /^(.*?)\s+<(.*)>$/) { ($author_name, $author_email) = ($1, $2); } else { ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 4/4] Read author names and emails from a file 2006-02-26 5:11 ` [PATCH 4/4] Read author names and emails from a file Karl Hasselström @ 2006-02-26 11:49 ` Andreas Ericsson 2006-02-27 5:51 ` Junio C Hamano ` (2 more replies) 0 siblings, 3 replies; 12+ messages in thread From: Andreas Ericsson @ 2006-02-26 11:49 UTC (permalink / raw) To: Karl Hasselström; +Cc: Git Mailing List Karl Hasselström wrote: > Read a file with lines on the form > > username User's Full Name <email@addres.org> > > and use "User's Full Name <email@addres.org>" as the GIT author and > committer for Subversion commits made by "username". If encountering a > commit made by a user not in the list, abort. > This is a good thing, but wouldn't it be better to use the same format as that of cvsimport's -A flag? Also, I imagine one would like to save those files within the .git directory for incremental importing, also like cvsimport does. -- Andreas Ericsson andreas.ericsson@op5.se OP5 AB www.op5.se Tel: +46 8-230225 Fax: +46 8-230231 ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 4/4] Read author names and emails from a file 2006-02-26 11:49 ` Andreas Ericsson @ 2006-02-27 5:51 ` Junio C Hamano 2006-02-27 23:00 ` Karl Hasselström 2006-02-27 23:08 ` [PATCH 1/2] Let git-svnimport's author file use same syntax as git-cvsimport's Karl Hasselström 2006-02-27 23:08 ` [PATCH 2/2] Save username -> Full Name <email@addr.es> map file Karl Hasselström 2 siblings, 1 reply; 12+ messages in thread From: Junio C Hamano @ 2006-02-27 5:51 UTC (permalink / raw) To: Andreas Ericsson; +Cc: git, Karl Hasselström Andreas Ericsson <ae@op5.se> writes: > Karl Hasselström wrote: >> Read a file with lines on the form >> username User's Full Name <email@addres.org> >> and use "User's Full Name <email@addres.org>" as the GIT author and >> committer for Subversion commits made by "username". If encountering a >> commit made by a user not in the list, abort. > > This is a good thing, but wouldn't it be better to use the same format > as that of cvsimport's -A flag? If both CVS and SVN have their own native format to express things like this, and if the format they use are different, then that is a valid reason for git-{cvs,svn}import to use different file format. But if that is not the case, I tend to agree that it might be easier for users if we had just one format. I do not think, however, any single project is likely to have to deal with both CVS and SVN upstream, importing into the same git repository, so reusing the mapping file would not be an issue, but having to learn how to write the mapping just once is a good thing. I do not offhand recall if SVN has its own native format; if it has, it may be better to use that, instead of matching what git-cvsimport does, since I do not think of a reason why the version with an equal sign is preferrable over the version with a space. If the version with '=' were the CVS native format then that might be a reason to prefer it, but if I recall correctly that is not the case. so... ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 4/4] Read author names and emails from a file 2006-02-27 5:51 ` Junio C Hamano @ 2006-02-27 23:00 ` Karl Hasselström 0 siblings, 0 replies; 12+ messages in thread From: Karl Hasselström @ 2006-02-27 23:00 UTC (permalink / raw) To: Junio C Hamano; +Cc: Andreas Ericsson, git On 2006-02-26 21:51:12 -0800, Junio C Hamano wrote: > Andreas Ericsson <ae@op5.se> writes: > > > This is a good thing, but wouldn't it be better to use the same > > format as that of cvsimport's -A flag? > > If both CVS and SVN have their own native format to express things > like this, and if the format they use are different, then that is a > valid reason for git-{cvs,svn}import to use different file format. > > But if that is not the case, I tend to agree that it might be easier > for users if we had just one format. I do not think, however, any > single project is likely to have to deal with both CVS and SVN > upstream, importing into the same git repository, so reusing the > mapping file would not be an issue, but having to learn how to write > the mapping just once is a good thing. > > I do not offhand recall if SVN has its own native format; if it has, > it may be better to use that, instead of matching what git-cvsimport > does, since I do not think of a reason why the version with an equal > sign is preferrable over the version with a space. If the version > with '=' were the CVS native format then that might be a reason to > prefer it, but if I recall correctly that is not the case. so... I don't know of any SVN native format for this, so it seems silly to use a different format than git-cvsimport. I've also made a patch that saves the author information, again just like git-cvsimport. -- Karl Hasselström, kha@treskal.com www.treskal.com/kalle ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/2] Let git-svnimport's author file use same syntax as git-cvsimport's 2006-02-26 11:49 ` Andreas Ericsson 2006-02-27 5:51 ` Junio C Hamano @ 2006-02-27 23:08 ` Karl Hasselström 2006-03-01 21:19 ` Jon Loeliger 2006-02-27 23:08 ` [PATCH 2/2] Save username -> Full Name <email@addr.es> map file Karl Hasselström 2 siblings, 1 reply; 12+ messages in thread From: Karl Hasselström @ 2006-02-27 23:08 UTC (permalink / raw) To: Git Mailing List git-cvsimport uses a username => Full Name <email@addr.es> mapping file with this syntax: kha=Karl Hasselström <kha@treskal.com> Since there is no reason to use another format for git-svnimport, use the same format. Signed-off-by: Karl Hasselström <kha@treskal.com> --- Documentation/git-svnimport.txt | 4 ++-- git-svnimport.perl | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Documentation/git-svnimport.txt b/Documentation/git-svnimport.txt index e0e3a5d..912a808 100644 --- a/Documentation/git-svnimport.txt +++ b/Documentation/git-svnimport.txt @@ -75,9 +75,9 @@ When importing incrementally, you might -A <author_file>:: Read a file with lines on the form - username User's Full Name <email@addres.org> + username = User's Full Name <email@addr.es> - and use "User's Full Name <email@addres.org>" as the GIT + and use "User's Full Name <email@addr.es>" as the GIT author and committer for Subversion commits made by "username". If encountering a commit made by a user not in the list, abort. diff --git a/git-svnimport.perl b/git-svnimport.perl index 75ce8e0..86837ed 100755 --- a/git-svnimport.perl +++ b/git-svnimport.perl @@ -74,7 +74,7 @@ if ($opt_A) { open(my $authors,$opt_A); while(<$authors>) { chomp; - next unless /^(\S+)\s+(.+?)\s+<(\S+)>$/; + next unless /^(\S+?)\s*=\s*(.+?)\s*<(.+)>\s*$/; (my $user,my $name,my $email) = ($1,$2,$3); $users{$user} = [$name,$email]; } ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 1/2] Let git-svnimport's author file use same syntax as git-cvsimport's 2006-02-27 23:08 ` [PATCH 1/2] Let git-svnimport's author file use same syntax as git-cvsimport's Karl Hasselström @ 2006-03-01 21:19 ` Jon Loeliger 2006-03-02 9:20 ` Karl Hasselström 0 siblings, 1 reply; 12+ messages in thread From: Jon Loeliger @ 2006-03-01 21:19 UTC (permalink / raw) To: Karl Hasselström; +Cc: Git Mailing List On Mon, 2006-02-27 at 17:08, Karl Hasselström wrote: > diff --git a/Documentation/git-svnimport.txt b/Documentation/git-svnimport.txt > index e0e3a5d..912a808 100644 > --- a/Documentation/git-svnimport.txt > +++ b/Documentation/git-svnimport.txt > @@ -75,9 +75,9 @@ When importing incrementally, you might > -A <author_file>:: > Read a file with lines on the form > > - username User's Full Name <email@addres.org> > + username = User's Full Name <email@addr.es> > > - and use "User's Full Name <email@addres.org>" as the GIT > + and use "User's Full Name <email@addr.es>" as the GIT > author and committer for Subversion commits made by > "username". If encountering a commit made by a user not in the > list, abort. Actually, I believe that "example.com" was reserved specifically for instances such as this. See: http://www.faqs.org/rfcs/rfc2606.html jdl ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/2] Let git-svnimport's author file use same syntax as git-cvsimport's 2006-03-01 21:19 ` Jon Loeliger @ 2006-03-02 9:20 ` Karl Hasselström 0 siblings, 0 replies; 12+ messages in thread From: Karl Hasselström @ 2006-03-02 9:20 UTC (permalink / raw) To: Jon Loeliger; +Cc: Git Mailing List On 2006-03-01 15:19:53 -0600, Jon Loeliger wrote: > On Mon, 2006-02-27 at 17:08, Karl Hasselström wrote: > > > Read a file with lines on the form > > > > - username User's Full Name <email@addres.org> > > + username = User's Full Name <email@addr.es> > > > > - and use "User's Full Name <email@addres.org>" as the GIT > > + and use "User's Full Name <email@addr.es>" as the GIT > > author and committer for Subversion commits made by > > "username". If encountering a commit made by a user not in the > > list, abort. > > Actually, I believe that "example.com" was reserved specifically for > instances such as this. Yes, I know. But email.address@example.com is much longer then email@addr.es, and not half as funny. :-) -- Karl Hasselström, kha@treskal.com www.treskal.com/kalle ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 2/2] Save username -> Full Name <email@addr.es> map file 2006-02-26 11:49 ` Andreas Ericsson 2006-02-27 5:51 ` Junio C Hamano 2006-02-27 23:08 ` [PATCH 1/2] Let git-svnimport's author file use same syntax as git-cvsimport's Karl Hasselström @ 2006-02-27 23:08 ` Karl Hasselström 2 siblings, 0 replies; 12+ messages in thread From: Karl Hasselström @ 2006-02-27 23:08 UTC (permalink / raw) To: Git Mailing List When the user specifies a username -> Full Name <email@addr.es> map file with the -A option, save a copy of that file as $git_dir/svn-authors. When running git-svnimport with an existing GIT directory, use $git_dir/svn-authors (if it exists) unless a file was explicitly specified with -A. Signed-off-by: Karl Hasselström <kha@treskal.com> --- Documentation/git-svnimport.txt | 5 +++++ git-svnimport.perl | 25 ++++++++++++++++++++----- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/Documentation/git-svnimport.txt b/Documentation/git-svnimport.txt index 912a808..a158813 100644 --- a/Documentation/git-svnimport.txt +++ b/Documentation/git-svnimport.txt @@ -82,6 +82,11 @@ When importing incrementally, you might "username". If encountering a commit made by a user not in the list, abort. + For convenience, this data is saved to $GIT_DIR/svn-authors + each time the -A option is provided, and read from that same + file each time git-svnimport is run with an existing GIT + repository without -A. + -m:: Attempt to detect merges based on the commit message. This option will enable default regexes that try to capture the name source diff --git a/git-svnimport.perl b/git-svnimport.perl index 86837ed..639aa41 100755 --- a/git-svnimport.perl +++ b/git-svnimport.perl @@ -13,6 +13,7 @@ use strict; use warnings; use Getopt::Std; +use File::Copy; use File::Spec; use File::Temp qw(tempfile); use File::Path qw(mkpath); @@ -68,10 +69,16 @@ if ($opt_M) { push (@mergerx, qr/$opt_M/); } +# Absolutize filename now, since we will have chdir'ed by the time we +# get around to opening it. +$opt_A = File::Spec->rel2abs($opt_A) if $opt_A; + our %users = (); -if ($opt_A) { - die "Cannot open $opt_A\n" unless -f $opt_A; - open(my $authors,$opt_A); +our $users_file = undef; +sub read_users($) { + $users_file = File::Spec->rel2abs(@_); + die "Cannot open $users_file\n" unless -f $users_file; + open(my $authors,$users_file); while(<$authors>) { chomp; next unless /^(\S+?)\s*=\s*(.+?)\s*<(.+)>\s*$/; @@ -302,6 +309,14 @@ EOM -d $git_dir or die "Could not create git subdir ($git_dir).\n"; +my $default_authors = "$git_dir/svn-authors"; +if ($opt_A) { + read_users($opt_A); + copy($opt_A,$default_authors) or die "Copy failed: $!"; +} else { + read_users($default_authors) if -f $default_authors; +} + open BRANCHES,">>", "$git_dir/svn2git"; sub node_kind($$$) { @@ -498,8 +513,8 @@ sub commit { if (not defined $author) { $author_name = $author_email = "unknown"; - } elsif ($opt_A) { - die "User $author is not listed in $opt_A\n" + } elsif (defined $users_file) { + die "User $author is not listed in $users_file\n" unless exists $users{$author}; ($author_name,$author_email) = @{$users{$author}}; } elsif ($author =~ /^(.*?)\s+<(.*)>$/) { ^ permalink raw reply related [flat|nested] 12+ messages in thread
end of thread, other threads:[~2006-03-02 9:20 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2006-02-26 5:03 [PATCH 0/4] some git-svnimport improvements Karl Hasselström 2006-02-26 5:11 ` [PATCH 1/4] Mention -r in usage summary Karl Hasselström 2006-02-26 5:11 ` [PATCH 2/4] Convert executable flag Karl Hasselström 2006-02-26 5:11 ` [PATCH 3/4] Convert the svn:ignore property Karl Hasselström 2006-02-26 5:11 ` [PATCH 4/4] Read author names and emails from a file Karl Hasselström 2006-02-26 11:49 ` Andreas Ericsson 2006-02-27 5:51 ` Junio C Hamano 2006-02-27 23:00 ` Karl Hasselström 2006-02-27 23:08 ` [PATCH 1/2] Let git-svnimport's author file use same syntax as git-cvsimport's Karl Hasselström 2006-03-01 21:19 ` Jon Loeliger 2006-03-02 9:20 ` Karl Hasselström 2006-02-27 23:08 ` [PATCH 2/2] Save username -> Full Name <email@addr.es> map file Karl Hasselström
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).