[PATCH] import-tars: Make it possible to include the original commit ID

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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>
---
> Someone with stronger perl-fu to parse the hash comment could print on
> stderr (keep me CC-ed if you do that):
>   This tarball was generated by git, from commit id $SHA1.

Actually, having this information could be useful, for instance to create
a "history-skipping" repository, and use bisect in that. When one finds
which released version causes the problem, one can bisect in the
original repository, using the commit ID indicated.

This applies on top of your patch.

 contrib/fast-import/import-tars.perl |   25 +++++++++++++++++++++++--
 1 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/contrib/fast-import/import-tars.perl b/contrib/fast-import/import-tars.perl
index a5170a1..3451309 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
@@ -154,6 +171,10 @@ foreach my $tar_file (@ARGV)
 			close MSG;
 		}
 	}
+	elsif ($orig_commitid ne '')
+	{
+		$commit_msg .= "\n\nThis tarball was generated by git, from commit id\n$orig_commitid.";
+	}
 
 	print FI <<EOF;
 commit $branch_ref
-- 
1.7.0

--
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

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]