aboutsummaryrefslogtreecommitdiffstats
path: root/sequencer.c
diff options
context:
space:
mode:
Diffstat (limited to 'sequencer.c')
-rw-r--r--sequencer.c40
1 files changed, 34 insertions, 6 deletions
diff --git a/sequencer.c b/sequencer.c
index f85aa6b1f7..5f22b7cd37 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -4286,26 +4286,54 @@ static int do_update_ref(struct repository *r, const char *refname)
return 0;
}
-static int do_update_refs(struct repository *r)
+static int do_update_refs(struct repository *r, int quiet)
{
int res = 0;
struct string_list_item *item;
struct string_list refs_to_oids = STRING_LIST_INIT_DUP;
struct ref_store *refs = get_main_ref_store(r);
+ struct strbuf update_msg = STRBUF_INIT;
+ struct strbuf error_msg = STRBUF_INIT;
if ((res = sequencer_get_update_refs_state(r->gitdir, &refs_to_oids)))
return res;
for_each_string_list_item(item, &refs_to_oids) {
struct update_ref_record *rec = item->util;
+ int loop_res;
- res |= refs_update_ref(refs, "rewritten during rebase",
- item->string,
- &rec->after, &rec->before,
- 0, UPDATE_REFS_MSG_ON_ERR);
+ loop_res = refs_update_ref(refs, "rewritten during rebase",
+ item->string,
+ &rec->after, &rec->before,
+ 0, UPDATE_REFS_MSG_ON_ERR);
+ res |= loop_res;
+
+ if (quiet)
+ continue;
+
+ if (loop_res)
+ strbuf_addf(&error_msg, "\t%s\n", item->string);
+ else
+ strbuf_addf(&update_msg, "\t%s\n", item->string);
+ }
+
+ if (!quiet &&
+ (update_msg.len || error_msg.len)) {
+ fprintf(stderr,
+ _("Updated the following refs with %s:\n%s"),
+ "--update-refs",
+ update_msg.buf);
+
+ if (res)
+ fprintf(stderr,
+ _("Failed to update the following refs with %s:\n%s"),
+ "--update-refs",
+ error_msg.buf);
}
string_list_clear(&refs_to_oids, 1);
+ strbuf_release(&update_msg);
+ strbuf_release(&error_msg);
return res;
}
@@ -4826,7 +4854,7 @@ cleanup_head_ref:
strbuf_release(&buf);
strbuf_release(&head_ref);
- if (do_update_refs(r))
+ if (do_update_refs(r, opts->quiet))
return -1;
}