]> git.ipfire.org Git - thirdparty/git.git/commitdiff
import-tars: ignore the global PAX header
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Tue, 24 Mar 2020 19:35:45 +0000 (19:35 +0000)
committerJunio C Hamano <gitster@pobox.com>
Tue, 24 Mar 2020 21:39:47 +0000 (14:39 -0700)
The tar importer in `contrib/fast-import/import-tars.perl` has a very
convenient feature: if _all_ paths stored in the imported `.tar` start
with a common prefix, e.g. `git-2.26.0/` in the tar at
https://github.com/git/git/archive/v2.26.0.tar.gz, then this prefix is
stripped.

This feature makes a ton of sense because it is relatively common to
import two or more revisions of the same project into Git, and obviously
we don't want all files to live in a tree whose name changes from
revision to revision.

Now, the problem with that feature is that it breaks down if there is a
`pax_global_header` "file" located outside of said prefix, at the top of
the tree. This is the case for `.tar` files generated by Git's very own
`git archive` command: it inserts that header, and `git archive` allows
specifying a common prefix (that the header does _not_ share with the
other files contained in the archive) via `--prefix=my-project-1.0.0/`.

Let's just skip any global header when importing `.tar` files into Git.

Note: this global header might contain useful information. For example,
in the output of `git archive`, it lists the original commit, which _is_
useful information. A future improvement to the `import-tars.perl`
script might be to include that information in the commit message, or do
other things with the information (e.g. use `mtime` information
contained in the global header as date of the commit). This patch does
not prevent any future patch from making that happen, it only prevents
the header from being treated as if it was a regular file.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
contrib/fast-import/import-tars.perl

index e800d9f5c9cf25e1aae3a0b87ad35f46b2a973c3..d50ce26d5d9f3d0ceb3351339893c9472f6e5195 100755 (executable)
@@ -139,6 +139,8 @@ foreach my $tar_file (@ARGV)
                        print FI "\n";
                }
 
+               next if ($typeflag eq 'g'); # ignore global header
+
                my $path;
                if ($prefix) {
                        $path = "$prefix/$name";