Re: [PATCH] apply: canonicalize modes read from patches
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Aug 15, 2024, 14:52 UTC
- Message-ID
- <xmqqcym9vnwg.fsf@gitster.g>
- In-Reply-To
- <20240805060010.GA120016@coredump.intra.peff.net>
Jeff King <peff@peff.net> writes:
> +test_expect_success POSIXPERM 'patch mode for deleted file is canonicalized' '
This test seems to fail under "--stress" and I need to borrow a brain better clued than mine. It appears to be fooled by mtime that is not updated immediately and failing match_stat check, but since the index file is written on the other side of the second resolution boundary, racy-git double-checking code does not trigger, or something like that.
Here is how it fails:
expecting success of 4129.13 'patch mode for deleted file is canonicalized':
test_when_finished "git reset --hard" &&
echo content >non-canon &&
git add non-canon &&
chmod 666 non-canon && cat >patch <<-\EOF &&
diff --git a/non-canon b/non-canon
deleted file mode 100660
--- a/non-canon
+++ /dev/null
@@ -1 +0,0 @@
-content
EOF
git apply --index patch 2>err &&
test_must_be_empty err &&
git ls-files -- non-canon >staged &&
test_must_be_empty staged &&
test_path_is_missing non-canon++ test_when_finished 'git reset --hard'
++ test 0 = 0
++ test_cleanup='{ git reset --hard
} && (exit "$eval_ret"); eval_ret=$?; :'
++ echo content
++ git add non-canon
++ chmod 666 non-canon
++ cat
++ git apply --index patch
error: last command exited with $?=1
not ok 13 - patch mode for deleted file is canonicalized
#
# test_when_finished "git reset --hard" &&
# echo content >non-canon &&
# git add non-canon &&
# chmod 666 non-canon &&
#
# cat >patch <<-\EOF &&
# diff --git a/non-canon b/non-canon
# deleted file mode 100660
# --- a/non-canon
# +++ /dev/null
# @@ -1 +0,0 @@
# -content
# EOF
# git apply --index patch 2>err &&
# test_must_be_empty err &&
# git ls-files -- non-canon >staged &&
# test_must_be_empty staged &&
# test_path_is_missing non-canon
#
1..13
$ echo $?
1
$ git -C trash\ directory.t4129-apply-samemode.stress-failed/.git ls-files --debug non-canon
non-canon
ctime: 1723701364:980719772
mtime: 1723701364:980719772
dev: 65024 ino: 1980747
uid: 110493 gid: 89939
size: 8 flags: 0
: git t/master; stat trash\ directory.t4129-apply-samemode.stress-failed/non-canon
File: trash directory.t4129-apply-samemode.stress-failed/non-canon
Size: 8 Blocks: 8 IO Block: 4096 regular file
Device: 254,0 Inode: 1980747 Links: 1
Access: (0666/-rw-rw-rw-) Uid: (110493/ jch) Gid: (89939/primarygroup)
Access: 2024-08-15 06:54:43.808293635 -0700
Modify: 2024-08-14 22:56:04.980719772 -0700
Change: 2024-08-14 22:56:05.020719706 -0700
Birth: 2024-08-14 22:56:04.980719772 -0700
$ stat trash\ directory.t4129-apply-samemode.stress-failed/.git/index
File: trash directory.t4129-apply-samemode.stress-failed/.git/index
Size: 432 Blocks: 8 IO Block: 4096 regular file
Device: 254,0 Inode: 1980724 Links: 1
Access: (0600/-rw-------) Uid: (110493/ jch) Gid: (89939/primarygroup)
Access: 2024-08-14 22:56:05.044719667 -0700
Modify: 2024-08-14 22:56:05.008719726 -0700
Change: 2024-08-14 22:56:05.016719713 -0700
Birth: 2024-08-14 22:56:04.996719746 -0700