All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Eric Sunshine" <sunshine@sunshineco.com>,
	"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 v5 2/5] fetch: refactor ref update status formatting code
Date: Fri,  1 Jul 2016 18:03:28 +0200	[thread overview]
Message-ID: <20160701160331.29252-3-pclouds@gmail.com> (raw)
In-Reply-To: <20160701160331.29252-1-pclouds@gmail.com>

This makes it easier to change the formatting later. And it makes sure
translators cannot mess up format specifiers and break Git.

There are a couple call sites where the length of the second column is
TRANSPORT_SUMMARY_WIDTH instead of calculated by TRANSPORT_SUMMARY(),
which is enforced now. The result should be the same because these call
sites do not contain characters outside ASCII range.

The two strbuf_addf() calls instead of one is mostly to reduce
diff-noise in a future patch where "ref -> ref" is reformatted
differently.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 builtin/fetch.c | 77 ++++++++++++++++++++++++++++-----------------------------
 1 file changed, 38 insertions(+), 39 deletions(-)

diff --git a/builtin/fetch.c b/builtin/fetch.c
index 1582ca7..a7f152a 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -451,6 +451,16 @@ fail:
 
 #define REFCOL_WIDTH  10
 
+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 (error)
+		strbuf_addf(display, "  (%s)", error);
+}
+
 static int update_local_ref(struct ref *ref,
 			    const char *remote,
 			    const struct ref *remote_ref,
@@ -467,9 +477,8 @@ static int update_local_ref(struct ref *ref,
 
 	if (!oidcmp(&ref->old_oid, &ref->new_oid)) {
 		if (verbosity > 0)
-			strbuf_addf(display, "= %-*s %-*s -> %s",
-				    TRANSPORT_SUMMARY(_("[up to date]")),
-				    REFCOL_WIDTH, remote, pretty_ref);
+			format_display(display, '=', _("[up to date]"), NULL,
+				       remote, pretty_ref);
 		return 0;
 	}
 
@@ -481,10 +490,9 @@ static int update_local_ref(struct ref *ref,
 		 * If this is the head, and it's not okay to update
 		 * the head, and the old value of the head isn't empty...
 		 */
-		strbuf_addf(display,
-			    _("! %-*s %-*s -> %s  (can't fetch in current branch)"),
-			    TRANSPORT_SUMMARY(_("[rejected]")),
-			    REFCOL_WIDTH, remote, pretty_ref);
+		format_display(display, '!', _("[rejected]"),
+			       _("can't fetch in current branch"),
+			       remote, pretty_ref);
 		return 1;
 	}
 
@@ -492,11 +500,9 @@ static int update_local_ref(struct ref *ref,
 	    starts_with(ref->name, "refs/tags/")) {
 		int r;
 		r = s_update_ref("updating tag", ref, 0);
-		strbuf_addf(display, "%c %-*s %-*s -> %s%s",
-			    r ? '!' : '-',
-			    TRANSPORT_SUMMARY(_("[tag update]")),
-			    REFCOL_WIDTH, remote, pretty_ref,
-			    r ? _("  (unable to update local ref)") : "");
+		format_display(display, r ? '!' : '-', _("[tag update]"),
+			       r ? _("unable to update local ref") : NULL,
+			       remote, pretty_ref);
 		return r;
 	}
 
@@ -527,11 +533,9 @@ static int update_local_ref(struct ref *ref,
 		    (recurse_submodules != RECURSE_SUBMODULES_ON))
 			check_for_new_submodule_commits(ref->new_oid.hash);
 		r = s_update_ref(msg, ref, 0);
-		strbuf_addf(display, "%c %-*s %-*s -> %s%s",
-			    r ? '!' : '*',
-			    TRANSPORT_SUMMARY(what),
-			    REFCOL_WIDTH, remote, pretty_ref,
-			    r ? _("  (unable to update local ref)") : "");
+		format_display(display, r ? '!' : '*', what,
+			       r ? _("unable to update local ref") : NULL,
+			       remote, pretty_ref);
 		return r;
 	}
 
@@ -545,11 +549,9 @@ static int update_local_ref(struct ref *ref,
 		    (recurse_submodules != RECURSE_SUBMODULES_ON))
 			check_for_new_submodule_commits(ref->new_oid.hash);
 		r = s_update_ref("fast-forward", ref, 1);
-		strbuf_addf(display, "%c %-*s %-*s -> %s%s",
-			    r ? '!' : ' ',
-			    TRANSPORT_SUMMARY_WIDTH, quickref.buf,
-			    REFCOL_WIDTH, remote, pretty_ref,
-			    r ? _("  (unable to update local ref)") : "");
+		format_display(display, r ? '!' : ' ', quickref.buf,
+			       r ? _("unable to update local ref") : NULL,
+			       remote, pretty_ref);
 		strbuf_release(&quickref);
 		return r;
 	} else if (force || ref->force) {
@@ -562,18 +564,14 @@ static int update_local_ref(struct ref *ref,
 		    (recurse_submodules != RECURSE_SUBMODULES_ON))
 			check_for_new_submodule_commits(ref->new_oid.hash);
 		r = s_update_ref("forced-update", ref, 1);
-		strbuf_addf(display, "%c %-*s %-*s -> %s  (%s)",
-			    r ? '!' : '+',
-			    TRANSPORT_SUMMARY_WIDTH, quickref.buf,
-			    REFCOL_WIDTH, remote, pretty_ref,
-			    r ? _("unable to update local ref") : _("forced update"));
+		format_display(display, r ? '!' : '+', quickref.buf,
+			       r ? _("unable to update local ref") : _("forced update"),
+			       remote, pretty_ref);
 		strbuf_release(&quickref);
 		return r;
 	} else {
-		strbuf_addf(display, "! %-*s %-*s -> %s  %s",
-			    TRANSPORT_SUMMARY(_("[rejected]")),
-			    REFCOL_WIDTH, remote, pretty_ref,
-			    _("(non-fast-forward)"));
+		format_display(display, '!', _("[rejected]"), _("non-fast-forward"),
+			       remote, pretty_ref);
 		return 1;
 	}
 }
