@@ -1133,35 +1133,47 @@ test_expect_success 'clean with staged sparse change' '
1133
1133
test_path_exists repo/folder2
1134
1134
'
1135
1135
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 &&
1138
1138
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" &&
1141
1145
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" &&
1147
1149
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" &&
1149
1153
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 &&
1152
1156
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 &&
1156
1158
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 &&
1162
1161
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
+ )
1165
1177
'
1166
1178
1167
1179
test_done
0 commit comments