Merge branch 'jk/apply-patch-mode-check-fix' into maint-2.46
Test fix. * jk/apply-patch-mode-check-fix: t4129: fix racy index when calling chmod after git-add apply: canonicalize modes read from patches
This commit is contained in:
commit
712d970c01
1
apply.c
1
apply.c
@ -995,6 +995,7 @@ static int parse_mode_line(const char *line, int linenr, unsigned int *mode)
|
|||||||
*mode = strtoul(line, &end, 8);
|
*mode = strtoul(line, &end, 8);
|
||||||
if (end == line || !isspace(*end))
|
if (end == line || !isspace(*end))
|
||||||
return error(_("invalid mode on line %d: %s"), linenr, line);
|
return error(_("invalid mode on line %d: %s"), linenr, line);
|
||||||
|
*mode = canon_mode(*mode);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,4 +130,66 @@ test_expect_success 'git apply respects core.fileMode' '
|
|||||||
test_grep ! "has type 100644, expected 100755" err
|
test_grep ! "has type 100644, expected 100755" err
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success POSIXPERM 'patch mode for new file is canonicalized' '
|
||||||
|
cat >patch <<-\EOF &&
|
||||||
|
diff --git a/non-canon b/non-canon
|
||||||
|
new file mode 100660
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/non-canon
|
||||||
|
+content
|
||||||
|
EOF
|
||||||
|
test_when_finished "git reset --hard" &&
|
||||||
|
(
|
||||||
|
umask 0 &&
|
||||||
|
git apply --index patch 2>err
|
||||||
|
) &&
|
||||||
|
test_must_be_empty err &&
|
||||||
|
git ls-files -s -- non-canon >staged &&
|
||||||
|
test_grep "^100644" staged &&
|
||||||
|
ls -l non-canon >worktree &&
|
||||||
|
test_grep "^-rw-rw-rw" worktree
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success POSIXPERM 'patch mode for deleted file is canonicalized' '
|
||||||
|
test_when_finished "git reset --hard" &&
|
||||||
|
echo content >non-canon &&
|
||||||
|
chmod 666 non-canon &&
|
||||||
|
git add 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_expect_success POSIXPERM 'patch mode for mode change is canonicalized' '
|
||||||
|
test_when_finished "git reset --hard" &&
|
||||||
|
echo content >non-canon &&
|
||||||
|
git add non-canon &&
|
||||||
|
|
||||||
|
cat >patch <<-\EOF &&
|
||||||
|
diff --git a/non-canon b/non-canon
|
||||||
|
old mode 100660
|
||||||
|
new mode 100770
|
||||||
|
EOF
|
||||||
|
(
|
||||||
|
umask 0 &&
|
||||||
|
git apply --index patch 2>err
|
||||||
|
) &&
|
||||||
|
test_must_be_empty err &&
|
||||||
|
git ls-files -s -- non-canon >staged &&
|
||||||
|
test_grep "^100755" staged &&
|
||||||
|
ls -l non-canon >worktree &&
|
||||||
|
test_grep "^-rwxrwxrwx" worktree
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user