Blame tests/rebase/merge.c

Packit Service 20376f
#include "clar_libgit2.h"
Packit Service 20376f
#include "git2/checkout.h"
Packit Service 20376f
#include "git2/rebase.h"
Packit Service 20376f
#include "posix.h"
Packit Service 20376f
#include "signature.h"
Packit Service 20376f
Packit Service 20376f
#include <fcntl.h>
Packit Service 20376f
Packit Service 20376f
static git_repository *repo;
Packit Service 20376f
static git_signature *signature;
Packit Service 20376f
Packit Service 20376f
static void set_core_autocrlf_to(git_repository *repo, bool value)
Packit Service 20376f
{
Packit Service 20376f
	git_config *cfg;
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_repository_config(&cfg, repo));
Packit Service 20376f
	cl_git_pass(git_config_set_bool(cfg, "core.autocrlf", value));
Packit Service 20376f
Packit Service 20376f
	git_config_free(cfg);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
// Fixture setup and teardown
Packit Service 20376f
void test_rebase_merge__initialize(void)
Packit Service 20376f
{
Packit Service 20376f
	repo = cl_git_sandbox_init("rebase");
Packit Service 20376f
	cl_git_pass(git_signature_new(&signature,
Packit Service 20376f
		"Rebaser", "rebaser@rebaser.rb", 1405694510, 0));
Packit Service 20376f
Packit Service 20376f
	set_core_autocrlf_to(repo, false);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_rebase_merge__cleanup(void)
Packit Service 20376f
{
Packit Service 20376f
	git_signature_free(signature);
Packit Service 20376f
	cl_git_sandbox_cleanup();
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_rebase_merge__next(void)
Packit Service 20376f
{
Packit Service 20376f
	git_rebase *rebase;
Packit Service 20376f
	git_reference *branch_ref, *upstream_ref;
Packit Service 20376f
	git_annotated_commit *branch_head, *upstream_head;
Packit Service 20376f
	git_rebase_operation *rebase_operation;
Packit Service 20376f
	git_status_list *status_list;
Packit Service 20376f
	const git_status_entry *status_entry;
Packit Service 20376f
	git_oid pick_id, file1_id;
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&branch_ref, repo, "refs/heads/beef"));
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&upstream_ref, repo, "refs/heads/master"));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&branch_head, repo, branch_ref));
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&upstream_head, repo, upstream_ref));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_init(&rebase, repo, branch_head, upstream_head, NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
Packit Service 20376f
	git_oid_fromstr(&pick_id, "da9c51a23d02d931a486f45ad18cda05cf5d2b94");
Packit Service 20376f
Packit Service 20376f
	cl_assert_equal_i(GIT_REBASE_OPERATION_PICK, rebase_operation->type);
Packit Service 20376f
	cl_assert_equal_oid(&pick_id, &rebase_operation->id);
Packit Service 20376f
	cl_assert_equal_file("da9c51a23d02d931a486f45ad18cda05cf5d2b94\n", 41, "rebase/.git/rebase-merge/current");
Packit Service 20376f
	cl_assert_equal_file("1\n", 2, "rebase/.git/rebase-merge/msgnum");
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_status_list_new(&status_list, repo, NULL));
Packit Service 20376f
	cl_assert_equal_i(1, git_status_list_entrycount(status_list));
Packit Service 20376f
	cl_assert(status_entry = git_status_byindex(status_list, 0));
Packit Service 20376f
Packit Service 20376f
	cl_assert_equal_s("beef.txt", status_entry->head_to_index->new_file.path);
Packit Service 20376f
Packit Service 20376f
	git_oid_fromstr(&file1_id, "8d95ea62e621f1d38d230d9e7d206e41096d76af");
Packit Service 20376f
	cl_assert_equal_oid(&file1_id, &status_entry->head_to_index->new_file.id);
Packit Service 20376f
Packit Service 20376f
	git_status_list_free(status_list);
Packit Service 20376f
	git_annotated_commit_free(branch_head);
Packit Service 20376f
	git_annotated_commit_free(upstream_head);
Packit Service 20376f
	git_reference_free(branch_ref);
Packit Service 20376f
	git_reference_free(upstream_ref);
Packit Service 20376f
	git_rebase_free(rebase);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_rebase_merge__next_with_conflicts(void)
