...but it gives me some ugly dir.c vibes, reminding me of 95c11ecc73f2 (Fix error-prone fill_directory() API; make it only return matches, 2020-04-01) and a slew of related bugs preceding it. Granted, dir.c had this tri-state to deal with (tracked, untracked-but-ignored, untracked-and-not-ignored) and simplifying of whole directories, which don't apply here, so maybe the similarity of "fast-filtering-only-and-rely-on-caller" won't be a problem since the upper level filtering is so much more straightforward. Should this at least be called out in the commit message, though? > } > > exclude_patterns = normalized_exclude_patterns.v; > diff --git a/t/t1419-exclude-refs.sh b/t/t1419-exclude-refs.sh > index fd58260a24..04797aee59 100755 > --- a/t/t1419-exclude-refs.sh > +++ b/t/t1419-exclude-refs.sh > @@ -46,6 +46,10 @@ test_expect_success 'setup' ' > echo "create refs/heads/$name/$i $base" || return 1 > done || return 1 > done >in && > + for i in 5 6 7 > + do > + echo "create refs/heads/bar/4/$i $base" || return 1 > + done >>in && > echo "delete refs/heads/main" >>in && > > git update-ref --stdin <in && > @@ -99,9 +103,17 @@ test_expect_success 'adjacent, non-overlapping excluded regions' ' > esac > ' > > -test_expect_success 'overlapping excluded regions' ' > +test_expect_success 'non-directory excluded regions' ' > for_each_ref__exclude refs/heads refs/heads/ba refs/heads/baz >actual 2>perf && > - for_each_ref refs/heads/foo refs/heads/quux >expect && > + for_each_ref refs/heads/bar refs/heads/foo refs/heads/quux >expect && > + > + test_cmp expect actual && > + assert_jumps 1 perf > +' > + > +test_expect_success 'overlapping excluded regions' ' > + for_each_ref__exclude refs/heads refs/heads/bar refs/heads/bar/4 >actual 2>perf && > + for_each_ref refs/heads/baz refs/heads/foo refs/heads/quux >expect && > > test_cmp expect actual && > assert_jumps 1 perf > -- > 2.49.0.rc1.2.g67c8c5f7978 Other than the one surprise noted above, looks good to me.