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

Signed-off-by: David Turner <dtur...@twopensource.com>
---
 refs-be-files.c | 53 -----------------------------------------------------
 refs.c          | 31 +++++++++++++++++++++++++++++++
 refs.h          | 27 +++++++++++++++++++++++++++
 3 files changed, 58 insertions(+), 53 deletions(-)

diff --git a/refs-be-files.c b/refs-be-files.c
index bb208a5..657b58f 100644
--- a/refs-be-files.c
+++ b/refs-be-files.c
@@ -1648,59 +1648,6 @@ static const char *files_resolve_ref_unsafe(const char 
*refname,
        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 fdd1b50..77aa51d 100644
--- a/refs.c
+++ b/refs.c
@@ -4,6 +4,9 @@
 #include "cache.h"
 #include "refs.h"
 #include "lockfile.h"
+#include "object.h"
+#include "tag.h"
+
 /*
  * We always have a files backend and it is the default.
  */
@@ -951,6 +954,34 @@ int refname_is_safe(const char *refname)
        return 1;
 }
 
+/*
+ * 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)
+{
+       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;
+}
+
 /* backend functions */
 struct ref_transaction *ref_transaction_begin(struct strbuf *err)
 {
diff --git a/refs.h b/refs.h
index 049f2c7..0eab5e2 100644
--- a/refs.h
+++ b/refs.h
@@ -76,6 +76,33 @@ 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
+};
+
+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.0.4.315.gad8727a-twtrsrc

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to