summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin/fetch.c37
-rwxr-xr-xt/t5574-fetch-output.sh47
2 files changed, 66 insertions, 18 deletions
diff --git a/builtin/fetch.c b/builtin/fetch.c
index 71959b2479..2b8d15fb9e 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -920,12 +920,14 @@ static void display_ref_update(struct display_state *display_state, char code,
}
width = (summary_width + strlen(summary) - gettext_width(summary));
+ remote = prettify_refname(remote);
+ local = prettify_refname(local);
strbuf_addf(&display_state->buf, " %c %-*s ", code, width, summary);
if (!display_state->compact_format)
- print_remote_to_local(display_state, remote, prettify_refname(local));
+ print_remote_to_local(display_state, remote, local);
else
- print_compact(display_state, remote, prettify_refname(local));
+ print_compact(display_state, remote, local);
if (error)
strbuf_addf(&display_state->buf, " (%s)", error);
strbuf_addch(&display_state->buf, '\n');
@@ -936,7 +938,7 @@ static void display_ref_update(struct display_state *display_state, char code,
static int update_local_ref(struct ref *ref,
struct ref_transaction *transaction,
struct display_state *display_state,
- const char *remote, const struct ref *remote_ref,
+ const struct ref *remote_ref,
int summary_width)
{
struct commit *current = NULL, *updated;
@@ -948,7 +950,7 @@ static int update_local_ref(struct ref *ref,
if (oideq(&ref->old_oid, &ref->new_oid)) {
if (verbosity > 0)
display_ref_update(display_state, '=', _("[up to date]"), NULL,
- remote, ref->name, summary_width);
+ remote_ref->name, ref->name, summary_width);
return 0;
}
@@ -961,7 +963,7 @@ static int update_local_ref(struct ref *ref,
*/
display_ref_update(display_state, '!', _("[rejected]"),
_("can't fetch into checked-out branch"),
- remote, ref->name, summary_width);
+ remote_ref->name, ref->name, summary_width);
return 1;
}
@@ -972,12 +974,12 @@ static int update_local_ref(struct ref *ref,
r = s_update_ref("updating tag", ref, transaction, 0);
display_ref_update(display_state, r ? '!' : 't', _("[tag update]"),
r ? _("unable to update local ref") : NULL,
- remote, ref->name, summary_width);
+ remote_ref->name, ref->name, summary_width);
return r;
} else {
display_ref_update(display_state, '!', _("[rejected]"),
_("would clobber existing tag"),
- remote, ref->name, summary_width);
+ remote_ref->name, ref->name, summary_width);
return 1;
}
}
@@ -1010,7 +1012,7 @@ static int update_local_ref(struct ref *ref,
r = s_update_ref(msg, ref, transaction, 0);
display_ref_update(display_state, r ? '!' : '*', what,
r ? _("unable to update local ref") : NULL,
- remote, ref->name, summary_width);
+ remote_ref->name, ref->name, summary_width);
return r;
}
@@ -1033,7 +1035,7 @@ static int update_local_ref(struct ref *ref,
r = s_update_ref("fast-forward", ref, transaction, 1);
display_ref_update(display_state, r ? '!' : ' ', quickref.buf,
r ? _("unable to update local ref") : NULL,
- remote, ref->name, summary_width);
+ remote_ref->name, ref->name, summary_width);
strbuf_release(&quickref);
return r;
} else if (force || ref->force) {
@@ -1045,12 +1047,12 @@ static int update_local_ref(struct ref *ref,
r = s_update_ref("forced-update", ref, transaction, 1);
display_ref_update(display_state, r ? '!' : '+', quickref.buf,
r ? _("unable to update local ref") : _("forced update"),
- remote, ref->name, summary_width);
+ remote_ref->name, ref->name, summary_width);
strbuf_release(&quickref);
return r;
} else {
display_ref_update(display_state, '!', _("[rejected]"), _("non-fast-forward"),
- remote, ref->name, summary_width);
+ remote_ref->name, ref->name, summary_width);
return 1;
}
}
@@ -1255,14 +1257,13 @@ static int store_updated_refs(struct display_state *display_state,
if (!strcmp(rm->name, "HEAD")) {
kind = "";
what = "";
- }
- else if (skip_prefix(rm->name, "refs/heads/", &what))
+ } else if (skip_prefix(rm->name, "refs/heads/", &what)) {
kind = "branch";
- else if (skip_prefix(rm->name, "refs/tags/", &what))
+ } else if (skip_prefix(rm->name, "refs/tags/", &what)) {
kind = "tag";
- else if (skip_prefix(rm->name, "refs/remotes/", &what))
+ } else if (skip_prefix(rm->name, "refs/remotes/", &what)) {
kind = "remote-tracking branch";
- else {
+ } else {
kind = "";
what = rm->name;
}
@@ -1280,7 +1281,7 @@ static int store_updated_refs(struct display_state *display_state,
display_state->url_len);
if (ref) {
- rc |= update_local_ref(ref, transaction, display_state, what,
+ rc |= update_local_ref(ref, transaction, display_state,
rm, summary_width);
free(ref);
} else if (write_fetch_head || dry_run) {
@@ -1291,7 +1292,7 @@ static int store_updated_refs(struct display_state *display_state,
*/
display_ref_update(display_state, '*',
*kind ? kind : "branch", NULL,
- *what ? what : "HEAD",
+ rm->name,
"FETCH_HEAD", summary_width);
}
}
diff --git a/t/t5574-fetch-output.sh b/t/t5574-fetch-output.sh
index 8a344e6790..9890f6f381 100755
--- a/t/t5574-fetch-output.sh
+++ b/t/t5574-fetch-output.sh
@@ -61,6 +61,53 @@ test_expect_success 'fetch compact output' '
test_cmp expect actual
'
+test_expect_success 'fetch output with HEAD' '
+ test_when_finished "rm -rf head" &&
+ git clone . head &&
+
+ git -C head fetch --dry-run origin HEAD >actual.out 2>actual.err &&
+ cat >expect <<-EOF &&
+ From $(test-tool path-utils real_path .)/.
+ * branch HEAD -> FETCH_HEAD
+ EOF
+ test_must_be_empty actual.out &&
+ test_cmp expect actual.err &&
+
+ git -C head fetch origin HEAD >actual.out 2>actual.err &&
+ test_must_be_empty actual.out &&
+ test_cmp expect actual.err &&
+
+ git -C head fetch --dry-run origin HEAD:foo >actual.out 2>actual.err &&
+ cat >expect <<-EOF &&
+ From $(test-tool path-utils real_path .)/.
+ * [new ref] HEAD -> foo
+ EOF
+ test_must_be_empty actual.out &&
+ test_cmp expect actual.err &&
+
+ git -C head fetch origin HEAD:foo >actual.out 2>actual.err &&
+ test_must_be_empty actual.out &&
+ test_cmp expect actual.err
+'
+
+test_expect_success 'fetch output with object ID' '
+ test_when_finished "rm -rf object-id" &&
+ git clone . object-id &&
+ commit=$(git rev-parse HEAD) &&
+
+ git -C object-id fetch --dry-run origin $commit:object-id >actual.out 2>actual.err &&
+ cat >expect <<-EOF &&
+ From $(test-tool path-utils real_path .)/.
+ * [new ref] $commit -> object-id
+ EOF
+ test_must_be_empty actual.out &&
+ test_cmp expect actual.err &&
+
+ git -C object-id fetch origin $commit:object-id >actual.out 2>actual.err &&
+ test_must_be_empty actual.out &&
+ test_cmp expect actual.err
+'
+
test_expect_success '--no-show-forced-updates' '
mkdir forced-updates &&
(