fetch_pack(): update sought->nr to reflect number of unique entries
fetch_pack() removes duplicates from the "sought" list, thereby shrinking the list. But previously, the caller was not informed about the shrinkage. This would cause a spurious error message to be emitted by cmd_fetch_pack() if "git fetch-pack" is called with duplicate refnames. Instead, remove duplicates using string_list_remove_duplicates(), which adjusts sought->nr to reflect the new length of the list. The last test of t5500 inexplicably *required* "git fetch-pack" to fail when fetching a list of references that contains duplicates; i.e., it insisted on the buggy behavior. So change the test to expect the correct behavior. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									382a967114
								
							
						
					
					
						commit
						4c58f13ba6
					
				|  | @ -858,19 +858,6 @@ static struct ref *do_fetch_pack(int fd[2], | ||||||
| 	return ref; | 	return ref; | ||||||
| } | } | ||||||
|  |  | ||||||
| static int remove_duplicates(struct string_list *sought) |  | ||||||
| { |  | ||||||
| 	int src, dst; |  | ||||||
|  |  | ||||||
| 	if (!sought->nr) |  | ||||||
| 		return 0; |  | ||||||
|  |  | ||||||
| 	for (src = dst = 1; src < sought->nr; src++) |  | ||||||
| 		if (strcmp(sought->items[src].string, sought->items[dst-1].string)) |  | ||||||
| 			sought->items[dst++] = sought->items[src]; |  | ||||||
| 	return dst; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static int fetch_pack_config(const char *var, const char *value, void *cb) | static int fetch_pack_config(const char *var, const char *value, void *cb) | ||||||
| { | { | ||||||
| 	if (strcmp(var, "fetch.unpacklimit") == 0) { | 	if (strcmp(var, "fetch.unpacklimit") == 0) { | ||||||
|  | @ -1090,7 +1077,7 @@ struct ref *fetch_pack(struct fetch_pack_args *my_args, | ||||||
|  |  | ||||||
| 	if (sought->nr) { | 	if (sought->nr) { | ||||||
| 		sort_string_list(sought); | 		sort_string_list(sought); | ||||||
| 		remove_duplicates(sought); | 		string_list_remove_duplicates(sought, 0); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if (!ref) { | 	if (!ref) { | ||||||
|  |  | ||||||
|  | @ -391,7 +391,7 @@ test_expect_success 'fetch mixed refs from cmdline and stdin' ' | ||||||
| test_expect_success 'test duplicate refs from stdin' ' | test_expect_success 'test duplicate refs from stdin' ' | ||||||
| 	( | 	( | ||||||
| 	cd client && | 	cd client && | ||||||
| 	test_must_fail git fetch-pack --stdin --no-progress .. <../input.dup | 	git fetch-pack --stdin --no-progress .. <../input.dup | ||||||
| 	) >output && | 	) >output && | ||||||
| 	cut -d " " -f 2 <output | sort >actual && | 	cut -d " " -f 2 <output | sort >actual && | ||||||
| 	test_cmp expect actual | 	test_cmp expect actual | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Michael Haggerty
						Michael Haggerty