v5 changes the substitute symbol from '$' to '*' in compact mode and makes sure long lines in compact mode will not make the remote ref column too big (it's far from perfect but I think it's still good to do). I'm not sure if we should bring back "{ -> origin/}foo" format. I can do it if someone still wants it. Interdiff diff --git a/Documentation/git-fetch.txt b/Documentation/git-fetch.txt index 61e8885..9e42169 100644 --- a/Documentation/git-fetch.txt +++ b/Documentation/git-fetch.txt @@ -116,10 +116,10 @@ representing the status of a single ref. Each line is of the form: The status of up-to-date refs is shown only if the --verbose option is used. -In compact output mode, if either entire `<from>` or `<to>` is found -in the other string, it will be substituted with `$` in the other -string. or example, `master -> origin/master` becomes -`master -> origin/$`. +In compact output mode, specified with configuration variable +fetch.output, if either entire `<from>` or `<to>` is found in the +other string, it will be substituted with `*` in the other string. For +example, `master -> origin/master` becomes `master -> origin/*`. flag:: A single character indicating the status of the ref: diff --git a/builtin/fetch.c b/builtin/fetch.c index 9d9f4e8..0a2eed1 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -455,7 +455,7 @@ static int compact_format; static void adjust_refcol_width(const struct ref *ref) { - int max, rlen, llen; + int max, rlen, llen, len; /* uptodate lines are only shown on high verbosity level */ if (!verbosity && !oidcmp(&ref->peer_ref->old_oid, &ref->old_oid)) @@ -464,16 +464,6 @@ static void adjust_refcol_width(const struct ref *ref) max = term_columns(); rlen = utf8_strwidth(prettify_refname(ref->name)); - if (compact_format) { - /* - * Not precise calculation because '$' can appear in - * ref->name and reduce actual length. - */ - if (refcol_width < rlen) - refcol_width = rlen; - return; - } - llen = utf8_strwidth(prettify_refname(ref->peer_ref->name)); /* @@ -482,9 +472,19 @@ static void adjust_refcol_width(const struct ref *ref) * anyway because we don't know if the error explanation part * will be printed in update_local_ref) */ - if (21 /* flag and summary */ + rlen + 4 /* -> */ + llen >= max) + if (compact_format) { + llen = 0; + max = max * 2 / 3; + } + len = 21 /* flag and summary */ + rlen + 4 /* -> */ + llen; + if (len >= max) return; + /* + * Not precise calculation for compact mode because '*' can + * appear on the left hand side of '->' and shrink the column + * back. + */ if (refcol_width < rlen) refcol_width = rlen; } @@ -519,7 +519,9 @@ static void print_remote_to_local(struct strbuf *display, strbuf_addf(display, "%-*s -> %s", refcol_width, remote, local); } -static int dollarize(struct strbuf *haystack, const char *needle) +static int find_and_replace(struct strbuf *haystack, + const char *needle, + const char *placeholder) { const char *p = strstr(haystack->buf, needle); int plen, nlen; @@ -535,7 +537,8 @@ static int dollarize(struct strbuf *haystack, const char *needle) if (plen > nlen && p[nlen] != '/') return 0; - strbuf_splice(haystack, p - haystack->buf, nlen, "$", 1); + strbuf_splice(haystack, p - haystack->buf, nlen, + placeholder, strlen(placeholder)); return 1; } @@ -546,15 +549,15 @@ static void print_compact(struct strbuf *display, struct strbuf l = STRBUF_INIT; if (!strcmp(remote, local)) { - strbuf_addf(display, "%-*s -> $", refcol_width, remote); + strbuf_addf(display, "%-*s -> *", refcol_width, remote); return; } strbuf_addstr(&r, remote); strbuf_addstr(&l, local); - if (!dollarize(&r, local)) - dollarize(&l, remote); + if (!find_and_replace(&r, local, "*")) + find_and_replace(&l, remote, "*"); print_remote_to_local(display, r.buf, l.buf); strbuf_release(&r); diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh index 3a92718..6032776 100755 --- a/t/t5510-fetch.sh +++ b/t/t5510-fetch.sh @@ -712,8 +712,8 @@ test_expect_success 'fetch compact output' ' grep -e "->" | cut -c 22- >../actual ) && cat >expect <<-\EOF && - master -> origin/$ - extraaa -> $ + master -> origin/* + extraaa -> * EOF test_cmp expect actual ' Nguyễn Thái Ngọc Duy (5): git-fetch.txt: document fetch output fetch: refactor ref update status formatting code fetch: change flag code for displaying tag update and deleted ref fetch: align all "remote -> local" output fetch: reduce duplicate in ref update status lines with placeholder Documentation/config.txt | 5 ++ Documentation/git-fetch.txt | 51 ++++++++++++ builtin/fetch.c | 197 +++++++++++++++++++++++++++++++++++--------- t/t5510-fetch.sh | 30 +++++++ 4 files changed, 243 insertions(+), 40 deletions(-) -- 2.8.2.531.gd073806 -- 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