[states] make enabling state saftier
* Fix the lower state heads while enabling a state.
* Add a --clever opiton that do not fix the lower heads (as earlier)
* Add test for enable/disable state
$ cat >> $HGRCPATH <<EOF
> [web]
> push_ssl = false
> allow_push = *
> [extensions]
> EOF
$ echo "states=$(echo $(dirname $TESTDIR))/hgext/states.py" >> $HGRCPATH
$ hg init local
$ hg init remote1
$ hg init remote2
$ cd local
$ echo "celestine" > babar
$ hg add babar
$ hg ci -m "add babar"
$ echo "la veille dame" > babar
$ hg ci -m "add dame"
$ hg log --template='{rev}:{node|short}: {state}\n'
1:710fe444b3b0: published
0:5caa672bac26: published
$ hg out ../remote1 --template='{rev}:{node|short}\n'
comparing with ../remote1
searching for changes
0:5caa672bac26
1:710fe444b3b0
$ hg push ../remote1
pushing to ../remote1
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 1 files
$ echo "tree" >> savanna
$ hg add savanna
$ hg ci -m "terrain"
$ echo "flore" >> babar
$ hg ci -m "children"
$ hg log --template='{rev}:{node|short}: {state}\n'
3:73585b17392a: published
2:3c8695235a32: published
1:710fe444b3b0: published
0:5caa672bac26: published
turn draft on (repo side)
$ hg states --clever draft
$ hg log --template='{rev}:{node|short}: {state}\n'
3:73585b17392a: draft
2:3c8695235a32: draft
1:710fe444b3b0: published
0:5caa672bac26: published
test outgoing and push
$ hg out ../remote1 --template='{rev}:{node|short}\n'
comparing with ../remote1
searching for changes
no changes found
[1]
$ hg push --traceback ../remote1
pushing to ../remote1
searching for changes
no changes found
$ hg out ../remote2 --template='{rev}:{node|short}\n'
comparing with ../remote2
searching for changes
0:5caa672bac26
1:710fe444b3b0
$ hg push ../remote2
pushing to ../remote2
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 1 files
turn draft off again (repo side)
$ hg states --off draft
abort: could not disable non empty state draft
(You may want to use `hg published 'draftheads()'`)
[255]
$ hg published tip
$ hg log --template='{rev}:{node|short}: {state}\n'
3:73585b17392a: published
2:3c8695235a32: published
1:710fe444b3b0: published
0:5caa672bac26: published
$ hg out ../remote1 --template='{rev}:{node|short}\n'
comparing with ../remote1
searching for changes
2:3c8695235a32
3:73585b17392a
turn draft on again (repo side)
$ hg states draft
$ hg draft --exact 2
test incoming and pull
$ hg init ../other1
$ cd ../other1
$ hg incoming ../local --template='{rev}:{node|short}\n'
comparing with ../local
0:5caa672bac26
1:710fe444b3b0
$ hg pull ../local
pulling from ../local
requesting all changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 1 files
(run 'hg update' to get a working copy)
$ hg log --template='{rev}:{node|short}\n'
1:710fe444b3b0
0:5caa672bac26
$ cd ..
$ hg clone local other2
requesting all changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 1 files
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg -R other2 log --template='{rev}:{node|short}\n'
1:710fe444b3b0
0:5caa672bac26
test on http
$ hg -R local serve -p $HGPORT -d --pid-file=local.pid
$ cat local.pid >> "$DAEMON_PIDS"
$ hg clone http://localhost:$HGPORT/ fromhttp
requesting all changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 1 files
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg -R fromhttp log --template='{rev}:{node|short}\n'
1:710fe444b3b0
0:5caa672bac26
$ hg init fromhttp2
$ cd fromhttp2
$ hg inc http://localhost:$HGPORT/ --template='{rev}:{node|short}\n'
comparing with http://localhost:$HGPORT/
0:5caa672bac26
1:710fe444b3b0
$ hg pull http://localhost:$HGPORT/
pulling from http://localhost:$HGPORT/
requesting all changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 1 files
(run 'hg update' to get a working copy)
$ hg log --template='{rev}:{node|short}\n'
1:710fe444b3b0
0:5caa672bac26
$ hg inc http://localhost:$HGPORT/ --template='{rev}:{node|short}\n'
comparing with http://localhost:$HGPORT/
searching for changes
no changes found
[1]
turn draft off again (repo side)
$ cd ..
$ "$TESTDIR/killdaemons.py"
$ hg -R local states --off draft
abort: could not disable non empty state draft
(You may want to use `hg published 'draftheads()'`)
[255]
$ hg -R local published tip
$ hg -R local states --off draft
$ hg -R local serve -p $HGPORT -d --pid-file=local.pid
$ cat local.pid >> "$DAEMON_PIDS"
$ cd fromhttp2
$ hg inc http://localhost:$HGPORT/ --template='{rev}:{node|short}\n'
comparing with http://localhost:$HGPORT/
searching for changes
2:3c8695235a32
3:73585b17392a
$ hg pull http://localhost:$HGPORT/
pulling from http://localhost:$HGPORT/
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 2 files
(run 'hg update' to get a working copy)
$ cd ..
$ "$TESTDIR/killdaemons.py"
turn draft on again (repo side)
$ hg -R local states draft
$ hg init httpto
$ hg -R httpto serve -p $HGPORT -d --pid-file=remote.pid
$ cat remote.pid >> "$DAEMON_PIDS"
$ cd local
$ hg out http://localhost:$HGPORT/ --template='{rev}:{node|short}\n'
comparing with http://localhost:$HGPORT/
searching for changes
0:5caa672bac26
1:710fe444b3b0
2:3c8695235a32
3:73585b17392a
$ hg push http://localhost:$HGPORT/
pushing to http://localhost:$HGPORT/
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 4 changesets with 4 changes to 2 files
$ "$TESTDIR/killdaemons.py"