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

[PATCH v3 06/23] refs.c: move rename_ref to the common code

From
Ronnie Sahlberg <sahlberg@google.com>
Date
Aug 19, 2014, 16:30 UTC
Message-ID
<1408465847-30384-7-git-send-email-sahlberg@google.com>
In-Reply-To
<1408465847-30384-1-git-send-email-sahlberg@google.com>

This change moves rename_ref() to the refs.c file since this function does not contain any backend specific code.

Signed-off-by: Ronnie Sahlberg <sahlberg@google.com>
---
 refs-be-files.c | 92 ---------------------------------------------------------
 refs.c          | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 92 insertions(+), 92 deletions(-)
diff --git a/refs-be-files.c b/refs-be-files.c
index faf794c..7d579be 100644
--- a/refs-be-files.c
+++ b/refs-be-files.c
@@ -2622,98 +2622,6 @@ static int delete_ref_loose(struct ref_lock *lock, int flag, struct strbuf *err)
 	return 0;
 }
 
-struct rename_reflog_cb {
-	struct ref_transaction *transaction;
-	const char *refname;
-	struct strbuf *err;
-};
-
-static int rename_reflog_ent(unsigned char *osha1, unsigned char *nsha1,
-			     const char *id, unsigned long timestamp, int tz,
-			     const char *message, void *cb_data)
-{
-	struct rename_reflog_cb *cb = cb_data;
-	struct reflog_committer_info ci;
-
-	memset(&ci, 0, sizeof(ci));
-	ci.id = id;
-	ci.timestamp = timestamp;
-	ci.tz = tz;
-	return transaction_update_reflog(cb->transaction, cb->refname,
-					 nsha1, osha1, &ci, message, 0,
-					 cb->err);
-}
-
-int rename_ref(const char *oldrefname, const char *newrefname, const char *logmsg)
-{
-	unsigned char sha1[20];
-	int flag = 0, log;
-	struct ref_transaction *transaction = NULL;
-	struct strbuf err = STRBUF_INIT;
-	const char *symref = NULL;
-	struct rename_reflog_cb cb;
-	struct reflog_committer_info ci;
-
-	memset(&ci, 0, sizeof(ci));
-	ci.committer_info = git_committer_info(0);
-
-	symref = resolve_ref_unsafe(oldrefname, sha1,
-				    RESOLVE_REF_READING, &flag);
-	if (flag & REF_ISSYMREF) {
-		error("refname %s is a symbolic ref, renaming it is not supported",
-			oldrefname);
-		return 1;
-	}
-	if (!symref) {
-		error("refname %s not found", oldrefname);
-		return 1;
-	}
-
-	if (!is_refname_available(newrefname, &oldrefname, 1))
-		return 1;
-
-	log = reflog_exists(oldrefname);
-	transaction = transaction_begin(&err);
-	if (!transaction)
-		goto fail;
-
-	if (strcmp(oldrefname, newrefname)) {
-		if (log && transaction_update_reflog(transaction, newrefname,
-						     sha1, sha1, &ci, NULL,
-						     REFLOG_TRUNCATE, &err))
-			goto fail;
-		cb.transaction = transaction;
-		cb.refname = newrefname;
-		cb.err = &err;
-		if (log && for_each_reflog_ent(oldrefname, rename_reflog_ent,
-					       &cb))
-			goto fail;
-
-		if (transaction_delete_sha1(transaction, oldrefname, sha1,
-					    REF_NODEREF,
-					    1, NULL, &err))
-			goto fail;
-	}
-	if (transaction_update_sha1(transaction, newrefname, sha1,
-				    NULL, 0, 0, NULL, &err))
-		goto fail;
-	if (log && transaction_update_reflog(transaction, newrefname, sha1,
-					     sha1, &ci, logmsg,
-					     REFLOG_COMMITTER_INFO_IS_VALID,
-					     &err))
-		goto fail;
-	if (transaction_commit(transaction, &err))
-		goto fail;
-	transaction_free(transaction);
-	return 0;
-
- fail:
-	error("rename_ref failed: %s", err.buf);
-	strbuf_release(&err);
-	transaction_free(transaction);
-	return 1;
-}
-
 static int close_ref(struct ref_lock *lock)
 {
 	if (close_lock_file(lock->lk))
diff --git a/refs.c b/refs.c
index 70b12eb..319eafa 100644
--- a/refs.c
+++ b/refs.c
@@ -45,3 +45,95 @@ int delete_ref(const char *refname, const unsigned char *sha1, int delopt)
 	transaction_free(transaction);
 	return 0;
 }
+
+struct rename_reflog_cb {
+	struct ref_transaction *transaction;
+	const char *refname;
+	struct strbuf *err;
+};
+
+static int rename_reflog_ent(unsigned char *osha1, unsigned char *nsha1,
+			     const char *id, unsigned long timestamp, int tz,
+			     const char *message, void *cb_data)
+{
+	struct rename_reflog_cb *cb = cb_data;
+	struct reflog_committer_info ci;
+
+	memset(&ci, 0, sizeof(ci));
+	ci.id = id;
+	ci.timestamp = timestamp;
+	ci.tz = tz;
+	return transaction_update_reflog(cb->transaction, cb->refname,
+					 nsha1, osha1, &ci, message, 0,
+					 cb->err);
+}
+
+int rename_ref(const char *oldrefname, const char *newrefname, const char *logmsg)
+{
+	unsigned char sha1[20];
+	int flag = 0, log;
+	struct ref_transaction *transaction = NULL;
+	struct strbuf err = STRBUF_INIT;
+	const char *symref = NULL;
+	struct rename_reflog_cb cb;
+	struct reflog_committer_info ci;
+
+	memset(&ci, 0, sizeof(ci));
+	ci.committer_info = git_committer_info(0);
+
+	symref = resolve_ref_unsafe(oldrefname, sha1,
+				    RESOLVE_REF_READING, &flag);
+	if (flag & REF_ISSYMREF) {
+		error("refname %s is a symbolic ref, renaming it is not supported",
+			oldrefname);
+		return 1;
+	}
+	if (!symref) {
+		error("refname %s not found", oldrefname);
+		return 1;
+	}
+
+	if (!is_refname_available(newrefname, &oldrefname, 1))
+		return 1;
+
+	log = reflog_exists(oldrefname);
+	transaction = transaction_begin(&err);
+	if (!transaction)
+		goto fail;
+
+	if (strcmp(oldrefname, newrefname)) {
+		if (log && transaction_update_reflog(transaction, newrefname,
+						     sha1, sha1, &ci, NULL,
+						     REFLOG_TRUNCATE, &err))
+			goto fail;
+		cb.transaction = transaction;
+		cb.refname = newrefname;
+		cb.err = &err;
+		if (log && for_each_reflog_ent(oldrefname, rename_reflog_ent,
+					       &cb))
+			goto fail;
+
+		if (transaction_delete_sha1(transaction, oldrefname, sha1,
+					    REF_NODEREF,
+					    1, NULL, &err))
+			goto fail;
+	}
+	if (transaction_update_sha1(transaction, newrefname, sha1,
+				    NULL, 0, 0, NULL, &err))
+		goto fail;
+	if (log && transaction_update_reflog(transaction, newrefname, sha1,
+					     sha1, &ci, logmsg,
+					     REFLOG_COMMITTER_INFO_IS_VALID,
+					     &err))
+		goto fail;
+	if (transaction_commit(transaction, &err))
+		goto fail;
+	transaction_free(transaction);
+	return 0;
+
+ fail:
+	error("rename_ref failed: %s", err.buf);
+	strbuf_release(&err);
+	transaction_free(transaction);
+	return 1;
+}
-- 
2.0.1.552.g1af257a
Previous: Ronnie SahlbergNext: Ronnie Sahlberg
Message 8 of 27 in “backend-struct-db”
  1. 00/23 backend-struct-dbRonnie Sahlberg, Aug 19, 2014
  2. 01/23 refs.c: create a public function for is_refname_availableRonnie Sahlberg, Aug 19, 2014
  3. 03/23 refs.c: add a new refs.c file to hold all common refs codeRonnie Sahlberg, Aug 19, 2014
  4. Junio C HamanoAug 26, 2014
  5. Ronnie SahlbergAug 26, 2014
  6. 04/23 refs.c: move update_ref to refs.cRonnie Sahlberg, Aug 19, 2014
  7. 05/23 refs.c: move delete_ref to the common codeRonnie Sahlberg, Aug 19, 2014
  8. 06/23 refs.c: move rename_ref to the common codeRonnie Sahlberg, Aug 19, 2014
  9. 07/23 refs.c: move read_ref_at to the common refs fileRonnie Sahlberg, Aug 19, 2014
  10. 08/23 refs.c: move the hidden refs functions to the common codeRonnie Sahlberg, Aug 19, 2014
  11. 09/23 refs.c: move dwim and friend functions to the common refs codeRonnie Sahlberg, Aug 19, 2014
  12. 10/23 refs.c: move warn_if_dangling_symref* to the common codeRonnie Sahlberg, Aug 19, 2014
  13. 11/23 refs.c: move read_ref, read_ref_full and ref_exists to the common codeRonnie Sahlberg, Aug 19, 2014
  14. 12/23 refs.c: move resolve_refdup to commonRonnie Sahlberg, Aug 19, 2014
  15. 13/23 refs.c: move check_refname_component to the common codeRonnie Sahlberg, Aug 19, 2014
  16. 14/23 refs.c: move is_branch to the common codeRonnie Sahlberg, Aug 19, 2014
  17. 15/23 refs.c: move names_conflict to the common codeRonnie Sahlberg, Aug 19, 2014
  18. 16/23 refs.c: move prettify_refname to the common codeRonnie Sahlberg, Aug 19, 2014
  19. 17/23 refs.c: move ref iterators to the common codeRonnie Sahlberg, Aug 19, 2014
  20. 18/23 refs.c: move head_ref_namespaced to the common codeRonnie Sahlberg, Aug 19, 2014
  21. 19/23 refs-be-files.c: add a backend method structure with transaction functionsRonnie Sahlberg, Aug 19, 2014
  22. Junio C HamanoAug 26, 2014
  23. Ronnie SahlbergAug 26, 2014
  24. 20/23 refs-be-files.c: add reflog backend methodsRonnie Sahlberg, Aug 19, 2014
  25. 21/23 refs-be-files.c: add methods for misc ref operationsRonnie Sahlberg, Aug 19, 2014
  26. 22/23 refs-be-files.c: add methods for head_ref*Ronnie Sahlberg, Aug 19, 2014
  27. 23/23 refs-be-files.c: add methods for the ref iteratorsRonnie Sahlberg, Aug 19, 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.