diff mercurial/posix.py @ 23597:7a5bcd471f2e stable

darwin: omit ignorable codepoints when normcase()ing a file path This lets us avoid some nasty case collision problems in OS X with invisible codepoints.
author Augie Fackler <raf@durin42.com>
date Tue, 16 Dec 2014 13:07:10 -0500
parents 77c121da6143
children 5edb387158a1
line wrap: on
line diff
--- a/mercurial/posix.py	Tue Dec 16 13:06:41 2014 -0500
+++ b/mercurial/posix.py	Tue Dec 16 13:07:10 2014 -0500
@@ -208,6 +208,7 @@
         - escape-encode invalid characters
         - decompose to NFD
         - lowercase
+        - omit ignored characters [200c-200f, 202a-202e, 206a-206f,feff]
 
         >>> normcase('UPPER')
         'upper'
@@ -265,7 +266,9 @@
             u = s.decode('utf-8')
 
         # Decompose then lowercase (HFS+ technote specifies lower)
-        return unicodedata.normalize('NFD', u).lower().encode('utf-8')
+        enc = unicodedata.normalize('NFD', u).lower().encode('utf-8')
+        # drop HFS+ ignored characters
+        return encoding.hfsignoreclean(enc)
 
 if sys.platform == 'cygwin':
     # workaround for cygwin, in which mount point part of path is