view tests/test-evolve-continue.t @ 6198:cc80747ef3c8

evolve: support hg continue
author Luke Granger-Brown <hg@lukegb.com>
date Mon, 14 Mar 2022 18:00:00 +0000
parents f1d4c9eddcc1
children b1d1f4ade142
line wrap: on
line source

Testing the continue functionality of `hg evolve`

  $ . $TESTDIR/testlib/common.sh

  $ cat >> $HGRCPATH <<EOF
  > [ui]
  > interactive = True
  > [extensions]
  > rebase =
  > evolve =
  > EOF

#testcases inmemory ondisk
#if inmemory
  $ cat >> $HGRCPATH <<EOF
  > [experimental]
  > evolution.in-memory = yes
  > EOF
#endif

Setting up the repo

  $ hg init repo
  $ cd repo
  $ echo ".*\.orig" > .hgignore
  $ hg add .hgignore
  $ hg ci -m "added hgignore"
  $ for ch in a b c d; do echo foo>$ch; hg add $ch; hg ci -qm "added "$ch; done

  $ hg glog
  @  4:c41c793e0ef1 added d
  |   () draft
  o  3:ca1b80f7960a added c
  |   () draft
  o  2:b1661037fa25 added b
  |   () draft
  o  1:c7586e2a9264 added a
  |   () draft
  o  0:8fa14d15e168 added hgignore
      () draft

Simple case of evolve --continue

  $ hg up 'desc("added c")'
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ echo bar > d
  $ hg add d
  $ hg amend
  1 new orphan changesets
  $ hg glog
  @  5:cb6a2ab625bb added c
  |   () draft
  | *  4:c41c793e0ef1 added d
  | |   () draft orphan
  | x  3:ca1b80f7960a added c
  |/    () draft
  o  2:b1661037fa25 added b
  |   () draft
  o  1:c7586e2a9264 added a
  |   () draft
  o  0:8fa14d15e168 added hgignore
      () draft

  $ hg evolve --all
  move:[4] added d
  atop:[5] added c
  merging d (inmemory !)
  hit merge conflicts; retrying merge in working copy (inmemory !)
  merging d
  warning: conflicts while merging d! (edit, then use 'hg resolve --mark')
  unresolved merge conflicts
  (see 'hg help evolve.interrupted')
  [240]

  $ echo foo > d
  $ hg resolve -m
  (no more unresolved files)
  continue: hg evolve --continue

  $ hg evolve --continue
  evolving 4:c41c793e0ef1 "added d"

  $ hg glog
  o  6:2a4e03d422e2 added d
  |   () draft
  @  5:cb6a2ab625bb added c
  |   () draft
  o  2:b1661037fa25 added b
  |   () draft
  o  1:c7586e2a9264 added a
  |   () draft
  o  0:8fa14d15e168 added hgignore
      () draft

  $ hg up
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved

Testing hg continue for evolve

  $ hg up 'desc("added b")'
  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
  $ echo bar > c
  $ hg add c
  $ hg amend
  2 new orphan changesets
  $ hg glog
  @  7:8591ebad2ee8 added b
  |   () draft
  | *  6:2a4e03d422e2 added d
  | |   () draft orphan
  | *  5:cb6a2ab625bb added c
  | |   () draft orphan
  | x  2:b1661037fa25 added b
  |/    () draft
  o  1:c7586e2a9264 added a
  |   () draft
  o  0:8fa14d15e168 added hgignore
      () draft

  $ hg evolve --all
  move:[5] added c
  atop:[7] added b
  merging c (inmemory !)
  hit merge conflicts; retrying merge in working copy (inmemory !)
  merging c
  warning: conflicts while merging c! (edit, then use 'hg resolve --mark')
  unresolved merge conflicts
  (see 'hg help evolve.interrupted')
  [240]

  $ echo foo > c
  $ hg resolve -m
  (no more unresolved files)
  continue: hg evolve --continue

  $ hg continue
  evolving 5:cb6a2ab625bb "added c"
  move:[6] added d
  atop:[8] added c

  $ hg glog
  o  9:ee53d012d45b added d
  |   () draft
  o  8:ba3724c42438 added c
  |   () draft
  @  7:8591ebad2ee8 added b
  |   () draft
  o  1:c7586e2a9264 added a
  |   () draft
  o  0:8fa14d15e168 added hgignore
      () draft

  $ hg up
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved

