mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-07 07:10:07 +00:00

The signature for the reflog is not something which changes dynamically. Almost all uses will be NULL, since we want for the repository's default identity to be used, making it noise. In order to allow for changing the identity, we instead provide git_repository_set_ident() and git_repository_ident() which allow a user to override the choice of signature.
77 lines
2.4 KiB
C
77 lines
2.4 KiB
C
#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, NULL));
|
|
|
|
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), NULL));
|
|
|
|
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, NULL));
|
|
|
|
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);
|
|
}
|