Packit Service 20376f
{
Packit Service 20376f
	git_rebase *rebase;
Packit Service 20376f
	git_reference *branch_ref, *upstream_ref;
Packit Service 20376f
	git_annotated_commit *branch_head, *upstream_head;
Packit Service 20376f
	git_rebase_operation *rebase_operation;
Packit Service 20376f
	git_status_list *status_list;
Packit Service 20376f
	const git_status_entry *status_entry;
Packit Service 20376f
	git_oid pick_id, commit_id;
Packit Service 20376f
Packit Service 20376f
	const char *expected_merge =
Packit Service 20376f
"ASPARAGUS SOUP.\n"
Packit Service 20376f
"\n"
Packit Service 20376f
"<<<<<<< master\n"
Packit Service 20376f
"TAKE FOUR LARGE BUNCHES of asparagus, scrape it nicely, cut off one inch\n"
Packit Service 20376f
"OF THE TOPS, and lay them in water, chop the stalks and put them on the\n"
Packit Service 20376f
"FIRE WITH A PIECE OF BACON, a large onion cut up, and pepper and salt;\n"
Packit Service 20376f
"ADD TWO QUARTS OF WATER, boil them till the stalks are quite soft, then\n"
Packit Service 20376f
"PULP THEM THROUGH A SIEVE, and strain the water to it, which must be put\n"
Packit Service 20376f
"=======\n"
Packit Service 20376f
"Take four large bunches of asparagus, scrape it nicely, CUT OFF ONE INCH\n"
Packit Service 20376f
"of the tops, and lay them in water, chop the stalks and PUT THEM ON THE\n"
Packit Service 20376f
"fire with a piece of bacon, a large onion cut up, and pepper and salt;\n"
Packit Service 20376f
"add two quarts of water, boil them till the stalks are quite soft, then\n"
Packit Service 20376f
"pulp them through a sieve, and strain the water to it, which must be put\n"
Packit Service 20376f
">>>>>>> Conflicting modification 1 to asparagus\n"
Packit Service 20376f
"back in the pot; put into it a chicken cut up, with the tops of\n"
Packit Service 20376f
"asparagus which had been laid by, boil it until these last articles are\n"
Packit Service 20376f
"sufficiently done, thicken with flour, butter and milk, and serve it up.\n";
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&branch_ref, repo, "refs/heads/asparagus"));
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&upstream_ref, repo, "refs/heads/master"));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&branch_head, repo, branch_ref));
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&upstream_head, repo, upstream_ref));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_init(&rebase, repo, branch_head, upstream_head, NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
Packit Service 20376f
	git_oid_fromstr(&pick_id, "33f915f9e4dbd9f4b24430e48731a59b45b15500");
Packit Service 20376f
Packit Service 20376f
	cl_assert_equal_i(GIT_REBASE_OPERATION_PICK, rebase_operation->type);
Packit Service 20376f
	cl_assert_equal_oid(&pick_id, &rebase_operation->id);
Packit Service 20376f
	cl_assert_equal_file("33f915f9e4dbd9f4b24430e48731a59b45b15500\n", 41, "rebase/.git/rebase-merge/current");
Packit Service 20376f
	cl_assert_equal_file("1\n", 2, "rebase/.git/rebase-merge/msgnum");
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_status_list_new(&status_list, repo, NULL));
Packit Service 20376f
	cl_assert_equal_i(1, git_status_list_entrycount(status_list));
Packit Service 20376f
	cl_assert(status_entry = git_status_byindex(status_list, 0));
Packit Service 20376f
Packit Service 20376f
	cl_assert_equal_s("asparagus.txt", status_entry->head_to_index->new_file.path);
Packit Service 20376f
Packit Service 20376f
	cl_assert_equal_file(expected_merge, strlen(expected_merge), "rebase/asparagus.txt");
Packit Service 20376f
Packit Service 20376f
	cl_git_fail_with(GIT_EUNMERGED, git_rebase_commit(&commit_id, rebase, NULL, signature, NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	git_status_list_free(status_list);
Packit Service 20376f
	git_annotated_commit_free(branch_head);
Packit Service 20376f
	git_annotated_commit_free(upstream_head);
Packit Service 20376f
	git_reference_free(branch_ref);
Packit Service 20376f
	git_reference_free(upstream_ref);
Packit Service 20376f
	git_rebase_free(rebase);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_rebase_merge__next_stops_with_iterover(void)
Packit Service 20376f
{
Packit Service 20376f
	git_rebase *rebase;
Packit Service 20376f
	git_reference *branch_ref, *upstream_ref;
Packit Service 20376f
	git_annotated_commit *branch_head, *upstream_head;
Packit Service 20376f
	git_rebase_operation *rebase_operation;
Packit Service 20376f
	git_oid commit_id;
Packit Service 20376f
	int error;
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&branch_ref, repo, "refs/heads/beef"));
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&upstream_ref, repo, "refs/heads/master"));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&branch_head, repo, branch_ref));
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&upstream_head, repo, upstream_ref));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_init(&rebase, repo, branch_head, upstream_head, NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_fail(error = git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_assert_equal_i(GIT_ITEROVER, error);
Packit Service 20376f
Packit Service 20376f
	cl_assert_equal_file("5\n", 2, "rebase/.git/rebase-merge/end");
Packit Service 20376f
	cl_assert_equal_file("5\n", 2, "rebase/.git/rebase-merge/msgnum");
Packit Service 20376f
Packit Service 20376f
	git_annotated_commit_free(branch_head);
Packit Service 20376f
	git_annotated_commit_free(upstream_head);
Packit Service 20376f
	git_reference_free(branch_ref);
Packit Service 20376f
	git_reference_free(upstream_ref);
Packit Service 20376f
	git_rebase_free(rebase);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_rebase_merge__commit(void)
Packit Service 20376f
{
Packit Service 20376f
	git_rebase *rebase;
Packit Service 20376f
	git_reference *branch_ref, *upstream_ref;
Packit Service 20376f
	git_annotated_commit *branch_head, *upstream_head;
Packit Service 20376f
	git_rebase_operation *rebase_operation;
Packit Service 20376f
	git_oid commit_id, tree_id, parent_id;
Packit Service 20376f
	git_signature *author;
Packit Service 20376f
	git_commit *commit;
Packit Service 20376f
	git_reflog *reflog;
Packit Service 20376f
	const git_reflog_entry *reflog_entry;
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&branch_ref, repo, "refs/heads/beef"));
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&upstream_ref, repo, "refs/heads/master"));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&branch_head, repo, branch_ref));
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&upstream_head, repo, upstream_ref));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_init(&rebase, repo, branch_head, upstream_head, NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_commit_lookup(&commit, repo, &commit_id));
Packit Service 20376f
Packit Service 20376f
	git_oid_fromstr(&parent_id, "efad0b11c47cb2f0220cbd6f5b0f93bb99064b00");
