{"thread":{"id":"3924","subject":"[PATCH] sha1_name.c: prepare to make get_tree_entry() reusable from others.","startedAt":"2006-04-19T20:01:13Z","lastAt":"2006-04-19T20:01:13Z","messageCount":1,"participants":["Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"18887","messageId":"7v8xq18hdi.fsf@assigned-by-dhcp.cox.net","threadId":"3924","inReplyTo":null,"subject":"[PATCH] sha1_name.c: prepare to make get_tree_entry() reusable from others.","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2006-04-19T20:01:13Z","receivedAt":"2006-04-19T20:01:13Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Make the mode information extracted from the tree available.\n\nSigned-off-by: Junio C Hamano <junkio@cox.net>\n---\n\n * This comes on top of the extended SHA1 expression sha1:path\n   patch Linus did.\n\n sha1_name.c |   19 ++++++++++---------\n 1 files changed, 10 insertions(+), 9 deletions(-)\n\ndiff --git a/sha1_name.c b/sha1_name.c\nindex 0cd1139..35e8dfb 100644\n--- a/sha1_name.c\n+++ b/sha1_name.c\n@@ -450,18 +450,17 @@ static int get_sha1_1(const char *name, \n \treturn get_short_sha1(name, len, sha1, 0);\n }\n \n-static int get_tree_entry(const unsigned char *, const char *, unsigned char *);\n+static int get_tree_entry(const unsigned char *, const char *, unsigned char *, unsigned *);\n \n-static int find_tree_entry(struct tree_desc *t, const char *name, unsigned char *result)\n+static int find_tree_entry(struct tree_desc *t, const char *name, unsigned char *result, unsigned *mode)\n {\n \tint namelen = strlen(name);\n \twhile (t->size) {\n \t\tconst char *entry;\n \t\tconst unsigned char *sha1;\n \t\tint entrylen, cmp;\n-\t\tunsigned mode;\n \n-\t\tsha1 = tree_entry_extract(t, &entry, &mode);\n+\t\tsha1 = tree_entry_extract(t, &entry, mode);\n \t\tupdate_tree_entry(t);\n \t\tentrylen = strlen(entry);\n \t\tif (entrylen > namelen)\n@@ -477,18 +476,18 @@ static int find_tree_entry(struct tree_d\n \t\t}\n \t\tif (name[entrylen] != '/')\n \t\t\tcontinue;\n-\t\tif (!S_ISDIR(mode))\n+\t\tif (!S_ISDIR(*mode))\n \t\t\tbreak;\n \t\tif (++entrylen == namelen) {\n \t\t\tmemcpy(result, sha1, 20);\n \t\t\treturn 0;\n \t\t}\n-\t\treturn get_tree_entry(sha1, name + entrylen, result);\n+\t\treturn get_tree_entry(sha1, name + entrylen, result, mode);\n \t}\n \treturn -1;\n }\n \n-static int get_tree_entry(const unsigned char *tree_sha1, const char *name, unsigned char *sha1)\n+static int get_tree_entry(const unsigned char *tree_sha1, const char *name, unsigned char *sha1, unsigned *mode)\n {\n \tint retval;\n \tvoid *tree;\n@@ -498,7 +497,7 @@ static int get_tree_entry(const unsigned\n \tif (!tree)\n \t\treturn -1;\n \tt.buf = tree;\n-\tretval = find_tree_entry(&t, name, sha1);\n+\tretval = find_tree_entry(&t, name, sha1, mode);\n \tfree(tree);\n \treturn retval;\n }\n@@ -510,6 +509,7 @@ static int get_tree_entry(const unsigned\n int get_sha1(const char *name, unsigned char *sha1)\n {\n \tint ret;\n+\tunsigned unused;\n \n \tprepare_alt_odb();\n \tret = get_sha1_1(name, strlen(name), sha1);\n@@ -518,7 +518,8 @@ int get_sha1(const char *name, unsigned \n \t\tif (cp) {\n \t\t\tunsigned char tree_sha1[20];\n \t\t\tif (!get_sha1_1(name, cp-name, tree_sha1))\n-\t\t\t\treturn get_tree_entry(tree_sha1, cp+1, sha1);\n+\t\t\t\treturn get_tree_entry(tree_sha1, cp+1, sha1,\n+\t\t\t\t\t\t      &unused);\n \t\t}\n \t}\n \treturn ret;\n-- \n1.3.0.g2c4a\n"}]}