Re: [PATCH v2] Introduce <branch>@{upstream} as shortcut to the tracked branch
From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:47:23
Hi, On Thu, 10 Sep 2009, Jeff King wrote:
I wrote:quoted
+ ret = tracked_suffix(*string, *len); + if (ret) { + char *ref = xstrndup(*string, *len - ret); + struct branch *tracking = branch_get(*ref ? ref : NULL); + + free(ref); + if (!tracking) + die ("No tracking branch found for '%s'", ref); + if (tracking->merge && tracking->merge[0]->dst) { + *string = xstrdup(tracking->merge[0]->dst); + *len = strlen(*string); + return (char *)*string; + } + } +I don't think it is a good idea to die for !tracking, but not for !tracking->merge. That leads to inconsistent user-visible results: $ git checkout HEAD^0 $ git rev-parse HEAD@{u} fatal: No tracking branch found for 'HEAD' $ git rev-parse bogus@{u} bogus@{u} fatal: ambiguous argument 'bogus@{u}': unknown revision or path not in the working tree. Use '--' to separate paths from revisions Shouldn't both cases say the same thing? Also, your die message has two problems: 1. It looks at ref immediately after it is free'd, spewing junk. 2. Ref can be the empty string, which gives you the ugly: fatal: No tracking branch found for '' Should we munge that into HEAD (or "the current branch") for the user?
All true, but I cannot take care of it today. Ciao, Dscho