From 8e855ecb8a9d82b3a81d17a49fe550806d3089a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrg=20Rast?= Date: Sat, 30 Nov 2019 00:36:56 +0100 Subject: [PATCH] Accept absolute paths on windows Accept absolute repo paths on windows. --- src/borg/helpers/parseformat.py | 20 ++++++++++++++++++++ src/borg/testsuite/__init__.py | 2 ++ 2 files changed, 22 insertions(+) diff --git a/src/borg/helpers/parseformat.py b/src/borg/helpers/parseformat.py index c09dc868f..c8878002f 100644 --- a/src/borg/helpers/parseformat.py +++ b/src/borg/helpers/parseformat.py @@ -22,6 +22,7 @@ from .time import OutputTimestamp, format_time, to_localtime, safe_timestamp, sa from .. import __version__ as borg_version from .. import __version_tuple__ as borg_version_tuple from ..constants import * # NOQA +from ..platformflags import is_win32 def bin_to_hex(binary): @@ -377,6 +378,14 @@ class Location: | # or """ + optional_archive_re, re.VERBOSE) # archive name (optional, may be empty) + win_file_re = re.compile(r""" + (?:file://)? # optional file protocol + (?P + (?:[a-zA-Z]:)? # Drive letter followed by a colon (optional) + (?:[^:]+) # Anything which does not contain a :, at least one character + ) + """ + optional_archive_re, re.VERBOSE) # archive name (optional, may be empty) + def __init__(self, text=''): if not self.parse(text): raise ValueError('Invalid location format: "%s"' % self.orig) @@ -405,6 +414,17 @@ class Location: p = os.path.normpath(p) return ('/.' + p) if relative else p + if is_win32: + m = self.win_file_re.match(text) + if m: + self.proto = 'file' + self.path = path + self.archive = m.group('archive') + return True + + # On windows we currently only support windows paths + return False + m = self.ssh_re.match(text) if m: self.proto = m.group('proto') diff --git a/src/borg/testsuite/__init__.py b/src/borg/testsuite/__init__.py index 10b628c34..4e8743fa5 100644 --- a/src/borg/testsuite/__init__.py +++ b/src/borg/testsuite/__init__.py @@ -106,6 +106,8 @@ def are_fifos_supported(): pass except NotImplementedError: pass + except AttributeError: + pass return False