Mercurial > hg
changeset 34556:7a8a16f8ea22
context: also consider path conflicts when clearing unknown files
When clearing unknown files to remove path conflicts, also delete files that
conflict with the target file's path.
Differential Revision: https://phab.mercurial-scm.org/D785
author | Mark Thomas <mbthomas@fb.com> |
---|---|
date | Mon, 02 Oct 2017 14:05:30 -0700 |
parents | 989e884d1be9 |
children | 3b9428f4403d |
files | mercurial/context.py tests/test-pathconflicts-basic.t |
diffstat | 2 files changed, 35 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/context.py Mon Oct 02 14:05:30 2017 -0700 +++ b/mercurial/context.py Mon Oct 02 14:05:30 2017 -0700 @@ -1933,8 +1933,13 @@ ``write()`` can be called successfully. """ wvfs = self._repo.wvfs - if wvfs.isdir(self._path) and not wvfs.islink(self._path): - wvfs.removedirs(self._path) + f = self._path + if wvfs.isdir(f) and not wvfs.islink(f): + wvfs.rmtree(f, forcibly=True) + for p in reversed(list(util.finddirs(f))): + if wvfs.isfileorlink(p): + wvfs.unlink(p) + break def setflags(self, l, x): self._repo.wvfs.setflags(self._path, l, x)
--- a/tests/test-pathconflicts-basic.t Mon Oct 02 14:05:30 2017 -0700 +++ b/tests/test-pathconflicts-basic.t Mon Oct 02 14:05:30 2017 -0700 @@ -35,6 +35,7 @@ [1] $ hg update --clean . 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ rm a~853701544ac3 Basic update - local directory conflicts with remote file @@ -46,13 +47,19 @@ abort: untracked files in working directory differ from files in requested revision [255] $ hg up --clean file - abort: *: '$TESTTMP/repo/a' (glob) - [255] + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + (activating bookmark file) + +Repo state is ok -Repo is in a very bad state now - recover manually - - $ rm -r a - $ hg up -q --clean 0 + $ hg sum + parent: 1:853701544ac3 + file + branch: default + bookmarks: *file + commit: (clean) + update: 2 new changesets (update) + phases: 4 draft Basic update - untracked file conflicts with remote directory @@ -62,6 +69,9 @@ a: replacing untracked file 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (activating bookmark dir) + $ cat a.orig + untracked + $ rm -f a.orig Basic clean update - local directory conflicts with changed remote file @@ -73,11 +83,17 @@ abort: *: '$TESTTMP/repo/a' (glob) [255] $ hg up --clean file2 - abort: *: '$TESTTMP/repo/a' (glob) - [255] + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + (activating bookmark file2) + +Repo state is ok -Repo is in a very bad state now - recover manually + $ hg sum + parent: 2:f64e09fac717 + file2 + branch: default + bookmarks: *file2 + commit: (clean) + update: 1 new changesets, 2 branch heads (merge) + phases: 4 draft - $ rm -r a - $ hg up -q --clean 0 -