Browse Source

Merge pull request #4862 from jrast/win-repo-path

Accept absolute paths on windows
TW 5 years ago
parent
commit
81e70711e2
2 changed files with 22 additions and 0 deletions
  1. 20 0
      src/borg/helpers/parseformat.py
  2. 2 0
      src/borg/testsuite/__init__.py

+ 20 - 0
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<path>
+            (?:[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')

+ 2 - 0
src/borg/testsuite/__init__.py

@@ -106,6 +106,8 @@ def are_fifos_supported():
             pass
         except NotImplementedError:
             pass
+        except AttributeError:
+            pass
         return False