mbox series

[v5,0/8] rev-list: implement object type filter

Message ID cover.1618832437.git.ps@pks.im (mailing list archive)
Headers show
Series rev-list: implement object type filter | expand

Message

Patrick Steinhardt April 19, 2021, 11:46 a.m. UTC
Hi,

this is the fifth version of my patch series which implements a new
`object:type` filter for git-rev-list(1) and git-upload-pack(1) and
extends support for bitmap indices to work with combined filters.

Changes compared to v4:

    - I'm now explicitly passing `strlen(v0)` to
      `type_from_string_gently()` to be prepared for the future
      semantics change here.

    - The error message printed in case the user passes in invalid
      object type to `--filter=object:type=` now prints the wrong
      value passed by the user.

    - Fixed missing header in list-objects-filter-options.h.

    - Tests now use test_create_repo and test_commit.

    - Removed a needless subshell in the tests.

I hope that this catches all feedback and that I didn't misunderstand or
miss something. If I did, please give me a shout!

Patrick

Patrick Steinhardt (8):
  uploadpack.txt: document implication of `uploadpackfilter.allow`
  revision: mark commit parents as NOT_USER_GIVEN
  list-objects: move tag processing into its own function
  list-objects: support filtering by tag and commit
  list-objects: implement object type filter
  pack-bitmap: implement object type filter
  pack-bitmap: implement combined filter
  rev-list: allow filtering of provided items

 Documentation/config/uploadpack.txt |   9 ++-
 Documentation/rev-list-options.txt  |   8 ++
 builtin/pack-objects.c              |   2 +-
 builtin/rev-list.c                  |  36 ++++++---
 list-objects-filter-options.c       |  15 ++++
 list-objects-filter-options.h       |   3 +
 list-objects-filter.c               | 116 ++++++++++++++++++++++++++++
 list-objects-filter.h               |   2 +
 list-objects.c                      |  30 ++++++-
 pack-bitmap.c                       |  45 +++++++++--
 pack-bitmap.h                       |   3 +-
 reachable.c                         |   2 +-
 revision.c                          |   4 +-
 revision.h                          |   3 -
 t/t6112-rev-list-filters-objects.sh |  72 +++++++++++++++++
 t/t6113-rev-list-bitmap-filters.sh  |  68 +++++++++++++++-
 16 files changed, 388 insertions(+), 30 deletions(-)