Case when conflicts resolution lead to empty wdir in evolve --continue

  $ echo foo > e
  $ hg ci -Aqm "added e"
  $ hg prev
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  [9] added d
  $ echo bar > e
  $ hg add e
  $ hg amend
  1 new orphan changesets

  $ hg glog
  @  11:184dba7cf613 added d
  |   () draft
  | *  10:87d7311179ee added e
  | |   () draft orphan
  | x  9:ee53d012d45b added d
  |/    () draft
  o  8:ba3724c42438 added c
  |   () draft
  o  7:8591ebad2ee8 added b
  |   () draft
  o  1:c7586e2a9264 added a
  |   () draft
  o  0:8fa14d15e168 added hgignore
      () draft

  $ hg evolve --update
  move:[10] added e
  atop:[11] added d
  merging e (inmemory !)
  hit merge conflicts; retrying merge in working copy (inmemory !)
  merging e
  warning: conflicts while merging e! (edit, then use 'hg resolve --mark')
  unresolved merge conflicts
  (see 'hg help evolve.interrupted')
  [240]

  $ echo bar > e
  $ hg resolve -m
  (no more unresolved files)
  continue: hg evolve --continue
  $ hg diff

  $ hg evolve --continue
  evolving 10:87d7311179ee "added e"
  evolution of 10:87d7311179ee created no changes to commit

  $ hg glog
  @  11:184dba7cf613 added d
  |   () draft
  o  8:ba3724c42438 added c
  |   () draft
  o  7:8591ebad2ee8 added b
  |   () draft
  o  1:c7586e2a9264 added a
  |   () draft
  o  0:8fa14d15e168 added hgignore
      () draft

Case when there are a lot of revision to continue

  $ hg up 'desc("added a")'
  0 files updated, 0 files merged, 4 files removed, 0 files unresolved
  $ echo bar > b
  $ hg add b
  $ hg amend
  3 new orphan changesets

  $ hg evolve --all --update
  move:[7] added b
  atop:[12] added a
  merging b (inmemory !)
  hit merge conflicts; retrying merge in working copy (inmemory !)
  merging b
  warning: conflicts while merging b! (edit, then use 'hg resolve --mark')
  unresolved merge conflicts
  (see 'hg help evolve.interrupted')
  [240]

  $ echo foo > b
  $ hg resolve -m
  (no more unresolved files)
  continue: hg evolve --continue
  $ hg evolve --continue
  evolving 7:8591ebad2ee8 "added b"
  move:[8] added c
  atop:[13] added b
  move:[11] added d
  working directory is now at 44cb92e89781

  $ hg glog
  @  15:44cb92e89781 added d
  |   () draft
  o  14:152ba81b0477 added c
  |   () draft
  o  13:58b400d15a91 added b
  |   () draft
  o  12:53b632d203d8 added a
  |   () draft
  o  0:8fa14d15e168 added hgignore
      () draft

Conlicts -> resolve -> continue -> conflicts -> resolve -> continue
Test multiple conflicts in one evolve

  $ for ch in f g h; do echo foo > $ch; hg add $ch; hg ci -m "added "$ch; done;

  $ hg glog
  @  18:bc3b992c22bd added h
  |   () draft
  o  17:28352edcd58d added g
  |   () draft
  o  16:f9f6a4a00822 added f
  |   () draft
  o  15:44cb92e89781 added d
  |   () draft
  o  14:152ba81b0477 added c
  |   () draft
  o  13:58b400d15a91 added b
  |   () draft
  o  12:53b632d203d8 added a
  |   () draft
  o  0:8fa14d15e168 added hgignore
      () draft

  $ hg up 'desc("added c")'
  1 files updated, 0 files merged, 4 files removed, 0 files unresolved

  $ echo bar > f
  $ echo bar > h
  $ hg add f h
  $ hg amend
  4 new orphan changesets

  $ hg glog
  @  19:f4023955bf12 added c
  |   () draft
  | *  18:bc3b992c22bd added h
  | |   () draft orphan
  | *  17:28352edcd58d added g
  | |   () draft orphan
  | *  16:f9f6a4a00822 added f
  | |   () draft orphan
  | *  15:44cb92e89781 added d
  | |   () draft orphan
  | x  14:152ba81b0477 added c
  |/    () draft
  o  13:58b400d15a91 added b
  |   () draft
  o  12:53b632d203d8 added a
  |   () draft
  o  0:8fa14d15e168 added hgignore
      () draft

  $ hg evolve --all --update
  move:[15] added d
  atop:[19] added c
  move:[16] added f
  merging f (inmemory !)
  hit merge conflicts; retrying merge in working copy (inmemory !)
  merging f
  warning: conflicts while merging f! (edit, then use 'hg resolve --mark')
  unresolved merge conflicts
  (see 'hg help evolve.interrupted')
  [240]

  $ echo foo > f
  $ hg resolve -m
  (no more unresolved files)
  continue: hg evolve --continue
  $ hg evolve --continue
  evolving 16:f9f6a4a00822 "added f"
  move:[17] added g
  atop:[21] added f
  move:[18] added h
  merging h (inmemory !)
  hit merge conflicts; retrying merge in working copy (inmemory !)
  merging h
  warning: conflicts while merging h! (edit, then use 'hg resolve --mark')
  unresolved merge conflicts
  (see 'hg help evolve.interrupted')
  [240]

  $ echo foo > h
  $ hg resolve -m
  (no more unresolved files)
  continue: hg evolve --continue
  $ hg evolve --continue
  evolving 18:bc3b992c22bd "added h"
  working directory is now at b4b76f2b86eb

