Skip to content

Commit 4dcff63

Browse files
author
Junio C Hamano
committed
get_tree_entry(): make it available from tree-walk
Signed-off-by: Junio C Hamano <junkio@cox.net>
1 parent f3ab49d commit 4dcff63

File tree

3 files changed

+52
-52
lines changed

3 files changed

+52
-52
lines changed

sha1_name.c

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -450,58 +450,6 @@ static int get_sha1_1(const char *name, int len, unsigned char *sha1)
450450
return get_short_sha1(name, len, sha1, 0);
451451
}
452452

453-
static int get_tree_entry(const unsigned char *, const char *, unsigned char *, unsigned *);
454-
455-
static int find_tree_entry(struct tree_desc *t, const char *name, unsigned char *result, unsigned *mode)
456-
{
457-
int namelen = strlen(name);
458-
while (t->size) {
459-
const char *entry;
460-
const unsigned char *sha1;
461-
int entrylen, cmp;
462-
463-
sha1 = tree_entry_extract(t, &entry, mode);
464-
update_tree_entry(t);
465-
entrylen = strlen(entry);
466-
if (entrylen > namelen)
467-
continue;
468-
cmp = memcmp(name, entry, entrylen);
469-
if (cmp > 0)
470-
continue;
471-
if (cmp < 0)
472-
break;
473-
if (entrylen == namelen) {
474-
memcpy(result, sha1, 20);
475-
return 0;
476-
}
477-
if (name[entrylen] != '/')
478-
continue;
479-
if (!S_ISDIR(*mode))
480-
break;
481-
if (++entrylen == namelen) {
482-
memcpy(result, sha1, 20);
483-
return 0;
484-
}
485-
return get_tree_entry(sha1, name + entrylen, result, mode);
486-
}
487-
return -1;
488-
}
489-
490-
static int get_tree_entry(const unsigned char *tree_sha1, const char *name, unsigned char *sha1, unsigned *mode)
491-
{
492-
int retval;
493-
void *tree;
494-
struct tree_desc t;
495-
496-
tree = read_object_with_reference(tree_sha1, tree_type, &t.size, NULL);
497-
if (!tree)
498-
return -1;
499-
t.buf = tree;
500-
retval = find_tree_entry(&t, name, sha1, mode);
501-
free(tree);
502-
return retval;
503-
}
504-
505453
/*
506454
* This is like "get_sha1_basic()", except it allows "sha1 expressions",
507455
* notably "xyz^" for "parent of xyz"

tree-walk.c

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,3 +115,53 @@ void traverse_trees(int n, struct tree_desc *t, const char *base, traverse_callb
115115
free(entry);
116116
}
117117

118+
static int find_tree_entry(struct tree_desc *t, const char *name, unsigned char *result, unsigned *mode)
119+
{
120+
int namelen = strlen(name);
121+
while (t->size) {
122+
const char *entry;
123+
const unsigned char *sha1;
124+
int entrylen, cmp;
125+
126+
sha1 = tree_entry_extract(t, &entry, mode);
127+
update_tree_entry(t);
128+
entrylen = strlen(entry);
129+
if (entrylen > namelen)
130+
continue;
131+
cmp = memcmp(name, entry, entrylen);
132+
if (cmp > 0)
133+
continue;
134+
if (cmp < 0)
135+
break;
136+
if (entrylen == namelen) {
137+
memcpy(result, sha1, 20);
138+
return 0;
139+
}
140+
if (name[entrylen] != '/')
141+
continue;
142+
if (!S_ISDIR(*mode))
143+
break;
144+
if (++entrylen == namelen) {
145+
memcpy(result, sha1, 20);
146+
return 0;
147+
}
148+
return get_tree_entry(sha1, name + entrylen, result, mode);
149+
}
150+
return -1;
151+
}
152+
153+
int get_tree_entry(const unsigned char *tree_sha1, const char *name, unsigned char *sha1, unsigned *mode)
154+
{
155+
int retval;
156+
void *tree;
157+
struct tree_desc t;
158+
159+
tree = read_object_with_reference(tree_sha1, tree_type, &t.size, NULL);
160+
if (!tree)
161+
return -1;
162+
t.buf = tree;
163+
retval = find_tree_entry(&t, name, sha1, mode);
164+
free(tree);
165+
return retval;
166+
}
167+

tree-walk.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,6 @@ typedef void (*traverse_callback_t)(int n, unsigned long mask, struct name_entry
2222

2323
void traverse_trees(int n, struct tree_desc *t, const char *base, traverse_callback_t callback);
2424

25+
int get_tree_entry(const unsigned char *, const char *, unsigned char *, unsigned *);
26+
2527
#endif

0 commit comments

Comments
 (0)