Skip to content

Commit

Permalink
cvsimport: ease migration from CVSROOT/users format
Browse files Browse the repository at this point in the history
This fixes a minor bug, which caused the author email to be
doubly enclosed in a <> pair (the code gave enclosing <> to
GIT_AUTHOR_EMAIL and GIT_COMMITTER_EMAIL environment variable).

The read_author_info() subroutine is taught to also understand
the user list in CVSROOT/users format.  This is primarily done
to ease migration for CVS users, who can use the -A option
to read from existing CVSROOT/users file.  write_author_info()
always writes in the git-cvsimport's native format ('='
delimited and value without quotes).

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Jan 16, 2006
1 parent ffd97f3 commit 8cd1621
Showing 1 changed file with 20 additions and 9 deletions.
29 changes: 20 additions & 9 deletions git-cvsimport.perl
Original file line number Diff line number Diff line change
Expand Up @@ -48,16 +48,28 @@ ($)
open my $f, '<', "$file" or die("Failed to open $file: $!\n");

while (<$f>) {
chomp;
# Expected format is this;
# Expected format is this:
# exon=Andreas Ericsson <ae@op5.se>
if (m/^([^ \t=]*)[ \t=]*([^<]*)(<.*$)\s*/) {
if (m/^(\S+?)\s*=\s*(.+?)\s*<(.+)>\s*$/) {
$user = $1;
$conv_author_name{$1} = $2;
$conv_author_email{$1} = $3;
# strip trailing whitespace from author name
$conv_author_name{$1} =~ s/\s*$//;
$conv_author_name{$user} = $2;
$conv_author_email{$user} = $3;
}
# However, we also read from CVSROOT/users format
# to ease migration.
elsif (/^(\w+):(['"]?)(.+?)\2\s*$/) {
my $mapped;
($user, $mapped) = ($1, $3);
if ($mapped =~ /^\s*(.*?)\s*<(.*)>\s*$/) {
$conv_author_name{$user} = $1;
$conv_author_email{$user} = $2;
}
elsif ($mapped =~ /^<?(.*)>?$/) {
$conv_author_name{$user} = $user;
$conv_author_email{$user} = $1;
}
}
# NEEDSWORK: Maybe warn on unrecognized lines?
}
close ($f);
}
Expand All @@ -68,8 +80,7 @@ ($)
die("Failed to open $file for writing: $!");

foreach (keys %conv_author_name) {
print $f "$_=" . $conv_author_name{$_} .
" " . $conv_author_email{$_} . "\n";
print $f "$_=$conv_author_name{$_} <$conv_author_email{$_}>\n";
}
close ($f);
}
Expand Down

0 comments on commit 8cd1621

Please sign in to comment.