From: Peter Krefting <peter@xxxxxxxxxxxxxxxx> Add an option --readpax which makes import-tars read the commit ID stored by git-archive, adding it to the default commit message. Signed-off-by: Peter Krefting <peter@xxxxxxxxxxxxxxxx> Signed-off-by: Gabriel <g2p.code@xxxxxxxxx> --- That's a sensible patch, thanks. A small correction; when both --readpax and --metainfo=msg are passed, incorporate both message and original sha1. I amended your commit. contrib/fast-import/import-tars.perl | 27 ++++++++++++++++++++++++--- 1 files changed, 24 insertions(+), 3 deletions(-) diff --git a/contrib/fast-import/import-tars.perl b/contrib/fast-import/import-tars.perl index a5170a1..f41480e 100755 --- a/contrib/fast-import/import-tars.perl +++ b/contrib/fast-import/import-tars.perl @@ -14,14 +14,20 @@ ## ## echo 'This is the commit message' > myfile.tar.bz2.msg ## perl import-tars.perl --metainfo=msg myfile.tar.bz2 +## +## Use --readpax to read the pax_global_header generated by git archive. +## The commit ID stored in the header will be appended to the default +## generated commit message for the imported tarball. If the parameter +## is not given, the pax_global_header is ignored. use strict; use Getopt::Long; my $metaext = ''; +my $readpax; -die "usage: import-tars [--metainfo=extension] *.tar.{gz,bz2,lzma,xz,Z}\n" - unless GetOptions('metainfo=s' => \$metaext) && @ARGV; +die "usage: import-tars [--metainfo=extension] [--readpax] *.tar.{gz,bz2,lzma,xz,Z}\n" + unless GetOptions('metainfo=s' => \$metaext, 'readpax' => \$readpax) && @ARGV; my $branch_name = 'import-tars'; my $branch_ref = "refs/heads/$branch_name"; @@ -61,6 +67,7 @@ foreach my $tar_file (@ARGV) my $author_time = 0; my $next_mark = 1; my $have_top_dir = 1; + my $orig_commitid = ''; my ($top_dir, %files); while (read(I, $_, 512) == 512) { @@ -95,6 +102,16 @@ foreach my $tar_file (@ARGV) $size = oct $size; $mtime = oct $mtime; next if $typeflag == 5; # directory + if (defined $readpax && $typeflag eq 'g' && $name eq 'pax_global_header') + { + while ($size > 0 && read(I, $_, 512) == 512) { + if (/52 comment=([0-9a-f]{40})/) + { + $orig_commitid = $1; + } + } + next; + } print FI "blob\n", "mark :$next_mark\n"; if ($typeflag == 2) { # symbolic link @@ -124,7 +141,7 @@ foreach my $tar_file (@ARGV) $have_top_dir = 0 if $top_dir ne $1; } - my $commit_msg = "Imported from $tar_file."; + my $commit_msg = "Imported from $tar_file.\n"; my $this_committer_name = $committer_name; my $this_committer_email = $committer_email; my $this_author_name = $author_name; @@ -154,6 +171,10 @@ foreach my $tar_file (@ARGV) close MSG; } } + if ($orig_commitid ne '') + { + $commit_msg .= "\nThis tarball was generated by git, from commit id\n$orig_commitid."; + } print FI <<EOF; commit $branch_ref -- 1.7.0.rc2.31.g618d1 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html