git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3 14/19] sequencer.c: use ref transactions for all ref updates

From
Ronnie Sahlberg <sahlberg@google.com>
Date
Apr 25, 2014, 16:14 UTC
Message-ID
<1398442494-23438-15-git-send-email-sahlberg@google.com>
In-Reply-To
<1398442494-23438-1-git-send-email-sahlberg@google.com>
Change to use ref transactions for all updates to refs.
Signed-off-by: Ronnie Sahlberg <sahlberg@google.com>
---
 sequencer.c | 22 ++++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/sequencer.c b/sequencer.c
index bde5f04..7d59f58 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -272,19 +272,29 @@ 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;
+	char *err = NULL;
 
 	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);
+
 	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)) ||
+	    (ref_transaction_commit(transaction, sb.buf, &err) &&
+	     !(transaction = NULL))) {
+		ref_transaction_rollback(transaction);
+		strbuf_release(&sb);
+		return error(_("HEAD: Could not fast-forward: %s\n"), err);
+	}
+
 	strbuf_release(&sb);
-	return ret;
+	return 0;
 }
 
 static int do_recursive_merge(struct commit *base, struct commit *next,
-- 
1.9.1.521.g5dc89fa
Previous: Ronnie SahlbergNext: Ronnie Sahlberg
Message 29 of 48 in “Use ref transactions from most callers”
  1. 00/19 Use ref transactions from most callersRonnie Sahlberg, Apr 25, 2014
  2. 01/19 refs.c: constify the sha arguments for ref_transaction_create|delete|updateRonnie Sahlberg, Apr 25, 2014
  3. 02/19 refs.c: allow passing NULL to ref_transaction_freeRonnie Sahlberg, Apr 25, 2014
  4. 03/19 refs.c: make ref_transaction_commit return an error stringRonnie Sahlberg, Apr 25, 2014
  5. Jonathan NiederApr 25, 2014
  6. Ronnie SahlbergApr 28, 2014
  7. 04/19 refs.c: return error string from ref_update_reject_duplicates on failureRonnie Sahlberg, Apr 25, 2014
  8. Jonathan NiederApr 25, 2014
  9. Ronnie SahlbergApr 28, 2014
  10. 05/19 update-ref.c: use the error string from _commit to print better messageRonnie Sahlberg, Apr 25, 2014
  11. Jonathan NiederApr 25, 2014
  12. Ronnie SahlbergApr 28, 2014
  13. 06/19 refs.c: make update_ref_write to return error string on failureRonnie Sahlberg, Apr 25, 2014
  14. Jonathan NiederApr 25, 2014
  15. Ronnie SahlbergApr 28, 2014
  16. 07/19 refs.c: remove the onerr argument to ref_transaction_commitRonnie Sahlberg, Apr 25, 2014
  17. Jonathan NiederApr 25, 2014
  18. Ronnie SahlbergApr 28, 2014
  19. 08/19 refs.c: change ref_transaction_update() to do error checking and return statusRonnie Sahlberg, Apr 25, 2014
  20. 09/19 refs.c: change ref_transaction_create to do error checking and return statusRonnie Sahlberg, Apr 25, 2014
  21. 10/19 refs.c: ref_transaction_delete to check for error and return statusRonnie Sahlberg, Apr 25, 2014
  22. 11/19 tag.c: use ref transactions when doing updatesRonnie Sahlberg, Apr 25, 2014
  23. Michael HaggertyApr 25, 2014
  24. Ronnie SahlbergApr 28, 2014
  25. 12/19 replace.c: use the ref transaction functions for updatesRonnie Sahlberg, Apr 25, 2014
  26. Michael HaggertyApr 25, 2014
  27. Ronnie SahlbergApr 28, 2014
  28. 13/19 commit.c: use ref transactions for updatesRonnie Sahlberg, Apr 25, 2014
  29. 14/19 sequencer.c: use ref transactions for all ref updatesRonnie Sahlberg, Apr 25, 2014
  30. 15/19 fast-import.c: change update_branch to use ref transactionsRonnie Sahlberg, Apr 25, 2014
  31. 16/19 branch.c: use ref transaction for all ref updatesRonnie Sahlberg, Apr 25, 2014
  32. Michael HaggertyApr 25, 2014
  33. Ronnie SahlbergApr 28, 2014
  34. Michael HaggertyApr 29, 2014
  35. Ronnie SahlbergApr 29, 2014
  36. Junio C HamanoApr 29, 2014
  37. 17/19 refs.c: change update_ref to use a transactionRonnie Sahlberg, Apr 25, 2014
  38. Michael HaggertyApr 25, 2014
  39. Ronnie SahlbergApr 28, 2014
  40. 18/19 refs.c: free the transaction before returning when number of updates is 0Ronnie Sahlberg, Apr 25, 2014
  41. 19/19 refs.c: pass **transaction to commit and have it clear the pointerRonnie Sahlberg, Apr 25, 2014
  42. Michael HaggertyApr 26, 2014
  43. Ronnie SahlbergApr 28, 2014
  44. Michael HaggertyApr 29, 2014
  45. Ronnie SahlbergApr 29, 2014
  46. Michael HaggertyApr 30, 2014
  47. Jonathan NiederApr 25, 2014
  48. Ronnie SahlbergApr 25, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.