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']