diff --git a/pungi/util.py b/pungi/util.py index e7742cfc..0dfaeec0 100644 --- a/pungi/util.py +++ b/pungi/util.py @@ -309,8 +309,9 @@ def resolve_git_url(url): class GitUrlResolver(object): - """A wrapper for resolve_git_url that checks each url only once. In offline - mode it does not actually do anything, returning original input urls. + """A caching resolver for git references. As input it can either take repo + URL with fragment describing reference, or url and refname. It will return + either url with changed fragment or just resolved ref. """ def __init__(self, offline=False): self.offline = offline @@ -318,7 +319,7 @@ class GitUrlResolver(object): def __call__(self, url, branch=None): if self.offline: - return url + return branch or url key = (url, branch) if key not in self.cache: try: diff --git a/tests/test_util.py b/tests/test_util.py index b8a33d24..793d258a 100644 --- a/tests/test_util.py +++ b/tests/test_util.py @@ -130,14 +130,27 @@ class TestGitRefResolver(unittest.TestCase): [mock.call(['git', 'ls-remote', 'https://git.example.com/repo.git', 'HEAD'], universal_newlines=True)] * 2) + @mock.patch("pungi.util.resolve_git_ref") @mock.patch("pungi.util.resolve_git_url") - def test_resolver_offline(self, mock_resolve): + def test_resolver_offline(self, mock_resolve_url, mock_resolve_ref): resolver = util.GitUrlResolver(offline=True) self.assertEqual( resolver("http://example.com/repo.git#HEAD"), "http://example.com/repo.git#HEAD", ) - self.assertEqual(mock_resolve.call_args_list, []) + self.assertEqual(mock_resolve_url.call_args_list, []) + self.assertEqual(mock_resolve_ref.call_args_list, []) + + @mock.patch("pungi.util.resolve_git_ref") + @mock.patch("pungi.util.resolve_git_url") + def test_resolver_offline_branch(self, mock_resolve_url, mock_resolve_ref): + resolver = util.GitUrlResolver(offline=True) + self.assertEqual( + resolver("http://example.com/repo.git", "master"), + "master", + ) + self.assertEqual(mock_resolve_url.call_args_list, []) + self.assertEqual(mock_resolve_ref.call_args_list, []) @mock.patch("pungi.util.resolve_git_ref") @mock.patch("pungi.util.resolve_git_url")