From: "Chandra Pratap via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Chandra Pratap <chandrapratap376@gmail.com>,
Chandra Pratap <chandrapratap3519@gmail.com>
Subject: [PATCH] Teach git apply to respect core.fileMode settings
Date: Mon, 18 Dec 2023 14:09:28 +0000 [thread overview]
Message-ID: <pull.1620.git.1702908568890.gitgitgadget@gmail.com> (raw)
From: Chandra Pratap <chandrapratap3519@gmail.com>
CC: Johannes Schindelin <johannes.schindelin@gmail.com>
Signed-off-by: Chandra Pratap <chandrapratap3519@gmail.com>
---
apply: make git apply respect core.fileMode settings
When applying a patch that adds an executable file, git apply ignores
the core.fileMode setting (core.fileMode in git config specifies whether
the executable bit on files in the working tree
should be honored or not) resulting in warnings like:
warning: script.sh has type 100644, expected 100755
even when core.fileMode is set to false, which is undesired. This is
extra true for systems like Windows which don't rely on lsat().
Fix this by inferring the correct file mode from the existing index
entry when core.filemode is set to false. The added test case helps
verify the change and prevents future regression.
Reviewed-by: Johannes Schindelin johannes.schindelin@gmail.com
Signed-off-by: Chandra Pratap chandrapratap3519@gmail.com
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1620%2FChand-ra%2Fdevel-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1620/Chand-ra/devel-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1620
apply.c | 7 +++++--
t/t4129-apply-samemode.sh | 15 +++++++++++++++
2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/apply.c b/apply.c
index 3d69fec836d..56790f515e0 100644
--- a/apply.c
+++ b/apply.c
@@ -3778,8 +3778,11 @@ 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 && patch->old_mode)
+ st_mode = patch->old_mode;
+ else st_mode = ce_mode_from_stat(*ce, st->st_mode);
+ }
if (patch->is_new < 0)
patch->is_new = 0;
diff --git a/t/t4129-apply-samemode.sh b/t/t4129-apply-samemode.sh
index e7a7295f1b6..95917fee128 100755
--- a/t/t4129-apply-samemode.sh
+++ b/t/t4129-apply-samemode.sh
@@ -101,4 +101,19 @@ test_expect_success POSIXPERM 'do not use core.sharedRepository for working tree
)
'
+test_expect_success FILEMODE 'ensure git apply respects core.fileMode' '
+ test_config core.fileMode false &&
+ echo true >script.sh &&
+ git add --chmod=+x script.sh &&
+ test_tick && git commit -m "Add script" &&
+
+ echo true >>script.sh &&
+ test_tick && git commit -m "Modify script" script.sh &&
+ git format-patch -1 --stdout >patch &&
+
+ git switch -c branch HEAD^ &&
+ git apply patch 2>err &&
+ ! test_grep "has type 100644, expected 100755" err
+'
+
test_done
base-commit: 1a87c842ece327d03d08096395969aca5e0a6996
--
gitgitgadget
next reply other threads:[~2023-12-18 14:09 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-18 14:09 Chandra Pratap via GitGitGadget [this message]
2023-12-18 18:04 ` [PATCH] Teach git apply to respect core.fileMode settings Junio C Hamano
2023-12-18 18:10 ` Junio C Hamano
2023-12-19 17:07 ` Chandra Pratap
2023-12-19 18:30 ` [PATCH v2] " Chandra Pratap via GitGitGadget
2023-12-19 20:46 ` Torsten Bögershausen
2023-12-19 22:21 ` Junio C Hamano
2023-12-20 10:08 ` [PATCH v3] " Chandra Pratap via GitGitGadget
2023-12-24 13:42 ` Johannes Schindelin
2023-12-26 17:35 ` Junio C Hamano
2023-12-26 19:18 ` Johannes Schindelin
2023-12-26 20:10 ` Junio C Hamano
2023-12-26 20:58 ` Junio C Hamano
2023-12-26 21:35 ` Junio C Hamano
2023-12-26 23:32 ` [PATCH v4 0/3] apply with core.filemode=false Junio C Hamano
2023-12-26 23:32 ` [PATCH v4 1/3] apply: ignore working tree filemode when !core.filemode Junio C Hamano
2023-12-26 23:32 ` [PATCH v4 2/3] apply: correctly reverse patch's pre- and post-image mode bits Junio C Hamano
2023-12-26 23:32 ` [PATCH v4 3/3] apply: code simplification Junio C Hamano
2024-02-07 22:15 ` [PATCH v4 0/3] apply with core.filemode=false Junio C Hamano
2024-02-18 22:38 ` Johannes Schindelin
2024-02-19 21:24 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.1620.git.1702908568890.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=chandrapratap3519@gmail.com \
--cc=chandrapratap376@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).