On Tue, Nov 08, 2022 at 11:03:39AM +0100, Patrick Steinhardt wrote: > -static struct string_list *hide_refs; > - > -int parse_hide_refs_config(const char *var, const char *value, const char *section) > +int parse_hide_refs_config(const char *var, const char *value, const char *section, > + struct string_list *hide_refs) > { > const char *key; > if (!strcmp("transfer.hiderefs", var) || > @@ -1431,21 +1430,16 @@ int parse_hide_refs_config(const char *var, const char *value, const char *secti > len = strlen(ref); > while (len && ref[len - 1] == '/') > ref[--len] = '\0'; > - if (!hide_refs) { > - CALLOC_ARRAY(hide_refs, 1); > - hide_refs->strdup_strings = 1; > - } > - string_list_append(hide_refs, ref); > + string_list_append_nodup(hide_refs, ref); > } > return 0; > } This nodup is definitely the right thing to be doing, but it's kind of hidden in here. AFAICT it is fixing an existing leak, because the previous code always set strdup_strings, and we always made our own copy of "ref". Probably not worth a re-roll on its own, but I'd probably have pulled that into its own commit. The rest of the commit looks OK to me. Like Ævar, I'm confused by the "free_util" arguments to string_list_clear(). -Peff