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

[PATCH 04/38] refs: add a backend method structure

From
Michael Haggerty <mhagger@alum.mit.edu>
Date
Jun 3, 2016, 21:03 UTC
Message-ID
<151f90bea3b22cc1f0818b08c1505aad2db891d4.1464983301.git.mhagger@alum.mit.edu>
In-Reply-To
<cover.1464983301.git.mhagger@alum.mit.edu>
From: Ronnie Sahlberg <sahlberg@google.com>

Add a `struct ref_storage_be` to represent types of reference stores. In OO notation, this is the class, and will soon hold some class methods (e.g., a factory to create new ref_store instances) and will also serve as the vtable for ref_store instances of that type.

As yet, the backends cannot do anything.
Signed-off-by: Ronnie Sahlberg <sahlberg@google.com>
Signed-off-by: David Turner <dturner@twopensource.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
---
 refs.c               | 19 +++++++++++++++++++
 refs.h               |  2 ++
 refs/files-backend.c |  5 +++++
 refs/refs-internal.h |  8 ++++++++
 4 files changed, 34 insertions(+)
diff --git a/refs.c b/refs.c
index 814cad3..f57a93e 100644
--- a/refs.c
+++ b/refs.c
@@ -10,6 +10,25 @@
 #include "tag.h"
 
 /*
+ * List of all available backends
+ */
+static struct ref_storage_be *refs_backends = &refs_be_files;
+
+static struct ref_storage_be *find_ref_storage_backend(const char *name)
+{
+	struct ref_storage_be *be;
+	for (be = refs_backends; be; be = be->next)
+		if (!strcmp(be->name, name))
+			return be;
+	return NULL;
+}
+
+int ref_storage_backend_exists(const char *name)
+{
+	return find_ref_storage_backend(name) != NULL;
+}
+
+/*
  * How to handle various characters in refnames:
  * 0: An acceptable character for refs
  * 1: End-of-component
diff --git a/refs.h b/refs.h
index 442c1a5..52ea93b 100644
--- a/refs.h
+++ b/refs.h
@@ -544,4 +544,6 @@ int reflog_expire(const char *refname, const unsigned char *sha1,
 		  reflog_expiry_cleanup_fn cleanup_fn,
 		  void *policy_cb_data);
 
+int ref_storage_backend_exists(const char *name);
+
 #endif /* REFS_H */
diff --git a/refs/files-backend.c b/refs/files-backend.c
index b94aad2..bde6f0e 100644
--- a/refs/files-backend.c
+++ b/refs/files-backend.c
@@ -4066,3 +4066,8 @@ int reflog_expire(const char *refname, const unsigned char *sha1,
 	unlock_ref(lock);
 	return -1;
 }
