Johannes Schindelin <Johannes.Schindelin@xxxxxx> writes: > @@ -349,125 +345,111 @@ static void print_ref_list(int kinds, int detached, int verbose, int abbrev, > free_ref_list(&ref_list); > } > > -static char *config_repo; > -static char *config_remote; > -static const char *start_ref; > +static struct { > + const char *ref; > + int ref_len; > + char *remote; > + char *merge; > + int matches; > +} tracking; > > -static int get_remote_branch_name(const char *value) > +static int tracking_config(const char *key, const char *value) > { > const char *colon; > + int key_len, value_len, match_len; > + char *merge = NULL; > > - colon = strchr(value, ':'); > - if (!colon) > + /* we want: remote.<nick>.fetch = <merge>:<ref> */ > + if (prefixcmp(key, "remote.") || (key_len = strlen(key)) < 6 || > + strcmp(key + key_len - 6, ".fetch") || > + !(colon = strchr(value, ':'))) > return 0; > > - end = value + strlen(value); > + if (*value == '+') > + value++; > > /* > - * Try an exact match first. I.e. handle the case where the > - * value is "$anything:refs/foo/bar/baz" and start_ref is exactly > - * "refs/foo/bar/baz". Then the name at the remote is $anything. > + * A remote.<name>.fetch value can have two forms: > + * > + * - exact: > + * > + * refs/heads/gnu:refs/heads/my-upstream > + * > + * - wildcard: > + * > + * refs/heads/ *:refs/remotes/gnu/ * > + * > + * try exact match first: > */ It strikes me a bit odd if Daniel's remote.[ch] infrastructure does not give you easy access to this kind of information... - 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