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

[PATCH v4 21/26] refs.c: move peel_object to the common code

From
David Turner <dturner@twopensource.com>
Date
Oct 15, 2015, 19:46 UTC
Message-ID
<1444938410-2345-22-git-send-email-dturner@twopensource.com>
In-Reply-To
<1444938410-2345-1-git-send-email-dturner@twopensource.com>

This function does not contain any backend specific code so we move it to the common code.

Signed-off-by: David Turner <dturner@twopensource.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
---
 refs-be-files.c | 53 -----------------------------------------------------
 refs.c          | 23 +++++++++++++++++++++++
 refs.h          | 34 ++++++++++++++++++++++++++++++++++
 3 files changed, 57 insertions(+), 53 deletions(-)
diff --git a/refs-be-files.c b/refs-be-files.c
index 4b6bf29..ef600d8 100644
--- a/refs-be-files.c
+++ b/refs-be-files.c
@@ -1600,59 +1600,6 @@ const char *resolve_ref_unsafe(const char *refname, int resolve_flags,
 	return ret;
 }
 
-enum peel_status {
-	/* object was peeled successfully: */
-	PEEL_PEELED = 0,
-
-	/*
-	 * object cannot be peeled because the named object (or an
-	 * object referred to by a tag in the peel chain), does not
-	 * exist.
-	 */
-	PEEL_INVALID = -1,
-
-	/* object cannot be peeled because it is not a tag: */
-	PEEL_NON_TAG = -2,
-
-	/* ref_entry contains no peeled value because it is a symref: */
-	PEEL_IS_SYMREF = -3,
-
-	/*
-	 * ref_entry cannot be peeled because it is broken (i.e., the
-	 * symbolic reference cannot even be resolved to an object
-	 * name):
-	 */
-	PEEL_BROKEN = -4
-};
-
-/*
- * Peel the named object; i.e., if the object is a tag, resolve the
- * tag recursively until a non-tag is found.  If successful, store the
- * result to sha1 and return PEEL_PEELED.  If the object is not a tag
- * or is not valid, return PEEL_NON_TAG or PEEL_INVALID, respectively,
- * and leave sha1 unchanged.
- */
-static enum peel_status peel_object(const unsigned char *name, unsigned char *sha1)
-{
-	struct object *o = lookup_unknown_object(name);
-
-	if (o->type == OBJ_NONE) {
-		int type = sha1_object_info(name, NULL);
-		if (type < 0 || !object_as_type(o, type, 0))
-			return PEEL_INVALID;
-	}
-
-	if (o->type != OBJ_TAG)
-		return PEEL_NON_TAG;
-
-	o = deref_tag_noverify(o);
-	if (!o)
-		return PEEL_INVALID;
-
-	hashcpy(sha1, o->sha1);
-	return PEEL_PEELED;
-}
-
 /*
  * Peel the entry (if possible) and return its new peel_status.  If
  * repeel is true, re-peel the entry even if there is an old peeled
diff --git a/refs.c b/refs.c
index 16280d5..e7f6c77 100644
--- a/refs.c
+++ b/refs.c
@@ -4,6 +4,8 @@
 #include "cache.h"
 #include "refs.h"
 #include "lockfile.h"
+#include "object.h"
+#include "tag.h"
 
 static int is_per_worktree_ref(const char *refname)
 {
@@ -995,3 +997,24 @@ int refname_is_safe(const char *refname)
 	}
 	return 1;
 }
+
+enum peel_status peel_object(const unsigned char *name, unsigned char *sha1)
+{
+	struct object *o = lookup_unknown_object(name);
+
+	if (o->type == OBJ_NONE) {
+		int type = sha1_object_info(name, NULL);
+		if (type < 0 || !object_as_type(o, type, 0))
+			return PEEL_INVALID;
+	}
+
+	if (o->type != OBJ_TAG)
+		return PEEL_NON_TAG;
+
+	o = deref_tag_noverify(o);
+	if (!o)
+		return PEEL_INVALID;
+
+	hashcpy(sha1, o->sha1);
+	return PEEL_PEELED;
+}
diff --git a/refs.h b/refs.h
index fc0611d..3fb480b 100644
--- a/refs.h
+++ b/refs.h
@@ -76,6 +76,40 @@ extern int is_branch(const char *refname);
  */
 extern int peel_ref(const char *refname, unsigned char *sha1);
 
