Hi, On Wed, 20 Dec 2023, Chandra Pratap via GitGitGadget wrote: > diff --git a/apply.c b/apply.c > index 3d69fec836d..58f26c40413 100644 > --- a/apply.c > +++ b/apply.c > @@ -3778,8 +3778,12 @@ static int check_preimage(struct apply_state *state, > return error_errno("%s", old_name); > } > > - if (!state->cached && !previous) > - st_mode = ce_mode_from_stat(*ce, st->st_mode); > + if (!state->cached && !previous) { > + if (!trust_executable_bit) > + st_mode = *ce ? (*ce)->ce_mode : patch->old_mode; > + else > + st_mode = ce_mode_from_stat(*ce, st->st_mode); > + } I noticed a CI breakage in t2106.3 in `seen` that seems to be caused by this, and I can make it go away with this patch: -- snip -- >From 5c2a709b629d396528dabe2f92bf3d4deb5bbdb2 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin <johannes.schindelin@xxxxxx> Date: Sun, 24 Dec 2023 14:01:49 +0100 Subject: [PATCH] fixup! Teach git apply to respect core.fileMode settings As pointed out e.g. by t2016.3(git checkout -p), if the patch is to be applied in reverse (`git apply -R`), then the `old_mode` is actually 0, and we must use `new_mode` instead. While at it, add some defensive code to ignore `ce_mode` should it be 0. Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx> --- apply.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apply.c b/apply.c index 58f26c404136..5ad06ef2f843 100644 --- a/apply.c +++ b/apply.c @@ -3780,7 +3780,9 @@ static int check_preimage(struct apply_state *state, if (!state->cached && !previous) { if (!trust_executable_bit) - st_mode = *ce ? (*ce)->ce_mode : patch->old_mode; + st_mode = *ce && (*ce)->ce_mode ? (*ce)->ce_mode : + (state->apply_in_reverse ? + patch->new_mode : patch->old_mode); else st_mode = ce_mode_from_stat(*ce, st->st_mode); } -- snap -- I guess you can slap on that `Reviewed-by:` footer again, after all... ;-) Ciao, Johannes