Skip to content

rev-list: implement object type filter

Patrick Steinhardt git 5 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v5 Latest8 patches 3 repliesIn review
  2. v48 patches 18 repliesSuperseded
  3. v38 patches 5 repliesSuperseded
Earlier versions · 2
VersionPostedPatchesRepliesStatus
v28 patches18 repliesSuperseded
v17 patches8 repliesSuperseded

Changes in v5 from the cover letter

- 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.

Patches in v5 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/8uploadpack.txt: document implication of `uploadpackfilter.allow`Documentation/config/uploadpack.txt+2 -10 replies
2/8revision: mark commit parents as NOT_USER_GIVENrevision.c revision.h+2 -50 replies
3/8list-objects: move tag processing into its own functionlist-objects.c+9 -20 replies
4/8list-objects: support filtering by tag and commitlist-objects-filter.c list-objects-filter.h list-objects.c+62 -30 replies
5/8list-objects: implement object type filterDocumentation/config/uploadpack.txt Documentation/rev-list-options.txt list-objects-filter-options.c +3 more+144 -30 replies
6/8pack-bitmap: implement object type filterpack-bitmap.c t/t6113-rev-list-bitmap-filters.sh+50 -40 replies
7/8pack-bitmap: implement combined filterpack-bitmap.c t/t6113-rev-list-bitmap-filters.sh+17 -00 replies
8/8rev-list: allow filtering of provided itemsDocumentation/rev-list-options.txt builtin/pack-objects.c builtin/rev-list.c +5 more+104 -140 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v5 yet.

Read the v5 thread

Cover letter [PATCH v5 0/8] rev-list: implement object type filter

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,

Signature · 1 line
2.31.1