From 1eda0d39e6dcb8f75741e50e9379ef7da0ccdd28 Mon Sep 17 00:00:00 2001 From: Gunther Schmidl Date: Sat, 25 Jul 2020 22:11:07 +0200 Subject: [PATCH] better regex for drive letter; hopefully fixed tests for 2.7; added test to show only drive-letter like colons are affected --- beets/dbcore/db.py | 3 ++- test/test_files.py | 10 ++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/beets/dbcore/db.py b/beets/dbcore/db.py index 0f43f4bc5..46b47a2e1 100755 --- a/beets/dbcore/db.py +++ b/beets/dbcore/db.py @@ -86,8 +86,9 @@ class FormattedMapping(Mapping): if self.for_path: sep_repl = beets.config['path_sep_replace'].as_str() sep_drive = beets.config['drive_sep_replace'].as_str() + if re.match(r'^\w:', value): - value = value.replace(':', sep_drive) + value = re.sub(r'(?<=^\w):', sep_drive, value) for sep in (os.path.sep, os.path.altsep): if sep: diff --git a/test/test_files.py b/test/test_files.py index ee50e583e..13a8b4407 100644 --- a/test/test_files.py +++ b/test/test_files.py @@ -105,14 +105,20 @@ class MoveTest(_common.TestCase): def test_move_file_with_colon(self): self.i.artist = u'C:DOS' self.i.move() - self.assertRegex(self.i.path.decode(), r'C_DOS') + self.assertIn('C_DOS', self.i.path.decode()) + + def test_move_file_with_multiple_colons(self): + print(beets.config['replace']) + self.i.artist = u'COM:DOS' + self.i.move() + self.assertIn('COM_DOS', self.i.path.decode()) def test_move_file_with_colon_alt_separator(self): old = beets.config['drive_sep_replace'] beets.config["drive_sep_replace"] = '0' self.i.artist = u'C:DOS' self.i.move() - self.assertRegex(self.i.path.decode(), r"C0DOS") + self.assertIn('C0DOS', self.i.path.decode()) beets.config["drive_sep_replace"] = old def test_read_only_file_copied_writable(self):