]> git.ipfire.org Git - thirdparty/git.git/commit - cache.h
apply: don't use core.sharedRepository to create working tree files
authorMatheus Tavares <matheus.bernardino@usp.br>
Tue, 1 Dec 2020 23:45:04 +0000 (20:45 -0300)
committerJunio C Hamano <gitster@pobox.com>
Wed, 2 Dec 2020 22:35:51 +0000 (14:35 -0800)
commiteb3c027e1779d0d1b5bd3b4e96a108461c9759a5
tree31443e01cff697ad2ff0ec3e39f353bd3b4a7e9c
parent898f80736c75878acc02dc55672317fcc0e0a5a6
apply: don't use core.sharedRepository to create working tree files

core.sharedRepository defines which permissions Git should set when
creating files in $GIT_DIR, so that the repository may be shared with
other users. But (in its current form) the setting shouldn't affect how
files are created in the working tree. This is not respected by apply
and am (which uses apply), when creating leading directories:

$ cat d.patch
 diff --git a/d/f b/d/f
 new file mode 100644
 index 0000000..e69de29

Apply without the setting:
$ umask 0077
$ git apply d.patch
$ ls -ld d
 drwx------

Apply with the setting:
$ umask 0077
$ git -c core.sharedRepository=0770 apply d.patch
$ ls -ld d
 drwxrws---

Only the leading directories are affected. That's because they are
created with safe_create_leading_directories(), which calls
adjust_shared_perm() to set the directories' permissions based on
core.sharedRepository. To fix that, let's introduce a variant of this
function that ignores the setting, and use it in apply. Also add a
regression test and a note in the function documentation about the use
of each variant according to the destination (working tree or git
dir).

Signed-off-by: Matheus Tavares <matheus.bernardino@usp.br>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
apply.c
cache.h
sha1-file.c
t/t4129-apply-samemode.sh
t/test-lib-functions.sh