Skip to content

Commit d415916

Browse files
Location: fix file URL parsing for windows
1 parent a29fa3a commit d415916

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

@@ -436,8 +437,9 @@ class Location:
436437
(?P<path>.+)
437438
"""
438439

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

442444
# path may or may not start with a slash.
443445
abs_or_rel_path_re = r"(?P<path>.+)"
@@ -455,7 +457,8 @@ class Location:
455457

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

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

460463
local_re = re.compile(local_path_re, re.VERBOSE)
461464

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)