##// END OF EJS Templates
persistent-nodemap: introduce a test to highlight possible race...
persistent-nodemap: introduce a test to highlight possible race Weakness in the current file caching of the changelog means that a writer can end up using an outdated docket. This might result in "committed" persistent-nodemap data from a previous writer to be overwritten by a later writer. This break the strong "append only" assumption of the persistent nodemap and can result in confused reader. The race windows are quite narrow. See the test documentation for details. The issues is fixed in the next changeset. Differential Revision: https://phab.mercurial-scm.org/D11481

File last commit:

r46350:ed84a4d4 default
r48852:52018f8e stable
Show More
exchange-obsmarker-util.sh
142 lines | 3.5 KiB | application/x-sh | BashLexer
/ tests / testlib / exchange-obsmarker-util.sh
Pierre-Yves David
obsolescence: add setup script for obsolescence markers exchange tests...
r31905 #!/bin/sh
# setup config and various utility to test obsolescence marker exchanges tests
Matt Harbison
testlib: move the prune alias into a shell script for Windows...
r32007 cat >> $TESTTMP/prune.sh << EOF
rev=\`hg log --hidden --template '{node}\n' --rev "\$3"\`
hg debugobsolete --record-parents \$1 "\$2" \$rev \
&& hg up --quiet 'max((::.) - obsolete())'
EOF
Pierre-Yves David
obsolescence: add setup script for obsolescence markers exchange tests...
r31905 cat >> $HGRCPATH <<EOF
[web]
# We test http pull and push, drop authentication requirement
push_ssl = false
allow_push = *
Martin von Zweigbergk
config: add a new [command-templates] section for templates defined by hg...
r46350 [command-templates]
Pierre-Yves David
obsolescence: add setup script for obsolescence markers exchange tests...
r31905 # simpler log output
Martin von Zweigbergk
config: add a new [command-templates] section for templates defined by hg...
r46350 log ="{node|short} ({phase}): {desc}\n"
Pierre-Yves David
obsolescence: add setup script for obsolescence markers exchange tests...
r31905
[phases]
# non publishing server
publish=False
[experimental]
# reduce output changes
bundle2-output-capture=True
# enable evolution
Boris Feld
config: replace experimental.stabilization by experimental.evolution...
r34866 evolution=true
Pierre-Yves David
obsolescence: add setup script for obsolescence markers exchange tests...
r31905
[extensions]
# we need to strip some changeset for some test cases
hgext.strip=
strip: strip obsmarkers exclusive to the stripped changeset...
r32629 [devel]
strip-obsmarkers = no
Pierre-Yves David
obsolescence: add setup script for obsolescence markers exchange tests...
r31905 [alias]
# fix date used to create obsolete markers.
debugobsolete=debugobsolete -d '0 0'
# poor man substiture to the evolve 'hg prune'. using prune makes the test clearer and
Matt Harbison
testlib: move the prune alias into a shell script for Windows...
r32007 prune = !sh $TESTTMP/prune.sh \$1 "\$2" "\$3"
Pierre-Yves David
obsolescence: add setup script for obsolescence markers exchange tests...
r31905 EOF
mkcommit() {
echo "$1" > "$1"
hg add "$1"
hg ci -m "$1"
}
getid() {
hg log --hidden --template '{node}\n' --rev "$1"
}
setuprepos() {
echo creating test repo for test case $1
mkdir $1
cd $1
echo - pulldest
hg init pushdest
cd pushdest
mkcommit O
hg phase --public .
cd ..
echo - main
hg clone -q pushdest main
echo - pushdest
hg clone -q main pulldest
echo 'cd into `main` and proceed with env setup'
}
inspect_obsmarkers (){
# This exist as its own function to help the evolve extension reuse the tests as is.
# The evolve extensions version will includes more advances query (eg:
# related to obsmarkers discovery) to this.
echo 'obsstore content'
echo '================'
hg debugobsolete
}
dotest() {
# dotest TESTNAME [TARGETNODE] [PUSHFLAGS+]
#
# test exchange for the given test case.
#
# This function performs push and pull in all directions through all
# protocols and display the resulting obsolescence markers on all sides.
testcase=$1
shift
target="$1"
if [ $# -gt 0 ]; then
shift
fi
targetnode=""
desccall=""
cd $testcase
echo "## Running testcase $testcase"
if [ -n "$target" ]; then
desccall="desc("\'"$target"\'")"
targetnode="`hg -R main id -qr \"$desccall\"`"
echo "# testing echange of \"$target\" ($targetnode)"
fi
echo "## initial state"
echo "# obstore: main"
hg -R main debugobsolete | sort
echo "# obstore: pushdest"
hg -R pushdest debugobsolete | sort
echo "# obstore: pulldest"
hg -R pulldest debugobsolete | sort
if [ -n "$target" ]; then
echo "## pushing \"$target\"" from main to pushdest
hg -R main push -r "$desccall" $@ pushdest
else
echo "## pushing from main to pushdest"
hg -R main push pushdest $@
fi
echo "## post push state"
echo "# obstore: main"
hg -R main debugobsolete | sort
echo "# obstore: pushdest"
hg -R pushdest debugobsolete | sort
echo "# obstore: pulldest"
hg -R pulldest debugobsolete | sort
if [ -n "$target" ]; then
echo "## pulling \"$targetnode\"" from main into pulldest
hg -R pulldest pull -r $targetnode $@ main
else
echo "## pulling from main into pulldest"
hg -R pulldest pull main $@
fi
echo "## post pull state"
echo "# obstore: main"
hg -R main debugobsolete | sort
echo "# obstore: pushdest"
hg -R pushdest debugobsolete | sort
echo "# obstore: pulldest"
hg -R pulldest debugobsolete | sort
cd ..
}