+enum peel_status {
+	/* object was peeled successfully: */
+	PEEL_PEELED = 0,
+
+	/*
+	 * object cannot be peeled because the named object (or an
+	 * object referred to by a tag in the peel chain), does not
+	 * exist.
+	 */
+	PEEL_INVALID = -1,
+
+	/* object cannot be peeled because it is not a tag: */
+	PEEL_NON_TAG = -2,
+
+	/* ref_entry contains no peeled value because it is a symref: */
+	PEEL_IS_SYMREF = -3,
+
+	/*
+	 * ref_entry cannot be peeled because it is broken (i.e., the
+	 * symbolic reference cannot even be resolved to an object
+	 * name):
+	 */
+	PEEL_BROKEN = -4
+};
+
+/*
+ * Peel the named object; i.e., if the object is a tag, resolve the
+ * tag recursively until a non-tag is found.  If successful, store the
+ * result to sha1 and return PEEL_PEELED.  If the object is not a tag
+ * or is not valid, return PEEL_NON_TAG or PEEL_INVALID, respectively,
+ * and leave sha1 unchanged.
+ */
+enum peel_status peel_object(const unsigned char *name, unsigned char *sha1);
+
 /**
  * Resolve refname in the nested "gitlink" repository that is located
  * at path.  If the resolution is successful, return 0 and set sha1 to
-- 
2.4.2.644.g97b850b-twtrsrc
Previous: David TurnerNext: David Turner
Message 27 of 35 in “refs backend pre-vtable patches”
  1. 00/26 refs backend pre-vtable patchesDavid Turner, Oct 15, 2015
  2. 01/26 refs.c: create a public version of verify_refname_availableDavid Turner, Oct 15, 2015
  3. 02/26 refs: make repack_without_refs and is_branch publicDavid Turner, Oct 15, 2015
  4. Michael HaggertyOct 16, 2015
  5. David TurnerOct 19, 2015
  6. 03/26 refs-be-files.c: rename refs to refs-be-filesDavid Turner, Oct 15, 2015
  7. Michael HaggertyOct 16, 2015
  8. 04/26 refs.c: add a new refs.c file to hold all common refs codeDavid Turner, Oct 15, 2015
  9. 05/26 refs.c: move update_ref to refs.cDavid Turner, Oct 15, 2015
  10. David TurnerOct 21, 2015
  11. 06/26 refs.c: move delete_pseudoref and delete_ref to the common codeDavid Turner, Oct 15, 2015
  12. David TurnerOct 21, 2015
  13. 07/26 refs.c: move read_ref_at to the common refs fileDavid Turner, Oct 15, 2015
  14. 08/26 refs.c: move the hidden refs functions to the common codeDavid Turner, Oct 15, 2015
  15. 09/26 refs.c: move dwim and friend functions to the common refs codeDavid Turner, Oct 15, 2015
  16. 10/26 refs.c: move warn_if_dangling_symref* to the common codeDavid Turner, Oct 15, 2015
  17. 11/26 refs.c: move read_ref, read_ref_full and ref_exists to the common codeDavid Turner, Oct 15, 2015
  18. 12/26 refs.c: move resolve_refdup to commonDavid Turner, Oct 15, 2015
  19. 13/26 refs.c: move check_refname_format to the common codeDavid Turner, Oct 15, 2015
  20. 14/26 refs.c: move is_branch to the common codeDavid Turner, Oct 15, 2015
  21. 15/26 refs.c: move prettify_refname to the common codeDavid Turner, Oct 15, 2015
  22. 16/26 refs.c: move ref iterators to the common codeDavid Turner, Oct 15, 2015
  23. 17/26 refs.c: move head_ref_namespaced to the common codeDavid Turner, Oct 15, 2015
  24. 18/26 refs: move transaction functions into common codeDavid Turner, Oct 15, 2015
  25. 19/26 refs.c: move refname_is_safe to the common codeDavid Turner, Oct 15, 2015
  26. 20/26 refs.c: move copy_msg to the common codeDavid Turner, Oct 15, 2015
  27. 21/26 refs.c: move peel_object to the common codeDavid Turner, Oct 15, 2015
  28. 22/26 refs.c: move should_autocreate_reflog to common codeDavid Turner, Oct 15, 2015
  29. 23/26 initdb: move safe_create_dir into common codeDavid Turner, Oct 15, 2015
  30. Junio C HamanoOct 21, 2015
  31. David TurnerOct 21, 2015
  32. 24/26 refs: make files_log_ref_write functions publicDavid Turner, Oct 15, 2015
  33. 25/26 refs: break out ref conflict checksDavid Turner, Oct 15, 2015
  34. 26/26 introduce "extensions" form of core.repositoryformatversionDavid Turner, Oct 15, 2015
  35. Junio C HamanoOct 21, 2015

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.