Here is a clean re-rollup fixing the issue I found earlier. It fixes a problem
stemming from a discarded exit code, which masked a crash in Git. The crash was
not a bug because an earlier test deleted a loose object file. The fix was to
make that test manipulate a clone rather than the original repo.
An interdiff from v10 is below.
Thank you,
Matt
diff --git a/t/t6112-rev-list-filters-objects.sh
b/t/t6112-rev-list-filters-objects.sh
index 5a61614b1..c8e3d87c4 100755
--- a/t/t6112-rev-list-filters-objects.sh
+++ b/t/t6112-rev-list-filters-objects.sh
@@ -210,16 +210,21 @@ test_expect_success 'verify sparse:oid=oid-ish omits
top-level files' '
test_expect_success 'rev-list W/ --missing=print and --missing=allow-any for
trees' '
TREE=$(git -C r3 rev-parse HEAD:dir1) &&
- rm r3/.git/objects/$(echo $TREE | sed "s|^..|&/|") &&
+ # Create a spare repo because we will be deleting objects from this
one.
+ git clone r3 r3.b &&
- git -C r3 rev-list --quiet --missing=print --objects HEAD
>missing_objs 2>rev_list_err &&
+ rm r3.b/.git/objects/$(echo $TREE | sed "s|^..|&/|") &&
+
+ git -C r3.b rev-list --quiet --missing=print --objects HEAD \
+ >missing_objs 2>rev_list_err &&
echo "?$TREE" >expected &&
test_cmp expected missing_objs &&
# do not complain when a missing tree cannot be parsed
test_must_be_empty rev_list_err &&
- git -C r3 rev-list --missing=allow-any --objects HEAD >objs
2>rev_list_err &&
+ git -C r3.b rev-list --missing=allow-any --objects HEAD \
+ >objs 2>rev_list_err &&
! grep $TREE objs &&
test_must_be_empty rev_list_err
'
@@ -228,12 +233,13 @@ test_expect_success 'rev-list W/ --missing=print and
--missing=allow-any for tre
test_expect_success 'verify tree:0 includes trees in "filtered" output' '
git -C r3 rev-list --quiet --objects --filter-print-omitted \
- --filter=tree:0 HEAD |
- awk -f print_1.awk |
+ --filter=tree:0 HEAD >revs &&
+
+ awk -f print_1.awk revs |
sed s/~// |
- xargs -n1 git -C r3 cat-file -t |
- sort -u >filtered_types &&
+ xargs -n1 git -C r3 cat-file -t >unsorted_filtered_types &&
+ sort -u unsorted_filtered_types >filtered_types &&
printf "blob\ntree\n" >expected &&
test_cmp expected filtered_types
'
Matthew DeVore (8):
list-objects: store common func args in struct
list-objects: refactor to process_tree_contents
list-objects: always parse trees gently
rev-list: handle missing tree objects properly
revision: mark non-user-given objects instead
list-objects-filter: use BUG rather than die
list-objects-filter-options: do not over-strbuf_init
list-objects-filter: implement filter tree:0
Documentation/rev-list-options.txt | 5 +
builtin/rev-list.c | 11 +-
list-objects-filter-options.c | 19 +-
list-objects-filter-options.h | 1 +
list-objects-filter.c | 60 ++++++-
list-objects.c | 232 +++++++++++++------------
revision.c | 1 -
revision.h | 26 ++-
t/t0410-partial-clone.sh | 45 +++++
t/t5317-pack-objects-filter-objects.sh | 41 +++++
t/t5616-partial-clone.sh | 42 +++++
t/t6112-rev-list-filters-objects.sh | 49 ++++++
12 files changed, 404 insertions(+), 128 deletions(-)
--
2.19.0.605.g01d371f741-goog