From: Patrick Steinhardt <ps@pks.im>
To: git@vger.kernel.org
Subject: [PATCH 8/8] fetch: centralize printing of reference updates
Date: Wed, 15 Mar 2023 12:21:36 +0100 [thread overview]
Message-ID: <966730171106703cc378351f16f8b47d3ecb5a2c.1678878623.git.ps@pks.im> (raw)
In-Reply-To: <cover.1678878623.git.ps@pks.im>
[-- Attachment #1: Type: text/plain, Size: 9914 bytes --]
In order to print updated references during a fetch, the two different
call sites that do this will first call `format_display()` followed by a
call to `fputs()`. This is needlessly roundabout now that we have the
`display_state` structure that encapsulates all of the printing logic
for references.
Move displaying the reference updates into `format_display()` and rename
it to `display_ref_update()` to better match its new purpose. We have
now centralized the logic to print reference updates into a single
function, which enables us to more readily introduce new formats that
may even be printing to a different file descriptor than `stderr`.
Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
builtin/fetch.c | 105 ++++++++++++++++++++++++------------------------
1 file changed, 52 insertions(+), 53 deletions(-)
diff --git a/builtin/fetch.c b/builtin/fetch.c
index 31724e9aaf..6e864f8457 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -48,6 +48,8 @@ enum {
};
struct display_state {
+ struct strbuf buf;
+
int refcol_width;
int summary_width;
int compact_format;
@@ -788,6 +790,8 @@ static void display_state_init(struct display_state *display, struct ref *ref_ma
memset(display, 0, sizeof(*display));
+ strbuf_init(&display->buf, 0);
+
if (raw_url)
display->url = transport_anonymize_url(raw_url);
else
@@ -837,14 +841,14 @@ static void display_state_init(struct display_state *display, struct ref *ref_ma
static void display_state_release(struct display_state *display)
{
+ strbuf_release(&display->buf);
free(display->url);
}
static void print_remote_to_local(struct display_state *display,
- struct strbuf *display_buffer,
const char *remote, const char *local)
{
- strbuf_addf(display_buffer, "%-*s -> %s", display->refcol_width, remote, local);
+ strbuf_addf(&display->buf, "%-*s -> %s", display->refcol_width, remote, local);
}
static int find_and_replace(struct strbuf *haystack,
@@ -874,14 +878,14 @@ static int find_and_replace(struct strbuf *haystack,
return 1;
}
-static void print_compact(struct display_state *display, struct strbuf *display_buffer,
+static void print_compact(struct display_state *display,
const char *remote, const char *local)
{
struct strbuf r = STRBUF_INIT;
struct strbuf l = STRBUF_INIT;
if (!strcmp(remote, local)) {
- strbuf_addf(display_buffer, "%-*s -> *", display->refcol_width, remote);
+ strbuf_addf(&display->buf, "%-*s -> *", display->refcol_width, remote);
return;
}
@@ -890,44 +894,46 @@ static void print_compact(struct display_state *display, struct strbuf *display_
if (!find_and_replace(&r, local, "*"))
find_and_replace(&l, remote, "*");
- print_remote_to_local(display, display_buffer, r.buf, l.buf);
+ print_remote_to_local(display, r.buf, l.buf);
strbuf_release(&r);
strbuf_release(&l);
}
-static void format_display(struct display_state *display,
- struct strbuf *display_buffer, char code,
- const char *summary, const char *error,
- const char *remote, const char *local)
+static void display_ref_update(struct display_state *display, char code,
+ const char *summary, const char *error,
+ const char *remote, const char *local)
{
int width;
if (verbosity < 0)
return;
+ strbuf_reset(&display->buf);
+
if (!display->shown_url) {
- strbuf_addf(display_buffer, _("From %.*s\n"), display->url_len, display->url);
+ strbuf_addf(&display->buf, _("From %.*s\n"), display->url_len, display->url);
display->shown_url = 1;
}
width = (display->summary_width + strlen(summary) - gettext_width(summary));
- strbuf_addf(display_buffer, " %c %-*s ", code, width, summary);
+ strbuf_addf(&display->buf, " %c %-*s ", code, width, summary);
if (!display->compact_format)
- print_remote_to_local(display, display_buffer, remote, prettify_refname(local));
+ print_remote_to_local(display, remote, prettify_refname(local));
else
- print_compact(display, display_buffer, remote, prettify_refname(local));
+ print_compact(display, remote, prettify_refname(local));
if (error)
- strbuf_addf(display_buffer, " (%s)", error);
- strbuf_addch(display_buffer, '\n');
+ strbuf_addf(&display->buf, " (%s)", error);
+ strbuf_addch(&display->buf, '\n');
+
+ fputs(display->buf.buf, stderr);
}
static int update_local_ref(struct ref *ref,
struct ref_transaction *transaction,
struct display_state *display,
- const char *remote, const struct ref *remote_ref,
- struct strbuf *display_buffer)
+ const char *remote, const struct ref *remote_ref)
{
struct commit *current = NULL, *updated;
int fast_forward = 0;
@@ -937,8 +943,8 @@ static int update_local_ref(struct ref *ref,
if (oideq(&ref->old_oid, &ref->new_oid)) {
if (verbosity > 0)
- format_display(display, display_buffer, '=', _("[up to date]"), NULL,
- remote, ref->name);
+ display_ref_update(display, '=', _("[up to date]"), NULL,
+ remote, ref->name);
return 0;
}
@@ -949,9 +955,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...
*/
- format_display(display, display_buffer, '!', _("[rejected]"),
- _("can't fetch into checked-out branch"),
- remote, ref->name);
+ display_ref_update(display, '!', _("[rejected]"),
+ _("can't fetch into checked-out branch"),
+ remote, ref->name);
return 1;
}
@@ -960,14 +966,14 @@ static int update_local_ref(struct ref *ref,
if (force || ref->force) {
int r;
r = s_update_ref("updating tag", ref, transaction, 0);
- format_display(display, display_buffer, r ? '!' : 't', _("[tag update]"),
- r ? _("unable to update local ref") : NULL,
- remote, ref->name);
+ display_ref_update(display, r ? '!' : 't', _("[tag update]"),
+ r ? _("unable to update local ref") : NULL,
+ remote, ref->name);
return r;
} else {
- format_display(display, display_buffer, '!', _("[rejected]"),
- _("would clobber existing tag"),
- remote, ref->name);
+ display_ref_update(display, '!', _("[rejected]"),
+ _("would clobber existing tag"),
+ remote, ref->name);
return 1;
}
}
@@ -998,9 +1004,9 @@ static int update_local_ref(struct ref *ref,
}
r = s_update_ref(msg, ref, transaction, 0);
- format_display(display, display_buffer, r ? '!' : '*', what,
- r ? _("unable to update local ref") : NULL,
- remote, ref->name);
+ display_ref_update(display, r ? '!' : '*', what,
+ r ? _("unable to update local ref") : NULL,
+ remote, ref->name);
return r;
}
@@ -1020,9 +1026,9 @@ static int update_local_ref(struct ref *ref,
strbuf_addstr(&quickref, "..");
strbuf_add_unique_abbrev(&quickref, &ref->new_oid, DEFAULT_ABBREV);
r = s_update_ref("fast-forward", ref, transaction, 1);
- format_display(display, display_buffer, r ? '!' : ' ', quickref.buf,
- r ? _("unable to update local ref") : NULL,
- remote, ref->name);
+ display_ref_update(display, r ? '!' : ' ', quickref.buf,
+ r ? _("unable to update local ref") : NULL,
+ remote, ref->name);
strbuf_release(&quickref);
return r;
} else if (force || ref->force) {
@@ -1032,14 +1038,14 @@ static int update_local_ref(struct ref *ref,
strbuf_addstr(&quickref, "...");
strbuf_add_unique_abbrev(&quickref, &ref->new_oid, DEFAULT_ABBREV);
r = s_update_ref("forced-update", ref, transaction, 1);
- format_display(display, display_buffer, r ? '!' : '+', quickref.buf,
- r ? _("unable to update local ref") : _("forced update"),
- remote, ref->name);
+ display_ref_update(display, r ? '!' : '+', quickref.buf,
+ r ? _("unable to update local ref") : _("forced update"),
+ remote, ref->name);
strbuf_release(&quickref);
return r;
} else {
- format_display(display, display_buffer, '!', _("[rejected]"), _("non-fast-forward"),
- remote, ref->name);
+ display_ref_update(display, '!', _("[rejected]"), _("non-fast-forward"),
+ remote, ref->name);
return 1;
}
}
@@ -1261,10 +1267,8 @@ static int store_updated_refs(struct display_state *display,
rm->fetch_head_status,
note.buf, display->url, display->url_len);
- strbuf_reset(¬e);
if (ref) {
- rc |= update_local_ref(ref, transaction, display, what,
- rm, ¬e);
+ rc |= update_local_ref(ref, transaction, display, what, rm);
free(ref);
} else if (write_fetch_head || dry_run) {
/*
@@ -1272,13 +1276,11 @@ static int store_updated_refs(struct display_state *display,
* would be written to FETCH_HEAD, if --dry-run
* is set).
*/
- format_display(display, ¬e, '*',
- *kind ? kind : "branch", NULL,
- *what ? what : "HEAD",
- "FETCH_HEAD");
+ display_ref_update(display, '*',
+ *kind ? kind : "branch", NULL,
+ *what ? what : "HEAD",
+ "FETCH_HEAD");
}
- if (note.len)
- fputs(note.buf, stderr);
}
}
@@ -1412,11 +1414,8 @@ static int prune_refs(struct display_state *display,
if (verbosity >= 0) {
for (ref = stale_refs; ref; ref = ref->next) {
- struct strbuf sb = STRBUF_INIT;
- format_display(display, &sb, '-', _("[deleted]"), NULL,
- _("(none)"), ref->name);
- fputs(sb.buf, stderr);
- strbuf_release(&sb);
+ display_ref_update(display, '-', _("[deleted]"), NULL,
+ _("(none)"), ref->name);
warn_dangling_symref(stderr, dangling_msg, ref->name);
}
}
--
2.40.0
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2023-03-15 11:25 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-15 11:21 [PATCH 0/8] fetch: refactor code that prints reference updates Patrick Steinhardt
2023-03-15 11:21 ` [PATCH 1/8] fetch: rename `display` buffer to avoid name conflict Patrick Steinhardt
2023-03-15 11:21 ` [PATCH 2/8] fetch: move reference width calculation into `display_state` Patrick Steinhardt
2023-03-15 20:59 ` Junio C Hamano
2023-03-16 15:05 ` Patrick Steinhardt
2023-03-16 16:18 ` Junio C Hamano
2023-03-17 10:03 ` Patrick Steinhardt
2023-03-16 16:19 ` Junio C Hamano
2023-03-15 11:21 ` [PATCH 3/8] fetch: move output format " Patrick Steinhardt
2023-03-15 11:21 ` [PATCH 4/8] fetch: pass the full local reference name to `format_display` Patrick Steinhardt
2023-03-15 22:18 ` Junio C Hamano
2023-03-15 11:21 ` [PATCH 5/8] fetch: deduplicate handling of per-reference format Patrick Steinhardt
2023-03-15 22:45 ` Junio C Hamano
2023-03-16 15:06 ` Patrick Steinhardt
2023-03-16 16:50 ` Junio C Hamano
2023-03-17 9:51 ` Patrick Steinhardt
2023-03-17 15:41 ` Junio C Hamano
2023-03-15 11:21 ` [PATCH 6/8] fetch: deduplicate logic to print remote URL Patrick Steinhardt
2023-03-15 23:02 ` Junio C Hamano
2023-03-16 15:06 ` Patrick Steinhardt
2023-03-15 11:21 ` [PATCH 7/8] fetch: fix inconsistent summary width for pruned and updated refs Patrick Steinhardt
2023-03-15 23:12 ` Junio C Hamano
2023-03-16 15:06 ` Patrick Steinhardt
2023-03-16 16:30 ` Junio C Hamano
2023-03-17 9:55 ` Patrick Steinhardt
2023-03-15 11:21 ` Patrick Steinhardt [this message]
2023-03-17 20:24 ` [PATCH 0/8] fetch: refactor code that prints reference updates Jonathan Tan
2023-03-20 6:57 ` Patrick Steinhardt
2023-03-20 12:26 ` Patrick Steinhardt
2023-03-20 12:35 ` [PATCH v2 0/6] " Patrick Steinhardt
2023-03-20 12:35 ` [PATCH v2 1/6] fetch: move reference width calculation into `display_state` Patrick Steinhardt
2023-03-20 12:35 ` [PATCH v2 2/6] fetch: move output format " Patrick Steinhardt
2023-03-20 12:35 ` [PATCH v2 3/6] fetch: pass the full local reference name to `format_display` Patrick Steinhardt
2023-03-20 12:35 ` [PATCH v2 4/6] fetch: centralize handling of per-reference format Patrick Steinhardt
2023-03-20 12:35 ` [PATCH v2 5/6] fetch: centralize logic to print remote URL Patrick Steinhardt
2023-03-20 12:35 ` [PATCH v2 6/6] fetch: centralize printing of reference updates Patrick Steinhardt
2023-03-20 22:57 ` Jonathan Tan
2023-03-22 9:04 ` Patrick Steinhardt
2023-03-29 18:45 ` Junio C Hamano
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=966730171106703cc378351f16f8b47d3ecb5a2c.1678878623.git.ps@pks.im \
--to=ps@pks.im \
--cc=git@vger.kernel.org \
/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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).