diff options
author | Junio C Hamano <gitster@pobox.com> | 2014-08-13 14:24:45 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-08-13 14:24:45 -0700 |
commit | 9972bb249c5e6b546fcf0bd8ae685c184ce1b369 (patch) | |
tree | 915a7d53aaa7a5eebced4c55c86b81ba22321b59 | |
parent | 850c14a0d1ab68ea5ec8f7d0980aaebd0297ee20 (diff) | |
parent | 10f343ea814f5c18a0913997904ee11cd9b7da24 (diff) | |
download | git-9972bb249c5e6b546fcf0bd8ae685c184ce1b369.tar.gz |
Merge branch 'bc/archive-pax-header-mode' into next
Implementations of "tar" that do not understand an extended pax
header would extract the contents of it in a regular file; make
sure the permission bits of this file follows the same tar.umask
configuration setting.
* bc/archive-pax-header-mode:
archive: honor tar.umask even for pax headers
-rw-r--r-- | archive-tar.c | 4 | ||||
-rwxr-xr-x | t/t5004-archive-corner-cases.sh | 5 |
2 files changed, 7 insertions, 2 deletions
diff --git a/archive-tar.c b/archive-tar.c index 719b6298e6..603650fa3c 100644 --- a/archive-tar.c +++ b/archive-tar.c @@ -192,7 +192,7 @@ static int write_extended_header(struct archiver_args *args, unsigned int mode; memset(&header, 0, sizeof(header)); *header.typeflag = TYPEFLAG_EXT_HEADER; - mode = 0100666; + mode = 0100666 & ~tar_umask; sprintf(header.name, "%s.paxheader", sha1_to_hex(sha1)); prepare_header(args, &header, mode, size); write_blocked(&header, sizeof(header)); @@ -300,7 +300,7 @@ static int write_global_extended_header(struct archiver_args *args) strbuf_append_ext_header(&ext_header, "comment", sha1_to_hex(sha1), 40); memset(&header, 0, sizeof(header)); *header.typeflag = TYPEFLAG_GLOBAL_HEADER; - mode = 0100666; + mode = 0100666 & ~tar_umask; strcpy(header.name, "pax_global_header"); prepare_header(args, &header, mode, ext_header.len); write_blocked(&header, sizeof(header)); diff --git a/t/t5004-archive-corner-cases.sh b/t/t5004-archive-corner-cases.sh index 305bcac6b7..83d20c4ba9 100755 --- a/t/t5004-archive-corner-cases.sh +++ b/t/t5004-archive-corner-cases.sh @@ -113,4 +113,9 @@ test_expect_success 'archive empty subtree by direct pathspec' ' check_dir extract sub ' +test_expect_success 'archive applies umask even for pax headers' ' + git archive --format=tar HEAD >archive.tar && + ! grep 0666 archive.tar +' + test_done |