tests: add test for path conflicts during merge
authorMark Thomas <mbthomas@fb.com>
Mon, 02 Oct 2017 14:05:30 -0700
changeset 34558 f71c712ebdec
parent 34557 3b9428f4403d
child 34559 eddeedbde866
tests: add test for path conflicts during merge Differential Revision: https://phab.mercurial-scm.org/D787
tests/test-pathconflicts-merge.t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-pathconflicts-merge.t	Mon Oct 02 14:05:30 2017 -0700
@@ -0,0 +1,128 @@
+  $ hg init repo
+  $ cd repo
+  $ echo base > base
+  $ hg add base
+  $ hg commit -m "base"
+  $ hg bookmark -i base
+  $ mkdir a
+  $ echo 1 > a/b
+  $ hg add a/b
+  $ hg commit -m "file"
+  $ hg bookmark -i file
+  $ echo 2 > a/b
+  $ hg commit -m "file2"
+  $ hg bookmark -i file2
+  $ hg up 0
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ mkdir a
+  $ ln -s c a/b
+  $ hg add a/b
+  $ hg commit -m "link"
+  created new head
+  $ hg bookmark -i link
+  $ hg up 0
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ mkdir -p a/b/c
+  $ echo 2 > a/b/c/d
+  $ hg add a/b/c/d
+  $ hg commit -m "dir"
+  created new head
+  $ hg bookmark -i dir
+
+Merge - local file conflicts with remote directory
+
+  $ hg up file
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (activating bookmark file)
+  $ hg bookmark -i
+  $ hg merge --verbose dir
+  resolving manifests
+  a/b: path conflict - a file or link has the same name as a directory
+  the local file has been renamed to a/b~0ed027b96f31
+  resolve manually then use 'hg resolve --mark a/b'
+  moving a/b to a/b~0ed027b96f31 (glob)
+  getting a/b/c/d
+  1 files updated, 0 files merged, 0 files removed, 1 files unresolved
+  use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
+  [1]
+  $ hg status
+  M a/b/c/d
+  A a/b~0ed027b96f31
+  R a/b
+  $ hg resolve --all
+  a/b: path conflict must be resolved manually
+  $ hg forget a/b~0ed027b96f31 && rm a/b~0ed027b96f31
+  $ hg resolve --mark a/b
+  (no more unresolved files)
+  $ hg commit -m "merge file and dir (deleted file)"
+
+Merge - local symlink conflicts with remote directory
+
+  $ hg up link
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (activating bookmark link)
+  $ hg bookmark -i
+  $ hg merge dir
+  a/b: path conflict - a file or link has the same name as a directory
+  the local file has been renamed to a/b~2ea68033e3be
+  resolve manually then use 'hg resolve --mark a/b'
+  1 files updated, 0 files merged, 0 files removed, 1 files unresolved
+  use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
+  [1]
+  $ hg status
+  M a/b/c/d
+  A a/b~2ea68033e3be
+  R a/b
+  $ hg resolve --list
+  P a/b
+  $ hg resolve --all
+  a/b: path conflict must be resolved manually
+  $ hg mv a/b~2ea68033e3be a/b.old
+  $ hg resolve --mark a/b
+  (no more unresolved files)
+  $ hg resolve --list
+  R a/b
+  $ hg commit -m "merge link and dir (renamed link)"
+
+Merge - local directory conflicts with remote file or link
+
+  $ hg up dir
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (activating bookmark dir)
+  $ hg bookmark -i
+  $ hg merge file
+  a/b: path conflict - a file or link has the same name as a directory
+  the remote file has been renamed to a/b~0ed027b96f31
+  resolve manually then use 'hg resolve --mark a/b'
+  1 files updated, 0 files merged, 0 files removed, 1 files unresolved
+  use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
+  [1]
+  $ hg status
+  A a/b~0ed027b96f31
+  $ hg resolve --all
+  a/b: path conflict must be resolved manually
+  $ hg mv a/b~0ed027b96f31 a/b/old-b
+  $ hg resolve --mark a/b
+  (no more unresolved files)
+  $ hg commit -m "merge dir and file (move file into dir)"
+  created new head
+  $ hg merge file2
+  merging a/b/old-b and a/b to a/b/old-b
+  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  $ cat a/b/old-b
+  2
+  $ hg commit -m "merge file2 (copytrace tracked rename)"
+  $ hg merge link
+  a/b: path conflict - a file or link has the same name as a directory
+  the remote file has been renamed to a/b~2ea68033e3be
+  resolve manually then use 'hg resolve --mark a/b'
+  1 files updated, 0 files merged, 0 files removed, 1 files unresolved
+  use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
+  [1]
+  $ hg mv a/b~2ea68033e3be a/b.old
+  $ readlink a/b.old
+  c
+  $ hg resolve --mark a/b
+  (no more unresolved files)
+  $ hg commit -m "merge link (rename link)"