From 60d8387a1a9cefd18949b89fca2517d36a2db210 Mon Sep 17 00:00:00 2001 From: Ryan Beisner Date: Fri, 4 Oct 2019 10:06:28 -0500 Subject: [PATCH] Add opendev.org https and git fetcher Related to #552 https://bugs.launchpad.net/charm-barbican/+bug/1846263 --- charmtools/fetchers.py | 16 ++++++++++++++++ tests/test_fetchers.py | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/charmtools/fetchers.py b/charmtools/fetchers.py index 5050b29d..14142e2a 100644 --- a/charmtools/fetchers.py +++ b/charmtools/fetchers.py @@ -195,6 +195,21 @@ def fetch(self, dir_): return rename(dir_) +class OpendevFetcher(Fetcher): + MATCH = re.compile(r""" + ^(https:\/\/(www\.)?opendev\.com\/|git@opendev.com:) + (?P[^@]*)(@(?P.*))?$ + """, re.VERBOSE) + + def fetch(self, dir_): + dir_ = tempfile.mkdtemp(dir=dir_) + url = 'https://opendev.org/' + self.repo + git('clone {} {}'.format(url, dir_)) + if self.revision: + git('checkout {}'.format(self.revision), cwd=dir_) + return rename(dir_) + + class GitFetcher(Fetcher): """Generic git fetcher. @@ -358,6 +373,7 @@ def check_output(cmd, **kw): BzrFetcher, BzrMergeProposalFetcher, GithubFetcher, + OpendevFetcher, BitbucketFetcher, LocalFetcher, CharmstoreDownloader, diff --git a/tests/test_fetchers.py b/tests/test_fetchers.py index 47d79002..6dfe9804 100644 --- a/tests/test_fetchers.py +++ b/tests/test_fetchers.py @@ -7,6 +7,7 @@ BzrFetcher, BzrMergeProposalFetcher, GithubFetcher, + OpendevFetcher, GitFetcher, BitbucketFetcher, LocalFetcher, @@ -132,6 +133,41 @@ def test_can_fetch(self): self.assertEqual(test, {}) +class OpendevFetcherTest(unittest.TestCase): + def test_can_fetch(self): + f = OpendevFetcher.can_fetch + + good_tests = [ + f('https://opendev.com/charms/foo'), + f('https://www.opendev.com/charms/foo'), + f('git@opendev.com:charms/foo'), + ] + + bad_tests = [ + f('http://www.opendev.com/charms/foo'), + f('http://opendev.com/charms/foo'), + f('gh:charms/foo'), + f('github:charms/foo'), + f('http://github.com/charms/foo'), + f('https://github.com/charms/foo'), + f('http://www.github.com/charms/foo'), + f('https://www.github.com/charms/foo'), + f('git@github.com:charms/foo'), + f('lp:~openstack-charmers/charms/bionic/foo'), + f('lp:~openstack-charmers/charms/bionic/foo/+merge/12345'), + f('bb:charms/foo'), + f('local:~/src/charms/bionic/foo'), + f('cs:bionic/foo'), + f('bundle:openstack-base/single'), + ] + + for test in good_tests: + self.assertEqual(test['repo'], 'charms/foo') + + for test in bad_tests: + self.assertEqual(test, {}) + + class GitFetcherTest(unittest.TestCase): def test_can_fetch(self): f = GitFetcher.can_fetch