tests/test-merge-remove.t
author Matt Harbison <matt_harbison@yahoo.com>
Sat, 07 Feb 2015 19:40:02 -0500
changeset 24133 79c2c29c71ae
parent 23840 ddc17eaf0f1b
child 27137 25e4b2f000c5
permissions -rw-r--r--
largefiles: don't warn when reverting a forgotten largefile Previously, when a largefile is forgotten and then reverted, a warning was issued: $ hg revert -R subrepo subrepo/large.txt file not managed: subrepo/large.txt (glob) This was purely cosmetic as the file itself actually was reverted. The problem was even with all of the matcher patching, the largefile pattern given on the command line wasn't converted to a standin because the standin was neither in ctx nor wctx. This causes the named largefile to be added to the 'names' dict in cmdutil.revert() in the repo walk at line 2550. The warning was printed out when the 'names' dict is iterated, because the file was specified exactly. Since core revert recurses into subrepos and largefiles only overrides the revert method in commands.py, it doesn't work properly when reverting a subrepo. However, it still will recurse into the subrepo and call the installed matcher method, so lfdirstate is reopened for the current repo level to prevent any new problems.

  $ hg init

  $ echo foo > foo
  $ echo bar > bar
  $ hg ci -qAm 'add foo bar'

  $ echo foo2 >> foo
  $ echo bleh > bar
  $ hg ci -m 'change foo bar'

  $ hg up -qC 0
  $ hg mv foo foo1
  $ echo foo1 > foo1
  $ hg cat foo >> foo1
  $ hg ci -m 'mv foo foo1'
  created new head

  $ hg merge
  merging foo1 and foo to foo1
  1 files updated, 1 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)

  $ hg debugstate --nodates
  m   0         -2 unset               bar
  m   0         -2 unset               foo1
  copy: foo -> foo1

  $ hg st -q
  M bar
  M foo1


Removing foo1 and bar:

  $ cp foo1 F
  $ cp bar B
  $ hg rm -f foo1 bar

  $ hg debugstate --nodates
  r   0         -1 set                 bar
  r   0         -1 set                 foo1
  copy: foo -> foo1

  $ hg st -qC
  R bar
  R foo1


Re-adding foo1 and bar:

  $ cp F foo1
  $ cp B bar
  $ hg add -v foo1 bar
  adding bar
  adding foo1

  $ hg debugstate --nodates
  n   0         -2 unset               bar
  n   0         -2 unset               foo1
  copy: foo -> foo1

  $ hg st -qC
  M bar
  M foo1
    foo


Reverting foo1 and bar:

  $ hg revert -vr . foo1 bar
  saving current version of bar as bar.orig
  reverting bar
  saving current version of foo1 as foo1.orig
  reverting foo1

  $ hg debugstate --nodates
  n   0         -2 unset               bar
  n   0         -2 unset               foo1
  copy: foo -> foo1

  $ hg st -qC
  M bar
  M foo1
    foo

  $ hg diff

Merge should not overwrite local file that is untracked after remove

  $ rm *
  $ hg up -qC
  $ hg rm bar
  $ hg ci -m 'remove bar'
  $ echo 'memories of buried pirate treasure' > bar
  $ hg merge
  bar: untracked file differs
  abort: untracked files in working directory differ from files in requested revision
  [255]
  $ cat bar
  memories of buried pirate treasure

Those who use force will lose

  $ hg merge -f
  remote changed bar which local deleted
  use (c)hanged version or leave (d)eleted? c
  merging foo1 and foo to foo1
  1 files updated, 1 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
  $ cat bar
  bleh
  $ hg st
  M bar
  M foo1