path: root/t
diff options
authorTaylor Blau <>2020-04-29 17:36:38 (GMT)
committerJunio C Hamano <>2020-04-29 19:35:30 (GMT)
commit1f9becaedc9266651145a146fb63b84c3ee79d95 (patch)
tree3fdfc50c09c11888f675c66edbc043a398604111 /t
parentfa3bff2466ece4a10ba9beb9be3b45bada1c12eb (diff)
commit-graph.c: write non-split graphs as read-only
In the previous commit, Git learned 'hold_lock_file_for_update_mode' to allow the caller to specify the permission bits (prior to further adjustment by the umask and shared repository permissions) used when acquiring a temporary file. Use this in the commit-graph machinery for writing a non-split graph to acquire an opened temporary file with permissions read-only permissions to match the split behavior. (In the split case, Git uses git_mkstemp_mode' for each of the commit-graph layers with permission bits '0444'). One can notice this discrepancy when moving a non-split graph to be part of a new chain. This causes a commit-graph chain where all layers have read-only permission bits, except for the base layer, which is writable for the current user. Resolve this discrepancy by using the new 'hold_lock_file_for_update_mode' and passing the desired permission bits. Doing so causes some test fallout in t5318 and t6600. In t5318, this occurs in tests that corrupt a commit-graph file by writing into it. For these, 'chmod u+w'-ing the file beforehand resolves the issue. The additional spot in 'corrupt_graph_verify' is necessary because of the extra 'git commit-graph write' beforehand (which *does* rewrite the commit-graph file). In t6600, this is caused by copying a read-only commit-graph file into place and then trying to replace it. For these, make these files writable. Helped-by: Junio C Hamano <> Signed-off-by: Taylor Blau <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 't')
2 files changed, 16 insertions, 1 deletions
diff --git a/t/ b/t/
index 9bf920a..901eb3e 100755
--- a/t/
+++ b/t/
@@ -12,6 +12,10 @@ test_expect_success 'setup full repo' '
+test_expect_success POSIXPERM 'tweak umask for modebit tests' '
+ umask 022
test_expect_success 'verify graph with no graph file' '
cd "$TRASH_DIRECTORY/full" &&
git commit-graph verify
@@ -96,6 +100,13 @@ test_expect_success 'write graph' '
graph_read_expect "3"
+test_expect_success POSIXPERM 'write graph has correct permissions' '
+ test_path_is_file $objdir/info/commit-graph &&
+ echo "-r--r--r--" >expect &&
+ test_modebits $objdir/info/commit-graph >actual &&
+ test_cmp expect actual
graph_git_behavior 'graph exists' full commits/3 commits/1
test_expect_success 'Add more commits' '
corrupt_graph_setup() {
cd "$TRASH_DIRECTORY/full" &&
test_when_finished mv commit-graph-backup $objdir/info/commit-graph &&
- cp $objdir/info/commit-graph commit-graph-backup
+ cp $objdir/info/commit-graph commit-graph-backup &&
+ chmod u+w $objdir/info/commit-graph
corrupt_graph_verify() {
@@ -435,6 +447,7 @@ corrupt_graph_verify() {
fi &&
git status --short &&
GIT_TEST_COMMIT_GRAPH_DIE_ON_LOAD=true git commit-graph write &&
+ chmod u+w $objdir/info/commit-graph &&
git commit-graph verify
diff --git a/t/ b/t/
index b24d850..475564b 100755
--- a/t/
+++ b/t/
@@ -51,8 +51,10 @@ test_expect_success 'setup' '
done &&
git commit-graph write --reachable &&
mv .git/objects/info/commit-graph commit-graph-full &&
+ chmod u+w commit-graph-full &&
git show-ref -s commit-5-5 | git commit-graph write --stdin-commits &&
mv .git/objects/info/commit-graph commit-graph-half &&
+ chmod u+w commit-graph-half &&
git config core.commitGraph true