diff --git a/picard/util/__init__.py b/picard/util/__init__.py index 56a80f2a3..3c3958f65 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 sys.platform == "win32" and 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 a2703c5a6..026e29b81 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -13,13 +13,25 @@ if '_' not in __builtin__.__dict__: class ReplaceWin32IncompatTest(unittest.TestCase): - def test_correct(self): + @unittest.skipUnless(sys.platform == "win32", "windows test") + def test_correct_absolute_win32(self): self.assertEqual(util.replace_win32_incompat("c:\\test\\te\"st/2"), "c:\\test\\te_st/2") self.assertEqual(util.replace_win32_incompat("c:\\test\\d:/2"), "c:\\test\\d_/2") + + @unittest.skipUnless(sys.platform != "win32", "non-windows test") + def test_correct_absolute_non_win32(self): + self.assertEqual(util.replace_win32_incompat("/test/te\"st/2"), + "/test/te_st/2") + self.assertEqual(util.replace_win32_incompat("/test/d:/2"), + "/test/d_/2") + + def test_correct_relative(self): self.assertEqual(util.replace_win32_incompat("A\"*:<>?|b"), "A_______b") + self.assertEqual(util.replace_win32_incompat("d:tes