# HG changeset patch # User Matt Mackall # Date 2011-11-23 22:22:37 # Node ID b61fa7481a68891f4148682c7dbf7aa439d3719f # Parent 0c0ed2b3082d21c132a27bc62fe4e991a55e7775 posix: fix HFS+ percent-encoding folding We use 'ignore' rather than 'replace' so we don't have to deal with u+FFFD in UTF-8 round-trip. diff --git a/mercurial/posix.py b/mercurial/posix.py --- a/mercurial/posix.py +++ b/mercurial/posix.py @@ -176,13 +176,15 @@ if sys.platform == 'darwin': u = path.decode('utf-8') except UnicodeDecodeError: # percent-encode any characters that don't round-trip - p2 = path.decode('utf-8', 'replace').encode('utf-8') + p2 = path.decode('utf-8', 'ignore').encode('utf-8') s = "" - for a, b in zip(path, p2): - if a != b: - s += "%%%02X" % ord(a) + pos = 0 + for c in path: + if p2[pos:pos + 1] == c: + s += c + pos += 1 else: - s += a + s += "%%%02X" % ord(c) u = s.decode('utf-8') # Decompose then lowercase (HFS+ technote specifies lower)