Browse Source

svnimport: Read author names and emails from a 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.

Signed-off-by: Karl Hasselström <kha@treskal.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Karl Hasselström 19 years ago committed by Junio C Hamano
parent
commit
36610b24f1
  1. 13
      Documentation/git-svnimport.txt
  2. 23
      git-svnimport.perl

13
Documentation/git-svnimport.txt

@ -13,7 +13,8 @@ SYNOPSIS
[ -C <GIT_repository> ] [ -i ] [ -u ] [-l limit_rev] [ -C <GIT_repository> ] [ -i ] [ -u ] [-l limit_rev]
[ -b branch_subdir ] [ -T trunk_subdir ] [ -t tag_subdir ] [ -b branch_subdir ] [ -T trunk_subdir ] [ -t tag_subdir ]
[ -s start_chg ] [ -m ] [ -r ] [ -M regex ] [ -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 DESCRIPTION
@ -71,6 +72,16 @@ When importing incrementally, you might need to edit the .git/svn2git file.
syntaxes are similar enough that using the Subversion patterns syntaxes are similar enough that using the Subversion patterns
directly with "-I .gitignore" will almost always just work.) 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:: -m::
Attempt to detect merges based on the commit message. This option Attempt to detect merges based on the commit message. This option
will enable default regexes that try to capture the name source will enable default regexes that try to capture the name source

23
git-svnimport.perl

@ -30,7 +30,7 @@ $SIG{'PIPE'}="IGNORE";
$ENV{'TZ'}="UTC"; $ENV{'TZ'}="UTC";


our($opt_h,$opt_o,$opt_v,$opt_u,$opt_C,$opt_i,$opt_m,$opt_M,$opt_t,$opt_T, 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() { sub usage() {
print STDERR <<END; print STDERR <<END;
@ -38,12 +38,12 @@ Usage: ${\basename $0} # fetch/update GIT from SVN
[-o branch-for-HEAD] [-h] [-v] [-l max_rev] [-o branch-for-HEAD] [-h] [-v] [-l max_rev]
[-C GIT_repository] [-t tagname] [-T trunkname] [-b branchname] [-C GIT_repository] [-t tagname] [-T trunkname] [-b branchname]
[-d|-D] [-i] [-u] [-r] [-I ignorefilename] [-s start_chg] [-d|-D] [-i] [-u] [-r] [-I ignorefilename] [-s start_chg]
[-m] [-M regex] [SVN_URL] [-m] [-M regex] [-A author_file] [SVN_URL]
END END
exit(1); 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; usage if $opt_h;


my $tag_name = $opt_t || "tags"; my $tag_name = $opt_t || "tags";
@ -68,6 +68,19 @@ if ($opt_M) {
push (@mergerx, qr/$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); select(STDERR); $|=1; select(STDOUT);




@ -485,6 +498,10 @@ sub commit {


if (not defined $author) { if (not defined $author) {
$author_name = $author_email = "unknown"; $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+<(.*)>$/) { } elsif ($author =~ /^(.*?)\s+<(.*)>$/) {
($author_name, $author_email) = ($1, $2); ($author_name, $author_email) = ($1, $2);
} else { } else {

Loading…
Cancel
Save