Make sure, confirmopt is respected while continue

  $ hg glog
  @  23:b4b76f2b86eb added h
  |   () draft
  o  22:c75da1c807b4 added g
  |   () draft
  o  21:1b1bb06b1b76 added f
  |   () draft
  o  20:63d80a6d5203 added d
  |   () draft
  o  19:f4023955bf12 added c
  |   () draft
  o  13:58b400d15a91 added b
  |   () draft
  o  12:53b632d203d8 added a
  |   () draft
  o  0:8fa14d15e168 added hgignore
      () draft

  $ hg up 'desc("added f")'
  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ echo bar > g
  $ hg add g
  $ hg amend
  2 new orphan changesets

  $ hg evolve --all --update --confirm << EOF
  > y
  > EOF
  move:[22] added g
  atop:[24] added f
  perform evolve? [Ny] y
  merging g (inmemory !)
  hit merge conflicts; retrying merge in working copy (inmemory !)
  merging g
  warning: conflicts while merging g! (edit, then use 'hg resolve --mark')
  unresolved merge conflicts
  (see 'hg help evolve.interrupted')
  [240]

  $ echo foo > g
  $ hg resolve -m
  (no more unresolved files)
  continue: hg evolve --continue

  $ hg evolve --continue << EOF
  > y
  > EOF
  evolving 22:c75da1c807b4 "added g"
  move:[23] added h
  atop:[25] added g
  perform evolve? [Ny] y
  working directory is now at 53fa2be5b910

  $ hg glog
  @  26:53fa2be5b910 added h
  |   () draft
  o  25:3efe414bea19 added g
  |   () draft
  o  24:a8dd354780ea added f
  |   () draft
  o  20:63d80a6d5203 added d
  |   () draft
  o  19:f4023955bf12 added c
  |   () draft
  o  13:58b400d15a91 added b
  |   () draft
  o  12:53b632d203d8 added a
  |   () draft
  o  0:8fa14d15e168 added hgignore
      () draft

Testing `evolve --continue` after `hg next --evolve`

  $ hg up .^^
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ echo foobar > g
  $ hg amend
  2 new orphan changesets

  $ hg next --evolve
  move:[25] added g
  atop:[27] added f
  merging g (inmemory !)
  hit merge conflicts; retrying merge in working copy (inmemory !)
  merging g
  warning: conflicts while merging g! (edit, then use 'hg resolve --mark')
  unresolved merge conflicts
  (see 'hg help evolve.interrupted')
  [240]
  $ echo foo > g
  $ hg resolve -m
  (no more unresolved files)
  continue: hg evolve --continue
  $ hg evolve --continue
  evolving 25:3efe414bea19 "added g"

Testing that interrupted evolve don't get confused about copies (issue5930):
----------------------------------------------------------------------------

  $ cd ..
  $ hg init issue5930
  $ cd issue5930
  $ echo a > a
  $ hg ci -Am "added a"
  adding a
  $ hg cp a b
  $ hg ci -m "rename a to b"

  $ hg up 0 -q
  $ echo c > c
  $ hg ci -Am "added c"
  adding c
  created new head

  $ echo d > c
  $ echo d > d
  $ hg ci -Am "added d, modified c"
  adding d
  $ hg up .^
  1 files updated, 0 files merged, 1 files removed, 0 files unresolved

  $ hg log -G -T "{rev} {desc}\n"
  o  3 added d, modified c
  |
  @  2 added c
  |
  | o  1 rename a to b
  |/
  o  0 added a
  
  $ hg rebase -r . -d 1
  rebasing 2:29edef26570b "added c"
  1 new orphan changesets
  $ echo conflict > c
  $ hg amend

  $ hg log -G -T "{rev} {desc}\n"
  @  5 added c
  |
  | *  3 added d, modified c
  | |
  | x  2 added c
  | |
  o |  1 rename a to b
  |/
  o  0 added a
  

  $ hg evolve
  move:[3] added d, modified c
  atop:[5] added c
  merging c (inmemory !)
  hit merge conflicts; retrying merge in working copy (inmemory !)
  merging c
  warning: conflicts while merging c! (edit, then use 'hg resolve --mark')
  unresolved merge conflicts
  (see 'hg help evolve.interrupted')
  [240]

Status mentions file 'b' (copied from 'a') here, even though it wasn't
affected by the evolved changeset (nor was 'a')

  $ hg st -C
  M c
  A d
  ? c.orig

  $ cd ..
  $ hg init transitive-renames
  $ cd transitive-renames
  $ echo 1 > a
  $ echo 1 > b
  $ hg ci -Aqm initial
  $ echo 2 > a
  $ hg mv b c
  $ hg ci -m 'rename b to c'
  $ echo 3 > a
  $ hg mv c d
  $ hg ci -m 'rename c to d'
  $ hg prev -q
  $ echo 2b > a
  $ hg amend -q
  1 new orphan changesets
  $ hg evolve -q
  warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
  unresolved merge conflicts
  (see 'hg help evolve.interrupted')
  [240]
  $ hg st -C
  M a
  A d
    c
  R c
  ? a.orig