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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html