mirror of
				https://git.proxmox.com/git/libgit2
				synced 2025-10-31 11:25:52 +00:00 
			
		
		
		
	 4e498646b6
			
		
	
	
		4e498646b6
		
	
	
	
	
		
			
			We want to use the "checkout: moving from ..." message in order to let git know when a change of branch has happened. Make the convenience functions for this goal write this message.
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			76 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));
 | |
| 
 | |
| 	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);
 | |
| }
 |