Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ignore the global PAX header in import-tars.perl #577

Closed
wants to merge 1 commit into from

Commits on Mar 24, 2020

  1. import-tars: ignore the global PAX header

    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>
    dscho committed Mar 24, 2020
    Configuration menu
    Copy the full SHA
    842dabe View commit details
    Browse the repository at this point in the history