Skip to content

Commit ef7e284

Browse files
Location: fix file URL parsing for windows
1 parent fe74b6e commit ef7e284

File tree

2 files changed

+8
-3
lines changed

2 files changed

+8
-3
lines changed

src/borg/helpers/parseformat.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from string import Formatter
1818

1919
from ..logger import create_logger
20+
from ..platformflags import is_windows
2021

2122
logger = create_logger()
2223

@@ -439,8 +440,9 @@ class Location:
439440
(?P<path>.+)
440441
"""
441442

442-
# abs_path must start with a slash.
443-
abs_path_re = r"(?P<path>/.+)"
443+
abs_path_re_posix = r"(?P<path>/.+)" # abs path must start with a slash.
444+
abs_path_re_win = r"(?P<path>[a-zA-Z]:/.+)" # abs path must start with drive : slash.
445+
abs_path_re = abs_path_re_win if is_windows else abs_path_re_posix
444446

445447
# path may or may not start with a slash.
446448
abs_or_rel_path_re = r"(?P<path>.+)"
@@ -458,7 +460,8 @@ class Location:
458460

459461
rclone_re = re.compile(r"(?P<proto>rclone):(?P<path>(.*))", re.VERBOSE)
460462

461-
file_or_socket_re = re.compile(r"(?P<proto>(file|socket))://" + abs_path_re, re.VERBOSE)
463+
sep = r"/" if is_windows else r"" # on windows, an addtl. slash is needed
464+
file_or_socket_re = re.compile(r"(?P<proto>(file|socket))://" + sep + abs_path_re, re.VERBOSE)
462465

463466
local_re = re.compile(local_path_re, re.VERBOSE)
464467

src/borg/platformflags.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
is_win32 = sys.platform.startswith("win32")
1010
is_cygwin = sys.platform.startswith("cygwin")
11+
is_msys = sys.platform.startswith("msys")
12+
is_windows = is_win32 or is_cygwin or is_msys
1113

1214
is_linux = sys.platform.startswith("linux")
1315
is_freebsd = sys.platform.startswith("freebsd")

0 commit comments

Comments
 (0)