In the "remote -> local" line, if either ref is a substring of the other, the common part in the other string is replaced with "$". For example abc -> origin/abc refs/pull/123/head -> pull/123 become abc -> origin/$ refs/$/head -> pull/123 Activated with fetch.format=dollar. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- builtin/fetch.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/builtin/fetch.c b/builtin/fetch.c index e2ca6bc..c63f913 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -488,11 +488,13 @@ static void prepare_format_display(struct ref *ref_map) compact_format = 0; else if (!strcasecmp(format, "compact")) compact_format = 1; + else if (!strcasecmp(format, "dollar")) + compact_format = 2; else die(_("configuration fetch.output contains invalid value %s"), format); - if (compact_format) + if (compact_format == 1) return; for (rm = ref_map; rm; rm = rm->next) { @@ -549,6 +551,48 @@ static void print_compact(struct strbuf *display, print_remote_to_local(display, remote, local); } +static int dollarize(struct strbuf *haystack, const char *needle) +{ + const char *p = strstr(haystack->buf, needle); + int plen, nlen; + + if (!p) + return 0; + + if (p > haystack->buf && p[-1] != '/') + return 0; + + plen = strlen(p); + nlen = strlen(needle); + if (plen > nlen && p[nlen] != '/') + return 0; + + strbuf_splice(haystack, p - haystack->buf, nlen, "$", 1); + return 1; +} + +static void print_dollar(struct strbuf *display, + const char *remote, const char *local) +{ + struct strbuf r = STRBUF_INIT; + struct strbuf l = STRBUF_INIT; + + if (!strcmp(remote, local)) { + strbuf_addf(display, "%s -> $", remote); + return; + } + + strbuf_addstr(&r, remote); + strbuf_addstr(&l, local); + + if (!dollarize(&r, local)) + dollarize(&l, remote); + print_remote_to_local(display, r.buf, l.buf); + + strbuf_release(&r); + strbuf_release(&l); +} + static void format_display(struct strbuf *display, char code, const char *summary, const char *error, const char *remote, const char *local) @@ -561,6 +605,9 @@ static void format_display(struct strbuf *display, char code, case 1: print_compact(display, remote, local); break; + case 2: + print_dollar(display, remote, local); + break; } if (error) strbuf_addf(display, " (%s)", error); -- 2.8.2.524.g6ff3d78 -- 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