Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- list-objects.c | 23 +++++++++++++++++------ 1 files changed, 17 insertions(+), 6 deletions(-) diff --git a/list-objects.c b/list-objects.c index 8953548..1b25b54 100644 --- a/list-objects.c +++ b/list-objects.c @@ -61,12 +61,15 @@ static void process_tree(struct rev_info *revs, struct tree *tree, show_object_fn show, struct name_path *path, - const char *name) + const char *name, + const char *subtree) { struct object *obj = &tree->object; struct tree_desc desc; struct name_entry entry; struct name_path me; + const char *slash; + int subtree_len; if (!revs->tree_objects) return; @@ -82,13 +85,21 @@ static void process_tree(struct rev_info *revs, me.elem = name; me.elem_len = strlen(name); + if (subtree) { + slash = strchr(subtree, '/'); + subtree_len = slash ? slash - subtree : strlen(subtree); + } + init_tree_desc(&desc, tree->buffer, tree->size); while (tree_entry(&desc, &entry)) { - if (S_ISDIR(entry.mode)) - process_tree(revs, - lookup_tree(entry.sha1), - show, &me, entry.path); + if (S_ISDIR(entry.mode)) { + if (!subtree || !strncmp(entry.path, subtree, subtree_len)) + process_tree(revs, + lookup_tree(entry.sha1), + show, &me, entry.path, + slash && slash[1] ? slash+1 : NULL); + } else if (S_ISGITLINK(entry.mode)) process_gitlink(revs, entry.sha1, show, &me, entry.path); @@ -164,7 +175,7 @@ void traverse_commit_list(struct rev_info *revs, } if (obj->type == OBJ_TREE) { process_tree(revs, (struct tree *)obj, show_object, - NULL, name); + NULL, name, core_subtree); continue; } if (obj->type == OBJ_BLOB) { -- 1.7.1.rc1.69.g24c2f7 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html