diff options
author | Junio C Hamano <junkio@cox.net> | 2007-01-19 01:15:15 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-01-19 17:57:53 -0800 |
commit | e86eb6668ee0c574ba0b6c2c94564d4159a6fcc7 (patch) | |
tree | 7e32d0c99eb983eb2ac15e2ca866d28a7de4fff6 /sha1_name.c | |
parent | 6f71686e0bac2337cdaf9057893a16a47e7d1033 (diff) | |
download | git-e86eb6668ee0c574ba0b6c2c94564d4159a6fcc7.tar.gz |
dwim_ref(): Separate name-to-ref DWIM code out.
I'll be using this in another function to figure out what to
pass to resolve_ref().
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'sha1_name.c')
-rw-r--r-- | sha1_name.c | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/sha1_name.c b/sha1_name.c index 6d7cd78381..ae31851900 100644 --- a/sha1_name.c +++ b/sha1_name.c @@ -235,7 +235,7 @@ static int ambiguous_path(const char *path, int len) return slash; } -static int get_sha1_basic(const char *str, int len, unsigned char *sha1) +int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref) { static const char *fmt[] = { "%.*s", @@ -246,13 +246,32 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1) "refs/remotes/%.*s/HEAD", NULL }; + const char **p, *r; + int refs_found = 0; + + *ref = NULL; + for (p = fmt; *p; p++) { + unsigned char sha1_from_ref[20]; + unsigned char *this_result; + + this_result = refs_found ? sha1_from_ref : sha1; + r = resolve_ref(mkpath(*p, len, str), this_result, 1, NULL); + if (r) { + if (!refs_found++) + *ref = xstrdup(r); + if (!warn_ambiguous_refs) + break; + } + } + return refs_found; +} + +static int get_sha1_basic(const char *str, int len, unsigned char *sha1) +{ static const char *warning = "warning: refname '%.*s' is ambiguous.\n"; - const char **p, *ref; char *real_ref = NULL; int refs_found = 0; int at, reflog_len; - unsigned char *this_result; - unsigned char sha1_from_ref[20]; if (len == 40 && !get_sha1_hex(str, sha1)) return 0; @@ -273,16 +292,7 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1) if (ambiguous_path(str, len)) return -1; - for (p = fmt; *p; p++) { - this_result = refs_found ? sha1_from_ref : sha1; - ref = resolve_ref(mkpath(*p, len, str), this_result, 1, NULL); - if (ref) { - if (!refs_found++) - real_ref = xstrdup(ref); - if (!warn_ambiguous_refs) - break; - } - } + refs_found = dwim_ref(str, len, sha1, &real_ref); if (!refs_found) return -1; |