tests/test-pathconflicts-update.t
author Martin von Zweigbergk <martinvonz@google.com>
Tue, 15 Mar 2022 13:31:39 -0700
branchstable
changeset 48967 a54a866349ed
parent 46418 dc00324e80f4
permissions -rw-r--r--
filemerge: when merge tool uses $output, don't leave markers in $local As explained in the previous patch, we incorrectly leave conflict markers in both `$local` and `$output` since D12190. I don't understand why it broke but the fix is simple and clear after all the recent refactoring. Differential Revision: https://phab.mercurial-scm.org/D12379

Path conflict checking is currently disabled by default because of issue5716.
Turn it on for this test.

  $ cat >> $HGRCPATH << EOF
  > [experimental]
  > merge.checkpathconflicts=True
  > EOF

  $ 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
#if symlink
  $ ln -s c a/b
#else
  $ touch a/b
#endif
  $ 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

Update - local file conflicts with remote directory:

  $ hg up -q 0
  $ mkdir a
  $ echo 9 > a/b
  $ hg up dir
  a/b: untracked file conflicts with directory
  abort: untracked files in working directory differ from files in requested revision
  [20]
  $ hg up dir --config merge.checkunknown=warn
  a/b: replacing untracked file
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (activating bookmark dir)
  $ cat a/b.orig
  9
  $ rm a/b.orig

Update - local symlink conflicts with remote directory:

  $ hg up -q 0
  $ mkdir a
#if symlink
  $ ln -s x a/b
#else
  $ touch a/b
#endif
  $ hg up dir
  a/b: untracked file conflicts with directory
  abort: untracked files in working directory differ from files in requested revision
  [20]
  $ hg up dir --config merge.checkunknown=warn
  a/b: replacing untracked file
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (activating bookmark dir)
#if symlink
  $ readlink.py a/b.orig
  a/b.orig -> x
#endif
  $ rm a/b.orig

Update - local directory conflicts with remote file

  $ hg up -q 0
  $ mkdir -p a/b/c
  $ echo 9 > a/b/c/d
  $ hg up file
  a/b: untracked directory conflicts with file
  abort: untracked files in working directory differ from files in requested revision
  [20]
  $ hg up file --config merge.checkunknown=warn
  a/b: replacing untracked files in directory
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (activating bookmark file)
  $ cat a/b
  1
  $ test -d a/b.orig
  $ rm -rf a/b.orig

Update - local directory conflicts with remote symlink

  $ hg up -q 0
  $ mkdir -p a/b/c
  $ echo 9 > a/b/c/d
  $ hg up link
  a/b: untracked directory conflicts with file
  abort: untracked files in working directory differ from files in requested revision
  [20]
  $ hg up link --config merge.checkunknown=warn
  a/b: replacing untracked files in directory
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (activating bookmark link)
#if symlink
  $ readlink.py a/b
  a/b -> c
#endif
  $ test -d a/b.orig
  $ rm -rf a/b.orig

Update - local renamed file conflicts with remote directory

  $ hg up -q 0
  $ hg mv base a
  $ hg status -C
  A a
    base
  R base
  $ hg up --check dir
  abort: uncommitted changes
  [20]
  $ hg up dir
  a: path conflict - a file or link has the same name as a directory
  the local file has been renamed to a~d20a80d4def3
  resolve manually then use 'hg resolve --mark a'
  1 files updated, 0 files merged, 0 files removed, 1 files unresolved
  use 'hg resolve' to retry unresolved file merges
  (activating bookmark dir)
  [1]
  $ hg status -C
  A a~d20a80d4def3
    base
  R base
  $ hg resolve --list
  P a
  $ hg up --clean -q 0

Update clean - local directory conflicts with changed remote file

  $ hg up -q file
  $ rm a/b
  $ mkdir a/b
  $ echo 9 > a/b/c
  $ hg up file2 --check --config merge.checkunknown=warn
  abort: uncommitted changes
  [20]
  $ hg up file2 --clean
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (activating bookmark file2)