+
+struct ref_storage_be refs_be_files = {
+	NULL,
+	"files"
+};
diff --git a/refs/refs-internal.h b/refs/refs-internal.h
index d8a2606..4d88849 100644
--- a/refs/refs-internal.h
+++ b/refs/refs-internal.h
@@ -520,4 +520,12 @@ int do_for_each_ref_iterator(struct ref_iterator *iter,
 int read_raw_ref(const char *refname, unsigned char *sha1,
 		 struct strbuf *referent, unsigned int *type);
 
+/* refs backends */
+struct ref_storage_be {
+	struct ref_storage_be *next;
+	const char *name;
+};
+
+extern struct ref_storage_be refs_be_files;
+
 #endif /* REFS_REFS_INTERNAL_H */
-- 
2.8.1
Previous: Michael HaggertyNext: Michael Haggerty
Message 8 of 67 in “Virtualization of the refs API”
  1. 00/38 Virtualization of the refs APIMichael Haggerty, Jun 3, 2016
  2. 01/38 resolve_gitlink_ref(): eliminate temporary variableMichael Haggerty, Jun 3, 2016
  3. 02/38 rename_ref_available(): add docstringMichael Haggerty, Jun 3, 2016
  4. Junio C HamanoJun 7, 2016
  5. Michael HaggertyJun 9, 2016
  6. Junio C HamanoJun 9, 2016
  7. 03/38 refs: rename struct ref_cache to files_ref_storeMichael Haggerty, Jun 3, 2016
  8. 04/38 refs: add a backend method structureMichael Haggerty, Jun 3, 2016
  9. 05/38 refs: create a base class "ref_store" for files_ref_storeMichael Haggerty, Jun 3, 2016
  10. Junio C HamanoJun 7, 2016
  11. René ScharfeJun 9, 2016
  12. Junio C HamanoJun 7, 2016
  13. Michael HaggertyJun 9, 2016
  14. Junio C HamanoJun 9, 2016
  15. Michael HaggertyJun 10, 2016
  16. Junio C HamanoJun 10, 2016
  17. Eric SunshineJun 10, 2016
  18. Michael HaggertyJun 10, 2016
  19. 06/38 add_packed_ref(): add a files_ref_store argumentMichael Haggerty, Jun 3, 2016
  20. 07/38 get_packed_ref(): add a files_ref_store argumentMichael Haggerty, Jun 3, 2016
  21. 08/38 resolve_missing_loose_ref(): add a files_ref_store argumentMichael Haggerty, Jun 3, 2016
  22. 09/38 {lock,commit,rollback}_packed_refs(): add files_ref_store argumentsMichael Haggerty, Jun 3, 2016
  23. 10/38 refs: add a transaction_commit() methodMichael Haggerty, Jun 3, 2016
  24. 11/38 refs: reorder definitionsMichael Haggerty, Jun 3, 2016
  25. 12/38 resolve_packed_ref(): rename function from resolve_missing_loose_ref()Michael Haggerty, Jun 3, 2016
  26. 13/38 resolve_gitlink_packed_ref(): remove functionMichael Haggerty, Jun 3, 2016
  27. 14/38 read_raw_ref(): take a (struct ref_store *) argumentMichael Haggerty, Jun 3, 2016
  28. 15/38 resolve_ref_recursively(): new functionMichael Haggerty, Jun 3, 2016
  29. 16/38 resolve_gitlink_ref(): implement using resolve_ref_recursively()Michael Haggerty, Jun 3, 2016
  30. Junio C HamanoJun 7, 2016
  31. Eric SunshineJun 14, 2016
  32. Michael HaggertyJun 16, 2016
  33. 17/38 resolve_gitlink_ref(): avoid memory allocation in many casesMichael Haggerty, Jun 3, 2016
  34. Junio C HamanoJun 7, 2016
  35. Michael HaggertyJun 9, 2016
  36. 18/38 resolve_gitlink_ref(): rename path parameter to submoduleMichael Haggerty, Jun 3, 2016
  37. 19/38 refs: make read_raw_ref() virtualMichael Haggerty, Jun 3, 2016
  38. 20/38 refs: make verify_refname_available() virtualMichael Haggerty, Jun 3, 2016
  39. 21/38 refs: make pack_refs() virtualMichael Haggerty, Jun 3, 2016
  40. Junio C HamanoJun 7, 2016
  41. Michael HaggertyJun 9, 2016
  42. 22/38 refs: make create_symref() virtualMichael Haggerty, Jun 3, 2016
  43. 23/38 refs: make peel_ref() virtualMichael Haggerty, Jun 3, 2016
  44. Junio C HamanoJun 7, 2016
  45. Michael HaggertyJun 9, 2016
  46. 24/38 repack_without_refs(): add a files_ref_store argumentMichael Haggerty, Jun 3, 2016
  47. 25/38 lock_raw_ref(): add a files_ref_store argumentMichael Haggerty, Jun 3, 2016
  48. 26/38 commit_ref_update(): add a files_ref_store argumentMichael Haggerty, Jun 3, 2016
  49. 27/38 lock_ref_for_update(): add a files_ref_store argumentMichael Haggerty, Jun 3, 2016
  50. 28/38 lock_ref_sha1_basic(): add a files_ref_store argumentMichael Haggerty, Jun 3, 2016
  51. 29/38 split_symref_update(): add a files_ref_store argumentMichael Haggerty, Jun 3, 2016
  52. 30/38 files_ref_iterator_begin(): take a ref_store argumentMichael Haggerty, Jun 3, 2016
  53. 31/38 refs: add method iterator_beginMichael Haggerty, Jun 3, 2016
  54. 32/38 refs: add methods for reflogMichael Haggerty, Jun 3, 2016
  55. 33/38 refs: add method for initial ref transaction commitMichael Haggerty, Jun 3, 2016
  56. 34/38 refs: add method for delete_refsMichael Haggerty, Jun 3, 2016
  57. Junio C HamanoJun 7, 2016
  58. Michael HaggertyJun 9, 2016
  59. 35/38 refs: add methods to init refs dbMichael Haggerty, Jun 3, 2016
  60. 36/38 refs: add method to rename refsMichael Haggerty, Jun 3, 2016
  61. 37/38 refs: make lock genericMichael Haggerty, Jun 3, 2016
  62. Junio C HamanoJun 7, 2016
  63. Michael HaggertyJun 9, 2016
  64. Michael HaggertyJun 9, 2016
  65. 38/38 refs: implement iteration over only per-worktree refsMichael Haggerty, Jun 3, 2016
  66. Duy NguyenJul 10, 2016
  67. Michael HaggertyJul 13, 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.