From: Tom Miller <jackerran@gmail.com>
To: git@vger.kernel.org
Cc: Tom Miller <jackerran@gmail.com>
Subject: [PATCH 1/3] builtin/fetch.c: Add pretty_url() and print_url()
Date: Wed, 18 Dec 2013 15:22:54 -0600 [thread overview]
Message-ID: <1387401776-30994-1-git-send-email-jackerran@gmail.com> (raw)
In order to fix branchname DF conflicts during `fetch --prune`, the way
the header is output to the screen needs to be refactored. Here is an
exmaple of the output with the line in question denoted by '>':
$ git fetch --prune --dry-run upstream
> From https://github.com/git/git
a155a5f..5512ac5 maint -> upstream/maint
d7aced9..7794a68 master -> upstream/master
523f7c4..3e57c29 next -> upstream/next
+ 462f102...0937cdf pu -> upstream/pu (forced update)
e24105a..5d352bc todo -> upstream/todo
* [new tag] v1.8.5.2 -> v1.8.5.2
* [new tag] v1.8.5.2 -> v1.8.5.2
pretty_url():
This function when passed a transport url will anonymize the transport
of the url. It will strip a trailing '/'. It will also strip a trailing
'.git'. It will return the newly formated url for use. I do not believe
there is a need for stripping the trailing '/' and '.git' from a url,
but it was already there and I wanted to make as little changes as
possible.
print_url():
This function will convert a transport url to a pretty url using
pretty_url(). Then it will print out the pretty url to stderr as
indicated above in the example output. It uses a global variable
named "gshown_url' to prevent this header for being printed twice.
Signed-off-by: Tom Miller <jackerran@gmail.com>
---
builtin/fetch.c | 60 ++++++++++++++++++++++++++++++++++++++++-----------------
1 file changed, 42 insertions(+), 18 deletions(-)
diff --git a/builtin/fetch.c b/builtin/fetch.c
index 3d978eb..b3145f6 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -44,6 +44,42 @@ static struct transport *gtransport;
static struct transport *gsecondary;
static const char *submodule_prefix = "";
static const char *recurse_submodules_default;
+static int gshown_url = 0;
+
+static char *pretty_url(const char *raw_url) {
+ if (raw_url) {
+ int url_len, i;
+ char *pretty_url, *url;
+
+ url = transport_anonymize_url(raw_url);
+
+ url_len = strlen(url);
+ for (i = url_len - 1; url[i] == '/' && 0 <= i; i--)
+ ;
+ url_len = i + 1;
+ if (4 < i && !strncmp(".git", url + i - 3, 4))
+ url_len = i - 3;
+
+ pretty_url = xcalloc(1, 1 + url_len);
+ memcpy(pretty_url, url, url_len);
+
+ free(url);
+ return pretty_url;
+ }
+ return xstrdup("foreign");
+}
+
+static void print_url(const char *raw_url) {
+ if (!gshown_url) {
+ char *url = pretty_url(raw_url);
+
+ fprintf(stderr, _("From %s\n"), url);
+
+ gshown_url = 1;
+ free(url);
+ }
+}
+
static int option_parse_recurse_submodules(const struct option *opt,
const char *arg, int unset)
@@ -535,7 +571,7 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
{
FILE *fp;
struct commit *commit;
- int url_len, i, shown_url = 0, rc = 0;
+ int url_len, i, rc = 0;
struct strbuf note = STRBUF_INIT;
const char *what, *kind;
struct ref *rm;
@@ -546,10 +582,8 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
if (!fp)
return error(_("cannot open %s: %s\n"), filename, strerror(errno));
- if (raw_url)
- url = transport_anonymize_url(raw_url);
- else
- url = xstrdup("foreign");
+ url = pretty_url(raw_url);
+ url_len = strlen(url);
rm = ref_map;
if (check_everything_connected(iterate_ref_map, 0, &rm)) {
@@ -606,13 +640,6 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
what = rm->name;
}
- url_len = strlen(url);
- for (i = url_len - 1; url[i] == '/' && 0 <= i; i--)
- ;
- url_len = i + 1;
- if (4 < i && !strncmp(".git", url + i - 3, 4))
- url_len = i - 3;
-
strbuf_reset(¬e);
if (*what) {
if (*kind)
@@ -651,13 +678,10 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
REFCOL_WIDTH,
*what ? what : "HEAD");
if (note.len) {
- if (verbosity >= 0 && !shown_url) {
- fprintf(stderr, _("From %.*s\n"),
- url_len, url);
- shown_url = 1;
- }
- if (verbosity >= 0)
+ if (verbosity >= 0) {
+ print_url(raw_url);
fprintf(stderr, " %s\n", note.buf);
+ }
}
}
}
--
1.8.5.1.163.gd7aced9
next reply other threads:[~2013-12-18 21:23 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-18 21:22 Tom Miller [this message]
2013-12-18 21:22 ` [PATCH 2/3] fetch --prune: Always print header url Tom Miller
2013-12-18 21:22 ` [PATCH 3/3] fetch --prune: Repair branchname DF conflicts Tom Miller
2013-12-18 21:54 ` Junio C Hamano
2013-12-19 1:48 ` Tom Miller
2013-12-19 6:28 ` Junio C Hamano
2013-12-19 11:44 ` Jeff King
2013-12-19 19:34 ` Junio C Hamano
2013-12-18 21:47 ` [PATCH 1/3] builtin/fetch.c: Add pretty_url() and print_url() Junio C Hamano
2013-12-19 1:18 ` Tom Miller
2013-12-19 17:41 ` Thomas Miller
2013-12-19 22:57 ` [PATCH V2 1/2] fetch --prune: Always print header url Tom Miller
2013-12-19 22:57 ` [PATCH V2 2/2] fetch --prune: Run prune before fetching Tom Miller
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=1387401776-30994-1-git-send-email-jackerran@gmail.com \
--to=jackerran@gmail.com \
--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.
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 NNTP newsgroup(s).