62e7daa0bb
As part of the effort to change the default branch name to `main`, let's prepare t5515. In addition to adjusting the references to the branch name itself, this also requires two commit hashes to be adjusted (actually four, as there is a SHA-1 _and_ a SHA-256 of both). That trick was performed by running sed -i -e 's/master/main/g' -e 's/Master/Main/g' \ -e 's/6c9dec2b923228c9ff994c6cfe4ae16c12408dc5/ecf3b3627b498bdcb735cc4343bf165f76964e9a/g' \ -e 's/8521c3072461fcfe8f32d67f95cc6e6b832a2db2fa29769ffc788bce85ebcd75/fff666109892bb4b1c80cd1649d2d8762a0663db8b5d46c8be98360b64fbba5f/g' \ -e 's/754b754407bf032e9a2f9d5a9ad05ca79a6b228f/b4ab76b1a01ea602209932134a44f1e6bd610832/g' \ -e 's/6c7abaea8a6d8ef4d89877e68462758dc6774690fbbbb0e6d7dd57415c9abde0/380ebae0113f877ce46fcdf39d5bc33e4dc0928db5c5a4d5fdc78381c4d55ae3/g' \ -- t/t5515-*.sh These commit hashes have been determined manually, of course, by running the test after adjusting only the branch names, and then copying the hashes from the log of the failed run. Note: this patch only touches the t5515 script so far, not the supporting material in t/t5515/. The resulting patch would have weighed over 100kB and therefore the Git mailing list would have dropped it. The files in t/t5515/ will be adjusted in the next two commits. As t5515 would fail without these adjustments, we temporarily skip it via the `PREPARE_FOR_MAIN_BRANCH` prereq. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
235 lines
6.5 KiB
Bash
Executable File
235 lines
6.5 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2007 Santi Béjar, based on t4013 by Junio C Hamano
|
|
#
|
|
#
|
|
|
|
test_description='Merge logic in fetch'
|
|
|
|
# NEEDSWORK: If the overspecification of the expected result is reduced, we
|
|
# might be able to run this test in all protocol versions.
|
|
GIT_TEST_PROTOCOL_VERSION=0
|
|
export GIT_TEST_PROTOCOL_VERSION
|
|
|
|
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=master
|
|
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
|
|
|
|
. ./test-lib.sh
|
|
|
|
test_have_prereq PREPARE_FOR_MAIN_BRANCH || {
|
|
test_skip="In transit for the default branch name 'main'"
|
|
test_done
|
|
}
|
|
|
|
build_script () {
|
|
script="$1" &&
|
|
for i in one three_file main topic_2 one_tree three two two2 three2
|
|
do
|
|
echo "s/$(test_oid --hash=sha1 "$i")/$(test_oid "$i")/g" >>"$script"
|
|
done
|
|
}
|
|
|
|
convert_expected () {
|
|
file="$1" &&
|
|
script="$2" &&
|
|
sed -f "$script" "$file" >"$file.tmp" &&
|
|
mv "$file.tmp" "$file"
|
|
}
|
|
|
|
test_expect_success setup '
|
|
GIT_AUTHOR_DATE="2006-06-26 00:00:00 +0000" &&
|
|
GIT_COMMITTER_DATE="2006-06-26 00:00:00 +0000" &&
|
|
export GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&
|
|
|
|
test_oid_cache <<-EOF &&
|
|
one sha1:8e32a6d901327a23ef831511badce7bf3bf46689
|
|
one sha256:8739546433ab1ac72ee93088dce611210effee072b2b586ceac6dde43ebec9ce
|
|
|
|
three_file sha1:0e3b14047d3ee365f4f2a1b673db059c3972589c
|
|
three_file sha256:bc4447d50c07497a8bfe6eef817f2364ecca9d471452e43b52756cc1a908bd32
|
|
|
|
main sha1:ecf3b3627b498bdcb735cc4343bf165f76964e9a
|
|
main sha256:fff666109892bb4b1c80cd1649d2d8762a0663db8b5d46c8be98360b64fbba5f
|
|
|
|
one_tree sha1:22feea448b023a2d864ef94b013735af34d238ba
|
|
one_tree sha256:6e4743f4ef2356b881dda5e91f5c7cdffe870faf350bf7b312f80a20935f5d83
|
|
|
|
three sha1:c61a82b60967180544e3c19f819ddbd0c9f89899
|
|
three sha256:0cc6d1eda617ded715170786e31ba4e2d0185404ec5a3508dd0d73b324860c6a
|
|
|
|
two sha1:525b7fb068d59950d185a8779dc957c77eed73ba
|
|
two sha256:3b21de3440cd38c2a9e9b464adb923f7054949ed4c918e1a0ac4c95cd52774db
|
|
|
|
topic_2 sha1:b4ab76b1a01ea602209932134a44f1e6bd610832
|
|
topic_2 sha256:380ebae0113f877ce46fcdf39d5bc33e4dc0928db5c5a4d5fdc78381c4d55ae3
|
|
|
|
two2 sha1:6134ee8f857693b96ff1cc98d3e2fd62b199e5a8
|
|
two2 sha256:87a2d3ee29c83a3dc7afd41c0606b11f67603120b910a7be7840accdc18344d4
|
|
|
|
three2 sha1:0567da4d5edd2ff4bb292a465ba9e64dcad9536b
|
|
three2 sha256:cceb3e8eca364fa9a0a39a1efbebecacc664af86cbbd8070571f5faeb5f0e8c3
|
|
EOF
|
|
|
|
echo >file original &&
|
|
git add file &&
|
|
git commit -a -m One &&
|
|
git tag tag-one &&
|
|
git tag tag-one-tree HEAD^{tree} &&
|
|
git branch one &&
|
|
|
|
echo two >> file &&
|
|
git commit -a -m Two &&
|
|
git tag -a -m "Tag Two" tag-two &&
|
|
git branch two &&
|
|
|
|
echo three >> file &&
|
|
git commit -a -m Three &&
|
|
git tag -a -m "Tag Three" tag-three &&
|
|
git tag -a -m "Tag Three file" tag-three-file HEAD^{tree}:file &&
|
|
git branch three &&
|
|
|
|
echo main >> file &&
|
|
git commit -a -m Main &&
|
|
git tag -a -m "Tag Main" tag-main &&
|
|
|
|
git checkout three &&
|
|
|
|
git clone . cloned &&
|
|
cd cloned &&
|
|
git config remote.origin.url ../.git/ &&
|
|
|
|
git config remote.config-explicit.url ../.git/ &&
|
|
git config remote.config-explicit.fetch refs/heads/main:remotes/rem/main &&
|
|
git config --add remote.config-explicit.fetch refs/heads/one:remotes/rem/one &&
|
|
git config --add remote.config-explicit.fetch two:remotes/rem/two &&
|
|
git config --add remote.config-explicit.fetch refs/heads/three:remotes/rem/three &&
|
|
remotes="config-explicit" &&
|
|
|
|
git config remote.config-glob.url ../.git/ &&
|
|
git config remote.config-glob.fetch refs/heads/*:refs/remotes/rem/* &&
|
|
remotes="$remotes config-glob" &&
|
|
|
|
mkdir -p .git/remotes &&
|
|
{
|
|
echo "URL: ../.git/"
|
|
echo "Pull: refs/heads/main:remotes/rem/main"
|
|
echo "Pull: refs/heads/one:remotes/rem/one"
|
|
echo "Pull: two:remotes/rem/two"
|
|
echo "Pull: refs/heads/three:remotes/rem/three"
|
|
} >.git/remotes/remote-explicit &&
|
|
remotes="$remotes remote-explicit" &&
|
|
|
|
{
|
|
echo "URL: ../.git/"
|
|
echo "Pull: refs/heads/*:refs/remotes/rem/*"
|
|
} >.git/remotes/remote-glob &&
|
|
remotes="$remotes remote-glob" &&
|
|
|
|
mkdir -p .git/branches &&
|
|
echo "../.git" > .git/branches/branches-default &&
|
|
remotes="$remotes branches-default" &&
|
|
|
|
echo "../.git#one" > .git/branches/branches-one &&
|
|
remotes="$remotes branches-one" &&
|
|
|
|
for remote in $remotes ; do
|
|
git config branch.br-$remote.remote $remote &&
|
|
git config branch.br-$remote-merge.remote $remote &&
|
|
git config branch.br-$remote-merge.merge refs/heads/three &&
|
|
git config branch.br-$remote-octopus.remote $remote &&
|
|
git config branch.br-$remote-octopus.merge refs/heads/one &&
|
|
git config --add branch.br-$remote-octopus.merge two
|
|
done &&
|
|
build_script sed_script
|
|
'
|
|
|
|
# Merge logic depends on branch properties and Pull: or .fetch lines
|
|
for remote in $remotes ; do
|
|
for branch in "" "-merge" "-octopus" ; do
|
|
cat <<EOF
|
|
br-$remote$branch
|
|
br-$remote$branch $remote
|
|
EOF
|
|
done
|
|
done > tests
|
|
|
|
# Merge logic does not depend on branch properties,
|
|
# but does depend on Pull: or fetch lines.
|
|
# Use two branches completely unrelated from the arguments,
|
|
# the clone default and one without branch properties
|
|
for branch in main br-unconfig ; do
|
|
echo $branch
|
|
for remote in $remotes ; do
|
|
echo $branch $remote
|
|
done
|
|
done >> tests
|
|
|
|
# Merge logic does not depend on branch properties
|
|
# neither in the Pull: or .fetch config
|
|
for branch in main br-unconfig ; do
|
|
cat <<EOF
|
|
$branch ../.git
|
|
$branch ../.git one
|
|
$branch ../.git one two
|
|
$branch --tags ../.git
|
|
$branch ../.git tag tag-one tag tag-three
|
|
$branch ../.git tag tag-one-tree tag tag-three-file
|
|
$branch ../.git one tag tag-one tag tag-three-file
|
|
EOF
|
|
done >> tests
|
|
|
|
while read cmd
|
|
do
|
|
case "$cmd" in
|
|
'' | '#'*) continue ;;
|
|
esac
|
|
test=$(echo "$cmd" | sed -e 's|[/ ][/ ]*|_|g')
|
|
pfx=$(printf "%04d" $test_count)
|
|
expect_f="$TEST_DIRECTORY/t5515/fetch.$test"
|
|
actual_f="$pfx-fetch.$test"
|
|
expect_r="$TEST_DIRECTORY/t5515/refs.$test"
|
|
actual_r="$pfx-refs.$test"
|
|
|
|
test_expect_success "$cmd" '
|
|
cp "$expect_f" expect_f &&
|
|
convert_expected expect_f sed_script &&
|
|
cp "$expect_r" expect_r &&
|
|
convert_expected expect_r sed_script &&
|
|
{
|
|
echo "# $cmd"
|
|
set x $cmd; shift
|
|
git symbolic-ref HEAD refs/heads/$1 ; shift
|
|
rm -f .git/FETCH_HEAD
|
|
git for-each-ref \
|
|
refs/heads refs/remotes/rem refs/tags |
|
|
while read val type refname
|
|
do
|
|
git update-ref -d "$refname" "$val"
|
|
done
|
|
git fetch "$@" >/dev/null
|
|
cat .git/FETCH_HEAD
|
|
} >"$actual_f" &&
|
|
git show-ref >"$actual_r" &&
|
|
if test -f "expect_f"
|
|
then
|
|
test_cmp "expect_f" "$actual_f" &&
|
|
rm -f "$actual_f"
|
|
else
|
|
# this is to help developing new tests.
|
|
cp "$actual_f" "$expect_f"
|
|
false
|
|
fi &&
|
|
if test -f "expect_r"
|
|
then
|
|
test_cmp "expect_r" "$actual_r" &&
|
|
rm -f "$actual_r"
|
|
else
|
|
# this is to help developing new tests.
|
|
cp "$actual_r" "$expect_r"
|
|
false
|
|
fi
|
|
'
|
|
done < tests
|
|
|
|
test_done
|