this skips all blob objects who's path does not begin with the specified
prefix

Signed-off-by: Robin Ruede <r.ru...@gmail.com>
---
 list-objects.c | 4 +++-
 revision.c     | 4 ++++
 revision.h     | 1 +
 3 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/list-objects.c b/list-objects.c
index f3ca6aa..91a6091 100644
--- a/list-objects.c
+++ b/list-objects.c
@@ -28,7 +28,9 @@ static void process_blob(struct rev_info *revs,
 
        pathlen = path->len;
        strbuf_addstr(path, name);
-       show(obj, path->buf, cb_data);
+       if (!revs->sparse_prefix || starts_with(path->buf, revs->sparse_prefix 
+ 1)) {
+               show(obj, path->buf, cb_data);
+       }
        strbuf_setlen(path, pathlen);
 }
 
diff --git a/revision.c b/revision.c
index edba5b7..a36a796 100644
--- a/revision.c
+++ b/revision.c
@@ -1664,6 +1664,10 @@ static int handle_revision_opt(struct rev_info *revs, 
int argc, const char **arg
        } else if ((argcount = parse_long_opt("skip", argv, &optarg))) {
                revs->skip_count = atoi(optarg);
                return argcount;
+       } else if ((argcount = parse_long_opt("sparse-prefix", argv, &optarg))) 
{
+               if(optarg[0] != '/') return error(N_("sparse prefix must start 
with /"));
+               revs->sparse_prefix = optarg;
+               return argcount;
        } else if ((*arg == '-') && isdigit(arg[1])) {
                /* accept -<digit>, like traditional "head" */
                if (strtol_i(arg + 1, 10, &revs->max_count) < 0 ||
diff --git a/revision.h b/revision.h
index 9fac1a6..2c7c5f2 100644
--- a/revision.h
+++ b/revision.h
@@ -113,6 +113,7 @@ struct rev_info {
                        ancestry_path:1,
                        first_parent_only:1,
                        line_level_traverse:1;
+       const char *sparse_prefix;
 
        /* Diff flags */
        unsigned int    diff:1,
-- 
2.9.1.283.g3ca5b4c.dirty

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to