summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>2016-06-12 17:54:02 +0700
committerJunio C Hamano <gitster@pobox.com>2016-06-13 14:38:16 -0700
commit41da7111f2c825ee0dcd319ec246a84b5ca0fd21 (patch)
tree958e18cd733ee3f9febdcb7f2baf38bbae92affb
parent6d43a0cefd769c650bd114f41434ef5a7aa998e7 (diff)
downloadgit-41da7111f2c825ee0dcd319ec246a84b5ca0fd21.tar.gz
refs: add expand_ref()
This is basically dwim_ref() without @{} support. To be used on the server side where we want to expand abbreviated to full ref names and nothing else. The first user is "git clone/fetch --shallow-exclude". 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.c8
-rw-r--r--refs.h1
2 files changed, 8 insertions, 1 deletions
diff --git a/refs.c b/refs.c
index e2d34b253e..842e4d89df 100644
--- a/refs.c
+++ b/refs.c
@@ -392,6 +392,13 @@ static char *substitute_branch_name(const char **string, int *len)
int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref)
{
char *last_branch = substitute_branch_name(&str, &len);
+ int refs_found = expand_ref(str, len, sha1, ref);
+ free(last_branch);
+ return refs_found;
+}
+
+int expand_ref(const char *str, int len, unsigned char *sha1, char **ref)
+{
const char **p, *r;
int refs_found = 0;
@@ -417,7 +424,6 @@ int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref)
warning("ignoring broken ref %s.", fullref);
}
}
- free(last_branch);
return refs_found;
}
diff --git a/refs.h b/refs.h
index 3c3da29bf0..31a2fa68a3 100644
--- a/refs.h
+++ b/refs.h
@@ -90,6 +90,7 @@ extern int resolve_gitlink_ref(const char *path, const char *refname, unsigned c
*/
extern int refname_match(const char *abbrev_name, const char *full_name);
+extern int expand_ref(const char *str, int len, unsigned char *sha1, char **ref);
extern int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref);
extern int dwim_log(const char *str, int len, unsigned char *sha1, char **ref);