Re: [PATCH v8 23/44] fetch.c: change s_update_ref to use a ref transaction
- From
Jonathan Nieder <jrnieder@gmail.com>
- Date
- May 16, 2014, 19:12 UTC
- Message-ID
- <20140516191231.GE12314@google.com>
- In-Reply-To
- <1400174999-26786-24-git-send-email-sahlberg@google.com>
(+cc: peff for STORE_REF_ERROR_DF_CONFLICT expertise) Ronnie Sahlberg wrote:
> --- a/builtin/fetch.c > +++ b/builtin/fetch.c > @@ -375,7 +375,7 @@ static int s_update_ref(const char *action,
[...]
Show 9 quoted lines
> + transaction = ref_transaction_begin();
> + if (!transaction ||
> + ref_transaction_update(transaction, ref->name, ref->new_sha1,
> + ref->old_sha1, 0, check_old) ||
> + ref_transaction_commit(transaction, msg, NULL)) {
> + ref_transaction_rollback(transaction);
> return errno == ENOTDIR ? STORE_REF_ERROR_DF_CONFLICT :
> STORE_REF_ERROR_OTHER;
> + }I'd rather not rely on errno here (see the previous patch for why). Is there some other way to distinguish the case where a ref couldn't be created because there was a prefix of that ref in the way?
For example, maybe ref_transaction_commit could return a different negative integer in this case.
Thanks, Jonathan