summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2014-08-13 14:24:45 -0700
committerJunio C Hamano <gitster@pobox.com>2014-08-13 14:24:45 -0700
commit9972bb249c5e6b546fcf0bd8ae685c184ce1b369 (patch)
tree915a7d53aaa7a5eebced4c55c86b81ba22321b59
parent850c14a0d1ab68ea5ec8f7d0980aaebd0297ee20 (diff)
parent10f343ea814f5c18a0913997904ee11cd9b7da24 (diff)
downloadgit-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.c4
-rwxr-xr-xt/t5004-archive-corner-cases.sh5
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