path: root/builtin/fetch-pack.c
diff options
authorMichael Haggerty <>2012-09-09 06:19:42 (GMT)
committerJunio C Hamano <>2012-09-12 18:46:31 (GMT)
commit4c58f13ba67f9dbe67a351de61703a2db20712cc (patch)
tree7dcf43f563e5291d4fef6f9a38a8de56933d0b17 /builtin/fetch-pack.c
parent382a96711470489ea6e4e277accd3afc46526bfc (diff)
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 <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'builtin/fetch-pack.c')
1 files changed, 1 insertions, 14 deletions
diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c
index 63d455f..6cd734a 100644
--- a/builtin/fetch-pack.c
+++ b/builtin/fetch-pack.c
@@ -858,19 +858,6 @@ static struct ref *do_fetch_pack(int fd[2],
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)
if (strcmp(var, "fetch.unpacklimit") == 0) {
@@ -1090,7 +1077,7 @@ struct ref *fetch_pack(struct fetch_pack_args *my_args,
if (sought->nr) {
- remove_duplicates(sought);
+ string_list_remove_duplicates(sought, 0);
if (!ref) {