Ronnie Sahlberg wrote: > --- a/sequencer.c > +++ b/sequencer.c > @@ -272,23 +272,31 @@ static int error_dirty_index(struct replay_opts *opts) > static int fast_forward_to(const unsigned char *to, const unsigned char *from, > int unborn, struct replay_opts *opts) > { > - struct ref_lock *ref_lock; > + struct ref_transaction *transaction; > struct strbuf sb = STRBUF_INIT; > - int ret; > + struct strbuf err = STRBUF_INIT; > > read_cache(); > if (checkout_fast_forward(from, to, 1)) > exit(1); /* the callee should have complained already */ > - ref_lock = lock_any_ref_for_update("HEAD", unborn ? null_sha1 : from, > - 0, NULL); > - if (!ref_lock) > - return error(_("Failed to lock HEAD during fast_forward_to")); > > strbuf_addf(&sb, "%s: fast-forward", action_name(opts)); > - ret = write_ref_sha1(ref_lock, to, sb.buf); > + > + transaction = ref_transaction_begin(); > + if ((!transaction || > + ref_transaction_update(transaction, "HEAD", to, from, > + 0, !unborn)) || These parentheses make it harder to parse. Other patches in this series do if (!transaction || ref_transaction_update(...) || ref_transaction_commit(...)) { so this could do if (!transaction || ref_transaction_update(...) || (ref_transaction_commit(...) && !(transaction = NULL))) { > + (ref_transaction_commit(transaction, sb.buf, &err) && > + !(transaction = NULL))) { > + ref_transaction_rollback(transaction); Earlier patches in the series didn't bother rolling back. Should they have? Thanks, Jonathan -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html