提交 995f8746 编写于 作者: R Ronnie Sahlberg 提交者: Junio C Hamano

refs.c: add a strbuf argument to ref_transaction_commit for error logging

Add a strbuf argument to _commit so that we can pass an error string back to
the caller. So that we can do error logging from the caller instead of from
_commit.

Longer term plan is to first convert all callers to use onerr==QUIET_ON_ERR
and craft any log messages from the callers themselves and finally remove the
onerr argument completely.
Reviewed-by: NJonathan Nieder <jrnieder@gmail.com>
Signed-off-by: NRonnie Sahlberg <sahlberg@google.com>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
Acked-by: NMichael Haggerty <mhagger@alum.mit.edu>
上级 1b07255c
...@@ -367,7 +367,7 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix) ...@@ -367,7 +367,7 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix)
if (end_null) if (end_null)
line_termination = '\0'; line_termination = '\0';
update_refs_stdin(); update_refs_stdin();
ret = ref_transaction_commit(transaction, msg, ret = ref_transaction_commit(transaction, msg, NULL,
UPDATE_REFS_DIE_ON_ERR); UPDATE_REFS_DIE_ON_ERR);
ref_transaction_free(transaction); ref_transaction_free(transaction);
return ret; return ret;
......
...@@ -3444,7 +3444,8 @@ static int ref_update_reject_duplicates(struct ref_update **updates, int n, ...@@ -3444,7 +3444,8 @@ static int ref_update_reject_duplicates(struct ref_update **updates, int n,
} }
int ref_transaction_commit(struct ref_transaction *transaction, int ref_transaction_commit(struct ref_transaction *transaction,
const char *msg, enum action_on_err onerr) const char *msg, struct strbuf *err,
enum action_on_err onerr)
{ {
int ret = 0, delnum = 0, i; int ret = 0, delnum = 0, i;
const char **delnames; const char **delnames;
...@@ -3473,6 +3474,9 @@ int ref_transaction_commit(struct ref_transaction *transaction, ...@@ -3473,6 +3474,9 @@ int ref_transaction_commit(struct ref_transaction *transaction,
update->flags, update->flags,
&update->type, onerr); &update->type, onerr);
if (!update->lock) { if (!update->lock) {
if (err)
strbuf_addf(err, "Cannot lock the ref '%s'.",
update->refname);
ret = 1; ret = 1;
goto cleanup; goto cleanup;
} }
......
...@@ -269,9 +269,12 @@ void ref_transaction_delete(struct ref_transaction *transaction, ...@@ -269,9 +269,12 @@ void ref_transaction_delete(struct ref_transaction *transaction,
* Commit all of the changes that have been queued in transaction, as * Commit all of the changes that have been queued in transaction, as
* atomically as possible. Return a nonzero value if there is a * atomically as possible. Return a nonzero value if there is a
* problem. * problem.
* If err is non-NULL we will add an error string to it to explain why
* the transaction failed. The string does not end in newline.
*/ */
int ref_transaction_commit(struct ref_transaction *transaction, int ref_transaction_commit(struct ref_transaction *transaction,
const char *msg, enum action_on_err onerr); const char *msg, struct strbuf *err,
enum action_on_err onerr);
/* /*
* Free an existing transaction and all associated data. * Free an existing transaction and all associated data.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册