Re: [PATCH] branch --track: code cleanup and saner handling of local branches
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jul 9, 2007, 21:05 UTC
- Message-ID
- <7v4pkduw2f.fsf@assigned-by-dhcp.cox.net>
- In-Reply-To
- <Pine.LNX.4.64.0707091228290.5546@racer.site>
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
Show 50 quoted lines
> @@ -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...