This is basically the extended version of resolve_gitlink_ref() where we
have access to more info from the underlying resolve_ref_recursively() call.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclo...@gmail.com>
---
 refs.c | 20 ++++++++++++++------
 refs.h |  3 +++
 2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/refs.c b/refs.c
index cd36b64ed9..02e35d83f3 100644
--- a/refs.c
+++ b/refs.c
@@ -1325,18 +1325,18 @@ const char *resolve_ref_unsafe(const char *refname, int 
resolve_flags,
                                       resolve_flags, sha1, flags);
 }
 
-int resolve_gitlink_ref(const char *submodule, const char *refname,
-                       unsigned char *sha1)
+const char *resolve_ref_submodule(const char *submodule, const char *refname,
+                                 int resolve_flags, unsigned char *sha1,
+                                 int *flags)
 {
        size_t len = strlen(submodule);
        struct ref_store *refs;
-       int flags;
 
        while (len && submodule[len - 1] == '/')
                len--;
 
        if (!len)
-               return -1;
+               return NULL;
 
        if (submodule[len]) {
                /* We need to strip off one or more trailing slashes */
@@ -1349,9 +1349,17 @@ int resolve_gitlink_ref(const char *submodule, const 
char *refname,
        }
 
        if (!refs)
-               return -1;
+               return NULL;
+
+       return resolve_ref_recursively(refs, refname, resolve_flags, sha1, 
flags);
+}
+
+int resolve_gitlink_ref(const char *submodule, const char *refname,
+                       unsigned char *sha1)
+{
+       int flags;
 
-       if (!resolve_ref_recursively(refs, refname, 0, sha1, &flags) ||
+       if (!resolve_ref_submodule(submodule, refname, 0, sha1, &flags) ||
            is_null_sha1(sha1))
                return -1;
        return 0;
diff --git a/refs.h b/refs.h
index 9fbff90e79..74542468d8 100644
--- a/refs.h
+++ b/refs.h
@@ -88,6 +88,9 @@ int peel_ref(const char *refname, unsigned char *sha1);
  */
 int resolve_gitlink_ref(const char *submodule, const char *refname,
                        unsigned char *sha1);
+const char *resolve_ref_submodule(const char *submodule, const char *refname,
+                                 int resolve_flags, unsigned char *sha1,
+                                 int *flags);
 
 /*
  * Return true iff abbrev_name is a possible abbreviation for
-- 
2.11.0.157.gd943d85

Reply via email to