Skip to content

Commit 4740891

Browse files
committed
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
2 parents 0e28161 + 10f343e commit 4740891

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

archive-tar.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ static int write_extended_header(struct archiver_args *args,
192192
unsigned int mode;
193193
memset(&header, 0, sizeof(header));
194194
*header.typeflag = TYPEFLAG_EXT_HEADER;
195-
mode = 0100666;
195+
mode = 0100666 & ~tar_umask;
196196
sprintf(header.name, "%s.paxheader", sha1_to_hex(sha1));
197197
prepare_header(args, &header, mode, size);
198198
write_blocked(&header, sizeof(header));
@@ -300,7 +300,7 @@ static int write_global_extended_header(struct archiver_args *args)
300300
strbuf_append_ext_header(&ext_header, "comment", sha1_to_hex(sha1), 40);
301301
memset(&header, 0, sizeof(header));
302302
*header.typeflag = TYPEFLAG_GLOBAL_HEADER;
303-
mode = 0100666;
303+
mode = 0100666 & ~tar_umask;
304304
strcpy(header.name, "pax_global_header");
305305
prepare_header(args, &header, mode, ext_header.len);
306306
write_blocked(&header, sizeof(header));

t/t5004-archive-corner-cases.sh

+5
Original file line numberDiff line numberDiff line change
@@ -113,4 +113,9 @@ test_expect_success 'archive empty subtree by direct pathspec' '
113113
check_dir extract sub
114114
'
115115

116+
test_expect_success 'archive applies umask even for pax headers' '
117+
git archive --format=tar HEAD >archive.tar &&
118+
! grep 0666 archive.tar
119+
'
120+
116121
test_done

0 commit comments

Comments
 (0)