mirror of
				https://git.proxmox.com/git/libgit2
				synced 2025-10-31 13:10:52 +00:00 
			
		
		
		
	Local fetch: add tests
This commit is contained in:
		
							parent
							
								
									505da062b8
								
							
						
					
					
						commit
						11fabe73a0
					
				
							
								
								
									
										103
									
								
								tests-clar/network/fetchlocal.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								tests-clar/network/fetchlocal.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,103 @@ | ||||
| #include "clar_libgit2.h" | ||||
| 
 | ||||
| #include "buffer.h" | ||||
| #include "path.h" | ||||
| #include "remote.h" | ||||
| 
 | ||||
| static void build_local_file_url(git_buf *out, const char *fixture) | ||||
| { | ||||
| 	const char *in_buf; | ||||
| 
 | ||||
| 	git_buf path_buf = GIT_BUF_INIT; | ||||
| 
 | ||||
| 	cl_git_pass(git_path_prettify_dir(&path_buf, fixture, NULL)); | ||||
| 	cl_git_pass(git_buf_puts(out, "file://")); | ||||
| 
 | ||||
| #ifdef _MSC_VER | ||||
| 	/*
 | ||||
| 	 * A FILE uri matches the following format: file://[host]/path
 | ||||
| 	 * where "host" can be empty and "path" is an absolute path to the resource. | ||||
| 	 *  | ||||
| 	 * In this test, no hostname is used, but we have to ensure the leading triple slashes: | ||||
| 	 *  | ||||
| 	 * *nix: file:///usr/home/...
 | ||||
| 	 * Windows: file:///C:/Users/...
 | ||||
| 	 */ | ||||
| 	cl_git_pass(git_buf_putc(out, '/')); | ||||
| #endif | ||||
| 
 | ||||
| 	in_buf = git_buf_cstr(&path_buf); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * A very hacky Url encoding that only takes care of escaping the spaces | ||||
| 	 */ | ||||
| 	while (*in_buf) { | ||||
| 		if (*in_buf == ' ') | ||||
| 			cl_git_pass(git_buf_puts(out, "%20")); | ||||
| 		else | ||||
| 			cl_git_pass(git_buf_putc(out, *in_buf)); | ||||
| 
 | ||||
| 		in_buf++; | ||||
| 	} | ||||
| 
 | ||||
| 	git_buf_free(&path_buf); | ||||
| } | ||||
| 
 | ||||
| static void transfer_cb(const git_transfer_progress *stats, void *payload) | ||||
| { | ||||
| 	int *callcount = (int*)payload; | ||||
| 	GIT_UNUSED(stats); | ||||
| 	(*callcount)++; | ||||
| } | ||||
| 
 | ||||
| void test_network_fetchlocal__complete(void) | ||||
| { | ||||
| 	git_buf url = GIT_BUF_INIT; | ||||
| 	git_repository *repo; | ||||
| 	git_remote *origin; | ||||
| 	int callcount = 0; | ||||
| 	git_strarray refnames = {0}; | ||||
| 
 | ||||
| 	build_local_file_url(&url, cl_fixture("testrepo.git")); | ||||
| 	cl_git_pass(git_repository_init(&repo, "foo", true)); | ||||
| 
 | ||||
| 	cl_git_pass(git_remote_add(&origin, repo, GIT_REMOTE_ORIGIN, git_buf_cstr(&url))); | ||||
| 	cl_git_pass(git_remote_connect(origin, GIT_DIR_FETCH)); | ||||
| 	cl_git_pass(git_remote_download(origin, transfer_cb, &callcount)); | ||||
| 	cl_git_pass(git_remote_update_tips(origin)); | ||||
| 
 | ||||
| 	cl_git_pass(git_reference_list(&refnames, repo, GIT_REF_LISTALL)); | ||||
| 	cl_assert_equal_i(18, refnames.count); | ||||
| 	cl_assert(callcount > 0); | ||||
| 
 | ||||
| 	git_strarray_free(&refnames); | ||||
| 	git_remote_free(origin); | ||||
| 	git_repository_free(repo); | ||||
| } | ||||
| 
 | ||||
