mirror of
https://github.com/git/git.git
synced 2024-10-31 06:17:56 +01:00
Merge branch 'jk/branch-shortening-funny-symrefs'
A change back in version 2.7 to "git branch" broke display of a symbolic ref in a non-standard place in the refs/ hierarchy (we expect symbolic refs to appear in refs/remotes/*/HEAD to point at the primary branch the remote has, and as .git/HEAD to point at the branch we locally checked out). * jk/branch-shortening-funny-symrefs: branch: fix shortening of non-remote symrefs
This commit is contained in:
commit
f5cc612916
2 changed files with 24 additions and 7 deletions
|
@ -399,22 +399,25 @@ static void format_and_print_ref_item(struct ref_array_item *item, int maxwidth,
|
||||||
int current = 0;
|
int current = 0;
|
||||||
int color;
|
int color;
|
||||||
struct strbuf out = STRBUF_INIT, name = STRBUF_INIT;
|
struct strbuf out = STRBUF_INIT, name = STRBUF_INIT;
|
||||||
const char *prefix = "";
|
const char *prefix_to_show = "";
|
||||||
|
const char *prefix_to_skip = NULL;
|
||||||
const char *desc = item->refname;
|
const char *desc = item->refname;
|
||||||
char *to_free = NULL;
|
char *to_free = NULL;
|
||||||
|
|
||||||
switch (item->kind) {
|
switch (item->kind) {
|
||||||
case FILTER_REFS_BRANCHES:
|
case FILTER_REFS_BRANCHES:
|
||||||
skip_prefix(desc, "refs/heads/", &desc);
|
prefix_to_skip = "refs/heads/";
|
||||||
|
skip_prefix(desc, prefix_to_skip, &desc);
|
||||||
if (!filter->detached && !strcmp(desc, head))
|
if (!filter->detached && !strcmp(desc, head))
|
||||||
current = 1;
|
current = 1;
|
||||||
else
|
else
|
||||||
color = BRANCH_COLOR_LOCAL;
|
color = BRANCH_COLOR_LOCAL;
|
||||||
break;
|
break;
|
||||||
case FILTER_REFS_REMOTES:
|
case FILTER_REFS_REMOTES:
|
||||||
skip_prefix(desc, "refs/remotes/", &desc);
|
prefix_to_skip = "refs/remotes/";
|
||||||
|
skip_prefix(desc, prefix_to_skip, &desc);
|
||||||
color = BRANCH_COLOR_REMOTE;
|
color = BRANCH_COLOR_REMOTE;
|
||||||
prefix = remote_prefix;
|
prefix_to_show = remote_prefix;
|
||||||
break;
|
break;
|
||||||
case FILTER_REFS_DETACHED_HEAD:
|
case FILTER_REFS_DETACHED_HEAD:
|
||||||
desc = to_free = get_head_description();
|
desc = to_free = get_head_description();
|
||||||
|
@ -431,7 +434,7 @@ static void format_and_print_ref_item(struct ref_array_item *item, int maxwidth,
|
||||||
color = BRANCH_COLOR_CURRENT;
|
color = BRANCH_COLOR_CURRENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
strbuf_addf(&name, "%s%s", prefix, desc);
|
strbuf_addf(&name, "%s%s", prefix_to_show, desc);
|
||||||
if (filter->verbose) {
|
if (filter->verbose) {
|
||||||
int utf8_compensation = strlen(name.buf) - utf8_strwidth(name.buf);
|
int utf8_compensation = strlen(name.buf) - utf8_strwidth(name.buf);
|
||||||
strbuf_addf(&out, "%c %s%-*s%s", c, branch_get_color(color),
|
strbuf_addf(&out, "%c %s%-*s%s", c, branch_get_color(color),
|
||||||
|
@ -442,8 +445,10 @@ static void format_and_print_ref_item(struct ref_array_item *item, int maxwidth,
|
||||||
name.buf, branch_get_color(BRANCH_COLOR_RESET));
|
name.buf, branch_get_color(BRANCH_COLOR_RESET));
|
||||||
|
|
||||||
if (item->symref) {
|
if (item->symref) {
|
||||||
skip_prefix(item->symref, "refs/remotes/", &desc);
|
const char *symref = item->symref;
|
||||||
strbuf_addf(&out, " -> %s", desc);
|
if (prefix_to_skip)
|
||||||
|
skip_prefix(symref, prefix_to_skip, &symref);
|
||||||
|
strbuf_addf(&out, " -> %s", symref);
|
||||||
}
|
}
|
||||||
else if (filter->verbose)
|
else if (filter->verbose)
|
||||||
/* " f7c0c00 [ahead 58, behind 197] vcs-svn: drop obj_pool.h" */
|
/* " f7c0c00 [ahead 58, behind 197] vcs-svn: drop obj_pool.h" */
|
||||||
|
|
|
@ -184,4 +184,16 @@ test_expect_success 'ambiguous branch/tag not marked' '
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'local-branch symrefs shortened properly' '
|
||||||
|
git symbolic-ref refs/heads/ref-to-branch refs/heads/branch-one &&
|
||||||
|
git symbolic-ref refs/heads/ref-to-remote refs/remotes/origin/branch-one &&
|
||||||
|
cat >expect <<-\EOF &&
|
||||||
|
ref-to-branch -> branch-one
|
||||||
|
ref-to-remote -> refs/remotes/origin/branch-one
|
||||||
|
EOF
|
||||||
|
git branch >actual.raw &&
|
||||||
|
grep ref-to <actual.raw >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
Loading…
Reference in a new issue