Skip to content

Commit 02d2554

Browse files
derrickstoleegitster
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]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 79df219 commit 02d2554

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
@@ -1128,35 +1128,47 @@ test_expect_success 'clean with staged sparse change' '
11281128
test_path_exists repo/folder2
11291129
'
11301130

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

11621174
test_done

0 commit comments

Comments
 (0)