Skip to content

Commit 160fe8e

Browse files
derrickstoleedscho
authored andcommitted
t: expand tests around sparse merges and clean
With the current implementation of 'git sparse-checkout clean', we notice that a file that was in a conflicted state does not get cleaned up because of some internal details around the SKIP_WORKTREE bit. This test is documenting the current behavior before we update it in the following change. Signed-off-by: Derrick Stolee <[email protected]>
1 parent 768e9f1 commit 160fe8e

File tree

1 file changed

+34
-22
lines changed

1 file changed

+34
-22
lines changed

t/t1091-sparse-checkout-builtin.sh

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1133,35 +1133,47 @@ test_expect_success 'clean with staged sparse change' '
11331133
test_path_exists repo/folder2
11341134
'
11351135

1136-
test_expect_success 'clean with merge conflict status' '
1137-
git clone repo clean-merge &&
1136+
test_expect_success 'sparse-checkout operations with merge conflicts' '
1137+
git clone repo merge &&
11381138
1139-
echo dirty >clean-merge/deep/deeper2/a &&
1140-
touch clean-merge/folder2/extra &&
1139+
(
1140+
cd merge &&
1141+
mkdir -p folder1/even/more/dirs &&
1142+
echo base >folder1/even/more/dirs/file &&
1143+
git add folder1 &&
1144+
git commit -m "base" &&
11411145
1142-
cat >input <<-EOF &&
1143-
0 $ZERO_OID folder1/a
1144-
100644 $(git -C clean-merge rev-parse HEAD:folder1/a) 1 folder1/a
1145-
EOF
1146-
git -C clean-merge update-index --index-info <input &&
1146+
git checkout -b right&&
1147+
echo right >folder1/even/more/dirs/file &&
1148+
git commit -a -m "right" &&
11471149
1148-
git -C clean-merge sparse-checkout set deep/deeper1 &&
1150+
git checkout -b left HEAD~1 &&
1151+
echo left >folder1/even/more/dirs/file &&
1152+
git commit -a -m "left" &&
11491153
1150-
test_must_fail git -C clean-merge sparse-checkout clean -f 2>err &&
1151-
grep "failed to convert index to a sparse index" err &&
1154+
git checkout -b merge &&
1155+
git sparse-checkout set deep/deeper1 &&
11521156
1153-
mkdir -p clean-merge/folder1/ &&
1154-
echo merged >clean-merge/folder1/a &&
1155-
git -C clean-merge add --sparse folder1/a &&
1157+
test_must_fail git merge -m "will-conflict" right &&
11561158
1157-
# deletes folder2/ but leaves staged change in folder1
1158-
# and dirty change in deep/deeper2/
1159-
cat >expect <<-\EOF &&
1160-
Removing folder2/
1161-
EOF
1159+
test_must_fail git sparse-checkout clean -f 2>err &&
1160+
grep "failed to convert index to a sparse index" err &&
11621161
1163-
git -C clean-merge sparse-checkout clean -f >out &&
1164-
test_cmp expect out
1162+
echo merged >folder1/even/more/dirs/file &&
1163+
git add --sparse folder1 &&
1164+
git merge --continue &&
1165+
1166+
test_path_exists folder1/even/more/dirs/file &&
1167+
1168+
# clean does not remove the file, because the
1169+
# SKIP_WORKTREE bit was not cleared by the merge command.
1170+
git sparse-checkout clean -f >out &&
1171+
test_line_count = 0 out &&
1172+
test_path_exists folder1/even/more/dirs/file &&
1173+
1174+
git sparse-checkout reapply &&
1175+
test_path_is_missing folder1
1176+
)
11651177
'
11661178

11671179
test_done

0 commit comments

Comments
 (0)