Thread (78 messages) 78 messages, 4 authors, 2016-06-15

Re: [PATCH v6 14/42] sequencer.c: use ref transactions for all ref updates

From: Jonathan Nieder <hidden>
Date: 2016-06-15 23:01:10

Ronnie Sahlberg wrote:
quoted hunk ↗ jump to hunk
--- 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))) {
quoted hunk ↗ jump to hunk
+	    (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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help