{"thread":{"id":"6445","subject":"[PATCH 1/3] dwim_ref(): Separate name-to-ref DWIM code out.","startedAt":"2007-01-19T23:51:05Z","lastAt":"2007-01-19T23:51:05Z","messageCount":1,"participants":["Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":3},"messages":[{"id":"32103","messageId":"7vtzymd192.fsf@assigned-by-dhcp.cox.net","threadId":"6445","inReplyTo":null,"subject":"[PATCH 1/3] dwim_ref(): Separate name-to-ref DWIM code out.","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2007-01-19T23:51:05Z","receivedAt":"2007-01-19T23:51:05Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"I'll be using this in another function to figure out what to\npass to resolve_ref().\n\nSigned-off-by: Junio C Hamano <junkio@cox.net>\n---\n cache.h     |    2 ++\n sha1_name.c |   38 ++++++++++++++++++++++++--------------\n 2 files changed, 26 insertions(+), 14 deletions(-)\n\ndiff --git a/cache.h b/cache.h\nindex e6e19bd..a218db3 100644\n--- a/cache.h\n+++ b/cache.h\n@@ -299,6 +299,8 @@ extern int get_sha1_hex(const char *hex, unsigned char *sha1);\n extern char *sha1_to_hex(const unsigned char *sha1);\t/* static buffer result! */\n extern int read_ref(const char *filename, unsigned char *sha1);\n extern const char *resolve_ref(const char *path, unsigned char *sha1, int, int *);\n+extern int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref);\n+\n extern int create_symref(const char *ref, const char *refs_heads_master);\n extern int validate_headref(const char *ref);\n \ndiff --git a/sha1_name.c b/sha1_name.c\nindex 6d7cd78..ae31851 100644\n--- a/sha1_name.c\n+++ b/sha1_name.c\n@@ -235,7 +235,7 @@ static int ambiguous_path(const char *path, int len)\n \treturn slash;\n }\n \n-static int get_sha1_basic(const char *str, int len, unsigned char *sha1)\n+int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref)\n {\n \tstatic const char *fmt[] = {\n \t\t\"%.*s\",\n@@ -246,13 +246,32 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1)\n \t\t\"refs/remotes/%.*s/HEAD\",\n \t\tNULL\n \t};\n+\tconst char **p, *r;\n+\tint refs_found = 0;\n+\n+\t*ref = NULL;\n+\tfor (p = fmt; *p; p++) {\n+\t\tunsigned char sha1_from_ref[20];\n+\t\tunsigned char *this_result;\n+\n+\t\tthis_result = refs_found ? sha1_from_ref : sha1;\n+\t\tr = resolve_ref(mkpath(*p, len, str), this_result, 1, NULL);\n+\t\tif (r) {\n+\t\t\tif (!refs_found++)\n+\t\t\t\t*ref = xstrdup(r);\n+\t\t\tif (!warn_ambiguous_refs)\n+\t\t\t\tbreak;\n+\t\t}\n+\t}\n+\treturn refs_found;\n+}\n+\n+static int get_sha1_basic(const char *str, int len, unsigned char *sha1)\n+{\n \tstatic const char *warning = \"warning: refname '%.*s' is ambiguous.\\n\";\n-\tconst char **p, *ref;\n \tchar *real_ref = NULL;\n \tint refs_found = 0;\n \tint at, reflog_len;\n-\tunsigned char *this_result;\n-\tunsigned char sha1_from_ref[20];\n \n \tif (len == 40 && !get_sha1_hex(str, sha1))\n \t\treturn 0;\n@@ -273,16 +292,7 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1)\n \tif (ambiguous_path(str, len))\n \t\treturn -1;\n \n-\tfor (p = fmt; *p; p++) {\n-\t\tthis_result = refs_found ? sha1_from_ref : sha1;\n-\t\tref = resolve_ref(mkpath(*p, len, str), this_result, 1, NULL);\n-\t\tif (ref) {\n-\t\t\tif (!refs_found++)\n-\t\t\t\treal_ref = xstrdup(ref);\n-\t\t\tif (!warn_ambiguous_refs)\n-\t\t\t\tbreak;\n-\t\t}\n-\t}\n+\trefs_found = dwim_ref(str, len, sha1, &real_ref);\n \n \tif (!refs_found)\n \t\treturn -1;\n-- \n1.5.0.rc1.gcb48c\n"}]}