simple4server: option to advertise obsolescence support
We had an option to control the advertising of the obsolescence markers support
from the server. The goal of this option is to allow large scale repo hosting
service to control the use of obsolescence markers exchange.
$ cat >> $HGRCPATH <<EOF
> [defaults]
> amend=-d "0 0"
> [web]
> push_ssl = false
> allow_push = *
> [phases]
> publish = False
> [extensions]
> hgext.rebase=
> EOF
$ mkcommit() {
> echo "$1" > "$1"
> hg add "$1"
> hg ci -m "add $1"
> }
setup repo
$ hg init server
$ echo "[extensions]" >> ./server/.hg/hgrc
$ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/simple4server.py" >> ./server/.hg/hgrc
$ hg serve -R server -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
$ cat hg.pid >> $DAEMON_PIDS
$ hg clone http://localhost:$HGPORT/ client
no changes found
updating to branch default
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo "[extensions]" >> ./client/.hg/hgrc
$ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> ./client/.hg/hgrc
$ cp -r client other
Smoke testing
===============
$ cd client
$ mkcommit 0
$ mkcommit a
$ hg push
pushing to http://localhost:$HGPORT/
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 2 changesets with 2 changes to 2 files
$ hg pull
pulling from http://localhost:$HGPORT/
searching for changes
no changes found
OBSEXC: pull obsolescence markers
OBSEXC: looking for common markers in 2 nodes
OBSEXC: no unknown remote markers
OBSEXC: DONE
$ hg pull -R ../other
pulling from http://localhost:$HGPORT/
requesting all changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 2 files
OBSEXC: pull obsolescence markers
OBSEXC: looking for common markers in 2 nodes
OBSEXC: no unknown remote markers
OBSEXC: DONE
(run 'hg update' to get a working copy)
$ hg push -R ../other
pushing to http://localhost:$HGPORT/
searching for changes
no changes found
[1]
Capacity testing
===================
$ curl --silent http://localhost:$HGPORT/?cmd=hello
capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0
$ curl --silent http://localhost:$HGPORT/?cmd=capabilities
lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 (no-eol)
$ curl --silent "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces"
bookmarks
phases
namespaces
obsolete (no-eol)
Push
=============
$ echo 'A' > a
$ hg amend
$ hg push
pushing to http://localhost:$HGPORT/
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files (+1 heads)
OBSEXC: computing relevant nodes
OBSEXC: looking for common markers in 2 nodes
OBSEXC: computing markers relevant to 1 nodes
OBSEXC: writing 2 markers
OBSEXC: pushing 171 bytes
OBSEXC: DONE
$ hg push
pushing to http://localhost:$HGPORT/
searching for changes
no changes found
OBSEXC: computing relevant nodes
OBSEXC: looking for common markers in [23] nodes (re)
OBSEXC: markers already in sync
OBSEXC: no marker to push
OBSEXC: DONE
[1]
Pull
=============
$ hg -R ../other pull
pulling from http://localhost:$HGPORT/
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to [12] files \(\+1 heads\) (re)
OBSEXC: pull obsolescence markers
OBSEXC: looking for common markers in [23] nodes (re)
OBSEXC: merging obsolescence markers (171 bytes)
OBSEXC: 2 markers added
OBSEXC: DONE
(run 'hg heads' to see heads)
$ hg -R ../other pull
pulling from http://localhost:$HGPORT/
searching for changes
no changes found
OBSEXC: pull obsolescence markers
OBSEXC: looking for common markers in [23] nodes (re)
OBSEXC: no unknown remote markers
OBSEXC: DONE
$ cd ..
Test disabling obsolete advertisement
===========================================
(used by bitbucket to select which repo use evolve)
$ curl --silent "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces"
bookmarks
phases
namespaces
obsolete (no-eol)
$ echo '[__temporary__]' >> server/.hg/hgrc
$ echo 'advertiseobsolete=False' >> server/.hg/hgrc
$ $TESTDIR/killdaemons.py
$ hg serve -R server -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
$ cat hg.pid >> $DAEMON_PIDS
$ curl --silent "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces"
bookmarks
phases
namespaces (no-eol)
$ echo 'advertiseobsolete=True' >> server/.hg/hgrc
$ $TESTDIR/killdaemons.py
$ hg serve -R server -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
$ cat hg.pid >> $DAEMON_PIDS
$ curl --silent "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces"
bookmarks
phases
namespaces
obsolete (no-eol)