#include "clar_libgit2.h"
#include "helper__perf__do_merge.h"
#include "helper__perf__timer.h"

static git_repository * g_repo;

void perf__do_merge(const char *fixture,
					const char *test_name,
					const char *id_a,
					const char *id_b)
{
	git_checkout_options checkout_opts = GIT_CHECKOUT_OPTIONS_INIT;
	git_clone_options clone_opts = GIT_CLONE_OPTIONS_INIT;
	git_merge_options merge_opts = GIT_MERGE_OPTIONS_INIT;
	git_oid oid_a;
	git_oid oid_b;
	git_reference *ref_branch_a = NULL;
	git_reference *ref_branch_b = NULL;
	git_commit *commit_a = NULL;
	git_commit *commit_b = NULL;
	git_annotated_commit *annotated_commits[1] = { NULL };
	perf_timer t_total = PERF_TIMER_INIT;
	perf_timer t_clone = PERF_TIMER_INIT;
	perf_timer t_checkout = PERF_TIMER_INIT;
	perf_timer t_merge = PERF_TIMER_INIT;

	perf__timer__start(&t_total);

	checkout_opts.checkout_strategy = GIT_CHECKOUT_SAFE;
	clone_opts.checkout_opts = checkout_opts;

	perf__timer__start(&t_clone);
	cl_git_pass(git_clone(&g_repo, fixture, test_name, &clone_opts));
	perf__timer__stop(&t_clone);
	
	git_oid_fromstr(&oid_a, id_a);
	cl_git_pass(git_commit_lookup(&commit_a, g_repo, &oid_a));
	cl_git_pass(git_branch_create(&ref_branch_a, g_repo,
								  "A", commit_a,
								  0));

	perf__timer__start(&t_checkout);
	cl_git_pass(git_checkout_tree(g_repo, (git_object*)commit_a, &checkout_opts));
	perf__timer__stop(&t_checkout);

	cl_git_pass(git_repository_set_head(g_repo, git_reference_name(ref_branch_a)));

	git_oid_fromstr(&oid_b, id_b);
	cl_git_pass(git_commit_lookup(&commit_b, g_repo, &oid_b));
	cl_git_pass(git_branch_create(&ref_branch_b, g_repo,
								  "B", commit_b,
								  0));

	cl_git_pass(git_annotated_commit_lookup(&annotated_commits[0], g_repo, &oid_b));

	perf__timer__start(&t_merge);
	cl_git_pass(git_merge(g_repo,
						  (const git_annotated_commit **)annotated_commits, 1,
						  &merge_opts, &checkout_opts));
	perf__timer__stop(&t_merge);

	git_reference_free(ref_branch_a);
	git_reference_free(ref_branch_b);
	git_commit_free(commit_a);
	git_commit_free(commit_b);
	git_annotated_commit_free(annotated_commits[0]);
	git_repository_free(g_repo);

	perf__timer__stop(&t_total);

	perf__timer__report(&t_clone, "%s: clone", test_name);
	perf__timer__report(&t_checkout, "%s: checkout", test_name);
	perf__timer__report(&t_merge, "%s: merge", test_name);
	perf__timer__report(&t_total, "%s: total", test_name);
}