Packit Service 20376f
	cl_assert_equal_i(1, git_commit_parentcount(commit));
Packit Service 20376f
	cl_assert_equal_oid(&parent_id, git_commit_parent_id(commit, 0));
Packit Service 20376f
Packit Service 20376f
	git_oid_fromstr(&tree_id, "4461379789c777d2a6c1f2ee0e9d6c86731b9992");
Packit Service 20376f
	cl_assert_equal_oid(&tree_id, git_commit_tree_id(commit));
Packit Service 20376f
Packit Service 20376f
	cl_assert_equal_s(NULL, git_commit_message_encoding(commit));
Packit Service 20376f
	cl_assert_equal_s("Modification 1 to beef\n", git_commit_message(commit));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_signature_new(&author,
Packit Service 20376f
		"Edward Thomson", "ethomson@edwardthomson.com", 1405621769, 0-(4*60)));
Packit Service 20376f
	cl_assert(git_signature__equal(author, git_commit_author(commit)));
Packit Service 20376f
Packit Service 20376f
	cl_assert(git_signature__equal(signature, git_commit_committer(commit)));
Packit Service 20376f
Packit Service 20376f
	/* Make sure the reflogs are updated appropriately */
Packit Service 20376f
	cl_git_pass(git_reflog_read(&reflog, repo, "HEAD"));
Packit Service 20376f
	cl_assert(reflog_entry = git_reflog_entry_byindex(reflog, 0));
Packit Service 20376f
	cl_assert_equal_oid(&parent_id, git_reflog_entry_id_old(reflog_entry));
Packit Service 20376f
	cl_assert_equal_oid(&commit_id, git_reflog_entry_id_new(reflog_entry));
Packit Service 20376f
	cl_assert_equal_s("rebase: Modification 1 to beef", git_reflog_entry_message(reflog_entry));
Packit Service 20376f
Packit Service 20376f
	git_reflog_free(reflog);
Packit Service 20376f
	git_signature_free(author);
Packit Service 20376f
	git_commit_free(commit);
Packit Service 20376f
	git_annotated_commit_free(branch_head);
Packit Service 20376f
	git_annotated_commit_free(upstream_head);
Packit Service 20376f
	git_reference_free(branch_ref);
Packit Service 20376f
	git_reference_free(upstream_ref);
Packit Service 20376f
	git_rebase_free(rebase);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_rebase_merge__commit_with_id(void)
Packit Service 20376f
{
Packit Service 20376f
	git_rebase *rebase;
Packit Service 20376f
	git_oid branch_id, upstream_id;
Packit Service 20376f
	git_annotated_commit *branch_head, *upstream_head;
Packit Service 20376f
	git_rebase_operation *rebase_operation;
Packit Service 20376f
	git_oid commit_id, tree_id, parent_id;
Packit Service 20376f
	git_signature *author;
Packit Service 20376f
	git_commit *commit;
Packit Service 20376f
	git_reflog *reflog;
Packit Service 20376f
	const git_reflog_entry *reflog_entry;
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_oid_fromstr(&branch_id, "b146bd7608eac53d9bf9e1a6963543588b555c64"));
Packit Service 20376f
	cl_git_pass(git_oid_fromstr(&upstream_id, "efad0b11c47cb2f0220cbd6f5b0f93bb99064b00"));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_annotated_commit_lookup(&branch_head, repo, &branch_id));
Packit Service 20376f
	cl_git_pass(git_annotated_commit_lookup(&upstream_head, repo, &upstream_id));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_init(&rebase, repo, branch_head, upstream_head, NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_commit_lookup(&commit, repo, &commit_id));
Packit Service 20376f
Packit Service 20376f
	git_oid_fromstr(&parent_id, "efad0b11c47cb2f0220cbd6f5b0f93bb99064b00");
Packit Service 20376f
	cl_assert_equal_i(1, git_commit_parentcount(commit));
Packit Service 20376f
	cl_assert_equal_oid(&parent_id, git_commit_parent_id(commit, 0));
Packit Service 20376f
Packit Service 20376f
	git_oid_fromstr(&tree_id, "4461379789c777d2a6c1f2ee0e9d6c86731b9992");
Packit Service 20376f
	cl_assert_equal_oid(&tree_id, git_commit_tree_id(commit));
Packit Service 20376f
Packit Service 20376f
	cl_assert_equal_s(NULL, git_commit_message_encoding(commit));
Packit Service 20376f
	cl_assert_equal_s("Modification 1 to beef\n", git_commit_message(commit));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_signature_new(&author,
Packit Service 20376f
		"Edward Thomson", "ethomson@edwardthomson.com", 1405621769, 0-(4*60)));
Packit Service 20376f
	cl_assert(git_signature__equal(author, git_commit_author(commit)));
Packit Service 20376f
Packit Service 20376f
	cl_assert(git_signature__equal(signature, git_commit_committer(commit)));
Packit Service 20376f
Packit Service 20376f
	/* Make sure the reflogs are updated appropriately */
Packit Service 20376f
	cl_git_pass(git_reflog_read(&reflog, repo, "HEAD"));
Packit Service 20376f
	cl_assert(reflog_entry = git_reflog_entry_byindex(reflog, 0));
Packit Service 20376f
	cl_assert_equal_oid(&parent_id, git_reflog_entry_id_old(reflog_entry));
Packit Service 20376f
	cl_assert_equal_oid(&commit_id, git_reflog_entry_id_new(reflog_entry));
Packit Service 20376f
	cl_assert_equal_s("rebase: Modification 1 to beef", git_reflog_entry_message(reflog_entry));
Packit Service 20376f
Packit Service 20376f
	git_reflog_free(reflog);
Packit Service 20376f
	git_signature_free(author);
Packit Service 20376f
	git_commit_free(commit);
Packit Service 20376f
	git_annotated_commit_free(branch_head);
Packit Service 20376f
	git_annotated_commit_free(upstream_head);
Packit Service 20376f
	git_rebase_free(rebase);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_rebase_merge__blocked_when_dirty(void)
Packit Service 20376f
{
Packit Service 20376f
	git_rebase *rebase;
Packit Service 20376f
	git_reference *branch_ref, *upstream_ref;
Packit Service 20376f
	git_annotated_commit *branch_head, *upstream_head;
Packit Service 20376f
	git_rebase_operation *rebase_operation;
Packit Service 20376f
	git_oid commit_id;
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&branch_ref, repo, "refs/heads/beef"));
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&upstream_ref, repo, "refs/heads/master"));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&branch_head, repo, branch_ref));
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&upstream_head, repo, upstream_ref));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_init(&rebase, repo, branch_head, upstream_head, NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	/* Allow untracked files */
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_mkfile("rebase/untracked_file.txt", "This is untracked\n");
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	/* Do not allow unstaged */
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_mkfile("rebase/veal.txt", "This is an unstaged change\n");
Packit Service 20376f
	cl_git_fail_with(GIT_EUNMERGED, git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	git_annotated_commit_free(branch_head);
Packit Service 20376f
	git_annotated_commit_free(upstream_head);
Packit Service 20376f
	git_reference_free(branch_ref);
Packit Service 20376f
	git_reference_free(upstream_ref);
Packit Service 20376f
	git_rebase_free(rebase);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_rebase_merge__commit_updates_rewritten(void)
Packit Service 20376f
{
Packit Service 20376f
	git_rebase *rebase;
Packit Service 20376f
	git_reference *branch_ref, *upstream_ref;
Packit Service 20376f
	git_annotated_commit *branch_head, *upstream_head;
Packit Service 20376f
	git_rebase_operation *rebase_operation;
Packit Service 20376f
	git_oid commit_id;
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&branch_ref, repo, "refs/heads/beef"));
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&upstream_ref, repo, "refs/heads/master"));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&branch_head, repo, branch_ref));
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&upstream_head, repo, upstream_ref));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_init(&rebase, repo, branch_head, upstream_head, NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_assert_equal_file(
Packit Service 20376f
		"da9c51a23d02d931a486f45ad18cda05cf5d2b94 776e4c48922799f903f03f5f6e51da8b01e4cce0\n"
Packit Service 20376f
		"8d1f13f93c4995760ac07d129246ac1ff64c0be9 ba1f9b4fd5cf8151f7818be2111cc0869f1eb95a\n",
Packit Service 20376f
		164, "rebase/.git/rebase-merge/rewritten");
Packit Service 20376f
Packit Service 20376f
	git_annotated_commit_free(branch_head);
Packit Service 20376f
	git_annotated_commit_free(upstream_head);
Packit Service 20376f
	git_reference_free(branch_ref);
Packit Service 20376f
	git_reference_free(upstream_ref);
Packit Service 20376f
	git_rebase_free(rebase);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_rebase_merge__commit_drops_already_applied(void)
Packit Service 20376f
{
Packit Service 20376f
	git_rebase *rebase;
Packit Service 20376f
	git_reference *branch_ref, *upstream_ref;
Packit Service 20376f
	git_annotated_commit *branch_head, *upstream_head;
Packit Service 20376f
	git_rebase_operation *rebase_operation;
Packit Service 20376f
	git_oid commit_id;
Packit Service 20376f
	int error;
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&branch_ref, repo, "refs/heads/beef"));
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&upstream_ref, repo, "refs/heads/green_pea"));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&branch_head, repo, branch_ref));
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&upstream_head, repo, upstream_ref));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_init(&rebase, repo, branch_head, upstream_head, NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_fail(error = git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_assert_equal_i(GIT_EAPPLIED, error);
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_assert_equal_file(
Packit Service 20376f
		"8d1f13f93c4995760ac07d129246ac1ff64c0be9 2ac4fb7b74c1287f6c792acad759e1ec01e18dae\n",
Packit Service 20376f
		82, "rebase/.git/rebase-merge/rewritten");
Packit Service 20376f
Packit Service 20376f
	git_annotated_commit_free(branch_head);
Packit Service 20376f
	git_annotated_commit_free(upstream_head);
Packit Service 20376f
	git_reference_free(branch_ref);
Packit Service 20376f
	git_reference_free(upstream_ref);
Packit Service 20376f
	git_rebase_free(rebase);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_rebase_merge__finish(void)
Packit Service 20376f
{
Packit Service 20376f
	git_rebase *rebase;
Packit Service 20376f
	git_reference *branch_ref, *upstream_ref, *head_ref;
Packit Service 20376f
	git_annotated_commit *branch_head, *upstream_head;
Packit Service 20376f
	git_rebase_operation *rebase_operation;
Packit Service 20376f
	git_oid commit_id;
Packit Service 20376f
	git_reflog *reflog;
Packit Service 20376f
	const git_reflog_entry *reflog_entry;
Packit Service 20376f
	int error;
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&branch_ref, repo, "refs/heads/gravy"));
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&upstream_ref, repo, "refs/heads/veal"));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&branch_head, repo, branch_ref));
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&upstream_head, repo, upstream_ref));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_init(&rebase, repo, branch_head, upstream_head, NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_fail(error = git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_assert_equal_i(GIT_ITEROVER, error);
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_finish(rebase, signature));
Packit Service 20376f
Packit Service 20376f
	cl_assert_equal_i(GIT_REPOSITORY_STATE_NONE, git_repository_state(repo));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&head_ref, repo, "HEAD"));
Packit Service 20376f
	cl_assert_equal_i(GIT_REF_SYMBOLIC, git_reference_type(head_ref));
Packit Service 20376f
	cl_assert_equal_s("refs/heads/gravy", git_reference_symbolic_target(head_ref));
Packit Service 20376f
Packit Service 20376f
	/* Make sure the reflogs are updated appropriately */
Packit Service 20376f
	cl_git_pass(git_reflog_read(&reflog, repo, "HEAD"));
Packit Service 20376f
	cl_assert(reflog_entry = git_reflog_entry_byindex(reflog, 0));
Packit Service 20376f
	cl_assert_equal_oid(&commit_id, git_reflog_entry_id_old(reflog_entry));
Packit Service 20376f
	cl_assert_equal_oid(&commit_id, git_reflog_entry_id_new(reflog_entry));
Packit Service 20376f
	cl_assert_equal_s("rebase finished: returning to refs/heads/gravy", git_reflog_entry_message(reflog_entry));
Packit Service 20376f
	git_reflog_free(reflog);
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_reflog_read(&reflog, repo, "refs/heads/gravy"));
Packit Service 20376f
	cl_assert(reflog_entry = git_reflog_entry_byindex(reflog, 0));
Packit Service 20376f
	cl_assert_equal_oid(git_annotated_commit_id(branch_head), git_reflog_entry_id_old(reflog_entry));
Packit Service 20376f
	cl_assert_equal_oid(&commit_id, git_reflog_entry_id_new(reflog_entry));
Packit Service 20376f
	cl_assert_equal_s("rebase finished: refs/heads/gravy onto f87d14a4a236582a0278a916340a793714256864", git_reflog_entry_message(reflog_entry));
Packit Service 20376f
Packit Service 20376f
	git_reflog_free(reflog);
Packit Service 20376f
	git_annotated_commit_free(branch_head);
Packit Service 20376f
	git_annotated_commit_free(upstream_head);
Packit Service 20376f
	git_reference_free(head_ref);
Packit Service 20376f
	git_reference_free(branch_ref);
Packit Service 20376f
	git_reference_free(upstream_ref);
Packit Service 20376f
	git_rebase_free(rebase);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_rebase_merge__detached_finish(void)
Packit Service 20376f
{
Packit Service 20376f
	git_rebase *rebase;
Packit Service 20376f
	git_reference *branch_ref, *upstream_ref, *head_ref;
Packit Service 20376f
	git_annotated_commit *branch_head, *upstream_head;
Packit Service 20376f
	git_rebase_operation *rebase_operation;
Packit Service 20376f
	git_oid commit_id;
Packit Service 20376f
	git_reflog *reflog;
Packit Service 20376f
	const git_reflog_entry *reflog_entry;
Packit Service 20376f
	git_checkout_options opts = GIT_CHECKOUT_OPTIONS_INIT;
Packit Service 20376f
	int error;
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&branch_ref, repo, "refs/heads/gravy"));
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&upstream_ref, repo, "refs/heads/veal"));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&branch_head, repo, branch_ref));
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&upstream_head, repo, upstream_ref));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_repository_set_head_detached_from_annotated(repo, branch_head));
Packit Service 20376f
	opts.checkout_strategy = GIT_CHECKOUT_FORCE;
Packit Service 20376f
	git_checkout_head(repo, &opts);
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_init(&rebase, repo, NULL, upstream_head, NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_fail(error = git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_assert_equal_i(GIT_ITEROVER, error);
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_finish(rebase, signature));
Packit Service 20376f
Packit Service 20376f
	cl_assert_equal_i(GIT_REPOSITORY_STATE_NONE, git_repository_state(repo));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&head_ref, repo, "HEAD"));
Packit Service 20376f
	cl_assert_equal_i(GIT_REF_OID, git_reference_type(head_ref));
Packit Service 20376f
Packit Service 20376f
	/* Make sure the reflogs are updated appropriately */
Packit Service 20376f
	cl_git_pass(git_reflog_read(&reflog, repo, "HEAD"));
Packit Service 20376f
	cl_assert(reflog_entry = git_reflog_entry_byindex(reflog, 0));
Packit Service 20376f
	cl_assert_equal_oid(git_annotated_commit_id(upstream_head), git_reflog_entry_id_old(reflog_entry));
Packit Service 20376f
	cl_assert_equal_oid(&commit_id, git_reflog_entry_id_new(reflog_entry));
Packit Service 20376f
Packit Service 20376f
	git_reflog_free(reflog);
Packit Service 20376f
	git_annotated_commit_free(branch_head);
Packit Service 20376f
	git_annotated_commit_free(upstream_head);
Packit Service 20376f
	git_reference_free(head_ref);
Packit Service 20376f
	git_reference_free(branch_ref);
Packit Service 20376f
	git_reference_free(upstream_ref);
Packit Service 20376f
	git_rebase_free(rebase);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_rebase_merge__finish_with_ids(void)
Packit Service 20376f
{
Packit Service 20376f
	git_rebase *rebase;
Packit Service 20376f
	git_reference *head_ref;
Packit Service 20376f
	git_oid branch_id, upstream_id;
Packit Service 20376f
	git_annotated_commit *branch_head, *upstream_head;
Packit Service 20376f
	git_rebase_operation *rebase_operation;
Packit Service 20376f
	git_oid commit_id;
Packit Service 20376f
	git_reflog *reflog;
Packit Service 20376f
	const git_reflog_entry *reflog_entry;
Packit Service 20376f
	int error;
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_oid_fromstr(&branch_id, "d616d97082eb7bb2dc6f180a7cca940993b7a56f"));
Packit Service 20376f
	cl_git_pass(git_oid_fromstr(&upstream_id, "f87d14a4a236582a0278a916340a793714256864"));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_annotated_commit_lookup(&branch_head, repo, &branch_id));
Packit Service 20376f
	cl_git_pass(git_annotated_commit_lookup(&upstream_head, repo, &upstream_id));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_init(&rebase, repo, branch_head, upstream_head, NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_fail(error = git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_assert_equal_i(GIT_ITEROVER, error);
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_finish(rebase, signature));
Packit Service 20376f
Packit Service 20376f
	cl_assert_equal_i(GIT_REPOSITORY_STATE_NONE, git_repository_state(repo));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&head_ref, repo, "HEAD"));
Packit Service 20376f
	cl_assert_equal_i(GIT_REF_OID, git_reference_type(head_ref));
Packit Service 20376f
	cl_assert_equal_oid(&commit_id, git_reference_target(head_ref));
Packit Service 20376f
Packit Service 20376f
	/* reflogs are not updated as if we were operating on proper
Packit Service 20376f
	 * branches.  check that the last reflog entry is the rebase.
Packit Service 20376f
	 */
Packit Service 20376f
	cl_git_pass(git_reflog_read(&reflog, repo, "HEAD"));
Packit Service 20376f
	cl_assert(reflog_entry = git_reflog_entry_byindex(reflog, 0));
Packit Service 20376f
	cl_assert_equal_oid(&commit_id, git_reflog_entry_id_new(reflog_entry));
Packit Service 20376f
	cl_assert_equal_s("rebase: Modification 3 to gravy", git_reflog_entry_message(reflog_entry));
Packit Service 20376f
	git_reflog_free(reflog);
Packit Service 20376f
Packit Service 20376f
	git_annotated_commit_free(branch_head);
Packit Service 20376f
	git_annotated_commit_free(upstream_head);
Packit Service 20376f
	git_reference_free(head_ref);
Packit Service 20376f
	git_rebase_free(rebase);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_rebase_merge__no_common_ancestor(void)
Packit Service 20376f
{
Packit Service 20376f
	git_rebase *rebase;
Packit Service 20376f
	git_reference *branch_ref, *upstream_ref;
Packit Service 20376f
	git_annotated_commit *branch_head, *upstream_head;
Packit Service 20376f
	git_rebase_operation *rebase_operation;
Packit Service 20376f
	git_oid commit_id, expected_final_id;
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&branch_ref, repo, "refs/heads/barley"));
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&upstream_ref, repo, "refs/heads/master"));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&branch_head, repo, branch_ref));
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&upstream_head, repo, upstream_ref));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_init(&rebase, repo, branch_head, upstream_head, NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_finish(rebase, signature));
Packit Service 20376f
Packit Service 20376f
	git_oid_fromstr(&expected_final_id, "71e7ee8d4fe7d8bf0d107355197e0a953dfdb7f3");
Packit Service 20376f
	cl_assert_equal_oid(&expected_final_id, &commit_id);
Packit Service 20376f
Packit Service 20376f
	git_annotated_commit_free(branch_head);
Packit Service 20376f
	git_annotated_commit_free(upstream_head);
Packit Service 20376f
	git_reference_free(branch_ref);
Packit Service 20376f
	git_reference_free(upstream_ref);
Packit Service 20376f
	git_rebase_free(rebase);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
static void test_copy_note(
Packit Service 20376f
	const git_rebase_options *opts,
Packit Service 20376f
	bool should_exist)
Packit Service 20376f
{
Packit Service 20376f
	git_rebase *rebase;
Packit Service 20376f
	git_reference *branch_ref, *upstream_ref;
Packit Service 20376f
	git_annotated_commit *branch_head, *upstream_head;
Packit Service 20376f
	git_commit *branch_commit;
Packit Service 20376f
	git_rebase_operation *rebase_operation;
Packit Service 20376f
	git_oid note_id, commit_id;
Packit Service 20376f
	git_note *note = NULL;
Packit Service 20376f
	int error;
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&branch_ref, repo, "refs/heads/gravy"));
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&upstream_ref, repo, "refs/heads/veal"));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&branch_head, repo, branch_ref));
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&upstream_head, repo, upstream_ref));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_reference_peel((git_object **)&branch_commit,
Packit Service 20376f
		branch_ref, GIT_OBJ_COMMIT));
Packit Service 20376f
Packit Service 20376f
	/* Add a note to a commit */
Packit Service 20376f
	cl_git_pass(git_note_create(&note_id, repo, "refs/notes/test",
Packit Service 20376f
		git_commit_author(branch_commit), git_commit_committer(branch_commit),
Packit Service 20376f
		git_commit_id(branch_commit),
Packit Service 20376f
		"This is a commit note.", 0));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_init(&rebase, repo, branch_head, upstream_head, NULL, opts));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_finish(rebase, signature));
Packit Service 20376f
Packit Service 20376f
	cl_assert_equal_i(GIT_REPOSITORY_STATE_NONE, git_repository_state(repo));
Packit Service 20376f
Packit Service 20376f
	if (should_exist) {
Packit Service 20376f
		cl_git_pass(git_note_read(&note, repo, "refs/notes/test", &commit_id));
Packit Service 20376f
		cl_assert_equal_s("This is a commit note.", git_note_message(note));
Packit Service 20376f
	} else {
Packit Service 20376f
		cl_git_fail(error =
Packit Service 20376f
			git_note_read(&note, repo, "refs/notes/test", &commit_id));
Packit Service 20376f
		cl_assert_equal_i(GIT_ENOTFOUND, error);
Packit Service 20376f
	}
Packit Service 20376f
Packit Service 20376f
	git_note_free(note);
Packit Service 20376f
	git_commit_free(branch_commit);
Packit Service 20376f
	git_annotated_commit_free(branch_head);
Packit Service 20376f
	git_annotated_commit_free(upstream_head);
Packit Service 20376f
	git_reference_free(branch_ref);
Packit Service 20376f
	git_reference_free(upstream_ref);
Packit Service 20376f
	git_rebase_free(rebase);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_rebase_merge__copy_notes_off_by_default(void)
Packit Service 20376f
{
Packit Service 20376f
	test_copy_note(NULL, 0);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_rebase_merge__copy_notes_specified_in_options(void)
Packit Service 20376f
{
Packit Service 20376f
	git_rebase_options opts = GIT_REBASE_OPTIONS_INIT;
Packit Service 20376f
	opts.rewrite_notes_ref = "refs/notes/test";
Packit Service 20376f
Packit Service 20376f
	test_copy_note(&opts, 1);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_rebase_merge__copy_notes_specified_in_config(void)
Packit Service 20376f
{
Packit Service 20376f
	git_config *config;
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_repository_config(&config, repo));
Packit Service 20376f
	cl_git_pass(git_config_set_string(config,
Packit Service 20376f
		"notes.rewriteRef", "refs/notes/test"));
Packit Service 20376f
Packit Service 20376f
	test_copy_note(NULL, 1);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_rebase_merge__copy_notes_disabled_in_config(void)
Packit Service 20376f
{
Packit Service 20376f
	git_config *config;
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_repository_config(&config, repo));
Packit Service 20376f
	cl_git_pass(git_config_set_bool(config, "notes.rewrite.rebase", 0));
Packit Service 20376f
	cl_git_pass(git_config_set_string(config,
Packit Service 20376f
		"notes.rewriteRef", "refs/notes/test"));
Packit Service 20376f
Packit Service 20376f
	test_copy_note(NULL, 0);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void rebase_checkout_progress_cb(
Packit Service 20376f
	const char *path,
Packit Service 20376f
	size_t completed_steps,
Packit Service 20376f
	size_t total_steps,
Packit Service 20376f
	void *payload)
Packit Service 20376f
{
Packit Service 20376f
	int *called = payload;
Packit Service 20376f
Packit Service 20376f
	GIT_UNUSED(path);
Packit Service 20376f
	GIT_UNUSED(completed_steps);
Packit Service 20376f
	GIT_UNUSED(total_steps);
Packit Service 20376f
Packit Service 20376f
	*called = 1;
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_rebase_merge__custom_checkout_options(void)
Packit Service 20376f
{
Packit Service 20376f
	git_rebase *rebase;
Packit Service 20376f
	git_reference *branch_ref, *upstream_ref;
Packit Service 20376f
	git_annotated_commit *branch_head, *upstream_head;
Packit Service 20376f
	git_rebase_options rebase_options = GIT_REBASE_OPTIONS_INIT;
Packit Service 20376f
	git_checkout_options checkout_options = GIT_CHECKOUT_OPTIONS_INIT;
Packit Service 20376f
	git_rebase_operation *rebase_operation;
Packit Service 20376f
	int called = 0;
Packit Service 20376f
Packit Service 20376f
	checkout_options.progress_cb = rebase_checkout_progress_cb;
Packit Service 20376f
	checkout_options.progress_payload = &called;
Packit Service 20376f
Packit Service 20376f
	memcpy(&rebase_options.checkout_options, &checkout_options,
Packit Service 20376f
		sizeof(git_checkout_options));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&branch_ref, repo, "refs/heads/beef"));
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&upstream_ref, repo, "refs/heads/master"));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&branch_head, repo, branch_ref));
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&upstream_head, repo, upstream_ref));
Packit Service 20376f
Packit Service 20376f
	called = 0;
