From 7cc85714ef0476624d6faa2ccba79f3c25c6afde Mon Sep 17 00:00:00 2001 From: AzaelCicero Date: Sun, 14 Jun 2020 07:22:58 +0200 Subject: [PATCH] Fixes regexes to accept multipart git repository address. (#1655) * Fixes regexes to accept multipart git repository address. * Added test case for multi level path. * Reduced complexity of SSH regex. * Fixing unit tests. * Fix SSH formatting. Co-authored-by: kpawelczyk --- cvat/apps/git/git.py | 8 ++++---- cvat/apps/git/tests.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cvat/apps/git/git.py b/cvat/apps/git/git.py index 5d0e817829b3..c43c9c093f0d 100644 --- a/cvat/apps/git/git.py +++ b/cvat/apps/git/git.py @@ -78,9 +78,9 @@ def _parse_url(self): # Reference on URL formats accepted by Git: # https://github.com/git/git/blob/77bd3ea9f54f1584147b594abc04c26ca516d987/url.c - host_pattern = r"((?:(?:(?:\d{1,3}\.){3}\d{1,3})|(?:[a-zA-Z0-9._-]+.[a-zA-Z]+))(?::\d+)?)" - http_pattern = r"(?:http[s]?://)?" + host_pattern + r"((?:/[a-zA-Z0-9._-]+){2})" - ssh_pattern = r"([a-zA-Z0-9._-]+)@" + host_pattern + r":([a-zA-Z0-9._-]+)/([a-zA-Z0-9._-]+)" + host_pattern = r"((?:(?:(?:\d{1,3}\.){3}\d{1,3})|(?:[a-zA-Z0-9._-]+[.a-zA-Z]+))(?::\d+)?)" + http_pattern = r"(?:http[s]?://)?" + host_pattern + r"((?:/[a-zA-Z0-9._-]+){2,})" + ssh_pattern = r"([a-zA-Z0-9._-]+)@" + host_pattern + r":([a-zA-Z0-9._-]+)((?:/[a-zA-Z0-9._-]+)+)" http_match = re.match(http_pattern, self._url) ssh_match = re.match(ssh_pattern, self._url) @@ -95,7 +95,7 @@ def _parse_url(self): elif ssh_match: user = ssh_match.group(1) host = ssh_match.group(2) - repos = "{}/{}".format(ssh_match.group(3), ssh_match.group(4)) + repos = "{}{}".format(ssh_match.group(3), ssh_match.group(4)) else: raise Exception("Git repository URL does not satisfy pattern") diff --git a/cvat/apps/git/tests.py b/cvat/apps/git/tests.py index 5d4d2c116fd3..7d47c1691f4d 100644 --- a/cvat/apps/git/tests.py +++ b/cvat/apps/git/tests.py @@ -28,7 +28,7 @@ def _check_correct_urls(self, samples): def test_correct_urls_can_be_parsed(self): hosts = ['host.zone', '1.2.3.4'] ports = ['', ':42'] - repo_groups = ['repo', 'r4p0'] + repo_groups = ['repo', 'r4p0', 'multi/group', 'multi/group/level'] repo_repos = ['nkjl23', 'hewj'] git_suffixes = ['', '.git']