Forráskód Böngészése

Merge pull request #4186 from ThomasWaldmann/location-parse-error-msg

invalid locations: give err msg containing parsed location, fixes #4179
TW 6 éve
szülő
commit
6afd69ae09
1 módosított fájl, 7 hozzáadás és 8 törlés
  1. 7 8
      src/borg/helpers/parseformat.py

+ 7 - 8
src/borg/helpers/parseformat.py

@@ -348,11 +348,11 @@ class Location:
         """ + optional_archive_re, re.VERBOSE)              # archive name (optional, may be empty)
 
     def __init__(self, text=''):
-        self.orig = text
-        if not self.parse(self.orig):
-            raise ValueError('Location: parse failed: %s' % self.orig)
+        if not self.parse(text):
+            raise ValueError('Invalid location format: "%s"' % self.orig)
 
     def parse(self, text):
+        self.orig = text
         text = replace_placeholders(text)
         valid = self._parse(text)
         if valid:
@@ -364,10 +364,9 @@ class Location:
         if repo is None:
             return False
         valid = self._parse(repo)
-        if not valid:
-            return False
         self.archive = m.group('archive')
-        return True
+        self.orig = repo if not self.archive else '%s::%s' % (repo, self.archive)
+        return valid
 
     def _parse(self, text):
         def normpath_special(p):
@@ -452,8 +451,8 @@ def location_validator(archive=None, proto=None):
     def validator(text):
         try:
             loc = Location(text)
-        except ValueError:
-            raise argparse.ArgumentTypeError('Invalid location format: "%s"' % text) from None
+        except ValueError as err:
+            raise argparse.ArgumentTypeError(str(err)) from None
         if archive is True and not loc.archive:
             raise argparse.ArgumentTypeError('"%s": No archive specified' % text)
         elif archive is False and loc.archive: