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

[PATCH v2 02/21] refs: add methods for misc ref operations

From
David Turner <dturner@twopensource.com>
Date
Jan 12, 2016, 01:22 UTC
Message-ID
<1452561740-8668-3-git-send-email-dturner@twopensource.com>
In-Reply-To
<1452561740-8668-1-git-send-email-dturner@twopensource.com>
From: Ronnie Sahlberg <sahlberg@google.com>

Add ref backend methods for: resolve_ref_unsafe, verify_refname_available, pack_refs, peel_ref, create_symref, resolve_gitlink_ref.

Signed-off-by: Ronnie Sahlberg <sahlberg@google.com>
Signed-off-by: David Turner <dturner@twopensource.com>
---
 builtin/init-db.c    |  1 +
 refs.c               | 36 ++++++++++++++++++++++++++++++++++++
 refs/files-backend.c | 34 +++++++++++++++++++++++-----------
 refs/refs-internal.h | 23 +++++++++++++++++++++++
 4 files changed, 83 insertions(+), 11 deletions(-)
diff --git a/builtin/init-db.c b/builtin/init-db.c
index 07229d6..26e1cc3 100644
--- a/builtin/init-db.c
+++ b/builtin/init-db.c
@@ -8,6 +8,7 @@
 #include "builtin.h"
 #include "exec_cmd.h"
 #include "parse-options.h"
+#include "refs.h"
 
 #ifndef DEFAULT_GIT_TEMPLATE_DIR
 #define DEFAULT_GIT_TEMPLATE_DIR "/usr/share/git-core/templates"
diff --git a/refs.c b/refs.c
index 831ee12..6875ff9 100644
--- a/refs.c
+++ b/refs.c
@@ -1111,3 +1111,39 @@ int ref_transaction_commit(struct ref_transaction *transaction,
 {
 	return the_refs_backend->transaction_commit(transaction, err);
 }
+
+const char *resolve_ref_unsafe(const char *ref, int resolve_flags,
+			       unsigned char *sha1, int *flags)
+{
+	return the_refs_backend->resolve_ref_unsafe(ref, resolve_flags, sha1,
+						    flags);
+}
+
+int verify_refname_available(const char *refname, struct string_list *extra,
+			     struct string_list *skip, struct strbuf *err)
+{
+	return the_refs_backend->verify_refname_available(refname, extra, skip, err);
+}
+
+int pack_refs(unsigned int flags)
+{
+	return the_refs_backend->pack_refs(flags);
+}
+
+int peel_ref(const char *refname, unsigned char *sha1)
+{
+	return the_refs_backend->peel_ref(refname, sha1);
+}
+
+int create_symref(const char *ref_target, const char *refs_heads_master,
+		  const char *logmsg)
+{
+	return the_refs_backend->create_symref(ref_target, refs_heads_master,
+					       logmsg);
+}
+
+int resolve_gitlink_ref(const char *path, const char *refname,
+			unsigned char *sha1)
+{
+	return the_refs_backend->resolve_gitlink_ref(path, refname, sha1);
+}
diff --git a/refs/files-backend.c b/refs/files-backend.c
index 684a517..e65afff 100644
--- a/refs/files-backend.c
+++ b/refs/files-backend.c
@@ -1333,7 +1333,8 @@ static int resolve_gitlink_ref_recursive(struct ref_cache *refs,
 	return resolve_gitlink_ref_recursive(refs, p, sha1, recursion+1);
 }
 
-int resolve_gitlink_ref(const char *path, const char *refname, unsigned char *sha1)
+static int files_resolve_gitlink_ref(const char *path, const char *refname,
+				     unsigned char *sha1)
 {
 	int len = strlen(path), retval;
 	char *submodule;
@@ -1565,8 +1566,10 @@ static const char *resolve_ref_1(const char *refname,
 	}
 }
 
-const char *resolve_ref_unsafe(const char *refname, int resolve_flags,
-			       unsigned char *sha1, int *flags)
+static const char *files_resolve_ref_unsafe(const char *refname,
+					    int resolve_flags,
+					    unsigned char *sha1,
+					    int *flags)
 {
 	static struct strbuf sb_refname = STRBUF_INIT;
 	struct strbuf sb_contents = STRBUF_INIT;
@@ -1615,7 +1618,7 @@ static enum peel_status peel_entry(struct ref_entry *entry, int repeel)
 	return status;
 }
 
-int peel_ref(const char *refname, unsigned char *sha1)
+static int files_peel_ref(const char *refname, unsigned char *sha1)
 {
 	int flag;
 	unsigned char base[20];
@@ -2246,7 +2249,7 @@ static void prune_refs(struct ref_to_prune *r)
 	}
 }
 
-int pack_refs(unsigned int flags)
+static int files_pack_refs(unsigned int flags)
 {
 	struct pack_refs_cb_data cbdata;
 
@@ -2437,10 +2440,10 @@ out:
 	return ret;
 }
 