Range-diff against v4:
1:  f80b9570d4 = 1:  bcc81336b1 uploadpack.txt: document implication of `uploadpackfilter.allow`
2:  46c1952405 = 2:  ffe8e2bf73 revision: mark commit parents as NOT_USER_GIVEN
3:  3d792f6339 = 3:  21d7f06d0a list-objects: move tag processing into its own function
4:  674da0f9ac = 4:  b5d6ab6b4a list-objects: support filtering by tag and commit
5:  d22a5fd37d ! 5:  f462745290 list-objects: implement object type filter
    @@ list-objects-filter-options.c: static int gently_parse_list_objects_filter(
      		return 1;
      
     +	} else if (skip_prefix(arg, "object:type=", &v0)) {
    -+		int type = type_from_string_gently(v0, -1, 1);
    ++		int type = type_from_string_gently(v0, strlen(v0), 1);
     +		if (type < 0) {
    -+			strbuf_addstr(errbuf, _("expected 'object:type=<type>'"));
    ++			strbuf_addf(errbuf, _("'%s' for 'object:type=<type>' is"
    ++					      "not a valid object type"), v0);
     +			return 1;
     +		}
     +
    @@ list-objects-filter-options.c: static int gently_parse_list_objects_filter(
      
     
      ## list-objects-filter-options.h ##
    +@@
    + #ifndef LIST_OBJECTS_FILTER_OPTIONS_H
    + #define LIST_OBJECTS_FILTER_OPTIONS_H
    + 
    ++#include "cache.h"
    + #include "parse-options.h"
    + #include "string-list.h"
    + 
     @@ list-objects-filter-options.h: enum list_objects_filter_choice {
      	LOFC_BLOB_LIMIT,
      	LOFC_TREE_DEPTH,
    @@ t/t6112-rev-list-filters-objects.sh: test_expect_success 'verify blob:limit=1m'
     +# Test object:type=<type> filter.
     +
     +test_expect_success 'setup object-type' '
    -+	git init object-type &&
    -+	echo contents >object-type/blob &&
    -+	git -C object-type add blob &&
    -+	git -C object-type commit -m commit-message &&
    ++	test_create_repo object-type &&
    ++	test_commit --no-tag -C object-type message blob &&
     +	git -C object-type tag tag -m tag-message
     +'
     +
    @@ t/t6112-rev-list-filters-objects.sh: test_expect_success 'verify blob:limit=1m'
     +'
     +
     +test_expect_success 'verify object:type=blob prints blob and commit' '
    -+	(
    -+		git -C object-type rev-parse HEAD &&
    -+		printf "%s blob\n" $(git -C object-type rev-parse HEAD:blob)
    -+	) >expected &&
    ++	git -C object-type rev-parse HEAD >expected &&
    ++	printf "%s blob\n" $(git -C object-type rev-parse HEAD:blob) >>expected &&
     +	git -C object-type rev-list --objects --filter=object:type=blob HEAD >actual &&
     +	test_cmp expected actual
     +'
6:  17c9f66bbc = 6:  90c80c1efa pack-bitmap: implement object type filter
7:  759ac54bb2 = 7:  9726e69861 pack-bitmap: implement combined filter
8:  c779d222cf ! 8:  fce3551e48 rev-list: allow filtering of provided items
    @@ pack-bitmap.c: struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
     
      ## pack-bitmap.h ##
     @@ pack-bitmap.h: void traverse_bitmap_commit_list(struct bitmap_index *,
    - 				 show_reachable_fn show_reachable);
      void test_bitmap_walk(struct rev_info *revs);
    + int test_bitmap_commits(struct repository *r);
      struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
     -					 struct list_objects_filter_options *filter);
     +					 struct list_objects_filter_options *filter,

Comments

Junio C Hamano April 19, 2021, 11:16 p.m. UTC | #1
Patrick Steinhardt <ps@pks.im> writes:

> Hi,
>
> this is the fifth version of my patch series which implements a new
> `object:type` filter for git-rev-list(1) and git-upload-pack(1) and
> extends support for bitmap indices to work with combined filters.
>
> Changes compared to v4:
>
>     - I'm now explicitly passing `strlen(v0)` to
>       `type_from_string_gently()` to be prepared for the future
>       semantics change here.
>
>     - The error message printed in case the user passes in invalid
>       object type to `--filter=object:type=` now prints the wrong
>       value passed by the user.
>
>     - Fixed missing header in list-objects-filter-options.h.
>
>     - Tests now use test_create_repo and test_commit.
>
>     - Removed a needless subshell in the tests.
>
> I hope that this catches all feedback and that I didn't misunderstand or
> miss something. If I did, please give me a shout!

Thanks.  Will queue and wait.

I am expecting to go offline for about a week starting 21st or so;
hopefully the topyc is ready to merge it to 'next' by the time I
come back online.
Jeff King April 23, 2021, 9:13 a.m. UTC | #2
On Mon, Apr 19, 2021 at 04:16:58PM -0700, Junio C Hamano wrote:

> Patrick Steinhardt <ps@pks.im> writes:
> 
> > Hi,
> >
> > this is the fifth version of my patch series which implements a new
> > `object:type` filter for git-rev-list(1) and git-upload-pack(1) and
> > extends support for bitmap indices to work with combined filters.
> >
> > Changes compared to v4:
> >
> >     - I'm now explicitly passing `strlen(v0)` to
> >       `type_from_string_gently()` to be prepared for the future
> >       semantics change here.
> >
> >     - The error message printed in case the user passes in invalid
> >       object type to `--filter=object:type=` now prints the wrong
> >       value passed by the user.
> >
> >     - Fixed missing header in list-objects-filter-options.h.
> >
> >     - Tests now use test_create_repo and test_commit.
> >
> >     - Removed a needless subshell in the tests.
> >
> > I hope that this catches all feedback and that I didn't misunderstand or
> > miss something. If I did, please give me a shout!
> 
> Thanks.  Will queue and wait.
> 
> I am expecting to go offline for about a week starting 21st or so;
> hopefully the topyc is ready to merge it to 'next' by the time I
> come back online.

This iteration looks good to me.

-Peff
Junio C Hamano April 28, 2021, 2:18 a.m. UTC | #3
Jeff King <peff@peff.net> writes:

>> Thanks.  Will queue and wait.
>> 
>> I am expecting to go offline for about a week starting 21st or so;
>> hopefully the topyc is ready to merge it to 'next' by the time I
>> come back online.
>
> This iteration looks good to me.

Thanks, both.