Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
t5616: end-to-end tests for partial clone
Additional end-to-end tests for partial clone. Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
1 parent
a1c6d7c
commit 35a7ae9
Showing
1 changed file
with
96 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
#!/bin/sh | ||
|
||
test_description='git partial clone' | ||
|
||
. ./test-lib.sh | ||
|
||
# create a normal "src" repo where we can later create new commits. | ||
# expect_1.oids will contain a list of the OIDs of all blobs. | ||
test_expect_success 'setup normal src repo' ' | ||
echo "{print \$1}" >print_1.awk && | ||
echo "{print \$2}" >print_2.awk && | ||
git init src && | ||
for n in 1 2 3 4 | ||
do | ||
echo "This is file: $n" > src/file.$n.txt | ||
git -C src add file.$n.txt | ||
git -C src commit -m "file $n" | ||
git -C src ls-files -s file.$n.txt >>temp | ||
done && | ||
awk -f print_2.awk <temp | sort >expect_1.oids && | ||
test_line_count = 4 expect_1.oids | ||
' | ||
|
||
# bare clone "src" giving "srv.bare" for use as our server. | ||
test_expect_success 'setup bare clone for server' ' | ||
git clone --bare "file://$(pwd)/src" srv.bare && | ||
git -C srv.bare config --local uploadpack.allowfilter 1 && | ||
git -C srv.bare config --local uploadpack.allowanysha1inwant 1 | ||
' | ||
|
||
# do basic partial clone from "srv.bare" | ||
# confirm we are missing all of the known blobs. | ||
# confirm partial clone was registered in the local config. | ||
test_expect_success 'do partial clone 1' ' | ||
git clone --no-checkout --filter=blob:none "file://$(pwd)/srv.bare" pc1 && | ||
git -C pc1 rev-list HEAD --quiet --objects --missing=print \ | ||
| awk -f print_1.awk \ | ||
| sed "s/?//" \ | ||
| sort >observed.oids && | ||
test_cmp expect_1.oids observed.oids && | ||
test "$(git -C pc1 config --local core.repositoryformatversion)" = "1" && | ||
test "$(git -C pc1 config --local extensions.partialclone)" = "origin" && | ||
test "$(git -C pc1 config --local core.partialclonefilter)" = "blob:none" | ||
' | ||
|
||
# checkout master to force dynamic object fetch of blobs at HEAD. | ||
test_expect_success 'verify checkout with dynamic object fetch' ' | ||
git -C pc1 rev-list HEAD --quiet --objects --missing=print >observed && | ||
test_line_count = 4 observed && | ||
git -C pc1 checkout master && | ||
git -C pc1 rev-list HEAD --quiet --objects --missing=print >observed && | ||
test_line_count = 0 observed | ||
' | ||
|
||
# create new commits in "src" repo to establish a blame history on file.1.txt | ||
# and push to "srv.bare". | ||
test_expect_success 'push new commits to server' ' | ||
git -C src remote add srv "file://$(pwd)/srv.bare" && | ||
for x in a b c d e | ||
do | ||
echo "Mod $x" >>src/file.1.txt | ||
git -C src add file.1.txt | ||
git -C src commit -m "mod $x" | ||
done && | ||
git -C src blame master -- file.1.txt >expect.blame && | ||
git -C src push -u srv master | ||
' | ||
|
||
# (partial) fetch in the partial clone repo from the promisor remote. | ||
# verify that fetch inherited the filter-spec from the config and DOES NOT | ||
# have the new blobs. | ||
test_expect_success 'partial fetch inherits filter settings' ' | ||
git -C pc1 fetch origin && | ||
git -C pc1 rev-list master..origin/master --quiet --objects --missing=print >observed && | ||
test_line_count = 5 observed | ||
' | ||
|
||
# force dynamic object fetch using diff. | ||
# we should only get 1 new blob (for the file in origin/master). | ||
test_expect_success 'verify diff causes dynamic object fetch' ' | ||
git -C pc1 diff master..origin/master -- file.1.txt && | ||
git -C pc1 rev-list master..origin/master --quiet --objects --missing=print >observed && | ||
test_line_count = 4 observed | ||
' | ||
|
||
# force full dynamic object fetch of the file's history using blame. | ||
# we should get the intermediate blobs for the file. | ||
test_expect_success 'verify blame causes dynamic object fetch' ' | ||
git -C pc1 blame origin/master -- file.1.txt >observed.blame && | ||
test_cmp expect.blame observed.blame && | ||
git -C pc1 rev-list master..origin/master --quiet --objects --missing=print >observed && | ||
test_line_count = 0 observed | ||
' | ||
|
||
test_done |