summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>2017-02-08 18:31:43 +0700
committerJunio C Hamano <gitster@pobox.com>2017-02-08 15:20:30 -0800
commitf947b583ebf4e9f68638906b750b1545455f026d (patch)
treea70d7fd08a30c5c7fcf919e3cc34c0984371b2cc
parent3b9e3c2cede15057af3ff8076c45ad5f33829436 (diff)
downloadgit-f947b583ebf4e9f68638906b750b1545455f026d.tar.gz
refs.c: add resolve_ref_submodule()
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 <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--refs.c20
-rw-r--r--refs.h3
2 files changed, 17 insertions, 6 deletions
diff --git a/refs.c b/refs.c
index 9bd0bc177b..f6226070e1 100644
--- a/refs.c
+++ b/refs.c
@@ -1320,18 +1320,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 */
@@ -1344,9 +1344,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 6947843913..576e73305f 100644
--- a/refs.h
+++ b/refs.h
@@ -86,6 +86,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