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>

Nguyễn Thái Ngọc Duy committed Jun 12, 2016 at 17:54 UTC 41da7111f2c825ee0dcd319ec246a84b5ca0fd21
2 files changed +8 -1
refs.c
+7 -1
@@ -392,6 +392,13 @@ static char *substitute_branch_name(const char **string, int *len)
392 int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref)
393 {
394 char *last_branch = substitute_branch_name(&str, &len);
395 + int refs_found = expand_ref(str, len, sha1, ref);
396 + free(last_branch);
397 + return refs_found;
398 +}
399 +
400 +int expand_ref(const char *str, int len, unsigned char *sha1, char **ref)
401 +{
402 const char **p, *r;
403 int refs_found = 0;
404
@@ -417,7 +424,6 @@ int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref)
424 warning("ignoring broken ref %s.", fullref);
425 }
426 }
420 - free(last_branch);
427 return refs_found;
428 }
429
refs.h
+1
@@ -90,6 +90,7 @@ extern int resolve_gitlink_ref(const char *path, const char *refname, unsigned c
90 */
91 extern int refname_match(const char *abbrev_name, const char *full_name);
92
93 +extern int expand_ref(const char *str, int len, unsigned char *sha1, char **ref);
94 extern int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref);
95 extern int dwim_log(const char *str, int len, unsigned char *sha1, char **ref);
96