tests/test-branch-change.t
changeset 35745 3bd8ab4c80a5
child 35746 e5b6ba786d83
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-branch-change.t	Sun Oct 15 23:08:45 2017 +0530
@@ -0,0 +1,296 @@
+Testing changing branch on commits
+==================================
+
+Setup
+
+  $ cat >> $HGRCPATH << EOF
+  > [alias]
+  > glog = log -G -T "{rev}:{node|short} {desc}\n{branch} ({bookmarks})"
+  > [experimental]
+  > evolution = createmarkers
+  > [extensions]
+  > rebase=
+  > EOF
+
+  $ hg init repo
+  $ cd repo
+  $ for ch in a b c d e; do echo foo >> $ch; hg ci -Aqm "Added "$ch; done
+  $ hg glog
+  @  4:aa98ab95a928 Added e
+  |  default ()
+  o  3:62615734edd5 Added d
+  |  default ()
+  o  2:28ad74487de9 Added c
+  |  default ()
+  o  1:29becc82797a Added b
+  |  default ()
+  o  0:18d04c59bb5d Added a
+     default ()
+
+  $ hg branches
+  default                        4:aa98ab95a928
+
+Try without passing a new branch name
+
+  $ hg branch -r .
+  abort: no branch name specified for the revisions
+  [255]
+
+Setting an invalid branch name
+
+  $ hg branch -r . a:b
+  abort: ':' cannot be used in a name
+  [255]
+  $ hg branch -r . tip
+  abort: the name 'tip' is reserved
+  [255]
+  $ hg branch -r . 1234
+  abort: cannot use an integer as a name
+  [255]
+
+Change on non-linear set of commits
+
+  $ hg branch -r 2 -r 4 foo
+  abort: cannot change branch of non-linear revisions
+  [255]
+
+Change in middle of the stack (linear commits)
+
+  $ hg branch -r 1::3 foo
+  abort: cannot change branch of changeset with children
+  [255]
+
+Change with dirty working directory
+
+  $ echo bar > a
+  $ hg branch -r . foo
+  abort: uncommitted changes
+  [255]
+
+  $ hg revert --all
+  reverting a
+
+Change on empty revision set
+
+  $ hg branch -r 'draft() - all()' foo
+  abort: empty revision set
+  [255]
+
+Changing branch on linear set of commits from head
+
+Without obsmarkers
+
+  $ hg branch -r 3:4 foo --config experimental.evolution=!
+  changed branch on 2 changesets
+  saved backup bundle to $TESTTMP/repo/.hg/strip-backup/62615734edd5-e86bd13a-branch-change.hg (glob)
+  $ hg glog
+  @  4:3938acfb5c0f Added e
+  |  foo ()
+  o  3:9435da006bdc Added d
+  |  foo ()
+  o  2:28ad74487de9 Added c
+  |  default ()
+  o  1:29becc82797a Added b
+  |  default ()
+  o  0:18d04c59bb5d Added a
+     default ()
+
+  $ hg branches
+  foo                            4:3938acfb5c0f
+  default                        2:28ad74487de9 (inactive)
+
+With obsmarkers
+
+  $ hg branch -r 3::4 bar
+  changed branch on 2 changesets
+  $ hg glog
+  @  6:7c1991464886 Added e
+  |  bar ()
+  o  5:1ea05e93925f Added d
+  |  bar ()
+  o  2:28ad74487de9 Added c
+  |  default ()
+  o  1:29becc82797a Added b
+  |  default ()
+  o  0:18d04c59bb5d Added a
+     default ()
+
+  $ hg branches
+  bar                            6:7c1991464886
+  default                        2:28ad74487de9 (inactive)
+
+Change branch name to an existing branch
+
+  $ hg branch -r . default
+  abort: a branch of the same name already exists
+  [255]
+
+Changing on a branch head which is not topological head
+
+  $ hg branch -r 2 stable
+  abort: cannot change branch of changeset with children
+  [255]
+
+Enabling the allowunstable config and trying to change branch on a branch head
+which is not a topological head
+
+  $ echo "[experimental]" >> .hg/hgrc
+  $ echo "evolution.allowunstable=yes" >> .hg/hgrc
+  $ hg branch -r 2 foo
+  changed branch on 1 changesets
+  2 new orphan changesets
+
+Changing branch of an obsoleted changeset
+
+  $ hg branch -r 4 foobar
+  abort: hidden revision '4' was rewritten as: 7c1991464886!
+  (use --hidden to access hidden revisions)
+  [255]
+
+  $ hg branch -r 4 --hidden foobar
+  abort: cannot change branch of a obsolete changeset
+  [255]
+
+Make sure bookmark movement is correct
+
+  $ hg bookmark b1
+  $ hg glog -r '.^::'
+  @  6:7c1991464886 Added e
+  |  bar (b1)
+  *  5:1ea05e93925f Added d
+  |  bar ()
+  ~
+
+  $ hg branch -r '(.^)::' wat --debug
+  changing branch of '1ea05e93925f806d875a2163f9b76764be644636' from 'bar' to 'wat'
+  committing files:
+  d
+  committing manifest
+  committing changelog
+  new node id is 343660ccab7400da637bd6a211d07f413536d718
+  changing branch of '7c19914648869f5b02fc7fed31ddee9783fdd680' from 'bar' to 'wat'
+  committing files:
+  e
+  committing manifest
+  committing changelog
+  new node id is de1404b45a69f8cc6437d7679033ee33e9efb4ba
+  moving bookmarks ['b1'] from 7c19914648869f5b02fc7fed31ddee9783fdd680 to de1404b45a69f8cc6437d7679033ee33e9efb4ba
+  resolving manifests
+   branchmerge: False, force: False, partial: False
+   ancestor: 7c1991464886, local: 7c1991464886+, remote: de1404b45a69
+  changed branch on 2 changesets
+  updating the branch cache
+  invalid branchheads cache (served): tip differs
+
+  $ hg glog -r '(.^)::'
+  @  9:de1404b45a69 Added e
+  |  wat (b1)
+  *  8:343660ccab74 Added d
+  |  wat ()
+  ~
+
+Make sure phase handling is correct
+
+  $ echo foo >> bar
+  $ hg ci -Aqm "added bar" --secret
+  1 new orphan changesets
+  $ hg glog -r .
+  @  10:8ad1294c1660 added bar
+  |  wat (b1)
+  ~
+  $ hg branch -r . secret
+  changed branch on 1 changesets
+  $ hg phase -r .
+  11: secret
+
+  $ hg branches
+  secret                        11:38a9b2d53f98
+  foo                            7:8a4729a5e2b8
+  wat                            9:de1404b45a69 (inactive)
+  default                        2:28ad74487de9 (inactive)
+  $ hg branch
+  secret
+
+Changing branch of another head, different from one on which we are
+
+  $ hg glog
+  @  11:38a9b2d53f98 added bar
+  |  secret (b1)
+  *  9:de1404b45a69 Added e
+  |  wat ()
+  *  8:343660ccab74 Added d
+  |  wat ()
+  | o  7:8a4729a5e2b8 Added c
+  | |  foo ()
+  x |  2:28ad74487de9 Added c
+  |/   default ()
+  o  1:29becc82797a Added b
+  |  default ()
+  o  0:18d04c59bb5d Added a
+     default ()
+
+  $ hg branch
+  secret
+
+  $ hg branch -r 7 foobar
+  changed branch on 1 changesets
+
+The current branch must be preserved
+  $ hg branch
+  secret
+
+Changing branch on multiple heads at once
+
+  $ hg rebase -s 8 -d 12 --keepbranches -q
+
+  $ hg rebase -s 14 -d 1 --keepbranches -q
+
+  $ hg branch -r 0: stable
+  changed branch on 6 changesets
+  $ hg glog
+  @  23:6a5ddbcfb870 added bar
+  |  stable (b1)
+  o  22:baedc6e98a67 Added e
+  |  stable ()
+  | o  21:99ac7bf8aad1 Added d
+  | |  stable ()
+  | o  20:0ecb4d39c4bd Added c
+  |/   stable ()
+  o  19:fd45b986b109 Added b
+  |  stable ()
+  o  18:204d2769eca2 Added a
+     stable ()
+
+  $ hg branches
+  stable                        23:6a5ddbcfb870
+
+  $ hg branch
+  stable
+
+Changing to same branch name does not work
+
+  $ hg branch -r 19::21 stable
+  abort: a branch of the same name already exists
+  [255]
+
+Testing on merge
+
+  $ hg merge -r 20
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+
+  $ hg branch -r . abcd
+  abort: outstanding uncommitted merge
+  [255]
+  $ hg ci -m "Merge commit"
+  $ hg branch -r '(.^)::' def
+  abort: cannot change branch of a merge commit
+  [255]
+
+Changing branch on public changeset
+
+  $ hg phase -r 21 -p
+  $ hg branch -r 21 def
+  abort: cannot change branch of public changesets
+  (see 'hg help phases' for details)
+  [255]