|  | #!/bin/sh | 
|  |  | 
|  | test_description='some bundle related tests' | 
|  | GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main | 
|  | export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME | 
|  |  | 
|  | . ./test-lib.sh | 
|  |  | 
|  | test_expect_success 'setup' ' | 
|  | test_oid_cache <<-EOF && | 
|  | version sha1:2 | 
|  | version sha256:3 | 
|  | EOF | 
|  | test_commit initial && | 
|  | test_tick && | 
|  | git tag -m tag tag && | 
|  | test_commit second && | 
|  | test_commit third && | 
|  | git tag -d initial && | 
|  | git tag -d second && | 
|  | git tag -d third | 
|  | ' | 
|  |  | 
|  | test_expect_success '"verify" needs a worktree' ' | 
|  | git bundle create tip.bundle -1 main && | 
|  | nongit test_must_fail git bundle verify ../tip.bundle 2>err && | 
|  | test_i18ngrep "need a repository" err | 
|  | ' | 
|  |  | 
|  | test_expect_success 'annotated tags can be excluded by rev-list options' ' | 
|  | git bundle create bundle --all --since=7.Apr.2005.15:14:00.-0700 && | 
|  | git ls-remote bundle > output && | 
|  | grep tag output && | 
|  | git bundle create bundle --all --since=7.Apr.2005.15:16:00.-0700 && | 
|  | git ls-remote bundle > output && | 
|  | ! grep tag output | 
|  | ' | 
|  |  | 
|  | test_expect_success 'die if bundle file cannot be created' ' | 
|  | mkdir adir && | 
|  | test_must_fail git bundle create adir --all | 
|  | ' | 
|  |  | 
|  | test_expect_success 'bundle --stdin' ' | 
|  | echo main | git bundle create stdin-bundle.bdl --stdin && | 
|  | git ls-remote stdin-bundle.bdl >output && | 
|  | grep main output | 
|  | ' | 
|  |  | 
|  | test_expect_success 'bundle --stdin <rev-list options>' ' | 
|  | echo main | git bundle create hybrid-bundle.bdl --stdin tag && | 
|  | git ls-remote hybrid-bundle.bdl >output && | 
|  | grep main output | 
|  | ' | 
|  |  | 
|  | test_expect_success 'empty bundle file is rejected' ' | 
|  | : >empty-bundle && | 
|  | test_must_fail git fetch empty-bundle | 
|  | ' | 
|  |  | 
|  | # This triggers a bug in older versions where the resulting line (with | 
|  | # --pretty=oneline) was longer than a 1024-char buffer. | 
|  | test_expect_success 'ridiculously long subject in boundary' ' | 
|  | : >file4 && | 
|  | test_tick && | 
|  | git add file4 && | 
|  | printf "%01200d\n" 0 | git commit -F - && | 
|  | test_commit fifth && | 
|  | git bundle create long-subject-bundle.bdl HEAD^..HEAD && | 
|  | git bundle list-heads long-subject-bundle.bdl >heads && | 
|  | test -s heads && | 
|  | git fetch long-subject-bundle.bdl && | 
|  | sed -n "/^-/{p;q;}" long-subject-bundle.bdl >boundary && | 
|  | grep "^-$OID_REGEX " boundary | 
|  | ' | 
|  |  | 
|  | test_expect_success 'prerequisites with an empty commit message' ' | 
|  | : >file1 && | 
|  | git add file1 && | 
|  | test_tick && | 
|  | git commit --allow-empty-message -m "" && | 
|  | test_commit file2 && | 
|  | git bundle create bundle HEAD^.. && | 
|  | git bundle verify bundle | 
|  | ' | 
|  |  | 
|  | test_expect_success 'failed bundle creation does not leave cruft' ' | 
|  | # This fails because the bundle would be empty. | 
|  | test_must_fail git bundle create fail.bundle main..main && | 
|  | test_path_is_missing fail.bundle.lock | 
|  | ' | 
|  |  | 
|  | test_expect_success 'fetch SHA-1 from bundle' ' | 
|  | test_create_repo foo && | 
|  | test_commit -C foo x && | 
|  | git -C foo bundle create tip.bundle -1 main && | 
|  | git -C foo rev-parse HEAD >hash && | 
|  |  | 
|  | # Exercise to ensure that fetching a SHA-1 from a bundle works with no | 
|  | # errors | 
|  | git fetch --no-tags foo/tip.bundle "$(cat hash)" | 
|  | ' | 
|  |  | 
|  | test_expect_success 'git bundle uses expected default format' ' | 
|  | git bundle create bundle HEAD^.. && | 
|  | head -n1 bundle | grep "^# v$(test_oid version) git bundle$" | 
|  | ' | 
|  |  | 
|  | test_expect_success 'git bundle v3 has expected contents' ' | 
|  | git branch side HEAD && | 
|  | git bundle create --version=3 bundle HEAD^..side && | 
|  | head -n2 bundle >actual && | 
|  | cat >expect <<-EOF && | 
|  | # v3 git bundle | 
|  | @object-format=$(test_oid algo) | 
|  | EOF | 
|  | test_cmp expect actual && | 
|  | git bundle verify bundle | 
|  | ' | 
|  |  | 
|  | test_expect_success 'git bundle v3 rejects unknown capabilities' ' | 
|  | cat >new <<-EOF && | 
|  | # v3 git bundle | 
|  | @object-format=$(test_oid algo) | 
|  | @unknown=silly | 
|  | EOF | 
|  | test_must_fail git bundle verify new 2>output && | 
|  | test_i18ngrep "unknown capability .unknown=silly." output | 
|  | ' | 
|  |  | 
|  | test_done |