diff options
Diffstat (limited to '')
-rwxr-xr-x | t/t5521-pull-options.sh | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/t/t5521-pull-options.sh b/t/t5521-pull-options.sh new file mode 100755 index 0000000..db00c43 --- /dev/null +++ b/t/t5521-pull-options.sh @@ -0,0 +1,256 @@ +#!/bin/sh + +test_description='pull options' + +GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main +export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME + +TEST_PASSES_SANITIZE_LEAK=true +. ./test-lib.sh + +test_expect_success 'setup' ' + mkdir parent && + (cd parent && git init && + echo one >file && git add file && + git commit -m one) +' + +test_expect_success 'git pull -q --no-rebase' ' + mkdir clonedq && + (cd clonedq && git init && + git pull -q --no-rebase "../parent" >out 2>err && + test_must_be_empty err && + test_must_be_empty out) +' + +test_expect_success 'git pull -q --rebase' ' + mkdir clonedqrb && + (cd clonedqrb && git init && + git pull -q --rebase "../parent" >out 2>err && + test_must_be_empty err && + test_must_be_empty out && + git pull -q --rebase "../parent" >out 2>err && + test_must_be_empty err && + test_must_be_empty out) +' + +test_expect_success 'git pull --no-rebase' ' + mkdir cloned && + (cd cloned && git init && + git pull --no-rebase "../parent" >out 2>err && + test -s err && + test_must_be_empty out) +' + +test_expect_success 'git pull --rebase' ' + mkdir clonedrb && + (cd clonedrb && git init && + git pull --rebase "../parent" >out 2>err && + test -s err && + test_must_be_empty out) +' + +test_expect_success 'git pull -v --no-rebase' ' + mkdir clonedv && + (cd clonedv && git init && + git pull -v --no-rebase "../parent" >out 2>err && + test -s err && + test_must_be_empty out) +' + +test_expect_success 'git pull -v --rebase' ' + mkdir clonedvrb && + (cd clonedvrb && git init && + git pull -v --rebase "../parent" >out 2>err && + test -s err && + test_must_be_empty out) +' + +test_expect_success 'git pull -v -q --no-rebase' ' + mkdir clonedvq && + (cd clonedvq && git init && + git pull -v -q --no-rebase "../parent" >out 2>err && + test_must_be_empty out && + test_must_be_empty err) +' + +test_expect_success 'git pull -q -v --no-rebase' ' + mkdir clonedqv && + (cd clonedqv && git init && + git pull -q -v --no-rebase "../parent" >out 2>err && + test_must_be_empty out && + test -s err) +' +test_expect_success 'git pull --cleanup errors early on invalid argument' ' + mkdir clonedcleanup && + (cd clonedcleanup && git init && + test_must_fail git pull --no-rebase --cleanup invalid "../parent" >out 2>err && + test_must_be_empty out && + test -s err) +' + +test_expect_success 'git pull --no-write-fetch-head fails' ' + mkdir clonedwfh && + (cd clonedwfh && git init && + test_expect_code 129 git pull --no-write-fetch-head "../parent" >out 2>err && + test_must_be_empty out && + test_grep "no-write-fetch-head" err) +' + +test_expect_success 'git pull --force' ' + mkdir clonedoldstyle && + (cd clonedoldstyle && git init && + cat >>.git/config <<-\EOF && + [remote "one"] + url = ../parent + fetch = refs/heads/main:refs/heads/mirror + [remote "two"] + url = ../parent + fetch = refs/heads/main:refs/heads/origin + [branch "main"] + remote = two + merge = refs/heads/main + EOF + git pull two && + test_commit A && + git branch -f origin && + git pull --no-rebase --all --force + ) +' + +test_expect_success 'git pull --all' ' + mkdir clonedmulti && + (cd clonedmulti && git init && + cat >>.git/config <<-\EOF && + [remote "one"] + url = ../parent + fetch = refs/heads/*:refs/remotes/one/* + [remote "two"] + url = ../parent + fetch = refs/heads/*:refs/remotes/two/* + [branch "main"] + remote = one + merge = refs/heads/main + EOF + git pull --all + ) +' + +test_expect_success 'git pull --dry-run' ' + test_when_finished "rm -rf clonedry" && + git init clonedry && + ( + cd clonedry && + git pull --dry-run ../parent && + test_path_is_missing .git/FETCH_HEAD && + test_ref_missing refs/heads/main && + test_path_is_missing .git/index && + test_path_is_missing file + ) +' + +test_expect_success 'git pull --all --dry-run' ' + test_when_finished "rm -rf cloneddry" && + git init clonedry && + ( + cd clonedry && + git remote add origin ../parent && + git pull --all --dry-run && + test_path_is_missing .git/FETCH_HEAD && + test_ref_missing refs/remotes/origin/main && + test_path_is_missing .git/index && + test_path_is_missing file + ) +' + +test_expect_success 'git pull --allow-unrelated-histories' ' + test_when_finished "rm -fr src dst" && + git init src && + ( + cd src && + test_commit one && + test_commit two + ) && + git clone src dst && + ( + cd src && + git checkout --orphan side HEAD^ && + test_commit three + ) && + ( + cd dst && + test_must_fail git pull ../src side && + git pull --no-rebase --allow-unrelated-histories ../src side + ) +' + +test_expect_success 'git pull does not add a sign-off line' ' + test_when_finished "rm -fr src dst actual" && + git init src && + test_commit -C src one && + git clone src dst && + test_commit -C src two && + git -C dst pull --no-ff && + git -C dst show -s --pretty="format:%(trailers)" HEAD >actual && + test_must_be_empty actual +' + +test_expect_success 'git pull --no-signoff does not add sign-off line' ' + test_when_finished "rm -fr src dst actual" && + git init src && + test_commit -C src one && + git clone src dst && + test_commit -C src two && + git -C dst pull --no-signoff --no-ff && + git -C dst show -s --pretty="format:%(trailers)" HEAD >actual && + test_must_be_empty actual +' + +test_expect_success 'git pull --signoff add a sign-off line' ' + test_when_finished "rm -fr src dst expected actual" && + echo "Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>" >expected && + git init src && + test_commit -C src one && + git clone src dst && + test_commit -C src two && + git -C dst pull --signoff --no-ff && + git -C dst show -s --pretty="format:%(trailers)" HEAD >actual && + test_cmp expected actual +' + +test_expect_success 'git pull --no-signoff flag cancels --signoff flag' ' + test_when_finished "rm -fr src dst actual" && + git init src && + test_commit -C src one && + git clone src dst && + test_commit -C src two && + git -C dst pull --signoff --no-signoff --no-ff && + git -C dst show -s --pretty="format:%(trailers)" HEAD >actual && + test_must_be_empty actual +' + +test_expect_success 'git pull --no-verify flag passed to merge' ' + test_when_finished "rm -fr src dst actual" && + git init src && + test_commit -C src one && + git clone src dst && + test_hook -C dst commit-msg <<-\EOF && + false + EOF + test_commit -C src two && + git -C dst pull --no-ff --no-verify +' + +test_expect_success 'git pull --no-verify --verify passed to merge' ' + test_when_finished "rm -fr src dst actual" && + git init src && + test_commit -C src one && + git clone src dst && + test_hook -C dst commit-msg <<-\EOF && + false + EOF + test_commit -C src two && + test_must_fail git -C dst pull --no-ff --no-verify --verify +' + +test_done |