mirror of
https://github.com/borgbackup/borg.git
synced 2024-12-25 09:19:31 +00:00
Merge pull request #2206 from ThomasWaldmann/fix-location-regex-smb
Location: accept //servername/share/path
This commit is contained in:
commit
e59d313666
2 changed files with 15 additions and 3 deletions
|
@ -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"),
|
||||||
|
|
|
@ -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')) == \
|
||||||
|
|
Loading…
Reference in a new issue