mirror of
https://github.com/git/git.git
synced 2024-12-01 14:03:34 +08:00
ce5b6f9be8
The functionality to list tree objects in the order they were seen while traversing the commits will be used in one of the next commits, where we teach `git describe` to describe not only commits, but blobs, too. The change in list-objects.c is rather minimal as we'll be re-using the infrastructure put in place of the revision walking machinery. For example one could expect that add_pending_tree is not called, but rather commit->tree is directly passed to the tree traversal function. This however requires a lot more code than just emptying the queue containing trees after each commit. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
78 lines
1.6 KiB
Bash
Executable File
78 lines
1.6 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
test_description='rev-list testing in-commit-order'
|
|
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success 'setup a commit history with trees, blobs' '
|
|
for x in one two three four
|
|
do
|
|
echo $x >$x &&
|
|
git add $x &&
|
|
git commit -m "add file $x" ||
|
|
return 1
|
|
done &&
|
|
for x in four three
|
|
do
|
|
git rm $x &&
|
|
git commit -m "remove $x" ||
|
|
return 1
|
|
done
|
|
'
|
|
|
|
test_expect_success 'rev-list --in-commit-order' '
|
|
git rev-list --in-commit-order --objects HEAD >actual.raw &&
|
|
cut -c 1-40 >actual <actual.raw &&
|
|
|
|
git cat-file --batch-check="%(objectname)" >expect.raw <<-\EOF &&
|
|
HEAD^{commit}
|
|
HEAD^{tree}
|
|
HEAD^{tree}:one
|
|
HEAD^{tree}:two
|
|
HEAD~1^{commit}
|
|
HEAD~1^{tree}
|
|
HEAD~1^{tree}:three
|
|
HEAD~2^{commit}
|
|
HEAD~2^{tree}
|
|
HEAD~2^{tree}:four
|
|
HEAD~3^{commit}
|
|
# HEAD~3^{tree} skipped, same as HEAD~1^{tree}
|
|
HEAD~4^{commit}
|
|
# HEAD~4^{tree} skipped, same as HEAD^{tree}
|
|
HEAD~5^{commit}
|
|
HEAD~5^{tree}
|
|
EOF
|
|
grep -v "#" >expect <expect.raw &&
|
|
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'rev-list lists blobs and trees after commits' '
|
|
git rev-list --objects HEAD >actual.raw &&
|
|
cut -c 1-40 >actual <actual.raw &&
|
|
|
|
git cat-file --batch-check="%(objectname)" >expect.raw <<-\EOF &&
|
|
HEAD^{commit}
|
|
HEAD~1^{commit}
|
|
HEAD~2^{commit}
|
|
HEAD~3^{commit}
|
|
HEAD~4^{commit}
|
|
HEAD~5^{commit}
|
|
HEAD^{tree}
|
|
HEAD^{tree}:one
|
|
HEAD^{tree}:two
|
|
HEAD~1^{tree}
|
|
HEAD~1^{tree}:three
|
|
HEAD~2^{tree}
|
|
HEAD~2^{tree}:four
|
|
# HEAD~3^{tree} skipped, same as HEAD~1^{tree}
|
|
# HEAD~4^{tree} skipped, same as HEAD^{tree}
|
|
HEAD~5^{tree}
|
|
EOF
|
|
grep -v "#" >expect <expect.raw &&
|
|
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_done
|