| void test_network_fetchlocal__partial(void) | ||||
| { | ||||
| 	git_repository *repo = cl_git_sandbox_init("partial-testrepo"); | ||||
| 	git_buf url = GIT_BUF_INIT; | ||||
| 	git_remote *origin; | ||||
| 	int callcount = 0; | ||||
| 	git_strarray refnames = {0}; | ||||
| 
 | ||||
| 	cl_git_pass(git_reference_list(&refnames, repo, GIT_REF_LISTALL)); | ||||
| 	cl_assert_equal_i(1, refnames.count); | ||||
| 
 | ||||
| 	build_local_file_url(&url, cl_fixture("testrepo.git")); | ||||
| 	cl_git_pass(git_remote_add(&origin, repo, GIT_REMOTE_ORIGIN, git_buf_cstr(&url))); | ||||
| 	cl_git_pass(git_remote_connect(origin, GIT_DIR_FETCH)); | ||||
| 	cl_git_pass(git_remote_download(origin, transfer_cb, &callcount)); | ||||
| 	cl_git_pass(git_remote_update_tips(origin)); | ||||
| 
 | ||||
| 	cl_git_pass(git_reference_list(&refnames, repo, GIT_REF_LISTALL)); | ||||
| 	cl_assert_equal_i(19, refnames.count); /* 18 remote + 1 local */ | ||||
| 	cl_assert(callcount > 0); | ||||
| 
 | ||||
| 	git_strarray_free(&refnames); | ||||
| 	git_remote_free(origin); | ||||
| 
 | ||||
| 	cl_git_sandbox_cleanup(); | ||||
| } | ||||
							
								
								
									
										1
									
								
								tests-clar/resources/partial-testrepo/.gitted/HEAD
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tests-clar/resources/partial-testrepo/.gitted/HEAD
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| ref: refs/heads/dir | ||||
							
								
								
									
										7
									
								
								tests-clar/resources/partial-testrepo/.gitted/config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								tests-clar/resources/partial-testrepo/.gitted/config
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | ||||
| [core] | ||||
| 	repositoryformatversion = 0 | ||||
| 	filemode = true | ||||
| 	bare = false | ||||
| 	logallrefupdates = true | ||||
| 	ignorecase = true | ||||
| [branch "dir"] | ||||
							
								
								
									
										
											BIN
										
									
								
								tests-clar/resources/partial-testrepo/.gitted/index
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								tests-clar/resources/partial-testrepo/.gitted/index
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,2 @@ | ||||
| x<01>ŽQ | ||||
| Â0DýÎ)öÊ6›Í¦ "xO°‰‰-ØFb¼¿EoàÏ0¼Ç¤º,ske×[ÎPn8R,EpD?±gŸ}Ê^3²âÙ<µåµGŽhYKÄèÒ8ЖDA<44>É)¿ÉÈ;gôݧÚàšjïp™4ÕŽ¯ô-çû¢óã<C3B3>êr‚ÁŠ;°s°GA4Ûº=ìùÖ(ôin7øIÌKÍFE | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,2 @@ | ||||
| xťŽŰ	1EýNi@™Ék2 "X‚$ŮYW0Yc˙íŔżĂ…s¸ĄŐzďÚÚőMDĎ€0ćś8!¶†ÉĚŢs‰XŠŞgÚdí::@X0»P˘wŮ"F/‰‰śÍRŕ<>Uz÷ĄmúZZďú˛¤ŇV}|•/śo5݇ŇęIŁ!¬1z Ć:vůÇUim}ę/˘> | ||||
| öF- | ||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,3 @@ | ||||
| x<01><>[ | ||||
| Т0E§Ю*fЪфеЄ "ИW0<57><30>-иFтtџн<><EFBFBD>чpS[<5B>YР<59>x<EFBFBD>^ | ||||
| Dэb	CLhutЩ<18>}Ѕ8X*4ZэЌsYНЈ<D09D>UР<55>AУж
ЬX3<>RЋMЕЖ) s6шМЂMІжс<D0B6><D181>м&Jm<4A>ѓ;}ЧѕБаќ<ЅЖ\@<40>р<EFBFBD>бо<D0B1>pФ<70>ЈvК?<3F>ђ<EFBFBD>ЋjлКL№ЋЈи?Hх | ||||
| @ -0,0 +1,2 @@ | ||||
| xťŹ;j1DëťmdÓú·Ŕ<C2B7>ÇŽ|M«µ3`ŤŚV{>€łâQŻ ¸·vL0I?Í!š4–Z=Ę! ×¦8˛F˘Ă’!rÖsQßyČ9<C48C>]$DŽ&„l6AÇ>jFWüҵIKNiűë§Z˘%ˇS<>Ś‘ | ||||
| ‹Ň	Ĺʉř<E280B0>U~Ě˝řä>'Ľď™ű	Żwţ
×[ËÇ×÷öÚDGÚˇ±đŚQ-şMůŹ«>dܶ‘OŢáŇň}í\ŕ8g_ШÂoYr | ||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,3 @@ | ||||
| x<01>ŽQ | ||||
| Â0DýÎ)öʦ»I<‚'ØlR+˜Fj¼¿EoàÏ0<xÃh«õÞa Üõµ]È™åXUlÞPF)Åz‘4yó”µ,\r	'SÂÄ-mI4 | ||||
| ‘Xhô”&òÌFÞ}n+\µõ—Y´-p|é·œoUî<55>ƒ¶z;-<2D>‘a<E28098>Ñlt{ØË?®I«,:ÃoÚR̳cHK | ||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1 @@ | ||||
| 144344043ba4d4a405da03de3844aa829ae8be0e | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Ben Straub
						Ben Straub