diff options
author | Junio C Hamano <gitster@pobox.com> | 2014-09-02 13:27:12 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-09-02 13:27:13 -0700 |
commit | 4740891e47de5ee33d91ffa3fdde25e8f0c4af74 (patch) | |
tree | 896162195a2f0f720f182037e71a5050f68e1e70 | |
parent | Merge branch 'pr/remotes-in-hashmap' (diff) | |
parent | archive: honor tar.umask even for pax headers (diff) | |
download | tgif-4740891e47de5ee33d91ffa3fdde25e8f0c4af74.tar.xz |
Merge branch 'bc/archive-pax-header-mode'
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 |