diff options
| author | Junio C Hamano <gitster@pobox.com> | 2016-02-05 14:54:15 -0800 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2016-02-05 14:54:15 -0800 |
| commit | 88ec75dba425be4a18309f28a8c5ae01044fd29a (patch) | |
| tree | 13ac7740a00e92c196a81c709b70eba4976d5a71 /ref-filter.c | |
| parent | 913c2c7c7be358144260bc81112e548d3276d694 (diff) | |
| parent | 0571979bd60837d3c0802ecc1a47c48b4a6114d0 (diff) | |
| download | git-88ec75dba425be4a18309f28a8c5ae01044fd29a.tar.xz | |
Merge branch 'jk/list-tag-2.7-regression' into maint
"git tag" started listing a tag "foo" as "tags/foo" when a branch
named "foo" exists in the same repository; remove this unnecessary
disambiguation, which is a regression introduced in v2.7.0.
* jk/list-tag-2.7-regression:
tag: do not show ambiguous tag names as "tags/foo"
t6300: use test_atom for some un-modern tests
Diffstat (limited to 'ref-filter.c')
| -rw-r--r-- | ref-filter.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/ref-filter.c b/ref-filter.c index 7bef7f8dac..f097176ed9 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -763,6 +763,29 @@ static inline char *copy_advance(char *dst, const char *src) return dst; } +static const char *strip_ref_components(const char *refname, const char *nr_arg) +{ + char *end; + long nr = strtol(nr_arg, &end, 10); + long remaining = nr; + const char *start = refname; + + if (nr < 1 || *end != '\0') + die(":strip= requires a positive integer argument"); + + while (remaining) { + switch (*start++) { + case '\0': + die("ref '%s' does not have %ld components to :strip", + refname, nr); + case '/': + remaining--; + break; + } + } + return start; +} + /* * Parse the object referred by ref, and grab needed value. */ @@ -909,11 +932,14 @@ static void populate_value(struct ref_array_item *ref) formatp = strchr(name, ':'); if (formatp) { int num_ours, num_theirs; + const char *arg; formatp++; if (!strcmp(formatp, "short")) refname = shorten_unambiguous_ref(refname, warn_ambiguous_refs); + else if (skip_prefix(formatp, "strip=", &arg)) + refname = strip_ref_components(refname, arg); else if (!strcmp(formatp, "track") && (starts_with(name, "upstream") || starts_with(name, "push"))) { |
