7da7f63cf9
Add a "test_hook" wrapper similar to the existing "test_config"
wrapper added in d960c47a88
(test-lib: add helper functions for
config, 2011-08-17).
This wrapper:
- Will clean up the hook with "test_when_finished", unless --setup is
provided.
- Will error if we clobber a hook, unless --clobber is provided.
- Takes a name like "update" instead of ".git/hooks/update".
- Accepts -C <dir>, like "test_config" and "test_commit".
By using a wrapper we'll be able to easily change all the hook-related
code that assumes that the template-created ".git/hooks" directory is
created by "init", "clone" etc. once another topic follows-up and
changes the test suite to stop creating trash directories using those
templates.
In addition this will make it easy to have the hooks configured using
the "configuration-based hooks" topic, once we get around to
integrating that. I.e. we'll be able to run the tests in a mode where
we sometimes create a .git/hooks/<name>, and other times create a
script in another location, and point the relevant configuration
snippet to it.
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
256 lines
6.3 KiB
Bash
Executable File
256 lines
6.3 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
test_description='pull options'
|
|
|
|
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
|
|
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
|
|
|
|
. ./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_i18ngrep "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_path_is_missing .git/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_path_is_missing .git/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
|