From: Peter Krefting <peter@softwolves.pp.se>
To: git@vger.kernel.org
Cc: g2p.code@gmail.com
Subject: [PATCH] import-tars: Make it possible to include the original commit ID
Date: Thu, 18 Feb 2010 14:24:21 +0100 [thread overview]
Message-ID: <20100218132709.8CEBA2FC07@perkele> (raw)
In-Reply-To: <20100218140002.14f79853@gmail.com>
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@softwolves.pp.se>
---
> 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
next prev parent reply other threads:[~2010-02-18 13:27 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-17 19:20 [PATCH] import-tars: properly import git-archive tarballs Gabriel
2010-02-18 9:40 ` Peter Krefting
2010-02-18 13:00 ` Gabriel
2010-02-18 13:24 ` Peter Krefting [this message]
2010-02-18 15:02 ` [PATCH] import-tars: Make it possible to include the original commit ID Gabriel
2010-02-19 8:12 ` Peter Krefting
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100218132709.8CEBA2FC07@perkele \
--to=peter@softwolves.pp.se \
--cc=g2p.code@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).