git/t/t5553-set-upstream.sh
Martin Ågren c76b84a121 t: don't spuriously close and reopen quotes
In the test scripts, the recommended style is, e.g.:

    test_expect_success 'name' '
        do-something somehow &&
        do-some-more testing
    '

When using this style, any single quote in the multi-line test section
is actually closing the lone single quotes that surround it.

It can be a non-issue in practice:

    test_expect_success 'sed a little' '
        sed -e 's/hi/lo/' in >out # "ok": no whitespace in s/hi/lo/
    '

Or it can be a bug in the test, e.g., because variable interpolation
happens before the test even begins executing:

    v=abc

    test_expect_success 'variable interpolation' '
        v=def &&
        echo '"$v"' # abc
    '

Change several such in-test single quotes to use double quotes instead
or, in a few cases, drop them altogether. These were identified using
some crude grepping. We're not fixing any test bugs here, but we're
hopefully making these tests slightly easier to grok and to maintain.

There are legitimate use cases for closing a quote and opening a new
one, e.g., both '\'' and '"'"' can be used to produce a literal single
quote. I'm not touching any of those here.

In t9401, tuck the redirecting ">" to the filename while we're touching
those lines.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2020-08-06 15:14:32 -07:00

178 lines
5.2 KiB
Bash
Executable file

#!/bin/sh
test_description='"git fetch/pull --set-upstream" basic tests.'
. ./test-lib.sh
check_config () {
printf "%s\n" "$2" "$3" >"expect.$1" &&
{
git config "branch.$1.remote" && git config "branch.$1.merge"
} >"actual.$1" &&
test_cmp "expect.$1" "actual.$1"
}
check_config_missing () {
test_expect_code 1 git config "branch.$1.remote" &&
test_expect_code 1 git config "branch.$1.merge"
}
clear_config () {
for branch in "$@"; do
test_might_fail git config --unset-all "branch.$branch.remote"
test_might_fail git config --unset-all "branch.$branch.merge"
done
}
ensure_fresh_upstream () {
rm -rf parent && git init --bare parent
}
test_expect_success 'setup bare parent fetch' '
ensure_fresh_upstream &&
git remote add upstream parent
'
test_expect_success 'setup commit on master and other fetch' '
test_commit one &&
git push upstream master &&
git checkout -b other &&
test_commit two &&
git push upstream other
'
# tests for fetch --set-upstream
test_expect_success 'fetch --set-upstream does not set upstream w/o branch' '
clear_config master other &&
git checkout master &&
git fetch --set-upstream upstream &&
check_config_missing master &&
check_config_missing other
'
test_expect_success 'fetch --set-upstream upstream master sets branch master but not other' '
clear_config master other &&
git fetch --set-upstream upstream master &&
check_config master upstream refs/heads/master &&
check_config_missing other
'
test_expect_success 'fetch --set-upstream upstream other sets branch other' '
clear_config master other &&
git fetch --set-upstream upstream other &&
check_config master upstream refs/heads/other &&
check_config_missing other
'
test_expect_success 'fetch --set-upstream master:other does not set the branch other2' '
clear_config other2 &&
git fetch --set-upstream upstream master:other2 &&
check_config_missing other2
'
test_expect_success 'fetch --set-upstream http://nosuchdomain.example.com fails with invalid url' '
# master explicitly not cleared, we check that it is not touched from previous value
clear_config other other2 &&
test_must_fail git fetch --set-upstream http://nosuchdomain.example.com &&
check_config master upstream refs/heads/other &&
check_config_missing other &&
check_config_missing other2
'
test_expect_success 'fetch --set-upstream with valid URL sets upstream to URL' '
clear_config other other2 &&
url="file://$PWD" &&
git fetch --set-upstream "$url" &&
check_config master "$url" HEAD &&
check_config_missing other &&
check_config_missing other2
'
# tests for pull --set-upstream
test_expect_success 'setup bare parent pull' '
git remote rm upstream &&
ensure_fresh_upstream &&
git remote add upstream parent
'
test_expect_success 'setup commit on master and other pull' '
test_commit three &&
git push --tags upstream master &&
test_commit four &&
git push upstream other
'
test_expect_success 'pull --set-upstream upstream master sets branch master but not other' '
clear_config master other &&
git pull --set-upstream upstream master &&
check_config master upstream refs/heads/master &&
check_config_missing other
'
test_expect_success 'pull --set-upstream master:other2 does not set the branch other2' '
clear_config other2 &&
git pull --set-upstream upstream master:other2 &&
check_config_missing other2
'
test_expect_success 'pull --set-upstream upstream other sets branch master' '
clear_config master other &&
git pull --set-upstream upstream other &&
check_config master upstream refs/heads/other &&
check_config_missing other
'
test_expect_success 'pull --set-upstream upstream tag does not set the tag' '
clear_config three &&
git pull --tags --set-upstream upstream three &&
check_config_missing three
'
test_expect_success 'pull --set-upstream http://nosuchdomain.example.com fails with invalid url' '
# master explicitly not cleared, we check that it is not touched from previous value
clear_config other other2 three &&
test_must_fail git pull --set-upstream http://nosuchdomain.example.com &&
check_config master upstream refs/heads/other &&
check_config_missing other &&
check_config_missing other2 &&
check_config_missing three
'
test_expect_success 'pull --set-upstream upstream HEAD sets branch HEAD' '
clear_config master other &&
git pull --set-upstream upstream HEAD &&
check_config master upstream HEAD &&
git checkout other &&
git pull --set-upstream upstream HEAD &&
check_config other upstream HEAD
'
test_expect_success 'pull --set-upstream upstream with more than one branch does nothing' '
clear_config master three &&
git pull --set-upstream upstream master three &&
check_config_missing master &&
check_config_missing three
'
test_expect_success 'pull --set-upstream with valid URL sets upstream to URL' '
clear_config master other other2 &&
git checkout master &&
url="file://$PWD" &&
git pull --set-upstream "$url" &&
check_config master "$url" HEAD &&
check_config_missing other &&
check_config_missing other2
'
test_expect_success 'pull --set-upstream with valid URL and branch sets branch' '
clear_config master other other2 &&
git checkout master &&
url="file://$PWD" &&
git pull --set-upstream "$url" master &&
check_config master "$url" refs/heads/master &&
check_config_missing other &&
check_config_missing other2
'
test_done