Skip to content

Commit

Permalink
fetch_pack(): update sought->nr to reflect number of unique entries
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
mhagger authored and gitster committed Sep 12, 2012
1 parent 382a967 commit 4c58f13
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 15 deletions.
15 changes: 1 addition & 14 deletions builtin/fetch-pack.c
Expand Up @@ -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) {
Expand Down Expand Up @@ -1090,7 +1077,7 @@ struct ref *fetch_pack(struct fetch_pack_args *my_args,

if (sought->nr) {
sort_string_list(sought);
remove_duplicates(sought);
string_list_remove_duplicates(sought, 0);
}

if (!ref) {
Expand Down
2 changes: 1 addition & 1 deletion t/t5500-fetch-pack.sh
Expand Up @@ -391,7 +391,7 @@ test_expect_success 'fetch mixed refs from cmdline and stdin' '
test_expect_success 'test duplicate refs from stdin' '
(
cd client &&
test_must_fail git fetch-pack --stdin --no-progress .. <../input.dup
git fetch-pack --stdin --no-progress .. <../input.dup
) >output &&
cut -d " " -f 2 <output | sort >actual &&
test_cmp expect actual
Expand Down

0 comments on commit 4c58f13

Please sign in to comment.