Packit Service 20376f
	cl_git_pass(git_rebase_init(&rebase, repo, branch_head, upstream_head, NULL, &rebase_options));
Packit Service 20376f
	cl_assert_equal_i(1, called);
Packit Service 20376f
Packit Service 20376f
	called = 0;
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_assert_equal_i(1, called);
Packit Service 20376f
Packit Service 20376f
	called = 0;
Packit Service 20376f
	cl_git_pass(git_rebase_abort(rebase));
Packit Service 20376f
	cl_assert_equal_i(1, called);
Packit Service 20376f
Packit Service 20376f
	git_annotated_commit_free(branch_head);
Packit Service 20376f
	git_annotated_commit_free(upstream_head);
Packit Service 20376f
	git_reference_free(branch_ref);
Packit Service 20376f
	git_reference_free(upstream_ref);
Packit Service 20376f
	git_rebase_free(rebase);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_rebase_merge__custom_merge_options(void)
Packit Service 20376f
{
Packit Service 20376f
	git_rebase *rebase;
Packit Service 20376f
	git_reference *branch_ref, *upstream_ref;
Packit Service 20376f
	git_annotated_commit *branch_head, *upstream_head;
Packit Service 20376f
	git_rebase_options rebase_options = GIT_REBASE_OPTIONS_INIT;
Packit Service 20376f
	git_rebase_operation *rebase_operation;
Packit Service 20376f
Packit Service 20376f
	rebase_options.merge_options.flags |=
Packit Service 20376f
		GIT_MERGE_FAIL_ON_CONFLICT |
Packit Service 20376f
		GIT_MERGE_SKIP_REUC;
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&branch_ref, repo, "refs/heads/asparagus"));
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&upstream_ref, repo, "refs/heads/master"));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&branch_head, repo, branch_ref));
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&upstream_head, repo, upstream_ref));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_init(&rebase, repo, branch_head, upstream_head, NULL, &rebase_options));
Packit Service 20376f
Packit Service 20376f
	cl_git_fail_with(GIT_EMERGECONFLICT, git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
Packit Service 20376f
	git_annotated_commit_free(branch_head);
Packit Service 20376f
	git_annotated_commit_free(upstream_head);
Packit Service 20376f
	git_reference_free(branch_ref);
Packit Service 20376f
	git_reference_free(upstream_ref);
Packit Service 20376f
	git_rebase_free(rebase);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_rebase_merge__with_directories(void)
Packit Service 20376f
{
Packit Service 20376f
	git_rebase *rebase;
Packit Service 20376f
	git_reference *branch_ref, *upstream_ref;
Packit Service 20376f
	git_annotated_commit *branch_head, *upstream_head;
Packit Service 20376f
	git_rebase_operation *rebase_operation;
Packit Service 20376f
	git_oid commit_id, tree_id;
Packit Service 20376f
	git_commit *commit;
Packit Service 20376f
Packit Service 20376f
	git_oid_fromstr(&tree_id, "a4d6d9c3d57308fd8e320cf2525bae8f1adafa57");
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&branch_ref, repo, "refs/heads/deep_gravy"));
Packit Service 20376f
	cl_git_pass(git_reference_lookup(&upstream_ref, repo, "refs/heads/veal"));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&branch_head, repo, branch_ref));
Packit Service 20376f
	cl_git_pass(git_annotated_commit_from_ref(&upstream_head, repo, upstream_ref));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_init(&rebase, repo, branch_head, upstream_head, NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
	cl_git_pass(git_rebase_commit(&commit_id, rebase, NULL, signature,
Packit Service 20376f
		NULL, NULL));
Packit Service 20376f
Packit Service 20376f
	cl_git_fail_with(GIT_ITEROVER, git_rebase_next(&rebase_operation, rebase));
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_commit_lookup(&commit, repo, &commit_id));
Packit Service 20376f
	cl_assert_equal_oid(&tree_id, git_commit_tree_id(commit));
Packit Service 20376f
Packit Service 20376f
	git_commit_free(commit);
Packit Service 20376f
	git_annotated_commit_free(branch_head);
Packit Service 20376f
	git_annotated_commit_free(upstream_head);
Packit Service 20376f
	git_reference_free(branch_ref);
Packit Service 20376f
	git_reference_free(upstream_ref);
Packit Service 20376f
	git_rebase_free(rebase);
Packit Service 20376f
}