Patchwork [1,of,2] merge: pconvert paths in _unknowndirschecker before dirstate-normalizing

login
register
mail settings
Submitter Matt Harbison
Date March 23, 2018, 3:14 a.m.
Message ID <658b1d28813cc46c269d.1521774862@Envy>
Download mbox | patch
Permalink /patch/29795/
State Accepted
Headers show

Comments

Matt Harbison - March 23, 2018, 3:14 a.m.
# HG changeset patch
# User Matt Harbison <matt_harbison@yahoo.com>
# Date 1521773789 14400
#      Thu Mar 22 22:56:29 2018 -0400
# Node ID 658b1d28813cc46c269d34595c153b39d13a9583
# Parent  7ae6e3529e37492a5b012298cd3a936ff1c49f6e
merge: pconvert paths in _unknowndirschecker before dirstate-normalizing

This fixes the failure in test-pathconflicts-basic.t on Windows.  The test was
passing in 'a\b', which was getting normalized to 'A\B', which isn't in
dirstate.  (The filesystem path is all lowercase anyway.)

This isn't the only case of calling dirstate.normalize(), but other methods here
(util.finddirs()) seem to assume the input paths are already using '/'.  I think
the backslash comes from wvfs.reljoin() (in this case), but could also come from
wvfs.walk(), so this is the only case that needs it.
Yuya Nishihara - March 23, 2018, 2:07 p.m.
On Thu, 22 Mar 2018 23:14:22 -0400, Matt Harbison wrote:
> # HG changeset patch
> # User Matt Harbison <matt_harbison@yahoo.com>
> # Date 1521773789 14400
> #      Thu Mar 22 22:56:29 2018 -0400
> # Node ID 658b1d28813cc46c269d34595c153b39d13a9583
> # Parent  7ae6e3529e37492a5b012298cd3a936ff1c49f6e
> merge: pconvert paths in _unknowndirschecker before dirstate-normalizing

Looks good, queued, thanks.

Patch

diff --git a/mercurial/merge.py b/mercurial/merge.py
--- a/mercurial/merge.py
+++ b/mercurial/merge.py
@@ -706,7 +706,8 @@  class _unknowndirschecker(object):
             # Does the directory contain any files that are not in the dirstate?
             for p, dirs, files in repo.wvfs.walk(f):
                 for fn in files:
-                    relf = repo.dirstate.normalize(repo.wvfs.reljoin(p, fn))
+                    relf = util.pconvert(repo.wvfs.reljoin(p, fn))
+                    relf = repo.dirstate.normalize(relf)
                     if relf not in repo.dirstate:
                         return f
         return None