77
3:tree::$(git rev-parse base^{tree})
78
3:tree::$(git rev-parse base~1^{tree})
79
3:tree::$(git rev-parse base~2^{tree})
80
- 3:tree::$(git rev-parse refs/tags/tree-tag^{})
81
- 3:tree::$(git rev-parse refs/tags/tree-tag2^{})
80
4:blob:a:$(git rev-parse base~2:a)
83
- 5:blob:file2:$(git rev-parse refs/tags/tree-tag2^{}:file2)
84
- 6:tree:a/:$(git rev-parse base:a)
85
- 7:tree:child/:$(git rev-parse refs/tags/tree-tag:child)
86
- 8:blob:child/file:$(git rev-parse refs/tags/tree-tag:child/file)
87
- 9:tree:left/:$(git rev-parse base:left)
88
- 9:tree:left/:$(git rev-parse base~2:left)
89
- 10:blob:left/b:$(git rev-parse base~2:left/b)
90
- 10:blob:left/b:$(git rev-parse base:left/b)
91
- 11:tree:right/:$(git rev-parse topic:right)
92
- 11:tree:right/:$(git rev-parse base~1:right)
93
- 11:tree:right/:$(git rev-parse base~2:right)
94
- 12:blob:right/c:$(git rev-parse base~2:right/c)
95
- 12:blob:right/c:$(git rev-parse topic:right/c)
96
- 13:blob:right/d:$(git rev-parse base~1:right/d)
81
+ 5:tree:/tagged-trees:$(git rev-parse refs/tags/tree-tag^{})
82
+ 5:tree:/tagged-trees:$(git rev-parse refs/tags/tree-tag2^{})
83
+ 6:blob:file2:$(git rev-parse refs/tags/tree-tag2^{}:file2)
84
+ 7:tree:a/:$(git rev-parse base:a)
85
+ 8:tree:child/:$(git rev-parse refs/tags/tree-tag:child)
86
+ 9:blob:child/file:$(git rev-parse refs/tags/tree-tag:child/file)
87
+ 10:tree:left/:$(git rev-parse base:left)
88
+ 10:tree:left/:$(git rev-parse base~2:left)
89
+ 11:blob:left/b:$(git rev-parse base~2:left/b)
90
+ 11:blob:left/b:$(git rev-parse base:left/b)
91
+ 12:tree:right/:$(git rev-parse topic:right)
92
+ 12:tree:right/:$(git rev-parse base~1:right)
93
+ 12:tree:right/:$(git rev-parse base~2:right)
94
+ 13:blob:right/c:$(git rev-parse base~2:right/c)
95
+ 13:blob:right/c:$(git rev-parse topic:right/c)
96
+ 14:blob:right/d:$(git rev-parse base~1:right/d)
97
blobs:10
98
commits:4
99
tags:7
471
3:tree::$(git rev-parse base^{tree})
472
3:tree::$(git rev-parse base~1^{tree})
473
3:tree::$(git rev-parse base~2^{tree})
474
- 3:tree::$(git rev-parse refs/tags/tree-tag^{})
475
- 3:tree::$(git rev-parse refs/tags/tree-tag2^{})
476
- 4:tree:a/:$(git rev-parse base:a)
477
- 5:tree:child/:$(git rev-parse refs/tags/tree-tag:child)
478
- 6:tree:left/:$(git rev-parse base:left)
479
- 6:tree:left/:$(git rev-parse base~2:left)
480
- 7:tree:right/:$(git rev-parse topic:right)
481
- 7:tree:right/:$(git rev-parse base~1:right)
482
- 7:tree:right/:$(git rev-parse base~2:right)
474
+ 4:tree:/tagged-trees:$(git rev-parse refs/tags/tree-tag^{})
475
+ 4:tree:/tagged-trees:$(git rev-parse refs/tags/tree-tag2^{})
476
+ 5:tree:a/:$(git rev-parse base:a)
477
+ 6:tree:child/:$(git rev-parse refs/tags/tree-tag:child)
478
+ 7:tree:left/:$(git rev-parse base:left)
479
+ 7:tree:left/:$(git rev-parse base~2:left)
480
+ 8:tree:right/:$(git rev-parse topic:right)
481
+ 8:tree:right/:$(git rev-parse base~1:right)
482
+ 8:tree:right/:$(git rev-parse base~2:right)
483
blobs:2
484
commits:4
485
tags:7
533
3:tree::$(git rev-parse base^{tree})
534
3:tree::$(git rev-parse base~1^{tree})
535
3:tree::$(git rev-parse base~2^{tree})
536
- 3:tree::$(git rev-parse refs/tags/tree-tag^{})
537
- 3:tree::$(git rev-parse refs/tags/tree-tag2^{})
538
- 4:tree:a/:$(git rev-parse base:a)
539
- 5:tree:child/:$(git rev-parse refs/tags/tree-tag:child)
540
- 6:tree:left/:$(git rev-parse base:left)
541
- 6:tree:left/:$(git rev-parse base~2:left)
542
- 7:tree:right/:$(git rev-parse topic:right)
543
- 7:tree:right/:$(git rev-parse base~1:right)
544
- 7:tree:right/:$(git rev-parse base~2:right)
536
+ 4:tree:/tagged-trees:$(git rev-parse refs/tags/tree-tag^{})
537
+ 4:tree:/tagged-trees:$(git rev-parse refs/tags/tree-tag2^{})
538
+ 5:tree:a/:$(git rev-parse base:a)
539
+ 6:tree:child/:$(git rev-parse refs/tags/tree-tag:child)
540
+ 7:tree:left/:$(git rev-parse base:left)
541
+ 7:tree:left/:$(git rev-parse base~2:left)
542
+ 8:tree:right/:$(git rev-parse topic:right)
543
+ 8:tree:right/:$(git rev-parse base~1:right)
544
+ 8:tree:right/:$(git rev-parse base~2:right)
545
blobs:2
546
commits:4
547
tags:7
572
3:tree::$(git rev-parse base^{tree})
573
3:tree::$(git rev-parse base~1^{tree})
574
3:tree::$(git rev-parse base~2^{tree})
575
- 3:tree::$(git rev-parse refs/tags/tree-tag^{})
576
- 3:tree::$(git rev-parse refs/tags/tree-tag2^{})
575
4:blob:a:$(git rev-parse base~2:a)
578
- 5:tree:a/:$(git rev-parse base:a)
579
- 6:tree:child/:$(git rev-parse refs/tags/tree-tag:child)
580
- 7:tree:left/:$(git rev-parse base:left)
581
- 7:tree:left/:$(git rev-parse base~2:left)
582
- 8:blob:left/b:$(git rev-parse base~2:left/b)
583
- 9:tree:right/:$(git rev-parse topic:right)
584
- 9:tree:right/:$(git rev-parse base~1:right)
585
- 9:tree:right/:$(git rev-parse base~2:right)
586
- 10:blob:right/c:$(git rev-parse base~2:right/c)
587
- 11:blob:right/d:$(git rev-parse base~1:right/d)
576
+ 5:tree:/tagged-trees:$(git rev-parse refs/tags/tree-tag^{})
577
+ 5:tree:/tagged-trees:$(git rev-parse refs/tags/tree-tag2^{})
578
+ 6:tree:a/:$(git rev-parse base:a)
579
+ 7:tree:child/:$(git rev-parse refs/tags/tree-tag:child)
580
+ 8:tree:left/:$(git rev-parse base:left)
581
+ 8:tree:left/:$(git rev-parse base~2:left)
582
+ 9:blob:left/b:$(git rev-parse base~2:left/b)
583
+ 10:tree:right/:$(git rev-parse topic:right)
584
+ 10:tree:right/:$(git rev-parse base~1:right)
585
+ 10:tree:right/:$(git rev-parse base~2:right)
586
+ 11:blob:right/c:$(git rev-parse base~2:right/c)
587
+ 12:blob:right/d:$(git rev-parse base~1:right/d)
588
blobs:6
589
commits:4
590
tags:7
594
test_cmp_sorted expect out
595
'
596
597
+test_expect_success 'all, tree:0 filter' '
598
+ test-tool path-walk --filter=tree:0 -- --all >out &&
599
+
600
+ cat >expect <<-EOF &&
601
+ 0:commit::$(git rev-parse topic)
602
+ 0:commit::$(git rev-parse base)
603
+ 0:commit::$(git rev-parse base~1)
604
+ 0:commit::$(git rev-parse base~2)
605
+ 1:tag:/tags:$(git rev-parse refs/tags/first)
606
+ 1:tag:/tags:$(git rev-parse refs/tags/second.1)
607
+ 1:tag:/tags:$(git rev-parse refs/tags/second.2)
608
+ 1:tag:/tags:$(git rev-parse refs/tags/third)
609
+ 1:tag:/tags:$(git rev-parse refs/tags/fourth)
610
+ 1:tag:/tags:$(git rev-parse refs/tags/tree-tag)
611
+ 1:tag:/tags:$(git rev-parse refs/tags/blob-tag)
612
+ 2:blob:/tagged-blobs:$(git rev-parse refs/tags/blob-tag^{})
613
+ 2:blob:/tagged-blobs:$(git rev-parse refs/tags/blob-tag2^{})
614
+ 3:tree:/tagged-trees:$(git rev-parse refs/tags/tree-tag^{tree})
615
+ 3:tree:/tagged-trees:$(git rev-parse refs/tags/tree-tag2)
616
+ blobs:2
617
+ commits:4
618
+ tags:7
619
+ trees:2
620
+ EOF
621
+
622
+ test_cmp_sorted expect out
623
+'
624
+
625
+test_expect_success 'topic only, tree:0 filter' '
626
+ test-tool path-walk --filter=tree:0 -- topic >out &&
627
+
628
+ cat >expect <<-EOF &&
629
+ 0:commit::$(git rev-parse topic)
630
+ 0:commit::$(git rev-parse base~1)
631
+ 0:commit::$(git rev-parse base~2)
632
+ blobs:0
633
+ commits:3
634
+ tags:0
635
+ trees:0
636
+ EOF
637
+
638
+ test_cmp_sorted expect out
639
+'
640
+
641
+test_expect_success 'tree:1 filter is rejected' '
642
+ test_must_fail test-tool path-walk --filter=tree:1 -- --all 2>err &&
643
+ test_grep "tree:1 filter not supported by the path-walk API" err
644
+'
645
+
646
test_expect_success 'setup sparse filter blob' '
647
# Cone-mode patterns: include root, exclude all dirs, include left/
648
cat >patterns <<-\EOF &&
674
3:tree::$(git rev-parse base^{tree})
675
3:tree::$(git rev-parse base~1^{tree})
676
3:tree::$(git rev-parse base~2^{tree})
628
- 3:tree::$(git rev-parse refs/tags/tree-tag^{})
629
- 3:tree::$(git rev-parse refs/tags/tree-tag2^{})
677
4:blob:a:$(git rev-parse base~2:a)
631
- 5:blob:file2:$(git rev-parse refs/tags/tree-tag2^{}:file2)
632
- 6:tree:a/:$(git rev-parse base:a)
633
- 7:tree:child/:$(git rev-parse refs/tags/tree-tag:child)
634
- 8:tree:left/:$(git rev-parse base:left)
635
- 8:tree:left/:$(git rev-parse base~2:left)
636
- 9:blob:left/b:$(git rev-parse base~2:left/b)
637
- 9:blob:left/b:$(git rev-parse base:left/b)
638
- 10:tree:right/:$(git rev-parse topic:right)
639
- 10:tree:right/:$(git rev-parse base~1:right)
640
- 10:tree:right/:$(git rev-parse base~2:right)
678
+ 5:tree:/tagged-trees:$(git rev-parse refs/tags/tree-tag^{})
679
+ 5:tree:/tagged-trees:$(git rev-parse refs/tags/tree-tag2^{})
680
+ 6:blob:file2:$(git rev-parse refs/tags/tree-tag2^{}:file2)
681
+ 7:tree:a/:$(git rev-parse base:a)
682
+ 8:tree:child/:$(git rev-parse refs/tags/tree-tag:child)
683
+ 9:tree:left/:$(git rev-parse base:left)
684
+ 9:tree:left/:$(git rev-parse base~2:left)
685
+ 10:blob:left/b:$(git rev-parse base~2:left/b)
686
+ 10:blob:left/b:$(git rev-parse base:left/b)
687
+ 11:tree:right/:$(git rev-parse topic:right)
688
+ 11:tree:right/:$(git rev-parse base~1:right)
689
+ 11:tree:right/:$(git rev-parse base~2:right)
690
blobs:6
691
commits:4
692
tags:7