##// 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
#!/bin/sh
# setup config and various utility to test obsolescence marker exchanges tests
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
cat >> $HGRCPATH <<EOF
[web]
# We test http pull and push, drop authentication requirement
push_ssl = false
allow_push = *
[command-templates]
# simpler log output
log ="{node|short} ({phase}): {desc}\n"
[phases]
# non publishing server
publish=False
[experimental]
# reduce output changes
bundle2-output-capture=True
# enable evolution
evolution=true
[extensions]
# we need to strip some changeset for some test cases
hgext.strip=
[devel]
strip-obsmarkers = no
[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
prune = !sh $TESTTMP/prune.sh \$1 "\$2" "\$3"
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 ..
}