import-tars: separate author from committer

The import-tars script is typically employed to (re)create the past
history of a project from stored tars. Although assigning authorship in
these cases can be a somewhat arbitrary process, it makes sense to set
the author to whoever created the tars in the first place (if it's
known), and (s)he can in general be different from the committer
(whoever is running the script).

Implement this by having separate author and committer data, making them
settable from the usual GIT_* environment variables.

Acked-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Giuseppe Bilotta 2009-03-20 10:57:50 +01:00 committed by Junio C Hamano
parent 6066f5ae75
commit 6872f606d9

View File

@ -14,13 +14,18 @@ die "usage: import-tars *.tar.{gz,bz2,Z}\n" unless @ARGV;
my $branch_name = 'import-tars'; my $branch_name = 'import-tars';
my $branch_ref = "refs/heads/$branch_name"; my $branch_ref = "refs/heads/$branch_name";
my $committer_name = 'T Ar Creator'; my $author_name = $ENV{'GIT_AUTHOR_NAME'} || 'T Ar Creator';
my $committer_email = 'tar@example.com'; my $author_email = $ENV{'GIT_AUTHOR_EMAIL'} || 'tar@example.com';
my $committer_name = $ENV{'GIT_COMMITTER_NAME'} || `git config --get user.name`;
my $committer_email = $ENV{'GIT_COMMITTER_EMAIL'} || `git config --get user.email`;
chomp($committer_name, $committer_email);
open(FI, '|-', 'git', 'fast-import', '--quiet') open(FI, '|-', 'git', 'fast-import', '--quiet')
or die "Unable to start git fast-import: $!\n"; or die "Unable to start git fast-import: $!\n";
foreach my $tar_file (@ARGV) foreach my $tar_file (@ARGV)
{ {
my $commit_time = time;
$tar_file =~ m,([^/]+)$,; $tar_file =~ m,([^/]+)$,;
my $tar_name = $1; my $tar_name = $1;
@ -39,7 +44,7 @@ foreach my $tar_file (@ARGV)
die "Unrecognized compression format: $tar_file\n"; die "Unrecognized compression format: $tar_file\n";
} }
my $commit_time = 0; my $author_time = 0;
my $next_mark = 1; my $next_mark = 1;
my $have_top_dir = 1; my $have_top_dir = 1;
my ($top_dir, %files); my ($top_dir, %files);
@ -92,7 +97,7 @@ foreach my $tar_file (@ARGV)
} }
$files{$path} = [$next_mark++, $mode]; $files{$path} = [$next_mark++, $mode];
$commit_time = $mtime if $mtime > $commit_time; $author_time = $mtime if $mtime > $author_time;
$path =~ m,^([^/]+)/,; $path =~ m,^([^/]+)/,;
$top_dir = $1 unless $top_dir; $top_dir = $1 unless $top_dir;
$have_top_dir = 0 if $top_dir ne $1; $have_top_dir = 0 if $top_dir ne $1;
@ -100,6 +105,7 @@ foreach my $tar_file (@ARGV)
print FI <<EOF; print FI <<EOF;
commit $branch_ref commit $branch_ref
author $author_name <$author_email> $author_time +0000
committer $committer_name <$committer_email> $commit_time +0000 committer $committer_name <$committer_email> $commit_time +0000
data <<END_OF_COMMIT_MESSAGE data <<END_OF_COMMIT_MESSAGE
Imported from $tar_file. Imported from $tar_file.
@ -119,7 +125,7 @@ EOF
print FI <<EOF; print FI <<EOF;
tag $tar_name tag $tar_name
from $branch_ref from $branch_ref
tagger $committer_name <$committer_email> $commit_time +0000 tagger $author_name <$author_email> $author_time +0000
data <<END_OF_TAG_MESSAGE data <<END_OF_TAG_MESSAGE
Package $tar_name Package $tar_name
END_OF_TAG_MESSAGE END_OF_TAG_MESSAGE