2 #include "clar_libgit2.h"
6 #include "git2/revert.h"
8 #include "../merge/merge_helpers.h"
10 #define TEST_REPO_PATH "revert"
12 static git_repository
*repo
;
13 static git_index
*repo_index
;
15 /* Fixture setup and teardown */
16 void test_revert_workdir__initialize(void)
20 repo
= cl_git_sandbox_init(TEST_REPO_PATH
);
21 git_repository_index(&repo_index
, repo
);
23 /* Ensure that the user's merge.conflictstyle doesn't interfere */
24 cl_git_pass(git_repository_config(&cfg
, repo
));
25 cl_git_pass(git_config_set_string(cfg
, "merge.conflictstyle", "merge"));
29 void test_revert_workdir__cleanup(void)
31 git_index_free(repo_index
);
32 cl_git_sandbox_cleanup();
35 /* git reset --hard 72333f47d4e83616630ff3b0ffe4c0faebcc3c45
36 * git revert --no-commit d1d403d22cbe24592d725f442835cf46fe60c8ac */
37 void test_revert_workdir__automerge(void)
39 git_commit
*head
, *commit
;
40 git_oid head_oid
, revert_oid
;
42 struct merge_index_entry merge_index_entries
[] = {
43 { 0100644, "caf99de3a49827117bb66721010eac461b06a80c", 0, "file1.txt" },
44 { 0100644, "0ab09ea6d4c3634bdf6c221626d8b6f7dd890767", 0, "file2.txt" },
45 { 0100644, "f4e107c230d08a60fb419d19869f1f282b272d9c", 0, "file3.txt" },
46 { 0100644, "0f5bfcf58c558d865da6be0281d7795993646cee", 0, "file6.txt" },
49 git_oid_fromstr(&head_oid
, "72333f47d4e83616630ff3b0ffe4c0faebcc3c45");
50 cl_git_pass(git_commit_lookup(&head
, repo
, &head_oid
));
51 cl_git_pass(git_reset(repo
, (git_object
*)head
, GIT_RESET_HARD
, NULL
));
53 git_oid_fromstr(&revert_oid
, "d1d403d22cbe24592d725f442835cf46fe60c8ac");
54 cl_git_pass(git_commit_lookup(&commit
, repo
, &revert_oid
));
55 cl_git_pass(git_revert(repo
, commit
, NULL
));
57 cl_assert(merge_test_index(repo_index
, merge_index_entries
, 4));
59 git_commit_free(commit
);
60 git_commit_free(head
);
63 /* git revert --no-commit 72333f47d4e83616630ff3b0ffe4c0faebcc3c45 */
64 void test_revert_workdir__conflicts(void)
66 git_reference
*head_ref
;
67 git_commit
*head
, *commit
;
69 git_buf conflicting_buf
= GIT_BUF_INIT
, mergemsg_buf
= GIT_BUF_INIT
;
71 struct merge_index_entry merge_index_entries
[] = {
72 { 0100644, "7731926a337c4eaba1e2187d90ebfa0a93659382", 1, "file1.txt" },
73 { 0100644, "4b8fcff56437e60f58e9a6bc630dd242ebf6ea2c", 2, "file1.txt" },
74 { 0100644, "3a3ef367eaf3fe79effbfb0a56b269c04c2b59fe", 3, "file1.txt" },
75 { 0100644, "0ab09ea6d4c3634bdf6c221626d8b6f7dd890767", 0, "file2.txt" },
76 { 0100644, "f4e107c230d08a60fb419d19869f1f282b272d9c", 0, "file3.txt" },
77 { 0100644, "0f5bfcf58c558d865da6be0281d7795993646cee", 0, "file6.txt" },
80 git_oid_fromstr(&revert_oid
, "72333f47d4e83616630ff3b0ffe4c0faebcc3c45");
82 cl_git_pass(git_repository_head(&head_ref
, repo
));
83 cl_git_pass(git_reference_peel((git_object
**)&head
, head_ref
, GIT_OBJECT_COMMIT
));
84 cl_git_pass(git_reset(repo
, (git_object
*)head
, GIT_RESET_HARD
, NULL
));
86 cl_git_pass(git_commit_lookup(&commit
, repo
, &revert_oid
));
87 cl_git_pass(git_revert(repo
, commit
, NULL
));
89 cl_assert(merge_test_index(repo_index
, merge_index_entries
, 6));
91 cl_git_pass(git_futils_readbuffer(&conflicting_buf
,
92 TEST_REPO_PATH
"/file1.txt"));
93 cl_assert(strcmp(conflicting_buf
.ptr
, "!File one!\n" \
113 ">>>>>>> parent of 72333f4... automergeable changes\n") == 0);
115 cl_assert(git_path_exists(TEST_REPO_PATH
"/.git/MERGE_MSG"));
116 cl_git_pass(git_futils_readbuffer(&mergemsg_buf
,
117 TEST_REPO_PATH
"/.git/MERGE_MSG"));
118 cl_assert(strcmp(mergemsg_buf
.ptr
,
119 "Revert \"automergeable changes\"\n" \
121 "This reverts commit 72333f47d4e83616630ff3b0ffe4c0faebcc3c45.\n"
124 "\tfile1.txt\n") == 0);
126 git_commit_free(commit
);
127 git_commit_free(head
);
128 git_reference_free(head_ref
);
129 git_buf_dispose(&mergemsg_buf
);
130 git_buf_dispose(&conflicting_buf
);
133 /* git reset --hard 39467716290f6df775a91cdb9a4eb39295018145
134 * git revert --no-commit ebb03002cee5d66c7732dd06241119fe72ab96a5
136 void test_revert_workdir__orphan(void)
138 git_commit
*head
, *commit
;
139 git_oid head_oid
, revert_oid
;
141 struct merge_index_entry merge_index_entries
[] = {
142 { 0100644, "296a6d3be1dff05c5d1f631d2459389fa7b619eb", 0, "file-mainline.txt" },
145 git_oid_fromstr(&head_oid
, "39467716290f6df775a91cdb9a4eb39295018145");
146 cl_git_pass(git_commit_lookup(&head
, repo
, &head_oid
));
147 cl_git_pass(git_reset(repo
, (git_object
*)head
, GIT_RESET_HARD
, NULL
));
149 git_oid_fromstr(&revert_oid
, "ebb03002cee5d66c7732dd06241119fe72ab96a5");
150 cl_git_pass(git_commit_lookup(&commit
, repo
, &revert_oid
));
151 cl_git_pass(git_revert(repo
, commit
, NULL
));
153 cl_assert(merge_test_index(repo_index
, merge_index_entries
, 1));
155 git_commit_free(commit
);
156 git_commit_free(head
);
160 * revert the same commit twice (when the first reverts cleanly):
165 void test_revert_workdir__again(void)
167 git_reference
*head_ref
;
168 git_commit
*orig_head
;
169 git_tree
*reverted_tree
;
170 git_oid reverted_tree_oid
, reverted_commit_oid
;
171 git_signature
*signature
;
173 struct merge_index_entry merge_index_entries
[] = {
174 { 0100644, "7731926a337c4eaba1e2187d90ebfa0a93659382", 0, "file1.txt" },
175 { 0100644, "0ab09ea6d4c3634bdf6c221626d8b6f7dd890767", 0, "file2.txt" },
176 { 0100644, "f4e107c230d08a60fb419d19869f1f282b272d9c", 0, "file3.txt" },
177 { 0100644, "0f5bfcf58c558d865da6be0281d7795993646cee", 0, "file6.txt" },
180 cl_git_pass(git_repository_head(&head_ref
, repo
));
181 cl_git_pass(git_reference_peel((git_object
**)&orig_head
, head_ref
, GIT_OBJECT_COMMIT
));
182 cl_git_pass(git_reset(repo
, (git_object
*)orig_head
, GIT_RESET_HARD
, NULL
));
184 cl_git_pass(git_revert(repo
, orig_head
, NULL
));
186 cl_assert(merge_test_index(repo_index
, merge_index_entries
, 4));
188 cl_git_pass(git_index_write_tree(&reverted_tree_oid
, repo_index
));
189 cl_git_pass(git_tree_lookup(&reverted_tree
, repo
, &reverted_tree_oid
));
191 cl_git_pass(git_signature_new(&signature
, "Reverter", "reverter@example.org", time(NULL
), 0));
192 cl_git_pass(git_commit_create(&reverted_commit_oid
, repo
, "HEAD", signature
, signature
, NULL
, "Reverted!", reverted_tree
, 1, (const git_commit
**)&orig_head
));
194 cl_git_pass(git_revert(repo
, orig_head
, NULL
));
195 cl_assert(merge_test_index(repo_index
, merge_index_entries
, 4));
197 git_signature_free(signature
);
198 git_tree_free(reverted_tree
);
199 git_commit_free(orig_head
);
200 git_reference_free(head_ref
);
203 /* git reset --hard 72333f47d4e83616630ff3b0ffe4c0faebcc3c45
204 * git revert --no-commit d1d403d22cbe24592d725f442835cf46fe60c8ac */
205 void test_revert_workdir__again_after_automerge(void)
207 git_commit
*head
, *commit
;
208 git_tree
*reverted_tree
;
209 git_oid head_oid
, revert_oid
, reverted_tree_oid
, reverted_commit_oid
;
210 git_signature
*signature
;
212 struct merge_index_entry merge_index_entries
[] = {
213 { 0100644, "caf99de3a49827117bb66721010eac461b06a80c", 0, "file1.txt" },
214 { 0100644, "0ab09ea6d4c3634bdf6c221626d8b6f7dd890767", 0, "file2.txt" },
215 { 0100644, "f4e107c230d08a60fb419d19869f1f282b272d9c", 0, "file3.txt" },
216 { 0100644, "0f5bfcf58c558d865da6be0281d7795993646cee", 0, "file6.txt" },
219 struct merge_index_entry second_revert_entries
[] = {
220 { 0100644, "3a3ef367eaf3fe79effbfb0a56b269c04c2b59fe", 1, "file1.txt" },
221 { 0100644, "caf99de3a49827117bb66721010eac461b06a80c", 2, "file1.txt" },
222 { 0100644, "747726e021bc5f44b86de60e3032fd6f9f1b8383", 3, "file1.txt" },
223 { 0100644, "0ab09ea6d4c3634bdf6c221626d8b6f7dd890767", 0, "file2.txt" },
224 { 0100644, "f4e107c230d08a60fb419d19869f1f282b272d9c", 0, "file3.txt" },
225 { 0100644, "0f5bfcf58c558d865da6be0281d7795993646cee", 0, "file6.txt" },
228 git_oid_fromstr(&head_oid
, "72333f47d4e83616630ff3b0ffe4c0faebcc3c45");
229 cl_git_pass(git_commit_lookup(&head
, repo
, &head_oid
));
230 cl_git_pass(git_reset(repo
, (git_object
*)head
, GIT_RESET_HARD
, NULL
));
232 git_oid_fromstr(&revert_oid
, "d1d403d22cbe24592d725f442835cf46fe60c8ac");
233 cl_git_pass(git_commit_lookup(&commit
, repo
, &revert_oid
));
234 cl_git_pass(git_revert(repo
, commit
, NULL
));
236 cl_assert(merge_test_index(repo_index
, merge_index_entries
, 4));
238 cl_git_pass(git_index_write_tree(&reverted_tree_oid
, repo_index
));
239 cl_git_pass(git_tree_lookup(&reverted_tree
, repo
, &reverted_tree_oid
));
241 cl_git_pass(git_signature_new(&signature
, "Reverter", "reverter@example.org", time(NULL
), 0));
242 cl_git_pass(git_commit_create(&reverted_commit_oid
, repo
, "HEAD", signature
, signature
, NULL
, "Reverted!", reverted_tree
, 1, (const git_commit
**)&head
));
244 cl_git_pass(git_revert(repo
, commit
, NULL
));
245 cl_assert(merge_test_index(repo_index
, second_revert_entries
, 6));
247 git_signature_free(signature
);
248 git_tree_free(reverted_tree
);
249 git_commit_free(commit
);
250 git_commit_free(head
);
254 * revert the same commit twice (when the first reverts cleanly):
259 void test_revert_workdir__again_after_edit(void)
261 git_reference
*head_ref
;
262 git_commit
*orig_head
, *commit
;
263 git_tree
*reverted_tree
;
264 git_oid orig_head_oid
, revert_oid
, reverted_tree_oid
, reverted_commit_oid
;
265 git_signature
*signature
;
267 struct merge_index_entry merge_index_entries
[] = {
268 { 0100644, "3721552e06c4bdc7d478e0674e6304888545d5fd", 0, "file1.txt" },
269 { 0100644, "0ab09ea6d4c3634bdf6c221626d8b6f7dd890767", 0, "file2.txt" },
270 { 0100644, "f4e107c230d08a60fb419d19869f1f282b272d9c", 0, "file3.txt" },
271 { 0100644, "0f5bfcf58c558d865da6be0281d7795993646cee", 0, "file6.txt" },
274 cl_git_pass(git_repository_head(&head_ref
, repo
));
276 cl_git_pass(git_oid_fromstr(&orig_head_oid
, "399fb3aba3d9d13f7d40a9254ce4402067ef3149"));
277 cl_git_pass(git_commit_lookup(&orig_head
, repo
, &orig_head_oid
));
278 cl_git_pass(git_reset(repo
, (git_object
*)orig_head
, GIT_RESET_HARD
, NULL
));
280 cl_git_pass(git_oid_fromstr(&revert_oid
, "2d440f2b3147d3dc7ad1085813478d6d869d5a4d"));
281 cl_git_pass(git_commit_lookup(&commit
, repo
, &revert_oid
));
283 cl_git_pass(git_revert(repo
, commit
, NULL
));
285 cl_assert(merge_test_index(repo_index
, merge_index_entries
, 4));
287 cl_git_pass(git_index_write_tree(&reverted_tree_oid
, repo_index
));
288 cl_git_pass(git_tree_lookup(&reverted_tree
, repo
, &reverted_tree_oid
));
290 cl_git_pass(git_signature_new(&signature
, "Reverter", "reverter@example.org", time(NULL
), 0));
291 cl_git_pass(git_commit_create(&reverted_commit_oid
, repo
, "HEAD", signature
, signature
, NULL
, "Reverted!", reverted_tree
, 1, (const git_commit
**)&orig_head
));
293 cl_git_pass(git_revert(repo
, commit
, NULL
));
294 cl_assert(merge_test_index(repo_index
, merge_index_entries
, 4));
296 git_signature_free(signature
);
297 git_tree_free(reverted_tree
);
298 git_commit_free(commit
);
299 git_commit_free(orig_head
);
300 git_reference_free(head_ref
);
304 * revert the same commit twice (when the first reverts cleanly):
306 * git reset --hard 75ec9929465623f17ff3ad68c0438ea56faba815
307 * git revert 97e52d5e81f541080cd6b92829fb85bc4d81d90b
309 void test_revert_workdir__again_after_edit_two(void)
311 git_buf diff_buf
= GIT_BUF_INIT
;
313 git_oid head_commit_oid
, revert_commit_oid
;
314 git_commit
*head_commit
, *revert_commit
;
316 struct merge_index_entry merge_index_entries
[] = {
317 { 0100644, "a8c86221b400b836010567cc3593db6e96c1a83a", 1, "file.txt" },
318 { 0100644, "46ff0854663aeb2182b9838c8da68e33ac23bc1e", 2, "file.txt" },
319 { 0100644, "21a96a98ed84d45866e1de6e266fd3a61a4ae9dc", 3, "file.txt" },
322 cl_git_pass(git_repository_config(&config
, repo
));
323 cl_git_pass(git_config_set_bool(config
, "core.autocrlf", 0));
325 cl_git_pass(git_oid_fromstr(&head_commit_oid
, "75ec9929465623f17ff3ad68c0438ea56faba815"));
326 cl_git_pass(git_commit_lookup(&head_commit
, repo
, &head_commit_oid
));
327 cl_git_pass(git_reset(repo
, (git_object
*)head_commit
, GIT_RESET_HARD
, NULL
));
329 cl_git_pass(git_oid_fromstr(&revert_commit_oid
, "97e52d5e81f541080cd6b92829fb85bc4d81d90b"));
330 cl_git_pass(git_commit_lookup(&revert_commit
, repo
, &revert_commit_oid
));
332 cl_git_pass(git_revert(repo
, revert_commit
, NULL
));
334 cl_assert(merge_test_index(repo_index
, merge_index_entries
, 3));
336 cl_git_pass(git_futils_readbuffer(&diff_buf
, "revert/file.txt"));
342 ">>>>>>> parent of 97e52d5... Revert me\n" \
350 git_commit_free(revert_commit
);
351 git_commit_free(head_commit
);
352 git_config_free(config
);
353 git_buf_dispose(&diff_buf
);
356 /* git reset --hard 72333f47d4e83616630ff3b0ffe4c0faebcc3c45
357 * git revert --no-commit d1d403d22cbe24592d725f442835cf46fe60c8ac */
358 void test_revert_workdir__conflict_use_ours(void)
360 git_commit
*head
, *commit
;
361 git_oid head_oid
, revert_oid
;
362 git_revert_options opts
= GIT_REVERT_OPTIONS_INIT
;
364 struct merge_index_entry merge_index_entries
[] = {
365 { 0100644, "caf99de3a49827117bb66721010eac461b06a80c", 0, "file1.txt" },
366 { 0100644, "0ab09ea6d4c3634bdf6c221626d8b6f7dd890767", 0, "file2.txt" },
367 { 0100644, "f4e107c230d08a60fb419d19869f1f282b272d9c", 0, "file3.txt" },
368 { 0100644, "0f5bfcf58c558d865da6be0281d7795993646cee", 0, "file6.txt" },
371 struct merge_index_entry merge_filesystem_entries
[] = {
372 { 0100644, "caf99de3a49827117bb66721010eac461b06a80c", 0, "file1.txt" },
373 { 0100644, "0ab09ea6d4c3634bdf6c221626d8b6f7dd890767", 0, "file2.txt" },
374 { 0100644, "f4e107c230d08a60fb419d19869f1f282b272d9c", 0, "file3.txt" },
375 { 0100644, "0f5bfcf58c558d865da6be0281d7795993646cee", 0, "file6.txt" },
378 opts
.checkout_opts
.checkout_strategy
= GIT_CHECKOUT_SAFE
| GIT_CHECKOUT_USE_OURS
;
380 git_oid_fromstr(&head_oid
, "72333f47d4e83616630ff3b0ffe4c0faebcc3c45");
381 cl_git_pass(git_commit_lookup(&head
, repo
, &head_oid
));
382 cl_git_pass(git_reset(repo
, (git_object
*)head
, GIT_RESET_HARD
, NULL
));
384 git_oid_fromstr(&revert_oid
, "d1d403d22cbe24592d725f442835cf46fe60c8ac");
385 cl_git_pass(git_commit_lookup(&commit
, repo
, &revert_oid
));
386 cl_git_pass(git_revert(repo
, commit
, &opts
));
388 cl_assert(merge_test_index(repo_index
, merge_index_entries
, 4));
389 cl_assert(merge_test_workdir(repo
, merge_filesystem_entries
, 4));
391 git_commit_free(commit
);
392 git_commit_free(head
);
395 /* git reset --hard cef56612d71a6af8d8015691e4865f7fece905b5
396 * git revert --no-commit 55568c8de5322ff9a95d72747a239cdb64a19965
398 void test_revert_workdir__rename_1_of_2(void)
400 git_commit
*head
, *commit
;
401 git_oid head_oid
, revert_oid
;
402 git_revert_options opts
= GIT_REVERT_OPTIONS_INIT
;
404 struct merge_index_entry merge_index_entries
[] = {
405 { 0100644, "747726e021bc5f44b86de60e3032fd6f9f1b8383", 0, "file1.txt" },
406 { 0100644, "0ab09ea6d4c3634bdf6c221626d8b6f7dd890767", 0, "file2.txt" },
407 { 0100644, "f4e107c230d08a60fb419d19869f1f282b272d9c", 0, "file3.txt" },
408 { 0100644, "55acf326a69f0aab7a974ec53ffa55a50bcac14e", 3, "file4.txt" },
409 { 0100644, "55acf326a69f0aab7a974ec53ffa55a50bcac14e", 1, "file5.txt" },
410 { 0100644, "0f5bfcf58c558d865da6be0281d7795993646cee", 2, "file6.txt" },
413 opts
.merge_opts
.flags
|= GIT_MERGE_FIND_RENAMES
;
414 opts
.merge_opts
.rename_threshold
= 50;
416 git_oid_fromstr(&head_oid
, "cef56612d71a6af8d8015691e4865f7fece905b5");
417 cl_git_pass(git_commit_lookup(&head
, repo
, &head_oid
));
418 cl_git_pass(git_reset(repo
, (git_object
*)head
, GIT_RESET_HARD
, NULL
));
420 git_oid_fromstr(&revert_oid
, "55568c8de5322ff9a95d72747a239cdb64a19965");
421 cl_git_pass(git_commit_lookup(&commit
, repo
, &revert_oid
));
422 cl_git_pass(git_revert(repo
, commit
, &opts
));
424 cl_assert(merge_test_index(repo_index
, merge_index_entries
, 6));
426 git_commit_free(commit
);
427 git_commit_free(head
);
430 /* git reset --hard 55568c8de5322ff9a95d72747a239cdb64a19965
431 * git revert --no-commit HEAD~1 */
432 void test_revert_workdir__rename(void)
434 git_commit
*head
, *commit
;
435 git_oid head_oid
, revert_oid
;
436 git_revert_options opts
= GIT_REVERT_OPTIONS_INIT
;
438 struct merge_index_entry merge_index_entries
[] = {
439 { 0100644, "55acf326a69f0aab7a974ec53ffa55a50bcac14e", 1, "file4.txt" },
440 { 0100644, "55acf326a69f0aab7a974ec53ffa55a50bcac14e", 2, "file5.txt" },
443 struct merge_name_entry merge_name_entries
[] = {
444 { "file4.txt", "file5.txt", "" },
447 opts
.merge_opts
.flags
|= GIT_MERGE_FIND_RENAMES
;
448 opts
.merge_opts
.rename_threshold
= 50;
450 git_oid_fromstr(&head_oid
, "55568c8de5322ff9a95d72747a239cdb64a19965");
451 cl_git_pass(git_commit_lookup(&head
, repo
, &head_oid
));
452 cl_git_pass(git_reset(repo
, (git_object
*)head
, GIT_RESET_HARD
, NULL
));
454 git_oid_fromstr(&revert_oid
, "0aa8c7e40d342fff78d60b29a4ba8e993ed79c51");
455 cl_git_pass(git_commit_lookup(&commit
, repo
, &revert_oid
));
456 cl_git_pass(git_revert(repo
, commit
, &opts
));
458 cl_assert(merge_test_index(repo_index
, merge_index_entries
, 2));
459 cl_assert(merge_test_names(repo_index
, merge_name_entries
, 1));
461 git_commit_free(commit
);
462 git_commit_free(head
);
465 /* git revert --no-commit HEAD */
466 void test_revert_workdir__head(void)
471 struct merge_index_entry merge_index_entries
[] = {
472 { 0100644, "7731926a337c4eaba1e2187d90ebfa0a93659382", 0, "file1.txt" },
473 { 0100644, "0ab09ea6d4c3634bdf6c221626d8b6f7dd890767", 0, "file2.txt" },
474 { 0100644, "f4e107c230d08a60fb419d19869f1f282b272d9c", 0, "file3.txt" },
475 { 0100644, "0f5bfcf58c558d865da6be0281d7795993646cee", 0, "file6.txt" },
478 /* HEAD is 2d440f2b3147d3dc7ad1085813478d6d869d5a4d */
479 cl_git_pass(git_repository_head(&head
, repo
));
480 cl_git_pass(git_reference_peel((git_object
**)&commit
, head
, GIT_OBJECT_COMMIT
));
481 cl_git_pass(git_reset(repo
, (git_object
*)commit
, GIT_RESET_HARD
, NULL
));
482 cl_git_pass(git_revert(repo
, commit
, NULL
));
484 cl_assert(merge_test_index(repo_index
, merge_index_entries
, 4));
485 cl_assert(merge_test_workdir(repo
, merge_index_entries
, 4));
487 git_reference_free(head
);
488 git_commit_free(commit
);
491 void test_revert_workdir__nonmerge_fails_mainline_specified(void)
495 git_revert_options opts
= GIT_REVERT_OPTIONS_INIT
;
497 cl_git_pass(git_repository_head(&head
, repo
));
498 cl_git_pass(git_reference_peel((git_object
**)&commit
, head
, GIT_OBJECT_COMMIT
));
501 cl_must_fail(git_revert(repo
, commit
, &opts
));
502 cl_assert(!git_path_exists(TEST_REPO_PATH
"/.git/MERGE_MSG"));
503 cl_assert(!git_path_exists(TEST_REPO_PATH
"/.git/REVERT_HEAD"));
505 git_reference_free(head
);
506 git_commit_free(commit
);
509 /* git reset --hard 5acdc74af27172ec491d213ee36cea7eb9ef2579
511 void test_revert_workdir__merge_fails_without_mainline_specified(void)
516 git_oid_fromstr(&head_oid
, "5acdc74af27172ec491d213ee36cea7eb9ef2579");
517 cl_git_pass(git_commit_lookup(&head
, repo
, &head_oid
));
518 cl_git_pass(git_reset(repo
, (git_object
*)head
, GIT_RESET_HARD
, NULL
));
520 cl_must_fail(git_revert(repo
, head
, NULL
));
521 cl_assert(!git_path_exists(TEST_REPO_PATH
"/.git/MERGE_MSG"));
522 cl_assert(!git_path_exists(TEST_REPO_PATH
"/.git/REVERT_HEAD"));
524 git_commit_free(head
);
527 /* git reset --hard 5acdc74af27172ec491d213ee36cea7eb9ef2579
528 * git revert HEAD -m1 --no-commit */
529 void test_revert_workdir__merge_first_parent(void)
533 git_revert_options opts
= GIT_REVERT_OPTIONS_INIT
;
535 struct merge_index_entry merge_index_entries
[] = {
536 { 0100644, "296a6d3be1dff05c5d1f631d2459389fa7b619eb", 0, "file-mainline.txt" },
537 { 0100644, "0cdb66192ee192f70f891f05a47636057420e871", 0, "file1.txt" },
538 { 0100644, "73ec36fa120f8066963a0bc9105bb273dbd903d7", 0, "file2.txt" },
543 git_oid_fromstr(&head_oid
, "5acdc74af27172ec491d213ee36cea7eb9ef2579");
544 cl_git_pass(git_commit_lookup(&head
, repo
, &head_oid
));
545 cl_git_pass(git_reset(repo
, (git_object
*)head
, GIT_RESET_HARD
, NULL
));
547 cl_git_pass(git_revert(repo
, head
, &opts
));
549 cl_assert(merge_test_index(repo_index
, merge_index_entries
, 3));
551 git_commit_free(head
);
554 void test_revert_workdir__merge_second_parent(void)
558 git_revert_options opts
= GIT_REVERT_OPTIONS_INIT
;
560 struct merge_index_entry merge_index_entries
[] = {
561 { 0100644, "33c6fd981c49a2abf2971482089350bfc5cda8ea", 0, "file-branch.txt" },
562 { 0100644, "0cdb66192ee192f70f891f05a47636057420e871", 0, "file1.txt" },
563 { 0100644, "73ec36fa120f8066963a0bc9105bb273dbd903d7", 0, "file2.txt" },
568 git_oid_fromstr(&head_oid
, "5acdc74af27172ec491d213ee36cea7eb9ef2579");
569 cl_git_pass(git_commit_lookup(&head
, repo
, &head_oid
));
570 cl_git_pass(git_reset(repo
, (git_object
*)head
, GIT_RESET_HARD
, NULL
));
572 cl_git_pass(git_revert(repo
, head
, &opts
));
574 cl_assert(merge_test_index(repo_index
, merge_index_entries
, 3));
576 git_commit_free(head
);