]> git.ipfire.org Git - thirdparty/git.git/commit
apply: set file mode when --reverse creates a deleted file
authorMark Mentovai <mark@chromium.org>
Sat, 24 May 2025 03:40:46 +0000 (23:40 -0400)
committerJunio C Hamano <gitster@pobox.com>
Tue, 27 May 2025 13:48:07 +0000 (06:48 -0700)
commit1d9a66493be9fef38e531da587dd47f6f17ea483
tree9d2fcd934624849972667e8c0b29a2a9a8de2162
parent2cc8c17d67265f1912b79f8e57fc2718597ca686
apply: set file mode when --reverse creates a deleted file

Commit 01aff0a (apply: correctly reverse patch's pre- and post-image
mode bits, 2023-12-26) revised reverse_patches() to maintain the desired
property that when only one of patch::old_mode and patch::new_mode is
set, the mode will be carried in old_mode. That property is generally
correct, with one notable exception: when creating a file, only new_mode
will be set. Since reversing a deletion results in a creation, new_mode
must be set in that case.

Omitting handling for this case means that reversing a patch that
removes an executable file will not result in the executable permission
being set on the re-created file. Existing test coverage for file modes
focuses only on mode changes of existing files.

Swap old_mode and new_mode in reverse_patches() for what's represented
in the patch as a file deletion, as it is transformed into a file
creation under reversal. This causes git apply --reverse to set the
executable permission properly when re-creating a deleted executable
file.

Add tests ensuring that git apply sets file modes correctly on file
creation, both in the forward and reverse directions.

Signed-off-by: Mark Mentovai <mark@chromium.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
apply.c
t/t4129-apply-samemode.sh