diff options
author | Junio C Hamano <junkio@cox.net> | 2006-05-07 16:17:43 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-05-07 16:17:43 -0700 |
commit | b0121fb3f279a9cf13aff9da060e742aef3a83fa (patch) | |
tree | 26d975a964cbd7fcbc99e5fc4b1428e7b1d953e6 /cache-tree.c | |
parent | 7f498065e9bf85f6f3e954ec57dedf56fec29e01 (diff) | |
parent | 6bd20358a9b831b3b545284188871bc844245c25 (diff) | |
download | git-b0121fb3f279a9cf13aff9da060e742aef3a83fa.tar.gz |
Merge branch 'jc/gitlink' into next
* jc/gitlink:
write-tree: --prefix=<path>
read-tree: --prefix=<path>/ option.
Diffstat (limited to 'cache-tree.c')
-rw-r--r-- | cache-tree.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/cache-tree.c b/cache-tree.c index a880c97b38..d9f7e1e3dd 100644 --- a/cache-tree.c +++ b/cache-tree.c @@ -529,3 +529,29 @@ struct cache_tree *cache_tree_read(const char *buffer, unsigned long size) return NULL; /* not the whole tree */ return read_one(&buffer, &size); } + +struct cache_tree *cache_tree_find(struct cache_tree *it, const char *path) +{ + while (*path) { + const char *slash; + struct cache_tree_sub *sub; + + slash = strchr(path, '/'); + if (!slash) + slash = path + strlen(path); + /* between path and slash is the name of the + * subtree to look for. + */ + sub = find_subtree(it, path, slash - path, 0); + if (!sub) + return NULL; + it = sub->cache_tree; + if (slash) + while (*slash && *slash == '/') + slash++; + if (!slash || !*slash) + return it; /* prefix ended with slashes */ + path = slash; + } + return it; +} |