@@ -1128,35 +1128,47 @@ test_expect_success 'clean with staged sparse change' '
1128
1128
test_path_exists repo/folder2
1129
1129
'
1130
1130
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 &&
1133
1133
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" &&
1136
1140
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" &&
1142
1144
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" &&
1144
1148
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 &&
1147
1151
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 &&
1151
1153
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 &&
1157
1156
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
+ )
1160
1172
'
1161
1173
1162
1174
test_done
0 commit comments