Patrick Steinhardt <ps@xxxxxx> writes: > @@ -598,30 +598,33 @@ static int s_update_ref(const char *action, > msg = xstrfmt("%s: %s", rla, action); > > transaction = ref_transaction_begin(&err); > - if (!transaction || > - ref_transaction_update(transaction, ref->name, > - &ref->new_oid, > - check_old ? &ref->old_oid : NULL, > - 0, msg, &err)) > - goto fail; > + if (!transaction) { > + ret = STORE_REF_ERROR_OTHER; > + goto out; > + } > + > + ret = ref_transaction_update(transaction, ref->name, &ref->new_oid, > + check_old ? &ref->old_oid : NULL, > + 0, msg, &err); > + if (ret) { > + ret = STORE_REF_ERROR_OTHER; > + goto out; > + } The above certainly got cleaner thanks to Christian's suggestion, but I wonder why transaction = ref_transaction_begin(&err); if (!transaction || ref_transaction_update(transaction, ref->name, &ref->new_oid, check_old ? &ref->old_oid : NULL, 0, msg, &err)) { ret = STORE_REF_ERROR_OTHER; goto out; } shouldn't be sufficient. > ret = ref_transaction_commit(transaction, &err); > if (ret) { > - df_conflict = (ret == TRANSACTION_NAME_CONFLICT); > - goto fail; > + ret = (ret == TRANSACTION_NAME_CONFLICT) ? STORE_REF_ERROR_DF_CONFLICT > + : STORE_REF_ERROR_OTHER; > + goto out; > } > > +out: > ref_transaction_free(transaction); It is a bit funny to see a goto that jumps to the label without having anything else in between, but we know we will be adding more code just before the "out:" label, so it is a good preliminary preparation. I think a variant that is much easier to follow would be to write like this instead: switch (ref_transaction_commit(transaction, &err)) { case 0: /* happy */ break; case TRANSACTION_NAME_CONFLICT: ret = STORE_REF_ERROR_DF_CONFLICT; goto out; default: ret = STORE_REF_ERROR_OTHER; goto out; } > + if (ret) > + error("%s", err.buf); OK. > strbuf_release(&err); > free(msg); > - return 0; > -fail: > - ref_transaction_free(transaction); > - error("%s", err.buf); > - strbuf_release(&err); > - free(msg); > - return df_conflict ? STORE_REF_ERROR_DF_CONFLICT > - : STORE_REF_ERROR_OTHER; > + return ret; > } > > static int refcol_width = 10; THanks.