From 8a336f4b925d942ca3dad309c178cb1fdbb2e661 Mon Sep 17 00:00:00 2001 From: Philipp Wolfer Date: Thu, 4 Dec 2014 13:30:05 +0100 Subject: [PATCH] Fixed renaming paths starting with "[a-z]:" being interpreted as drive names on Windows. Fixes PICARD-663 --- picard/util/__init__.py | 7 +++++-- test/test_utils.py | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/picard/util/__init__.py b/picard/util/__init__.py index 56a80f2a3..294e11064 100644 --- a/picard/util/__init__.py +++ b/picard/util/__init__.py @@ -134,8 +134,11 @@ def replace_win32_incompat(string, repl=u"_"): """Replace win32 filename incompatible characters from ``string`` by ``repl``.""" # Don't replace : with _ for windows drive - drive, rest = ntpath.splitdrive(string) - return drive + _re_win32_incompat.sub(repl, rest) + if os.path.isabs(string): + drive, rest = ntpath.splitdrive(string) + return drive + _re_win32_incompat.sub(repl, rest) + else: + return _re_win32_incompat.sub(repl, string) _re_non_alphanum = re.compile(r'\W+', re.UNICODE) diff --git a/test/test_utils.py b/test/test_utils.py index 28a49d737..64121d299 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -19,6 +19,8 @@ class ReplaceWin32IncompatTest(unittest.TestCase): "c:\\test\\d_/2") self.assertEqual(util.replace_win32_incompat("A\"*:<>?|b"), "A_______b") + self.assertEqual(util.replace_win32_incompat("d:test"), + "d_test") def test_incorrect(self): self.assertNotEqual(util.replace_win32_incompat("c:\\test\\te\"st2"),