This function does not contain any backend specific code so we
move it to the common code.
Signed-off-by: David Turner
---
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 830b5a1..bf2fd7a 100644
--- a/refs-be-files.c
+++ b/refs-be-files.c
@@ -1604,59 +1604,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 bd8c71b..99b31f6 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.
*/
@@ -1059,6 +1062,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 */
int ref_transaction_commit(struct ref_transaction *transaction,
struct strbuf *err)
diff --git a/refs.h b/refs.h
index 3da5d09..636f959 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.4.2.644.g97b850b-twtrsrc
--
To unsubscribe from this list: send the line