diff --git a/beets/library.py b/beets/library.py index 2cdd6c9a6..5490d805b 100644 --- a/beets/library.py +++ b/beets/library.py @@ -297,7 +297,7 @@ class Item(object): # replace / and leading . with _ if isinstance(value, basestring): value.replace(os.sep, '_') - re.sub(r'[' + os.sep + r']|^\.', '_', value) + value = re.sub(r'[\\/:]|^\.', '_', value) elif key in ('track', 'tracktotal', 'disc', 'disctotal'): # pad with zeros value = '%02i' % value diff --git a/test/test_files.py b/test/test_files.py index 7ab41c7aa..ebb5b8b76 100755 --- a/test/test_files.py +++ b/test/test_files.py @@ -151,6 +151,19 @@ class AddTest(unittest.TestCase): self.lib.add(os.path.join('rsrc', 'full.mp3'), copy=True) self.assertTrue(os.path.isfile(os.path.join(self.dir, 'item'))) +class DestinationTest(unittest.TestCase): + def setUp(self): + self.lib = beets.library.Library(':memory:') + self.i = beets.library.Item.from_path(join('rsrc', 'full.mp3')) + self.i.library = self.lib + + def test_destination_escapes_slashes(self): + self.i.album = 'one/two' + dest = self.i.destination() + self.assertTrue('one' in dest) + self.assertTrue('two' in dest) + self.assertFalse('one/two' in dest) + def suite(): return unittest.TestLoader().loadTestsFromName(__name__)