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@xxxxxxxxxxxx> --- builtin/fetch-pack.c | 15 +-------------- t/t5500-fetch-pack.sh | 2 +- 2 files changed, 2 insertions(+), 15 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) { sort_string_list(sought); - remove_duplicates(sought); + string_list_remove_duplicates(sought, 0); } if (!ref) { diff --git a/t/t5500-fetch-pack.sh b/t/t5500-fetch-pack.sh index 15d277f..acd41e8 100755 --- a/t/t5500-fetch-pack.sh +++ b/t/t5500-fetch-pack.sh @@ -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 -- 1.7.11.3 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html