@@ -714,11 +712,10 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
 				rc |= update_local_ref(ref, what, rm, &note);
 				free(ref);
 			} else
-				strbuf_addf(&note, "* %-*s %-*s -> FETCH_HEAD",
-					    TRANSPORT_SUMMARY_WIDTH,
-					    *kind ? kind : "branch",
-					    REFCOL_WIDTH,
-					    *what ? what : "HEAD");
+				format_display(&note, '*',
+					       *kind ? kind : "branch", NULL,
+					       *what ? what : "HEAD",
+					       "FETCH_HEAD");
 			if (note.len) {
 				if (verbosity >= 0 && !shown_url) {
 					fprintf(stderr, _("From %.*s\n"),
@@ -812,13 +809,15 @@ static int prune_refs(struct refspec *refs, int ref_count, struct ref *ref_map,
 
 	if (verbosity >= 0) {
 		for (ref = stale_refs; ref; ref = ref->next) {
+			struct strbuf sb = STRBUF_INIT;
 			if (!shown_url) {
 				fprintf(stderr, _("From %.*s\n"), url_len, url);
 				shown_url = 1;
 			}
-			fprintf(stderr, " x %-*s %-*s -> %s\n",
-				TRANSPORT_SUMMARY(_("[deleted]")),
-				REFCOL_WIDTH, _("(none)"), prettify_refname(ref->name));
+			format_display(&sb, 'x', _("[deleted]"), NULL,
+				       _("(none)"), prettify_refname(ref->name));
+			fprintf(stderr, " %s\n",sb.buf);
+			strbuf_release(&sb);
 			warn_dangling_symref(stderr, dangling_msg, ref->name);
 		}
 	}
-- 
2.8.2.531.gd073806


  parent reply	other threads:[~2016-07-01 16:03 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       ` [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         ` Nguyễn Thái Ngọc Duy [this message]
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=20160701160331.29252-3-pclouds@gmail.com \
    --to=pclouds@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=marcnarc@xiplink.com \
    --cc=peff@peff.net \
    --cc=sunshine@sunshineco.com \
    /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.