tests/test-pick.t
branchmercurial-4.8
changeset 4511 e4fc3af2d0a9
parent 4491 bdaf34903430
child 4512 7a779a288793
child 4686 f1466f5ffbf5
equal deleted inserted replaced
4358:72f4e924f25a 4511:e4fc3af2d0a9
       
     1 Test for the pick command
       
     2 
       
     3   $ cat >> $HGRCPATH <<EOF
       
     4   > [alias]
       
     5   > glog = log -G -T "{rev}:{node|short} {desc}\n"
       
     6   > [extensions]
       
     7   > EOF
       
     8   $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH
       
     9 
       
    10   $ mkcommit() {
       
    11   >    echo "$1" > "$1"
       
    12   >    hg add "$1"
       
    13   >    hg ci -m "add $1"
       
    14   > }
       
    15 
       
    16   $ hg init repo
       
    17   $ cd repo
       
    18   $ hg help pick
       
    19   hg pick [-r] rev
       
    20   
       
    21   aliases: grab
       
    22   
       
    23   move a commit on the top of working directory parent and updates to it.
       
    24   
       
    25   options:
       
    26   
       
    27    -r --rev REV   revision to pick
       
    28    -c --continue  continue interrupted pick
       
    29    -a --abort     abort interrupted pick
       
    30    -t --tool TOOL specify merge tool
       
    31   
       
    32   (some details hidden, use --verbose to show complete help)
       
    33 
       
    34   $ mkcommit a
       
    35   $ mkcommit b
       
    36   $ mkcommit c
       
    37 
       
    38   $ hg glog
       
    39   @  2:4538525df7e2 add c
       
    40   |
       
    41   o  1:7c3bad9141dc add b
       
    42   |
       
    43   o  0:1f0dee641bb7 add a
       
    44   
       
    45 
       
    46 Grabbing an ancestor
       
    47 
       
    48   $ hg pick -r 7c3bad9141dc
       
    49   abort: cannot pick an ancestor revision
       
    50   [255]
       
    51 
       
    52 Grabbing the working directory parent
       
    53 
       
    54   $ hg pick -r .
       
    55   abort: cannot pick an ancestor revision
       
    56   [255]
       
    57 
       
    58 Specifying multiple revisions to pick
       
    59 
       
    60   $ hg pick 1f0dee641bb7 -r 7c3bad9141dc
       
    61   abort: specify just one revision
       
    62   [255]
       
    63 
       
    64 Specifying no revisions to pick
       
    65 
       
    66   $ hg pick
       
    67   abort: empty revision set
       
    68   [255]
       
    69 
       
    70 Continuing without interrupted pick
       
    71 
       
    72   $ hg pick --continue
       
    73   abort: no interrupted pick state exists
       
    74   [255]
       
    75 
       
    76 Aborting without interrupted pick
       
    77 
       
    78   $ hg pick --abort
       
    79   abort: no interrupted pick state exists
       
    80   [255]
       
    81 
       
    82 Specifying both continue and revs
       
    83 
       
    84   $ hg up 1f0dee641bb7
       
    85   0 files updated, 0 files merged, 2 files removed, 0 files unresolved
       
    86   $ hg pick -r 4538525df7e2 --continue
       
    87   abort: cannot specify both --continue and revision
       
    88   [255]
       
    89 
       
    90 Making new branch heads
       
    91 
       
    92   $ mkcommit x
       
    93   created new head
       
    94   $ mkcommit y
       
    95 
       
    96   $ hg glog
       
    97   @  4:d46dc301d92f add y
       
    98   |
       
    99   o  3:8e224524cd09 add x
       
   100   |
       
   101   | o  2:4538525df7e2 add c
       
   102   | |
       
   103   | o  1:7c3bad9141dc add b
       
   104   |/
       
   105   o  0:1f0dee641bb7 add a
       
   106   
       
   107 Grabbing a revision
       
   108 
       
   109   $ hg pick 7c3bad9141dc
       
   110   picking 1:7c3bad9141dc "add b"
       
   111   1 new orphan changesets
       
   112   $ hg glog
       
   113   @  5:7c15c05db6fa add b
       
   114   |
       
   115   o  4:d46dc301d92f add y
       
   116   |
       
   117   o  3:8e224524cd09 add x
       
   118   |
       
   119   | *  2:4538525df7e2 add c
       
   120   | |
       
   121   | x  1:7c3bad9141dc add b
       
   122   |/
       
   123   o  0:1f0dee641bb7 add a
       
   124   
       
   125 
       
   126 When pick does not create any changes
       
   127 
       
   128   $ hg graft -r 4538525df7e2
       
   129   grafting 2:4538525df7e2 "add c"
       
   130 
       
   131   $ hg glog
       
   132   @  6:c4636a81ebeb add c
       
   133   |
       
   134   o  5:7c15c05db6fa add b
       
   135   |
       
   136   o  4:d46dc301d92f add y
       
   137   |
       
   138   o  3:8e224524cd09 add x
       
   139   |
       
   140   | *  2:4538525df7e2 add c
       
   141   | |
       
   142   | x  1:7c3bad9141dc add b
       
   143   |/
       
   144   o  0:1f0dee641bb7 add a
       
   145   
       
   146   $ hg pick -r 4538525df7e2
       
   147   picking 2:4538525df7e2 "add c"
       
   148   note: picking 2:4538525df7e2 created no changes to commit
       
   149 
       
   150   $ hg glog
       
   151   @  6:c4636a81ebeb add c
       
   152   |
       
   153   o  5:7c15c05db6fa add b
       
   154   |
       
   155   o  4:d46dc301d92f add y
       
   156   |
       
   157   o  3:8e224524cd09 add x
       
   158   |
       
   159   o  0:1f0dee641bb7 add a
       
   160   
       
   161 interrupted pick
       
   162 
       
   163   $ hg up d46dc301d92f
       
   164   0 files updated, 0 files merged, 2 files removed, 0 files unresolved
       
   165   $ echo foo > c
       
   166   $ hg ci -Aqm "foo to c"
       
   167   $ hg pick -r c4636a81ebeb
       
   168   picking 6:c4636a81ebeb "add c"
       
   169   merging c
       
   170   warning: conflicts while merging c! (edit, then use 'hg resolve --mark')
       
   171   unresolved merge conflicts (see hg help resolve)
       
   172   [1]
       
   173 
       
   174   $ echo foobar > c
       
   175   $ hg resolve --all --mark
       
   176   (no more unresolved files)
       
   177   continue: hg pick --continue
       
   178   $ hg pick --continue
       
   179   $ hg glog
       
   180   @  8:44e155eb95c7 add c
       
   181   |
       
   182   o  7:2ccc03d1d096 foo to c
       
   183   |
       
   184   | o  5:7c15c05db6fa add b
       
   185   |/
       
   186   o  4:d46dc301d92f add y
       
   187   |
       
   188   o  3:8e224524cd09 add x
       
   189   |
       
   190   o  0:1f0dee641bb7 add a
       
   191   
       
   192 
       
   193 When interrupted pick results in no changes to commit
       
   194 
       
   195   $ hg up d46dc301d92f
       
   196   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   197   $ echo bar > c
       
   198   $ hg add c
       
   199   $ hg ci -m "foo to c"
       
   200   created new head
       
   201 
       
   202   $ hg up 44e155eb95c7
       
   203   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   204 
       
   205   $ hg pick 4e04628911f6
       
   206   picking 9:4e04628911f6 "foo to c"
       
   207   merging c
       
   208   warning: conflicts while merging c! (edit, then use 'hg resolve --mark')
       
   209   unresolved merge conflicts (see hg help resolve)
       
   210   [1]
       
   211   $ echo foobar > c
       
   212   $ hg resolve -m
       
   213   (no more unresolved files)
       
   214   continue: hg pick --continue
       
   215 
       
   216   $ hg pick --continue
       
   217   note: picking 9:4e04628911f6 created no changes to commit
       
   218 
       
   219 Testing the abort functionality of hg pick
       
   220 
       
   221   $ echo foo > b
       
   222   $ hg ci -Aqm "foo to b"
       
   223   $ hg glog -r .^::
       
   224   @  10:c437988de89f foo to b
       
   225   |
       
   226   o  8:44e155eb95c7 add c
       
   227   |
       
   228   ~
       
   229 
       
   230   $ hg pick -r 7c15c05db6fa
       
   231   picking 5:7c15c05db6fa "add b"
       
   232   merging b
       
   233   warning: conflicts while merging b! (edit, then use 'hg resolve --mark')
       
   234   unresolved merge conflicts (see hg help resolve)
       
   235   [1]
       
   236 
       
   237   $ hg pick --abort
       
   238   aborting pick, updating to c437988de89f
       
   239 
       
   240   $ hg glog
       
   241   @  10:c437988de89f foo to b
       
   242   |
       
   243   o  8:44e155eb95c7 add c
       
   244   |
       
   245   o  7:2ccc03d1d096 foo to c
       
   246   |
       
   247   | o  5:7c15c05db6fa add b
       
   248   |/
       
   249   o  4:d46dc301d92f add y
       
   250   |
       
   251   o  3:8e224524cd09 add x
       
   252   |
       
   253   o  0:1f0dee641bb7 add a
       
   254   
       
   255 
       
   256 Trying to pick a public changeset
       
   257 
       
   258   $ hg phase -r 7c15c05db6fa -p
       
   259 
       
   260   $ hg pick -r 7c15c05db6fa
       
   261   abort: cannot pick public changesets: 7c15c05db6fa
       
   262   (see 'hg help phases' for details)
       
   263   [255]
       
   264 
       
   265   $ hg glog
       
   266   @  10:c437988de89f foo to b
       
   267   |
       
   268   o  8:44e155eb95c7 add c
       
   269   |
       
   270   o  7:2ccc03d1d096 foo to c
       
   271   |
       
   272   | o  5:7c15c05db6fa add b
       
   273   |/
       
   274   o  4:d46dc301d92f add y
       
   275   |
       
   276   o  3:8e224524cd09 add x
       
   277   |
       
   278   o  0:1f0dee641bb7 add a
       
   279   
       
   280 Checking phase preservation while picking secret changeset
       
   281 
       
   282 In case of merge conflicts
       
   283 
       
   284   $ hg phase -r 7c15c05db6fa -s -f
       
   285 
       
   286   $ hg pick -r 7c15c05db6fa
       
   287   picking 5:7c15c05db6fa "add b"
       
   288   merging b
       
   289   warning: conflicts while merging b! (edit, then use 'hg resolve --mark')
       
   290   unresolved merge conflicts (see hg help resolve)
       
   291   [1]
       
   292 
       
   293   $ echo bar > b
       
   294   $ hg resolve -m
       
   295   (no more unresolved files)
       
   296   continue: hg pick --continue
       
   297 
       
   298   $ hg pick --continue
       
   299   $ hg phase -r .
       
   300   11: secret
       
   301 
       
   302 No merge conflicts
       
   303 
       
   304   $ hg up d46dc301d92f
       
   305   0 files updated, 0 files merged, 3 files removed, 0 files unresolved
       
   306   $ echo foo > l
       
   307   $ hg add l
       
   308   $ hg ci -qm "added l" --secret
       
   309 
       
   310   $ hg phase -r .
       
   311   12: secret
       
   312 
       
   313   $ hg glog
       
   314   @  12:508d572e7053 added l
       
   315   |
       
   316   | o  11:10427de9e26e add b
       
   317   | |
       
   318   | o  10:c437988de89f foo to b
       
   319   | |
       
   320   | o  8:44e155eb95c7 add c
       
   321   | |
       
   322   | o  7:2ccc03d1d096 foo to c
       
   323   |/
       
   324   o  4:d46dc301d92f add y
       
   325   |
       
   326   o  3:8e224524cd09 add x
       
   327   |
       
   328   o  0:1f0dee641bb7 add a
       
   329   
       
   330   $ hg up 10427de9e26e
       
   331   3 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   332 
       
   333   $ hg pick -r 508d572e7053
       
   334   picking 12:508d572e7053 "added l"
       
   335 
       
   336   $ hg phase -r .
       
   337   13: secret
       
   338   $ cd ..
       
   339 
       
   340 Check pick behavior regarding working copy branch (issue6089)
       
   341 -------------------------------------------------------------
       
   342 
       
   343 The branch of the picked changeset should be preserved, and the working copy updated
       
   344 
       
   345   $ hg init issue6089
       
   346   $ cd issue6089
       
   347 
       
   348   $ touch a
       
   349   $ hg add a
       
   350   $ hg ci -m 'first commit on default'
       
   351 
       
   352   $ hg branch foo
       
   353   marked working directory as branch foo
       
   354   (branches are permanent and global, did you want a bookmark?)
       
   355   $ touch b
       
   356   $ hg add b
       
   357   $ hg ci -m 'first commit on foo'
       
   358 
       
   359   $ hg up default
       
   360   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   361   $ echo test > a
       
   362   $ hg ci -m 'second commit on default'
       
   363   $ hg log -G --template '{node|short}: {branch}\n' --rev 'all()+wdir()'
       
   364   o  ffffffffffff: default
       
   365   |
       
   366   @  5f07cbf7d111: default
       
   367   |
       
   368   | o  96bb2057779e: foo
       
   369   |/
       
   370   o  d03a6bcc83cd: default
       
   371   
       
   372 
       
   373   $ hg pick 1
       
   374   picking 1:96bb2057779e "first commit on foo"
       
   375   $ hg log --template '{branch}\n' -r tip
       
   376   foo
       
   377   $ hg branch
       
   378   foo
       
   379   $ hg log -G --template '{node|short}: {branch}\n' --rev 'all()+wdir()'
       
   380   o  ffffffffffff: foo
       
   381   |
       
   382   @  5344a77549bd: foo
       
   383   |
       
   384   o  5f07cbf7d111: default
       
   385   |
       
   386   o  d03a6bcc83cd: default
       
   387   
       
   388   $ cd ..