topics: add a new debugconvertbookmark command to convert bookmarks to topics
This new command, aliased to debugcb converts bookmarks to topics. This command
either accept name of a bookmark using flag '-b' or '--all'.
If a bookmark is passed using '-b', the whole stack defined by that bookmark is
converted to topics. If '--all' is passed, the above thing is repeated for every
bookmark in the repository.
If the revset which we are using unable to decides revisions of the stack and
return an expty set, in that cases we are not deleting the bookmark as we are
not writing any topics of the same name as that of bookmark. Also currently if a
changeset has two bookmarks, than there is buggy behaviour. So these are known
lackings in the current implementation which will be fixed in upcoming patches.
This also adds tests for the same.
$ cat >> $HGRCPATH <<EOF
> [defaults]
> amend=-d "0 0"
> [experimental]
> obsmarkers-exchange-debug=true
> bundle2-exp=true
> [ui]
> ssh=python "$RUNTESTDIR/dummyssh"
> [phases]
> publish = False
> [extensions]
> EOF
$ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH
$ mkcommit() {
> echo "$1" > "$1"
> hg add "$1"
> hg ci -m "add $1"
> }
setup repo
$ hg init server
$ hg clone ssh://user@dummy/server client
no changes found
updating to branch default
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cp -r client other
Smoke testing
===============.t
$ cd client
$ mkcommit 0
$ mkcommit a
$ hg push
pushing to ssh://user@dummy/server
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 ssh://user@dummy/server
searching for changes
no changes found
$ hg pull -R ../other
pulling from ssh://user@dummy/server
requesting all 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)
$ hg push -R ../other
pushing to ssh://user@dummy/server
searching for changes
no changes found
[1]
Push
=============
$ echo 'A' > a
$ hg amend
$ hg push
pushing to ssh://user@dummy/server
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)
remote: obsmarker-exchange: 151 bytes received
remote: 2 new obsolescence markers
remote: obsoleted 1 changesets
$ hg push
pushing to ssh://user@dummy/server
searching for changes
no changes found
[1]
Pull
=============
$ hg -R ../other pull
pulling from ssh://user@dummy/server
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to [12] files \(\+1 heads\) (re)
obsmarker-exchange: 151 bytes received
2 new obsolescence markers
obsoleted 1 changesets
(run 'hg heads' to see heads)
$ hg -R ../other pull
pulling from ssh://user@dummy/server
searching for changes
no changes found
Test some markers discovery
===========================
$ echo c > C
$ hg add C
$ hg commit -m C
$ echo c >> C
$ hg amend
$ hg push
pushing to ssh://user@dummy/server
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: obsmarker-exchange: 151 bytes received
remote: 2 new obsolescence markers
$ hg -R ../other pull
pulling from ssh://user@dummy/server
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
obsmarker-exchange: 151 bytes received
2 new obsolescence markers
(run 'hg update' to get a working copy)
some common hidden
$ hg touch .
$ hg push
pushing to ssh://user@dummy/server
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 0 changes to 1 files (+1 heads)
remote: obsmarker-exchange: 226 bytes received
remote: 1 new obsolescence markers
remote: obsoleted 1 changesets
$ hg -R ../other pull
pulling from ssh://user@dummy/server
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 0 changes to 1 files (+1 heads)
obsmarker-exchange: 226 bytes received
1 new obsolescence markers
obsoleted 1 changesets
(run 'hg heads' to see heads)
test discovery avoid exchanging known markers
$ hg push
pushing to ssh://user@dummy/server
searching for changes
no changes found
[1]
$ hg -R ../other pull
pulling from ssh://user@dummy/server
searching for changes
no changes found
test discovery can be disabled
$ hg push --config experimental.evolution.obsdiscovery=no
pushing to ssh://user@dummy/server
searching for changes
(skipping discovery of obsolescence markers, will exchange everything)
(controled by 'experimental.evolution.obsdiscovery' configuration)
no changes found
remote: obsmarker-exchange: 376 bytes received
[1]
$ hg -R ../other pull --config experimental.evolution.obsdiscovery=no
pulling from ssh://user@dummy/server
searching for changes
no changes found
(skipping discovery of obsolescence markers, will exchange everything)
(controled by 'experimental.evolution.obsdiscovery' configuration)
obsmarker-exchange: 376 bytes received
$ cd ..