Hi Paul, On 2015-05-18 17:06, Paul Tan wrote: > diff --git a/builtin/pull.c b/builtin/pull.c > index 07ad783..8982fdf 100644 > --- a/builtin/pull.c > +++ b/builtin/pull.c > @@ -207,6 +209,130 @@ static void argv_push_force(struct argv_array *arr) > argv_array_push(arr, "-f"); > } > > +struct known_remote { > + struct known_remote *next; > + struct remote *remote; > +}; > + > +/** > + * Use this callback with for_each_remote() to get the configured remotes as > + * a singly linked known_remote list. cb_data must be a pointer to a > + * struct known_remote*, which must be initialized to NULL. For example, > + * For example: > + * > + * struct known_remote *list = NULL; > + * for_each_remote(add_known_remote, &list); > + */ > +static int add_known_remote(struct remote *remote, void *cb_data) > +{ > + struct known_remote **list = cb_data; > + struct known_remote *item; > + > + item = xmalloc(sizeof(*item)); > + item->remote = remote; > + item->next = *list; > + *list = item; > + return 0; > +} My first reaction to this was: let's use an array and `ALLOC_GROW()` to make this look nicer. But then I saw that there is only one user: > +static void NORETURN die_no_merge_candidates(const char *repo, const > char **refspecs) > +{ > [...] > + } else if (!curr_branch->merge_nr) { > + struct known_remote *remotes = NULL; > + const char *remote_name = "<remote>"; > + > + for_each_remote(add_known_remote, &remotes); > + if (remotes && !remotes->next) > + remote_name = remotes->remote->name; > + > [...] How about this instead: static int get_only_remote(struct remote *remote, void *cb_data) { const char **p = cb_data; if (*p) return -1; *p = remote->name; return 0; } [...] const char *remote_name = NULL; if (for_each_remote(get_only_remote, &remote_name) || !remote_name) remote_name = "<remote>"; Ciao, Dscho -- 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