1
0
Fork 0
mirror of https://github.com/borgbackup/borg.git synced 2024-12-26 01:37:20 +00:00

Merge pull request #2206 from ThomasWaldmann/fix-location-regex-smb

Location: accept //servername/share/path
This commit is contained in:
enkore 2017-02-25 16:11:44 +01:00 committed by GitHub
commit e59d313666
2 changed files with 15 additions and 3 deletions

View file

@ -1004,10 +1004,17 @@ class Location:
# path must not contain :: (it ends at :: or string end), but may contain single colons. # path must not contain :: (it ends at :: or string end), but may contain single colons.
# to avoid ambiguities with other regexes, it must also not start with ":" nor with "//" nor with "ssh://". # to avoid ambiguities with other regexes, it must also not start with ":" nor with "//" nor with "ssh://".
path_re = r""" scp_path_re = r"""
(?!(:|//|ssh://)) # not starting with ":" or // or ssh:// (?!(:|//|ssh://)) # not starting with ":" or // or ssh://
(?P<path>([^:]|(:(?!:)))+) # any chars, but no "::" (?P<path>([^:]|(:(?!:)))+) # any chars, but no "::"
""" """
# file_path must not contain :: (it ends at :: or string end), but may contain single colons.
# it must start with a / and that slash is part of the path.
file_path_re = r"""
(?P<path>(([^/]*)/([^:]|(:(?!:)))+)) # start opt. servername, then /, then any chars, but no "::"
"""
# abs_path must not contain :: (it ends at :: or string end), but may contain single colons. # abs_path must not contain :: (it ends at :: or string end), but may contain single colons.
# it must start with a / and that slash is part of the path. # it must start with a / and that slash is part of the path.
abs_path_re = r""" abs_path_re = r"""
@ -1032,7 +1039,7 @@ class Location:
file_re = re.compile(r""" file_re = re.compile(r"""
(?P<proto>file):// # file:// (?P<proto>file):// # file://
""" + path_re + optional_archive_re, re.VERBOSE) # path or path::archive """ + file_path_re + optional_archive_re, re.VERBOSE) # servername/path, path or path::archive
# note: scp_re is also use for local pathes # note: scp_re is also use for local pathes
scp_re = re.compile(r""" scp_re = re.compile(r"""
@ -1040,7 +1047,7 @@ class Location:
""" + optional_user_re + r""" # user@ (optional) """ + optional_user_re + r""" # user@ (optional)
(?P<host>[^:/]+): # host: (don't match / in host to disambiguate from file:) (?P<host>[^:/]+): # host: (don't match / in host to disambiguate from file:)
)? # user@host: part is optional )? # user@host: part is optional
""" + path_re + optional_archive_re, re.VERBOSE) # path with optional archive """ + scp_path_re + optional_archive_re, re.VERBOSE) # path with optional archive
# get the repo from BORG_REPO env and the optional archive from param. # get the repo from BORG_REPO env and the optional archive from param.
# if the syntax requires giving REPOSITORY (see "borg mount"), # if the syntax requires giving REPOSITORY (see "borg mount"),

View file

@ -60,6 +60,11 @@ def test_scp(self, monkeypatch):
assert repr(Location('user@host:/some/path')) == \ assert repr(Location('user@host:/some/path')) == \
"Location(proto='ssh', user='user', host='host', port=None, path='/some/path', archive=None)" "Location(proto='ssh', user='user', host='host', port=None, path='/some/path', archive=None)"
def test_smb(self, monkeypatch):
monkeypatch.delenv('BORG_REPO', raising=False)
assert repr(Location('file:////server/share/path::archive')) == \
"Location(proto='file', user=None, host=None, port=None, path='//server/share/path', archive='archive')"
def test_folder(self, monkeypatch): def test_folder(self, monkeypatch):
monkeypatch.delenv('BORG_REPO', raising=False) monkeypatch.delenv('BORG_REPO', raising=False)
assert repr(Location('path::archive')) == \ assert repr(Location('path::archive')) == \