]> git.ipfire.org Git - thirdparty/git.git/commitdiff
apply: symbolic links lack a "trustable executable bit"
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Wed, 17 Dec 2025 14:18:38 +0000 (14:18 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 17 Dec 2025 23:18:12 +0000 (08:18 +0900)
When 0482c32c334b (apply: ignore working tree filemode when
!core.filemode, 2023-12-26) fixed `git apply` to stop warning about
executable files, it inadvertently changed the code flow also for
symbolic links and directories.

Let's narrow the scope of the special `!trust_executable_git` code path
to apply only to regular files.

This is needed to let t4115.5(symlink escape when creating new files)
pass on Windows when symbolic link support is enabled in the MSYS2
runtime.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
apply.c

diff --git a/apply.c b/apply.c
index a2ceb3fb40d3b5eae9b524008a1781ea91d87ecf..de5750354ad2f87057f5a9f223dceba621634de8 100644 (file)
--- a/apply.c
+++ b/apply.c
@@ -3779,7 +3779,7 @@ static int check_preimage(struct apply_state *state,
                if (*ce && !(*ce)->ce_mode)
                        BUG("ce_mode == 0 for path '%s'", old_name);
 
-               if (trust_executable_bit)
+               if (trust_executable_bit || !S_ISREG(st->st_mode))
                        st_mode = ce_mode_from_stat(*ce, st->st_mode);
                else if (*ce)
                        st_mode = (*ce)->ce_mode;