-int verify_refname_available(const char *newname,
-			     struct string_list *extras,
-			     struct string_list *skip,
-			     struct strbuf *err)
+static int files_verify_refname_available(const char *newname,
+					  struct string_list *extras,
+					  struct string_list *skip,
+					  struct strbuf *err)
 {
 	struct ref_dir *packed_refs = get_packed_refs(&ref_cache);
 	struct ref_dir *loose_refs = get_loose_refs(&ref_cache);
@@ -2811,8 +2814,9 @@ static int commit_ref_update(struct ref_lock *lock,
 	return 0;
 }
 
-int create_symref(const char *ref_target, const char *refs_heads_master,
-		  const char *logmsg)
+static int files_create_symref(const char *ref_target,
+			       const char *refs_heads_master,
+			       const char *logmsg)
 {
 	char *lockpath = NULL;
 	char ref[1000];
@@ -3515,4 +3519,12 @@ struct ref_storage_be refs_be_files = {
 	NULL,
 	"files",
 	files_transaction_commit,
+
+	files_pack_refs,
+	files_peel_ref,
+	files_create_symref,
+
+	files_resolve_ref_unsafe,
+	files_verify_refname_available,
+	files_resolve_gitlink_ref,
 };
diff --git a/refs/refs-internal.h b/refs/refs-internal.h
index b110c77..0528239 100644
--- a/refs/refs-internal.h
+++ b/refs/refs-internal.h
@@ -201,10 +201,33 @@ int rename_ref_available(const char *oldname, const char *newname);
 typedef int ref_transaction_commit_fn(struct ref_transaction *transaction,
 				      struct strbuf *err);
 
+/* misc methods */
+typedef int pack_refs_fn(unsigned int flags);
+typedef int peel_ref_fn(const char *refname, unsigned char *sha1);
+typedef int create_symref_fn(const char *ref_target,
+			     const char *refs_heads_master,
+			     const char *logmsg);
+
+/* resolution methods */
+typedef const char *resolve_ref_unsafe_fn(const char *ref,
+					  int resolve_flags,
+					  unsigned char *sha1, int *flags);
+typedef int verify_refname_available_fn(const char *refname, struct string_list *extra, struct string_list *skip, struct strbuf *err);
+typedef int resolve_gitlink_ref_fn(const char *path, const char *refname,
+				   unsigned char *sha1);
+
 struct ref_storage_be {
 	struct ref_storage_be *next;
 	const char *name;
 	ref_transaction_commit_fn *transaction_commit;
+
+	pack_refs_fn *pack_refs;
+	peel_ref_fn *peel_ref;
+	create_symref_fn *create_symref;
+
+	resolve_ref_unsafe_fn *resolve_ref_unsafe;
+	verify_refname_available_fn *verify_refname_available;
+	resolve_gitlink_ref_fn *resolve_gitlink_ref;
 };
 
 #endif /* REFS_REFS_INTERNAL_H */
-- 
2.4.2.749.g730654d-twtrsrc
Previous: David TurnerNext: David Turner
Message 3 of 35 in “refs backend reroll”
  1. 00/21 refs backend rerollDavid Turner, Jan 12, 2016
  2. 01/21 refs: add a backend method structure with transaction functionsDavid Turner, Jan 12, 2016
  3. 02/21 refs: add methods for misc ref operationsDavid Turner, Jan 12, 2016
  4. 03/21 refs: add methods for the ref iteratorsDavid Turner, Jan 12, 2016
  5. 04/21 refs: add do_for_each_per_worktree_refDavid Turner, Jan 12, 2016
  6. 05/21 refs: add methods for reflogDavid Turner, Jan 12, 2016
  7. 06/21 refs: add method for initial ref transaction commitDavid Turner, Jan 12, 2016
  8. 07/21 refs: add method for delete_refsDavid Turner, Jan 12, 2016
  9. 08/21 refs: add methods to init refs dbDavid Turner, Jan 12, 2016
  10. 09/21 refs: add method to rename refsDavid Turner, Jan 12, 2016
  11. 10/21 refs: make lock genericDavid Turner, Jan 12, 2016
  12. 11/21 refs: move duplicate check to common codeDavid Turner, Jan 12, 2016
  13. 12/21 refs: allow log-only updatesDavid Turner, Jan 12, 2016
  14. 13/21 refs: resolve symbolic refs firstDavid Turner, Jan 12, 2016
  15. Junio C HamanoJan 13, 2016
  16. David TurnerJan 13, 2016
  17. 14/21 refs: always handle non-normal refs in files backendDavid Turner, Jan 12, 2016
  18. Junio C HamanoJan 13, 2016
  19. David TurnerJan 13, 2016
  20. 15/21 init: allow alternate backends to be set for new reposDavid Turner, Jan 12, 2016
  21. 16/21 refs: check submodules ref storage configDavid Turner, Jan 12, 2016
  22. Junio C HamanoJan 13, 2016
  23. David TurnerJan 13, 2016
  24. Junio C HamanoJan 13, 2016
  25. 17/21 clone: use child_process for recursive checkoutsDavid Turner, Jan 12, 2016
  26. 18/21 refs: allow ref backend to be set for cloneDavid Turner, Jan 12, 2016
  27. 19/21 svn: learn ref-storage argumentDavid Turner, Jan 12, 2016
  28. 20/21 refs: add LMDB refs backendDavid Turner, Jan 12, 2016
  29. Jeff KingJan 14, 2016
  30. David TurnerJan 14, 2016
  31. 21/21 refs: tests for lmdb backendDavid Turner, Jan 12, 2016
  32. Junio C HamanoJan 13, 2016
  33. Jeff KingJan 14, 2016
  34. David TurnerJan 14, 2016
  35. Jeff KingJan 14, 2016

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.