@@ -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
11671179test_done
0 commit comments