提交 6315472e 编写于 作者: J Jeff King 提交者: Junio C Hamano

fetch: report local storage errors in status table

Previously, if there was an error while storing a local
tracking ref, the low-level functions would report an error,
but fetch's status output wouldn't indicate any problem.
E.g., imagine you have an old "refs/remotes/origin/foo/bar" but
upstream has deleted "foo/bar" in favor of a new branch
"foo". You would get output like this:

  error: there are still refs under 'refs/remotes/origin/foo'
  From $url_of_repo
   * [new branch]      foo        -> origin/foo

With this patch, the output takes into account the status of
updating the local ref:

  error: there are still refs under 'refs/remotes/origin/foo'
  From $url_of_repo
   ! [new branch]      foo        -> origin/foo  (unable to update local ref)
Signed-off-by: NJeff King <peff@peff.net>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 7ac749c9
...@@ -233,10 +233,12 @@ static int update_local_ref(struct ref *ref, ...@@ -233,10 +233,12 @@ static int update_local_ref(struct ref *ref,
if (!is_null_sha1(ref->old_sha1) && if (!is_null_sha1(ref->old_sha1) &&
!prefixcmp(ref->name, "refs/tags/")) { !prefixcmp(ref->name, "refs/tags/")) {
sprintf(display, "- %-*s %-*s -> %s", int r;
r = s_update_ref("updating tag", ref, 0);
sprintf(display, "%c %-*s %-*s -> %s%s", r ? '!' : '-',
SUMMARY_WIDTH, "[tag update]", REFCOL_WIDTH, remote, SUMMARY_WIDTH, "[tag update]", REFCOL_WIDTH, remote,
pretty_ref); pretty_ref, r ? " (unable to update local ref)" : "");
return s_update_ref("updating tag", ref, 0); return r;
} }
current = lookup_commit_reference_gently(ref->old_sha1, 1); current = lookup_commit_reference_gently(ref->old_sha1, 1);
...@@ -244,6 +246,7 @@ static int update_local_ref(struct ref *ref, ...@@ -244,6 +246,7 @@ static int update_local_ref(struct ref *ref,
if (!current || !updated) { if (!current || !updated) {
const char *msg; const char *msg;
const char *what; const char *what;
int r;
if (!strncmp(ref->name, "refs/tags/", 10)) { if (!strncmp(ref->name, "refs/tags/", 10)) {
msg = "storing tag"; msg = "storing tag";
what = "[new tag]"; what = "[new tag]";
...@@ -253,27 +256,36 @@ static int update_local_ref(struct ref *ref, ...@@ -253,27 +256,36 @@ static int update_local_ref(struct ref *ref,
what = "[new branch]"; what = "[new branch]";
} }
sprintf(display, "* %-*s %-*s -> %s", SUMMARY_WIDTH, what, r = s_update_ref(msg, ref, 0);
REFCOL_WIDTH, remote, pretty_ref); sprintf(display, "%c %-*s %-*s -> %s%s", r ? '!' : '*',
return s_update_ref(msg, ref, 0); SUMMARY_WIDTH, what, REFCOL_WIDTH, remote, pretty_ref,
r ? " (unable to update local ref)" : "");
return r;
} }
if (in_merge_bases(current, &updated, 1)) { if (in_merge_bases(current, &updated, 1)) {
char quickref[83]; char quickref[83];
int r;
strcpy(quickref, find_unique_abbrev(current->object.sha1, DEFAULT_ABBREV)); strcpy(quickref, find_unique_abbrev(current->object.sha1, DEFAULT_ABBREV));
strcat(quickref, ".."); strcat(quickref, "..");
strcat(quickref, find_unique_abbrev(ref->new_sha1, DEFAULT_ABBREV)); strcat(quickref, find_unique_abbrev(ref->new_sha1, DEFAULT_ABBREV));
sprintf(display, " %-*s %-*s -> %s", SUMMARY_WIDTH, quickref, r = s_update_ref("fast forward", ref, 1);
REFCOL_WIDTH, remote, pretty_ref); sprintf(display, "%c %-*s %-*s -> %s%s", r ? '!' : ' ',
return s_update_ref("fast forward", ref, 1); SUMMARY_WIDTH, quickref, REFCOL_WIDTH, remote,
pretty_ref, r ? " (unable to update local ref)" : "");
return r;
} else if (force || ref->force) { } else if (force || ref->force) {
char quickref[84]; char quickref[84];
int r;
strcpy(quickref, find_unique_abbrev(current->object.sha1, DEFAULT_ABBREV)); strcpy(quickref, find_unique_abbrev(current->object.sha1, DEFAULT_ABBREV));
strcat(quickref, "..."); strcat(quickref, "...");
strcat(quickref, find_unique_abbrev(ref->new_sha1, DEFAULT_ABBREV)); strcat(quickref, find_unique_abbrev(ref->new_sha1, DEFAULT_ABBREV));
sprintf(display, "+ %-*s %-*s -> %s (forced update)", r = s_update_ref("forced-update", ref, 1);
SUMMARY_WIDTH, quickref, REFCOL_WIDTH, remote, pretty_ref); sprintf(display, "%c %-*s %-*s -> %s (%s)", r ? '!' : '+',
return s_update_ref("forced-update", ref, 1); SUMMARY_WIDTH, quickref, REFCOL_WIDTH, remote,
pretty_ref,
r ? "unable to update local ref" : "forced update");
return r;
} else { } else {
sprintf(display, "! %-*s %-*s -> %s (non fast forward)", sprintf(display, "! %-*s %-*s -> %s (non fast forward)",
SUMMARY_WIDTH, "[rejected]", REFCOL_WIDTH, remote, SUMMARY_WIDTH, "[rejected]", REFCOL_WIDTH, remote,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册