From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>, "Jeff King" <peff@peff.net>,
marcnarc@xiplink.com, "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH v4 5/5] fetch: reduce duplicate in ref update status lines with placeholder
Date: Sun, 26 Jun 2016 07:58:10 +0200 [thread overview]
Message-ID: <20160626055810.26960-6-pclouds@gmail.com> (raw)
In-Reply-To: <20160626055810.26960-1-pclouds@gmail.com>
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.output=compact.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
Documentation/config.txt | 5 +++
Documentation/git-fetch.txt | 5 +++
builtin/fetch.c | 75 ++++++++++++++++++++++++++++++++++++++++++++-
t/t5510-fetch.sh | 17 +++++++++-
4 files changed, 100 insertions(+), 2 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 2e1b2e4..7f6e58d 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -1220,6 +1220,11 @@ fetch.prune::
If true, fetch will automatically behave as if the `--prune`
option was given on the command line. See also `remote.<name>.prune`.
+fetch.output::
+ Control how ref update status is printed. Valid values are
+ `full` and `compact`. Default value is `full`. See section
+ OUTPUT in linkgit:git-fetch[1] for detail.
+
format.attach::
Enable multipart/mixed attachments as the default for
'format-patch'. The value can also be a double quoted string
diff --git a/Documentation/git-fetch.txt b/Documentation/git-fetch.txt
index 771dde5..61e8885 100644
--- a/Documentation/git-fetch.txt
+++ b/Documentation/git-fetch.txt
@@ -116,6 +116,11 @@ 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/$`.
+
flag::
A single character indicating the status of the ref:
(space);; for a successfully fetched fast-forward;
diff --git a/builtin/fetch.c b/builtin/fetch.c
index c42795b..9d9f4e8 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -451,6 +451,7 @@ fail:
}
static int refcol_width = 10;
+static int compact_format;
static void adjust_refcol_width(const struct ref *ref)
{
@@ -462,6 +463,17 @@ 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));
/*
@@ -480,6 +492,16 @@ static void adjust_refcol_width(const struct ref *ref)
static void prepare_format_display(struct ref *ref_map)
{
struct ref *rm;
+ const char *format = "full";
+
+ git_config_get_string_const("fetch.output", &format);
+ if (!strcasecmp(format, "full"))
+ compact_format = 0;
+ else if (!strcasecmp(format, "compact"))
+ compact_format = 1;
+ else
+ die(_("configuration fetch.output contains invalid value %s"),
+ format);
for (rm = ref_map; rm; rm = rm->next) {
if (rm->status == REF_STATUS_REJECT_SHALLOW ||
@@ -491,12 +513,63 @@ static void prepare_format_display(struct ref *ref_map)
}
}
+static void print_remote_to_local(struct strbuf *display,
+ const char *remote, const char *local)
+{
+ strbuf_addf(display, "%-*s -> %s", refcol_width, 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_compact(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 -> $", refcol_width, 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)
{
strbuf_addf(display, "%c %-*s ", code, TRANSPORT_SUMMARY(summary));
- strbuf_addf(display, "%-*s -> %s", refcol_width, remote, local);
+ if (!compact_format)
+ print_remote_to_local(display, remote, local);
+ else
+ print_compact(display, remote, local);
if (error)
strbuf_addf(display, " (%s)", error);
}
diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh
index f50497e..3a92718 100755
--- a/t/t5510-fetch.sh
+++ b/t/t5510-fetch.sh
@@ -693,7 +693,7 @@ test_expect_success 'fetch aligned output' '
test_commit looooooooooooong-tag &&
(
cd full-output &&
- git fetch origin 2>&1 | \
+ git -c fetch.output=full fetch origin 2>&1 | \
grep -e "->" | cut -c 22- >../actual
) &&
cat >expect <<-\EOF &&
@@ -703,4 +703,19 @@ test_expect_success 'fetch aligned output' '
test_cmp expect actual
'
+test_expect_success 'fetch compact output' '
+ git clone . compact &&
+ test_commit extraaa &&
+ (
+ cd compact &&
+ git -c fetch.output=compact fetch origin 2>&1 | \
+ grep -e "->" | cut -c 22- >../actual
+ ) &&
+ cat >expect <<-\EOF &&
+ master -> origin/$
+ extraaa -> $
+ EOF
+ test_cmp expect actual
+'
+
test_done
--
2.8.2.526.g02eed6d
next prev parent reply other threads:[~2016-06-26 5:58 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-22 11:20 [PATCH 0/2] Better ref summary alignment in "git fetch" Nguyễn Thái Ngọc Duy
2016-05-22 11:20 ` [PATCH 1/2] fetch: better alignment in ref summary Nguyễn Thái Ngọc Duy
2016-05-23 0:58 ` Junio C Hamano
2016-05-23 1:59 ` Duy Nguyen
2016-05-26 14:22 ` Marc Branchaud
2016-05-26 16:29 ` Jeff King
2016-05-26 17:42 ` Junio C Hamano
2016-05-26 18:13 ` Marc Branchaud
2016-05-26 19:31 ` Junio C Hamano
2016-05-26 22:13 ` Marc Branchaud
2016-05-26 5:18 ` Jeff King
2016-06-02 13:58 ` Duy Nguyen
2016-06-02 16:16 ` Junio C Hamano
2016-05-22 11:20 ` [PATCH 2/2] fetch: reduce ref column size when there are enough short ref names Nguyễn Thái Ngọc Duy
2016-06-03 11:08 ` [PATCH v2 0/3] Better ref summary alignment in "git fetch" Nguyễn Thái Ngọc Duy
2016-06-03 11:08 ` [PATCH v2 1/3] git-fetch.txt: document fetch output Nguyễn Thái Ngọc Duy
2016-06-03 14:33 ` Marc Branchaud
2016-06-03 16:55 ` Jeff King
2016-06-03 11:08 ` [PATCH v2 2/3] fetch: refactor ref update status formatting code Nguyễn Thái Ngọc Duy
2016-06-03 16:48 ` Junio C Hamano
2016-06-03 11:08 ` [PATCH v2 3/3] fetch: reduce duplicate in ref update status lines Nguyễn Thái Ngọc Duy
2016-06-03 14:53 ` Marc Branchaud
2016-06-03 17:04 ` Junio C Hamano
2016-06-03 20:00 ` Marc Branchaud
2016-06-03 20:53 ` Junio C Hamano
2016-06-04 3:11 ` Duy Nguyen
2016-06-04 0:31 ` Duy Nguyen
2016-06-04 16:30 ` Junio C Hamano
2016-06-05 3:15 ` Duy Nguyen
2016-06-03 17:00 ` Junio C Hamano
2016-06-03 23:49 ` Duy Nguyen
2016-06-03 17:06 ` Jeff King
2016-06-03 23:52 ` Duy Nguyen
2016-06-04 4:53 ` Junio C Hamano
2016-06-03 17:00 ` [PATCH v2 0/3] Better ref summary alignment in "git fetch" Jeff King
2016-06-03 17:37 ` Junio C Hamano
2016-06-05 3:11 ` [PATCH v3 0/6] " Nguyễn Thái Ngọc Duy
2016-06-05 3:11 ` [PATCH v3 1/6] git-fetch.txt: document fetch output Nguyễn Thái Ngọc Duy
2016-06-06 14:24 ` Marc Branchaud
2016-06-05 3:11 ` [PATCH v3 2/6] fetch: refactor ref update status formatting code Nguyễn Thái Ngọc Duy
2016-06-05 3:11 ` [PATCH v3 3/6] fetch: change flag code for displaying tag update and deleted ref Nguyễn Thái Ngọc Duy
2016-06-05 3:11 ` [PATCH v3 4/6] fetch: align all "remote -> local" output Nguyễn Thái Ngọc Duy
2016-06-05 3:11 ` [PATCH v3 5/6] fetch: reduce duplicate in ref update status lines with { -> } Nguyễn Thái Ngọc Duy
2016-06-05 3:11 ` [PATCH v3 6/6] fetch: reduce duplicate in ref update status lines with placeholder Nguyễn Thái Ngọc Duy
2016-06-26 5:58 ` [PATCH v4 0/5] Better ref summary alignment in "git fetch" Nguyễn Thái Ngọc Duy
2016-06-26 5:58 ` [PATCH v4 1/5] git-fetch.txt: document fetch output Nguyễn Thái Ngọc Duy
2016-07-04 14:07 ` Jakub Narębski
2016-07-04 15:17 ` Duy Nguyen
2016-07-04 15:25 ` Jakub Narębski
2016-07-04 15:52 ` Duy Nguyen
2016-06-26 5:58 ` [PATCH v4 2/5] fetch: refactor ref update status formatting code Nguyễn Thái Ngọc Duy
2016-06-26 5:58 ` [PATCH v4 3/5] fetch: change flag code for displaying tag update and deleted ref Nguyễn Thái Ngọc Duy
2016-06-26 5:58 ` [PATCH v4 4/5] fetch: align all "remote -> local" output Nguyễn Thái Ngọc Duy
2016-06-26 5:58 ` Nguyễn Thái Ngọc Duy [this message]
2016-06-27 4:33 ` [PATCH v4 5/5] fetch: reduce duplicate in ref update status lines with placeholder Eric Sunshine
2016-06-27 5:42 ` Duy Nguyen
2016-06-27 15:31 ` Junio C Hamano
2016-06-27 18:43 ` [PATCH v4 0/5] Better ref summary alignment in "git fetch" Jeff King
2016-06-27 19:27 ` Duy Nguyen
2016-06-30 16:16 ` Duy Nguyen
2016-07-01 6:09 ` Jeff King
2016-07-01 16:03 ` [PATCH v5 " Nguyễn Thái Ngọc Duy
2016-07-01 16:03 ` [PATCH v5 1/5] git-fetch.txt: document fetch output Nguyễn Thái Ngọc Duy
2016-07-01 16:03 ` [PATCH v5 2/5] fetch: refactor ref update status formatting code Nguyễn Thái Ngọc Duy
2016-07-01 16:03 ` [PATCH v5 3/5] fetch: change flag code for displaying tag update and deleted ref Nguyễn Thái Ngọc Duy
2016-07-01 16:03 ` [PATCH v5 4/5] fetch: align all "remote -> local" output Nguyễn Thái Ngọc Duy
2016-07-01 16:03 ` [PATCH v5 5/5] fetch: reduce duplicate in ref update status lines with placeholder Nguyễn Thái Ngọc Duy
2016-07-01 23:21 ` [PATCH v5 0/5] Better ref summary alignment in "git fetch" Junio C Hamano
2016-07-02 4:39 ` Duy Nguyen
2016-07-04 13:17 ` Marc Branchaud
2016-07-04 15:08 ` Duy Nguyen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160626055810.26960-6-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=marcnarc@xiplink.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.