--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-topic-debugcb.t Wed Sep 27 00:54:28 2017 +0200
@@ -0,0 +1,316 @@
+==================================================
+Test for `hg debugconvertbookmark` added by topics
+==================================================
+
+ $ . "$TESTDIR/testlib/topic_setup.sh"
+
+ $ cat << EOF >> $HGRCPATH
+ > drawdag=$RUNTESTDIR/drawdag.py
+ > [ui]
+ > logtemplate = [{rev}:{node|short}] {desc|firstline}\n\
+ > {if(bookmarks, " bookmark: {join(bookmarks,"\n bookmark:")}\n")}\
+ > {if(topics, " topic: {topics}\n")}
+ > EOF
+
+Setting up the things
+---------------------
+
+ $ hg init repo
+ $ cd repo
+ $ echo "Hello" > root
+ $ hg commit -Aqm "root"
+ $ hg phase --public .
+ $ echo "Hello" > a
+ $ hg commit -Aqm "First commit"
+ $ echo "Hello" > b
+ $ hg commit -Aqm "Second commit"
+ $ hg bookmark "hellos"
+ $ hg up 0 -q
+ $ echo "Fix 1" > l
+ $ hg commit -Aqm "Fixing first"
+ $ echo "Fix 2" > m
+ $ hg commit -Aqm "Fixing second"
+ $ hg bookmark "secondfix"
+
+ $ hg log -G
+ @ [4:ec0e17135a94] Fixing second
+ | bookmark: secondfix
+ o [3:e05947b88d69] Fixing first
+ |
+ | o [2:f53d1144f925] Second commit
+ | | bookmark: hellos
+ | o [1:df1fd5e18154] First commit
+ |/
+ o [0:249055fcca50] root
+
+
+Generic tests
+=============
+
+Help for the command
+--------------------
+
+ $ hg help debugconvertbookmark
+ hg debugcb [-b BOOKMARK] [--all]
+
+ aliases: debugconvertbookmark
+
+ Converts a bookmark to a topic with the same name.
+
+ options:
+
+ -b --bookmark VALUE bookmark to convert to topic
+ --all convert all bookmarks to topics
+
+ (some details hidden, use --verbose to show complete help)
+
+Running without any argument
+----------------------------
+
+ $ hg debugconvertbookmark
+ abort: you must specify either '--all' or '-b'
+ [255]
+
+Changing a particular bookmark to topic
+=======================================
+
+ $ hg debugconvertbookmark -b hellos
+ changed topic to "hellos" on 2 revisions
+ $ hg log -G
+ o [6:98ae7930f6ed] Second commit
+ | topic: hellos
+ o [5:ff69f6ee4618] First commit
+ | topic: hellos
+ | @ [4:ec0e17135a94] Fixing second
+ | | bookmark: secondfix
+ | o [3:e05947b88d69] Fixing first
+ |/
+ o [0:249055fcca50] root
+
+
+Changing all bookmarks to topic
+===============================
+
+Simple test
+-----------
+
+ $ hg debugconvertbookmark --all
+ switching to topic secondfix
+ changed topic to "secondfix" on 2 revisions
+ $ hg log -G
+ @ [8:5f0f9cc1979a] Fixing second
+ | topic: secondfix
+ o [7:f8ecbf3b10be] Fixing first
+ | topic: secondfix
+ | o [6:98ae7930f6ed] Second commit
+ | | topic: hellos
+ | o [5:ff69f6ee4618] First commit
+ |/ topic: hellos
+ o [0:249055fcca50] root
+
+
+Trying with multiple bookmarks on a single changeset
+----------------------------------------------------
+
+ $ echo "multiple bookmarks" >> m
+ $ hg commit -Aqm "Trying multiple bookmarks"
+ $ hg bookmark book1
+ $ hg bookmark book2
+ $ hg log -G
+ @ [9:4ad3e7d421d4] Trying multiple bookmarks
+ | bookmark: book1
+ | bookmark:book2
+ | topic: secondfix
+ o [8:5f0f9cc1979a] Fixing second
+ | topic: secondfix
+ o [7:f8ecbf3b10be] Fixing first
+ | topic: secondfix
+ | o [6:98ae7930f6ed] Second commit
+ | | topic: hellos
+ | o [5:ff69f6ee4618] First commit
+ |/ topic: hellos
+ o [0:249055fcca50] root
+
+ $ hg debugconvertbookmark --all
+ skipping '9' as it has multiple bookmarks on it
+ $ hg log -G
+ @ [9:4ad3e7d421d4] Trying multiple bookmarks
+ | bookmark: book1
+ | bookmark:book2
+ | topic: secondfix
+ o [8:5f0f9cc1979a] Fixing second
+ | topic: secondfix
+ o [7:f8ecbf3b10be] Fixing first
+ | topic: secondfix
+ | o [6:98ae7930f6ed] Second commit
+ | | topic: hellos
+ | o [5:ff69f6ee4618] First commit
+ |/ topic: hellos
+ o [0:249055fcca50] root
+
+
+Two bookmarks on two different topological branches
+---------------------------------------------------
+
+ $ cd ..
+ $ rm -rf repo
+ $ hg init setup1
+ $ cd setup1
+ $ echo "Hello" > root
+ $ hg commit -Aqm "root"
+ $ hg phase --public .
+ $ echo "Hello" > A
+ $ hg commit -Aqm "A"
+ $ echo "Hello" > B
+ $ hg commit -Aqm "B"
+ $ echo "Hello" > C
+ $ hg commit -Aqm "C"
+ $ echo "Hello" > D
+ $ hg commit -Aqm "D"
+ $ hg up 'desc(B)'
+ 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+ $ echo "Hello" > E
+ $ hg commit -Aqm "E"
+ $ echo "Hello" > F
+ $ hg commit -Aqm "F"
+ $ hg bookmark -r 'desc(D)' bar
+ $ hg bookmark -r 'desc(F)' foo
+
+ $ hg log -G
+ @ [6:32f4660df717] F
+ | bookmark: foo
+ o [5:d4608d9df75e] E
+ |
+ | o [4:4963af405f62] D
+ | | bookmark: bar
+ | o [3:ac05e0d05d00] C
+ |/
+ o [2:10f317d09e78] B
+ |
+ o [1:e34122c9a2bf] A
+ |
+ o [0:249055fcca50] root
+
+ $ hg debugconvertbookmark --all
+ changed topic to "bar" on 2 revisions
+ switching to topic foo
+ changed topic to "foo" on 2 revisions
+ $ hg log -G
+ @ [10:f0b5f2a5f31a] F
+ | topic: foo
+ o [9:7affa1350ff0] E
+ | topic: foo
+ | o [8:a1bb64d88f0e] D
+ | | topic: bar
+ | o [7:71827f564e9e] C
+ |/ topic: bar
+ o [2:10f317d09e78] B
+ |
+ o [1:e34122c9a2bf] A
+ |
+ o [0:249055fcca50] root
+
+
+Two bookmarks on top of each other
+----------------------------------
+
+ $ cd ..
+ $ rm -rf setup1
+ $ hg init setup2
+ $ cd setup2
+ $ echo "Hello" > root
+ $ hg commit -Aqm "root"
+ $ hg phase --public .
+ $ echo "Hello" > A
+ $ hg commit -Aqm "A"
+ $ hg phase --public .
+ $ echo "Hello" > B
+ $ hg commit -Aqm "B"
+ $ echo "Hello" > C
+ $ hg commit -Aqm "C"
+ $ hg bookmark -r . bar
+ $ echo "Hello" > D
+ $ hg commit -Aqm "D"
+ $ echo "Hello" > E
+ $ hg commit -Aqm "E"
+ $ hg bookmark -r . foo
+
+ $ hg log -G
+ @ [5:c633aa1ad270] E
+ | bookmark: foo
+ o [4:4963af405f62] D
+ |
+ o [3:ac05e0d05d00] C
+ | bookmark: bar
+ o [2:10f317d09e78] B
+ |
+ o [1:e34122c9a2bf] A
+ |
+ o [0:249055fcca50] root
+
+
+XXX: this should avoid create orphan changesets.
+
+ $ hg debugconvertbookmark --all
+ changed topic to "bar" on 2 revisions
+ switching to topic foo
+ changed topic to "foo" on 2 revisions
+
+ $ hg log -G
+ @ [9:b14d13efcfa7] E
+ | topic: foo
+ o [8:c89ca6e70978] D
+ | topic: foo
+ | o [7:a3ea0dfe6a10] C
+ | | topic: bar
+ | o [6:db1bc6aab480] B
+ | | topic: bar
+ x | [3:ac05e0d05d00] C
+ | |
+ x | [2:10f317d09e78] B
+ |/
+ o [1:e34122c9a2bf] A
+ |
+ o [0:249055fcca50] root
+
+
+Check that phase are properly take in account
+---------------------------------------------
+
+(we reuse above test, taking advantage of a small bug regarding stacked bookmarks. we can fuse the two tests once that bug is fixed)
+
+ $ cd ..
+ $ hg init setup-phases
+ $ cd setup-phases
+ $ echo "Hello" > root
+ $ hg commit -Aqm "root"
+ $ hg phase --public .
+ $ echo "Hello" > A
+ $ hg commit -Aqm "A"
+ $ echo "Hello" > B
+ $ hg commit -Aqm "B"
+ $ echo "Hello" > C
+ $ hg commit -Aqm "C"
+ $ hg bookmark -r . bar
+ $ hg log -G
+ @ [3:ac05e0d05d00] C
+ | bookmark: bar
+ o [2:10f317d09e78] B
+ |
+ o [1:e34122c9a2bf] A
+ |
+ o [0:249055fcca50] root
+
+
+ $ hg debugconvertbookmark --all
+ switching to topic bar
+ changed topic to "bar" on 3 revisions
+ $ hg log -G
+ @ [6:863c43a7951c] C
+ | topic: bar
+ o [5:ac7f12ac947f] B
+ | topic: bar
+ o [4:fc82c8c14b4c] A
+ | topic: bar
+ o [0:249055fcca50] root
+