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 <[email protected]>
---
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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html