ref_cmp_full_short(full_name, short_name) expands short_name according to the rules documented in git-rev-parse and compares the expanded name with full_name. It reports a match by returning 0. This function makes the rules for resolving refs to sha1s available for string comparison. Before this change, the rules were buried in get_sha1*() and dwim_ref(). ref_cmp_full_short() will be used for matching refspecs in git-send-pack. Signed-off-by: Steffen Prohaska <prohaska@xxxxxx> --- cache.h | 1 + sha1_name.c | 13 +++++++++++++ 2 files changed, 14 insertions(+), 0 deletions(-) diff --git a/cache.h b/cache.h index f98d57a..59345b5 100644 --- a/cache.h +++ b/cache.h @@ -406,6 +406,7 @@ extern int get_sha1_hex(const char *hex, unsigned char *sha1); extern char *sha1_to_hex(const unsigned char *sha1); /* static buffer result! */ extern int read_ref(const char *filename, unsigned char *sha1); extern const char *resolve_ref(const char *path, unsigned char *sha1, int, int *); +extern int ref_cmp_full_short(const char *full_name, const char* short_name); 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); diff --git a/sha1_name.c b/sha1_name.c index b820909..ae235be 100644 --- a/sha1_name.c +++ b/sha1_name.c @@ -249,6 +249,19 @@ static const char *ref_fmt[] = { NULL }; +int ref_cmp_full_short(const char* full_name, const char* short_name) +{ + const char **p; + const int short_name_len = strlen(short_name); + + for (p = ref_fmt; *p; p++) { + if (strcmp(full_name, mkpath(*p, short_name_len, short_name)) == 0) { + return 0; + } + } + return -1; +} + int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref) { const char **p, *r; -- 1.5.3.4.224.gc6b84 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html