[PATCH 1/5] refs.c: replace the onerr argument in update_ref with a strbuf err
Get rid of the action_on_err enum and replace the action argument to update_ref with a strbuf *err for error reporting. Update all callers to the new api including two callers in transport*.c which used the literal 0 instead of an enum. Signed-off-by: Ronnie Sahlberg --- builtin/checkout.c | 7 +-- builtin/clone.c | 23 +++ builtin/merge.c | 20 +--- builtin/notes.c | 24 ++-- builtin/reset.c | 12 builtin/update-ref.c | 7 +-- notes-cache.c| 2 +- notes-utils.c| 5 +++-- refs.c | 14 +++--- refs.h | 10 ++ transport-helper.c | 7 ++- transport.c | 9 ++--- 12 files changed, 81 insertions(+), 59 deletions(-) diff --git a/builtin/checkout.c b/builtin/checkout.c index 808c58f..a9ec5be 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -580,6 +580,8 @@ static void update_refs_for_switch(const struct checkout_opts *opts, { struct strbuf msg = STRBUF_INIT; const char *old_desc, *reflog_msg; + struct strbuf err = STRBUF_INIT; + if (opts->new_branch) { if (opts->new_orphan_branch) { if (opts->new_branch_log && !log_all_ref_updates) { @@ -617,8 +619,9 @@ static void update_refs_for_switch(const struct checkout_opts *opts, if (!strcmp(new->name, "HEAD") && !new->path && !opts->force_detach) { /* Nothing to do. */ } else if (opts->force_detach || !new->path) { /* No longer on any branch. */ - update_ref(msg.buf, "HEAD", new->commit->object.sha1, NULL, - REF_NODEREF, UPDATE_REFS_DIE_ON_ERR); + if (update_ref(msg.buf, "HEAD", new->commit->object.sha1, NULL, + REF_NODEREF, &err)) + die("%s", err.buf); if (!opts->quiet) { if (old->path && advice_detached_head) detach_advice(new->name); diff --git a/builtin/clone.c b/builtin/clone.c index 7737e12..99e23cf 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -521,6 +521,7 @@ static void write_remote_refs(const struct ref *local_refs) static void write_followtags(const struct ref *refs, const char *msg) { const struct ref *ref; + struct strbuf err = STRBUF_INIT; for (ref = refs; ref; ref = ref->next) { if (!starts_with(ref->name, "refs/tags/")) continue; @@ -528,8 +529,9 @@ static void write_followtags(const struct ref *refs, const char *msg) continue; if (!has_sha1_file(ref->old_sha1)) continue; - update_ref(msg, ref->name, ref->old_sha1, - NULL, 0, UPDATE_REFS_DIE_ON_ERR); + if (update_ref(msg, ref->name, ref->old_sha1, + NULL, 0, &err)) + die("%s", err.buf); } } @@ -592,28 +594,33 @@ static void update_remote_refs(const struct ref *refs, static void update_head(const struct ref *our, const struct ref *remote, const char *msg) { + struct strbuf err = STRBUF_INIT; + if (our && starts_with(our->name, "refs/heads/")) { /* Local default branch link */ create_symref("HEAD", our->name, NULL); if (!option_bare) { const char *head = skip_prefix(our->name, "refs/heads/"); - update_ref(msg, "HEAD", our->old_sha1, NULL, 0, - UPDATE_REFS_DIE_ON_ERR); + if (update_ref(msg, "HEAD", our->old_sha1, NULL, 0, + &err)) + die("%s", err.buf); install_branch_config(0, head, option_origin, our->name); } } else if (our) { struct commit *c = lookup_commit_reference(our->old_sha1); /* --branch specifies a non-branch (i.e. tags), detach HEAD */ - update_ref(msg, "HEAD", c->object.sha1, - NULL, REF_NODEREF, UPDATE_REFS_DIE_ON_ERR); + if (update_ref(msg, "HEAD", c->object.sha1, + NULL, REF_NODEREF, &err)) + die("%s", err.buf); } else if (remote) { /* * We know remote HEAD points to a non-branch, or * HEAD points to a branch but we don't know which one. * Detach HEAD in all these cases. */ - update_ref(msg, "HEAD", remote->old_sha1, - NULL, REF_NODEREF, UPDATE_REFS_DIE_ON_ERR); + if (update_ref(msg, "HEAD", remote->old_sha1, +NULL, REF_NODEREF, &err)) + die("%s", err.buf);
[PATCH 1/5] refs.c: replace the onerr argument in update_ref with a strbuf err
Signed-off-by: Ronnie Sahlberg --- builtin/checkout.c | 7 +-- builtin/clone.c | 23 +++ builtin/merge.c | 20 +--- builtin/notes.c | 24 ++-- builtin/reset.c | 12 builtin/update-ref.c | 7 +-- notes-cache.c| 2 +- notes-utils.c| 5 +++-- refs.c | 14 +++--- refs.h | 10 ++ transport-helper.c | 7 ++- transport.c | 9 ++--- 12 files changed, 81 insertions(+), 59 deletions(-) diff --git a/builtin/checkout.c b/builtin/checkout.c index 808c58f..a9ec5be 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -580,6 +580,8 @@ static void update_refs_for_switch(const struct checkout_opts *opts, { struct strbuf msg = STRBUF_INIT; const char *old_desc, *reflog_msg; + struct strbuf err = STRBUF_INIT; + if (opts->new_branch) { if (opts->new_orphan_branch) { if (opts->new_branch_log && !log_all_ref_updates) { @@ -617,8 +619,9 @@ static void update_refs_for_switch(const struct checkout_opts *opts, if (!strcmp(new->name, "HEAD") && !new->path && !opts->force_detach) { /* Nothing to do. */ } else if (opts->force_detach || !new->path) { /* No longer on any branch. */ - update_ref(msg.buf, "HEAD", new->commit->object.sha1, NULL, - REF_NODEREF, UPDATE_REFS_DIE_ON_ERR); + if (update_ref(msg.buf, "HEAD", new->commit->object.sha1, NULL, + REF_NODEREF, &err)) + die("%s", err.buf); if (!opts->quiet) { if (old->path && advice_detached_head) detach_advice(new->name); diff --git a/builtin/clone.c b/builtin/clone.c index 7737e12..99e23cf 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -521,6 +521,7 @@ static void write_remote_refs(const struct ref *local_refs) static void write_followtags(const struct ref *refs, const char *msg) { const struct ref *ref; + struct strbuf err = STRBUF_INIT; for (ref = refs; ref; ref = ref->next) { if (!starts_with(ref->name, "refs/tags/")) continue; @@ -528,8 +529,9 @@ static void write_followtags(const struct ref *refs, const char *msg) continue; if (!has_sha1_file(ref->old_sha1)) continue; - update_ref(msg, ref->name, ref->old_sha1, - NULL, 0, UPDATE_REFS_DIE_ON_ERR); + if (update_ref(msg, ref->name, ref->old_sha1, + NULL, 0, &err)) + die("%s", err.buf); } } @@ -592,28 +594,33 @@ static void update_remote_refs(const struct ref *refs, static void update_head(const struct ref *our, const struct ref *remote, const char *msg) { + struct strbuf err = STRBUF_INIT; + if (our && starts_with(our->name, "refs/heads/")) { /* Local default branch link */ create_symref("HEAD", our->name, NULL); if (!option_bare) { const char *head = skip_prefix(our->name, "refs/heads/"); - update_ref(msg, "HEAD", our->old_sha1, NULL, 0, - UPDATE_REFS_DIE_ON_ERR); + if (update_ref(msg, "HEAD", our->old_sha1, NULL, 0, + &err)) + die("%s", err.buf); install_branch_config(0, head, option_origin, our->name); } } else if (our) { struct commit *c = lookup_commit_reference(our->old_sha1); /* --branch specifies a non-branch (i.e. tags), detach HEAD */ - update_ref(msg, "HEAD", c->object.sha1, - NULL, REF_NODEREF, UPDATE_REFS_DIE_ON_ERR); + if (update_ref(msg, "HEAD", c->object.sha1, + NULL, REF_NODEREF, &err)) + die("%s", err.buf); } else if (remote) { /* * We know remote HEAD points to a non-branch, or * HEAD points to a branch but we don't know which one. * Detach HEAD in all these cases. */ - update_ref(msg, "HEAD", remote->old_sha1, - NULL, REF_NODEREF, UPDATE_REFS_DIE_ON_ERR); + if (update_ref(msg, "HEAD", remote->old_sha1, +NULL, REF_NODEREF, &err)) + die("%s", err.buf); } } diff --git a/builtin/merge.c b/builtin/merge.c index 428ca24..17dda64 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -396,9 +396,11 @@ static void finish(struct commit *head_commit, printf(_("No merge