diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2017-02-08 18:31:43 +0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-02-08 15:20:30 -0800 |
commit | f947b583ebf4e9f68638906b750b1545455f026d (patch) | |
tree | a70d7fd08a30c5c7fcf919e3cc34c0984371b2cc | |
parent | 3b9e3c2cede15057af3ff8076c45ad5f33829436 (diff) | |
download | git-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.c | 20 | ||||
-rw-r--r-- | refs.h | 3 |
2 files changed, 17 insertions, 6 deletions
@@ -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; @@ -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 |