Skip to content

Commit

Permalink
import-tars: Allow per-tar author and commit message.
Browse files Browse the repository at this point in the history
If the "--metainfo=<ext>" option is given on the command line, a file
called "<filename.tar>.<ext>" will be used to create the commit message
for "<filename.tar>", instead of using "Imported from filename.tar".

The author and committer of the tar ball can also be overridden by
embedding an "Author:" or "Committer:" header in the metainfo file.

Signed-off-by: Peter Krefting <peter@softwolves.pp.se>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
nafmo authored and gitster committed Sep 3, 2009
1 parent 0b1fac3 commit 7e78795
Showing 1 changed file with 46 additions and 4 deletions.
50 changes: 46 additions & 4 deletions contrib/fast-import/import-tars.perl
Expand Up @@ -8,9 +8,20 @@
## perl import-tars.perl *.tar.bz2
## git whatchanged import-tars
##
## Use --metainfo to specify the extension for a meta data file, where
## import-tars can read the commit message and optionally author and
## committer information.
##
## echo 'This is the commit message' > myfile.tar.bz2.msg
## perl import-tars.perl --metainfo=msg myfile.tar.bz2

use strict;
die "usage: import-tars *.tar.{gz,bz2,Z}\n" unless @ARGV;
use Getopt::Long;

my $metaext = '';

die "usage: import-tars [--metainfo=extension] *.tar.{gz,bz2,Z}\n"
unless GetOptions('metainfo=s' => \$metaext) && @ARGV;

my $branch_name = 'import-tars';
my $branch_ref = "refs/heads/$branch_name";
Expand Down Expand Up @@ -109,12 +120,43 @@
$have_top_dir = 0 if $top_dir ne $1;
}

my $commit_msg = "Imported from $tar_file.";
my $this_committer_name = $committer_name;
my $this_committer_email = $committer_email;
my $this_author_name = $author_name;
my $this_author_email = $author_email;
if ($metaext ne '') {
# Optionally read a commit message from <filename.tar>.msg
# Add a line on the form "Committer: name <e-mail>" to override
# the committer and "Author: name <e-mail>" to override the
# author for this tar ball.
if (open MSG, '<', "${tar_file}.${metaext}") {
my $header_done = 0;
$commit_msg = '';
while (<MSG>) {
if (!$header_done && /^Committer:\s+([^<>]*)\s+<(.*)>\s*$/i) {
$this_committer_name = $1;
$this_committer_email = $2;
} elsif (!$header_done && /^Author:\s+([^<>]*)\s+<(.*)>\s*$/i) {
$this_author_name = $1;
$this_author_email = $2;
} elsif (!$header_done && /^$/ { # empty line ends header.
$header_done = 1;
} else {
$commit_msg .= $_;
$header_done = 1;
}
}
close MSG;
}
}

print FI <<EOF;
commit $branch_ref
author $author_name <$author_email> $author_time +0000
committer $committer_name <$committer_email> $commit_time +0000
author $this_author_name <$this_author_email> $author_time +0000
committer $this_committer_name <$this_committer_email> $commit_time +0000
data <<END_OF_COMMIT_MESSAGE
Imported from $tar_file.
$commit_msg
END_OF_COMMIT_MESSAGE
deleteall
Expand Down

0 comments on commit 7e78795

Please sign in to comment.