Skip to content

Commit 7f6f62b

Browse files
committed
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 460e5e8 commit 7f6f62b

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
@@ -1183,35 +1183,47 @@ test_expect_success 'clean with sparse file states' '
11831183
test_must_be_empty out
11841184
'
11851185

1186-
test_expect_success 'clean with merge conflict status' '
1187-
git clone repo clean-merge &&
1186+
test_expect_success 'sparse-checkout operations with merge conflicts' '
1187+
git clone repo merge &&
11881188
1189-
echo dirty >clean-merge/deep/deeper2/a &&
1190-
touch clean-merge/folder2/extra &&
1189+
(
1190+
cd merge &&
1191+
mkdir -p folder1/even/more/dirs &&
1192+
echo base >folder1/even/more/dirs/file &&
1193+
git add folder1 &&
1194+
git commit -m "base" &&
11911195
1192-
cat >input <<-EOF &&
1193-
0 $ZERO_OID folder1/a
1194-
100644 $(git -C clean-merge rev-parse HEAD:folder1/a) 1 folder1/a
1195-
EOF
1196-
git -C clean-merge update-index --index-info <input &&
1196+
git checkout -b right&&
1197+
echo right >folder1/even/more/dirs/file &&
1198+
git commit -a -m "right" &&
11971199
1198-
git -C clean-merge sparse-checkout set deep/deeper1 &&
1200+
git checkout -b left HEAD~1 &&
1201+
echo left >folder1/even/more/dirs/file &&
1202+
git commit -a -m "left" &&
11991203
1200-
test_must_fail git -C clean-merge sparse-checkout clean -f 2>err &&
1201-
grep "failed to convert index to a sparse index" err &&
1204+
git checkout -b merge &&
1205+
git sparse-checkout set deep/deeper1 &&
12021206
1203-
mkdir -p clean-merge/folder1/ &&
1204-
echo merged >clean-merge/folder1/a &&
1205-
git -C clean-merge add --sparse folder1/a &&
1207+
test_must_fail git merge -m "will-conflict" right &&
12061208
1207-
# deletes folder2/ but leaves staged change in folder1
1208-
# and dirty change in deep/deeper2/
1209-
cat >expect <<-\EOF &&
1210-
Removing folder2/
1211-
EOF
1209+
test_must_fail git sparse-checkout clean -f 2>err &&
1210+
grep "failed to convert index to a sparse index" err &&
12121211
1213-
git -C clean-merge sparse-checkout clean -f >out &&
1214-
test_cmp expect out
1212+
echo merged >folder1/even/more/dirs/file &&
1213+
git add --sparse folder1 &&
1214+
git merge --continue &&
1215+
1216+
test_path_exists folder1/even/more/dirs/file &&
1217+
1218+
# clean does not remove the file, because the
1219+
# SKIP_WORKTREE bit was not cleared by the merge command.
1220+
git sparse-checkout clean -f >out &&
1221+
test_line_count = 0 out &&
1222+
test_path_exists folder1/even/more/dirs/file &&
1223+
1224+
git sparse-checkout reapply &&
1225+
test_path_is_missing folder1
1226+
)
12151227
'
12161228

12171229
test_done

0 commit comments

Comments
 (0)