tests/test-backout.t
author Matt Mackall <mpm@selenic.com>
Fri, 17 Sep 2010 17:03:04 -0500
changeset 12327 92e30e135581
parent 12316 4134686b83e1
child 12328 b63f6422d2a7
permissions -rw-r--r--
tests: exit 0 no longer needed on unified tests

  $ HGMERGE=true; export HGMERGE

  $ hg init basic
  $ cd basic

# should complain

  $ hg backout
  abort: please specify a revision to backout
  [255]
  $ hg backout -r 0 0
  abort: please specify just one revision
  [255]

# basic operation

  $ echo a > a
  $ hg commit -d '0 0' -A -m a
  adding a
  $ echo b >> a
  $ hg commit -d '1 0' -m b

  $ hg backout -d '2 0' tip
  reverting a
  changeset 2:2929462c3dff backs out changeset 1:a820f4f40a57
  $ cat a
  a

# file that was removed is recreated

  $ cd ..
  $ hg init remove
  $ cd remove

  $ echo content > a
  $ hg commit -d '0 0' -A -m a
  adding a

  $ hg rm a
  $ hg commit -d '1 0' -m b

  $ hg backout -d '2 0' --merge tip
  adding a
  changeset 2:de31bdc76c0d backs out changeset 1:76862dcce372
  $ cat a
  content

# backout of backout is as if nothing happened

  $ hg backout -d '3 0' --merge tip
  removing a
  changeset 3:7f6d0f120113 backs out changeset 2:de31bdc76c0d
  $ cat a 2>/dev/null || echo cat: a: No such file or directory
  cat: a: No such file or directory

# across branch

  $ cd ..
  $ hg init branch
  $ cd branch
  $ echo a > a
  $ hg ci -Am0
  adding a
  $ echo b > b
  $ hg ci -Am1
  adding b
  $ hg co -C 0
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved

should fail

  $ hg backout 1
  abort: cannot backout change on a different branch
  [255]
  $ echo c > c
  $ hg ci -Am2
  adding c
  created new head

should fail

  $ hg backout 1
  abort: cannot backout change on a different branch
  [255]

# backout with merge

  $ cd ..
  $ hg init merge
  $ cd merge

  $ echo line 1 > a
  $ echo line 2 >> a
  $ hg commit -d '0 0' -A -m a
  adding a

remove line 1

  $ echo line 2 > a
  $ hg commit -d '1 0' -m b

  $ echo line 3 >> a
  $ hg commit -d '2 0' -m c

  $ hg backout --merge -d '3 0' 1
  reverting a
  created new head
  changeset 3:26b8ccb9ad91 backs out changeset 1:5a50a024c182
  merging with changeset 3:26b8ccb9ad91
  merging a
  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
  $ hg commit -d '4 0' -m d

check line 1 is back

  $ cat a
  line 1
  line 2
  line 3

# backout should not back out subsequent changesets

  $ hg init onecs
  $ cd onecs
  $ echo 1 > a
  $ hg commit -d '0 0' -A -m a
  adding a
  $ echo 2 >> a
  $ hg commit -d '1 0' -m b
  $ echo 1 > b
  $ hg commit -d '2 0' -A -m c
  adding b
  $ hg backout -d '3 0' 1
  reverting a
  created new head
  changeset 3:3202beb76721 backs out changeset 1:22bca4c721e5
  the backout changeset is a new head - do not forget to merge
  (use "backout --merge" if you want to auto-merge)
  $ hg locate b
  b
  $ hg update -C tip
  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ hg locate b
  [1]

  $ cd ..
  $ hg init m
  $ cd m
  $ echo a > a
  $ hg commit -d '0 0' -A -m a
  adding a
  $ echo b > b
  $ hg commit -d '1 0' -A -m b
  adding b
  $ echo c > c
  $ hg commit -d '2 0' -A -m b
  adding c
  $ hg update 1
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ echo d > d
  $ hg commit -d '3 0' -A -m c
  adding d
  created new head
  $ hg merge 2
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
  $ hg commit -d '4 0' -A -m d

# backout of merge should fail

  $ hg backout 4
  abort: cannot backout a merge changeset without --parent
  [255]

# backout of merge with bad parent should fail

  $ hg backout --parent 0 4
  abort: cb9a9f314b8b is not a parent of b2f3bb92043e
  [255]

# backout of non-merge with parent should fail

  $ hg backout --parent 0 3
  abort: cannot use --parent on non-merge changeset
  [255]

# backout with valid parent should be ok

  $ hg backout -d '5 0' --parent 2 4
  removing d
  changeset 5:10e5328c8435 backs out changeset 4:b2f3bb92043e

  $ hg rollback
  rolling back to revision 4 (undo commit)
  $ hg update -C
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved

  $ hg backout -d '6 0' --parent 3 4
  removing c
  changeset 5:033590168430 backs out changeset 4:b2f3bb92043e

  $ cd ..

# named branches

  $ hg init named_branches
  $ cd named_branches

  $ echo default > default
  $ hg ci -d '0 0' -Am default
  adding default
  $ hg branch branch1
  marked working directory as branch branch1
  $ echo branch1 > file1
  $ hg ci -d '1 0' -Am file1
  adding file1
  $ hg branch branch2
  marked working directory as branch branch2
  $ echo branch2 > file2
  $ hg ci -d '2 0' -Am file2
  adding file2
  $ hg backout -d '3 0' -r 1 -m 'backout on branch1'
  removing file1
  created new head
  changeset 3:d4e8f6db59fb backs out changeset 1:bf1602f437f3
  the backout changeset is a new head - do not forget to merge
  (use "backout --merge" if you want to auto-merge)

XXX maybe backout shouldn't suggest a merge here as it is a different branch?

on branch2 with branch1 not merged, so file1 should still exist:

  $ hg id
  45bbcd363bf0 (branch2)
  $ hg st -A
  C default
  C file1
  C file2

on branch2 with branch1 merged, so file1 should be gone:

  $ hg merge
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
  $ hg ci -d '4 0' -m 'merge backout of branch1'
  $ hg id
  22149cdde76d (branch2) tip
  $ hg st -A
  C default
  C file2

on branch1, so no file1 and file2:

  $ hg co -C branch1
  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ hg id
  bf1602f437f3 (branch1)
  $ hg st -A
  C default
  C file1