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>,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH v2 3/3] fetch: reduce duplicate in ref update status lines
Date: Fri, 3 Jun 2016 18:08:43 +0700 [thread overview]
Message-ID: <20160603110843.15434-4-pclouds@gmail.com> (raw)
In-Reply-To: <20160603110843.15434-1-pclouds@gmail.com>
When there are lots of ref updates, each has different name length, this
will make it easier to look because the variable part is at the end.
---
Documentation/git-fetch.txt | 7 +++++++
builtin/fetch.c | 37 ++++++++++++++++++++++++++++++++++++-
t/t5510-fetch.sh | 4 ++--
t/t5526-fetch-submodules.sh | 26 +++++++++++++-------------
4 files changed, 58 insertions(+), 16 deletions(-)
diff --git a/Documentation/git-fetch.txt b/Documentation/git-fetch.txt
index 18e733c..61c3bd1 100644
--- a/Documentation/git-fetch.txt
+++ b/Documentation/git-fetch.txt
@@ -113,6 +113,13 @@ representing the status of a single ref. Each line is of the form:
<flag> <summary> <from> -> <to> (<reason>)
-------------------------------
+When `from` and `to` share a common suffix, the line could be
+displayed in the form:
+
+-------------------------------
+ <flag> <summary> {<from> -> <to>}<suffix> (<reason>)
+-------------------------------
+
The status of up-to-date refs is shown only if --verbose option is
used.
diff --git a/builtin/fetch.c b/builtin/fetch.c
index a7f152a..15782d6 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -451,12 +451,47 @@ fail:
#define REFCOL_WIDTH 10
+static int common_suffix_length(const char *a, const char *b)
+{
+ const char *pa = a + strlen(a);
+ const char *pb = b + strlen(b);
+ int count = 0;
+
+ while (pa > a && pb > b && pa[-1] == pb[-1]) {
+ pa--;
+ pb--;
+ count++;
+ }
+
+ /* stick to '/' boundary, do not break in the middle of a word */
+ while (count) {
+ if (*pa == '/' ||
+ (pa == a && pb > b && pb[-1] == '/') ||
+ (pb == b && pa > a && pa[-1] == '/'))
+ break;
+ pa++;
+ pb++;
+ count--;
+ }
+
+ return count;
+}
+
static void format_display(struct strbuf *display, char code,
const char *summary, const char *error,
const char *remote, const char *local)
{
+ int len;
+
strbuf_addf(display, "%c %-*s ", code, TRANSPORT_SUMMARY(summary));
- strbuf_addf(display, "%-*s -> %s", REFCOL_WIDTH, remote, local);
+ len = common_suffix_length(remote, local);
+ if (len)
+ strbuf_addf(display, "{%.*s -> %.*s}%s",
+ (int)strlen(remote) - len, remote,
+ (int)strlen(local) - len, local,
+ remote + strlen(remote) - len);
+ else
+ strbuf_addf(display, "%-*s -> %s", REFCOL_WIDTH, remote, local);
if (error)
strbuf_addf(display, " (%s)", error);
}
diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh
index 454d896..9a7649c 100755
--- a/t/t5510-fetch.sh
+++ b/t/t5510-fetch.sh
@@ -222,11 +222,11 @@ test_expect_success 'fetch uses remote ref names to describe new refs' '
(
cd descriptive &&
git fetch o 2>actual &&
- grep " -> refs/crazyheads/descriptive-branch$" actual |
+ grep " -> refs/crazyheads/.descriptive-branch$" actual |
test_i18ngrep "new branch" &&
grep " -> descriptive-tag$" actual |
test_i18ngrep "new tag" &&
- grep " -> crazy$" actual |
+ grep " -> .crazy$" actual |
test_i18ngrep "new ref"
) &&
git checkout master
diff --git a/t/t5526-fetch-submodules.sh b/t/t5526-fetch-submodules.sh
index 954d0e4..2285c47 100755
--- a/t/t5526-fetch-submodules.sh
+++ b/t/t5526-fetch-submodules.sh
@@ -18,7 +18,7 @@ add_upstream_commit() {
head2=$(git rev-parse --short HEAD) &&
echo "Fetching submodule submodule" > ../expect.err &&
echo "From $pwd/submodule" >> ../expect.err &&
- echo " $head1..$head2 master -> origin/master" >> ../expect.err
+ echo " $head1..$head2 { -> origin/}master" >> ../expect.err
) &&
(
cd deepsubmodule &&
@@ -30,7 +30,7 @@ add_upstream_commit() {
head2=$(git rev-parse --short HEAD) &&
echo "Fetching submodule submodule/subdir/deepsubmodule" >> ../expect.err
echo "From $pwd/deepsubmodule" >> ../expect.err &&
- echo " $head1..$head2 master -> origin/master" >> ../expect.err
+ echo " $head1..$head2 { -> origin/}master" >> ../expect.err
)
}
@@ -235,7 +235,7 @@ test_expect_success "Recursion stops when no new submodule commits are fetched"
git commit -m "new submodule" &&
head2=$(git rev-parse --short HEAD) &&
echo "From $pwd/." > expect.err.sub &&
- echo " $head1..$head2 master -> origin/master" >>expect.err.sub &&
+ echo " $head1..$head2 { -> origin/}master" >>expect.err.sub &&
head -3 expect.err >> expect.err.sub &&
(
cd downstream &&
@@ -253,7 +253,7 @@ test_expect_success "Recursion doesn't happen when new superproject commits don'
git commit -m "new file" &&
head2=$(git rev-parse --short HEAD) &&
echo "From $pwd/." > expect.err.file &&
- echo " $head1..$head2 master -> origin/master" >> expect.err.file &&
+ echo " $head1..$head2 { -> origin/}master" >> expect.err.file &&
(
cd downstream &&
git fetch >../actual.out 2>../actual.err
@@ -277,7 +277,7 @@ test_expect_success "Recursion picks up config in submodule" '
git commit -m "new submodule" &&
head2=$(git rev-parse --short HEAD) &&
echo "From $pwd/." > expect.err.sub &&
- echo " $head1..$head2 master -> origin/master" >> expect.err.sub &&
+ echo " $head1..$head2 { -> origin/}master" >> expect.err.sub &&
cat expect.err >> expect.err.sub &&
(
cd downstream &&
@@ -306,14 +306,14 @@ test_expect_success "Recursion picks up all submodules when necessary" '
head2=$(git rev-parse --short HEAD) &&
echo "Fetching submodule submodule" > ../expect.err.sub &&
echo "From $pwd/submodule" >> ../expect.err.sub &&
- echo " $head1..$head2 master -> origin/master" >> ../expect.err.sub
+ echo " $head1..$head2 { -> origin/}master" >> ../expect.err.sub
) &&
head1=$(git rev-parse --short HEAD) &&
git add submodule &&
git commit -m "new submodule" &&
head2=$(git rev-parse --short HEAD) &&
echo "From $pwd/." > expect.err.2 &&
- echo " $head1..$head2 master -> origin/master" >> expect.err.2 &&
+ echo " $head1..$head2 { -> origin/}master" >> expect.err.2 &&
cat expect.err.sub >> expect.err.2 &&
tail -3 expect.err >> expect.err.2 &&
(
@@ -339,7 +339,7 @@ test_expect_success "'--recurse-submodules=on-demand' doesn't recurse when no ne
head2=$(git rev-parse --short HEAD) &&
echo Fetching submodule submodule > ../expect.err.sub &&
echo "From $pwd/submodule" >> ../expect.err.sub &&
- echo " $head1..$head2 master -> origin/master" >> ../expect.err.sub
+ echo " $head1..$head2 { -> origin/}master" >> ../expect.err.sub
) &&
(
cd downstream &&
@@ -358,7 +358,7 @@ test_expect_success "'--recurse-submodules=on-demand' recurses as deep as necess
head2=$(git rev-parse --short HEAD) &&
tail -3 expect.err > expect.err.deepsub &&
echo "From $pwd/." > expect.err &&
- echo " $head1..$head2 master -> origin/master" >>expect.err &&
+ echo " $head1..$head2 { -> origin/}master" >>expect.err &&
cat expect.err.sub >> expect.err &&
cat expect.err.deepsub >> expect.err &&
(
@@ -387,7 +387,7 @@ test_expect_success "'--recurse-submodules=on-demand' stops when no new submodul
git commit -m "new file" &&
head2=$(git rev-parse --short HEAD) &&
echo "From $pwd/." > expect.err.file &&
- echo " $head1..$head2 master -> origin/master" >> expect.err.file &&
+ echo " $head1..$head2 { -> origin/}master" >> expect.err.file &&
(
cd downstream &&
git fetch --recurse-submodules=on-demand >../actual.out 2>../actual.err
@@ -408,7 +408,7 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' overrides global config
git commit -m "new submodule" &&
head2=$(git rev-parse --short HEAD) &&
echo "From $pwd/." > expect.err.2 &&
- echo " $head1..$head2 master -> origin/master" >>expect.err.2 &&
+ echo " $head1..$head2 { -> origin/}master" >>expect.err.2 &&
head -3 expect.err >> expect.err.2 &&
(
cd downstream &&
@@ -436,7 +436,7 @@ test_expect_success "'submodule.<sub>.fetchRecurseSubmodules=on-demand' override
git commit -m "new submodule" &&
head2=$(git rev-parse --short HEAD) &&
echo "From $pwd/." > expect.err.2 &&
- echo " $head1..$head2 master -> origin/master" >>expect.err.2 &&
+ echo " $head1..$head2 { -> origin/}master" >>expect.err.2 &&
head -3 expect.err >> expect.err.2 &&
(
cd downstream &&
@@ -462,7 +462,7 @@ test_expect_success "don't fetch submodule when newly recorded commits are alrea
git commit -m "submodule rewound" &&
head2=$(git rev-parse --short HEAD) &&
echo "From $pwd/." > expect.err &&
- echo " $head1..$head2 master -> origin/master" >> expect.err &&
+ echo " $head1..$head2 { -> origin/}master" >> expect.err &&
(
cd downstream &&
git fetch >../actual.out 2>../actual.err
--
2.8.2.524.g6ff3d78
next prev parent reply other threads:[~2016-06-03 11:09 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 ` Nguyễn Thái Ngọc Duy [this message]
2016-06-03 14:53 ` [PATCH v2 3/3] fetch: reduce duplicate in ref update status lines 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 ` [PATCH v4 5/5] fetch: reduce duplicate in ref update status lines with placeholder Nguyễn Thái Ngọc Duy
2016-06-27 4:33 ` 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=20160603110843.15434-4-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.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.