refs.c: do not permit err == NULL
Some functions that take a strbuf argument to append an error treat !err as an indication that the message should be suppressed (e.g., ref_update_reject_duplicates). Others write the message to stderr on !err (e.g., repack_without_refs). Others crash (e.g., ref_transaction_update). Some of these behaviors are for historical reasons and others were accidents. Luckily no callers pass err == NULL any more. Simplify by consistently requiring the strbuf argument. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Reviewed-by: Ronnie Sahlberg <sahlberg@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
2ebb49ca8a
commit
5a603b0463
36
refs.c
36
refs.c
@ -2646,6 +2646,8 @@ int repack_without_refs(const char **refnames, int n, struct strbuf *err)
|
||||
struct string_list_item *ref_to_delete;
|
||||
int i, ret, removed = 0;
|
||||
|
||||
assert(err);
|
||||
|
||||
/* Look for a packed ref */
|
||||
for (i = 0; i < n; i++)
|
||||
if (get_packed_ref(refnames[i]))
|
||||
@ -2656,14 +2658,9 @@ int repack_without_refs(const char **refnames, int n, struct strbuf *err)
|
||||
return 0; /* no refname exists in packed refs */
|
||||
|
||||
if (lock_packed_refs(0)) {
|
||||
if (err) {
|
||||
unable_to_lock_message(git_path("packed-refs"), errno,
|
||||
err);
|
||||
unable_to_lock_message(git_path("packed-refs"), errno, err);
|
||||
return -1;
|
||||
}
|
||||
unable_to_lock_error(git_path("packed-refs"), errno);
|
||||
return error("cannot delete '%s' from packed refs", refnames[i]);
|
||||
}
|
||||
packed = get_packed_refs(&ref_cache);
|
||||
|
||||
/* Remove refnames from the cache */
|
||||
@ -2688,7 +2685,7 @@ int repack_without_refs(const char **refnames, int n, struct strbuf *err)
|
||||
|
||||
/* Write what remains */
|
||||
ret = commit_packed_refs();
|
||||
if (ret && err)
|
||||
if (ret)
|
||||
strbuf_addf(err, "unable to overwrite old ref-pack file: %s",
|
||||
strerror(errno));
|
||||
return ret;
|
||||
@ -2696,6 +2693,8 @@ int repack_without_refs(const char **refnames, int n, struct strbuf *err)
|
||||
|
||||
static int delete_ref_loose(struct ref_lock *lock, int flag, struct strbuf *err)
|
||||
{
|
||||
assert(err);
|
||||
|
||||
if (!(flag & REF_ISPACKED) || flag & REF_ISSYMREF) {
|
||||
/*
|
||||
* loose. The loose file name is the same as the
|
||||
@ -3551,6 +3550,8 @@ struct ref_transaction {
|
||||
|
||||
struct ref_transaction *ref_transaction_begin(struct strbuf *err)
|
||||
{
|
||||
assert(err);
|
||||
|
||||
return xcalloc(1, sizeof(struct ref_transaction));
|
||||
}
|
||||
|
||||
@ -3590,6 +3591,8 @@ int ref_transaction_update(struct ref_transaction *transaction,
|
||||
{
|
||||
struct ref_update *update;
|
||||
|
||||
assert(err);
|
||||
|
||||
if (transaction->state != REF_TRANSACTION_OPEN)
|
||||
die("BUG: update called for transaction that is not open");
|
||||
|
||||
@ -3622,6 +3625,8 @@ int ref_transaction_create(struct ref_transaction *transaction,
|
||||
{
|
||||
struct ref_update *update;
|
||||
|
||||
assert(err);
|
||||
|
||||
if (transaction->state != REF_TRANSACTION_OPEN)
|
||||
die("BUG: create called for transaction that is not open");
|
||||
|
||||
@ -3653,6 +3658,8 @@ int ref_transaction_delete(struct ref_transaction *transaction,
|
||||
{
|
||||
struct ref_update *update;
|
||||
|
||||
assert(err);
|
||||
|
||||
if (transaction->state != REF_TRANSACTION_OPEN)
|
||||
die("BUG: delete called for transaction that is not open");
|
||||
|
||||
@ -3715,13 +3722,14 @@ static int ref_update_reject_duplicates(struct ref_update **updates, int n,
|
||||
struct strbuf *err)
|
||||
{
|
||||
int i;
|
||||
|
||||
assert(err);
|
||||
|
||||
for (i = 1; i < n; i++)
|
||||
if (!strcmp(updates[i - 1]->refname, updates[i]->refname)) {
|
||||
const char *str =
|
||||
"Multiple updates for ref '%s' not allowed.";
|
||||
if (err)
|
||||
strbuf_addf(err, str, updates[i]->refname);
|
||||
|
||||
strbuf_addf(err,
|
||||
"Multiple updates for ref '%s' not allowed.",
|
||||
updates[i]->refname);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
@ -3735,6 +3743,8 @@ int ref_transaction_commit(struct ref_transaction *transaction,
|
||||
int n = transaction->nr;
|
||||
struct ref_update **updates = transaction->updates;
|
||||
|
||||
assert(err);
|
||||
|
||||
if (transaction->state != REF_TRANSACTION_OPEN)
|
||||
die("BUG: commit called for transaction that is not open");
|
||||
|
||||
@ -3771,7 +3781,6 @@ int ref_transaction_commit(struct ref_transaction *transaction,
|
||||
ret = (errno == ENOTDIR)
|
||||
? TRANSACTION_NAME_CONFLICT
|
||||
: TRANSACTION_GENERIC_ERROR;
|
||||
if (err)
|
||||
strbuf_addf(err, "Cannot lock the ref '%s'.",
|
||||
update->refname);
|
||||
goto cleanup;
|
||||
@ -3786,7 +3795,6 @@ int ref_transaction_commit(struct ref_transaction *transaction,
|
||||
if (write_ref_sha1(update->lock, update->new_sha1,
|
||||
update->msg)) {
|
||||
update->lock = NULL; /* freed by write_ref_sha1 */
|
||||
if (err)
|
||||
strbuf_addf(err, "Cannot update the ref '%s'.",
|
||||
update->refname);
|
||||
ret = TRANSACTION_GENERIC_ERROR;
|
||||
|
Loading…
Reference in New Issue
Block a user