From f3b377ab6ba580dc5eda28b3e53024b841226bd0 Mon Sep 17 00:00:00 2001 From: Jannis Pohlmann Date: Fri, 4 May 2012 14:55:13 +0000 Subject: Change LocalRepoCache to use the new RepoAliasResolver. --- morph | 32 +++++++++--------- morphlib/localrepocache.py | 70 ++++------------------------------------ morphlib/localrepocache_tests.py | 19 ++--------- 3 files changed, 24 insertions(+), 97 deletions(-) diff --git a/morph b/morph index bcc02d5b..fe18f536 100755 --- a/morph +++ b/morph @@ -202,14 +202,14 @@ class Morph(cliapp.Application): self.settings['cache-server']) else: rac = None + repo_resolver = morphlib.repoaliasresolver.RepoAliasResolver( + self.settings['repo-alias']) lrc = morphlib.localrepocache.LocalRepoCache( - os.path.join(cachedir, 'gits'), - self.settings['repo-alias'], + os.path.join(cachedir, 'gits'), repo_resolver, bundle_base_url=self.settings['bundle-server']) if self.settings['cache-server']: rrc = morphlib.remoterepocache.RemoteRepoCache( - self.settings['cache-server'], - self.settings['git-base-url']) + self.settings['cache-server'], repo_resolver) else: rrc = None @@ -320,14 +320,14 @@ class Morph(cliapp.Application): if not os.path.exists(self.settings['cachedir']): os.mkdir(self.settings['cachedir']) cachedir = os.path.join(self.settings['cachedir'], 'gits') - aliases = self.settings['repo-alias'] bundle_base_url = self.settings['bundle-server'] + repo_resolver = morphlib.repoaliasresolver.RepoAliasResolver( + self.settings['repo-alias']) lrc = morphlib.localrepocache.LocalRepoCache( - cachedir, aliases, bundle_base_url) + cachedir, repo_resolver, bundle_base_url) if self.settings['cache-server']: rrc = morphlib.remoterepocache.RemoteRepoCache( - self.settings['cache-server'], - self.settings['git-base-url']) + self.settings['cache-server'], repo_resolver) else: rrc = None @@ -478,14 +478,14 @@ class Morph(cliapp.Application): ckc = morphlib.cachekeycomputer.CacheKeyComputer(build_env) lac = morphlib.localartifactcache.LocalArtifactCache( os.path.join(cachedir, 'artifacts')) + repo_resolver = morphlib.repoaliasresolver.RepoAliasResolver( + self.settings['repo-alias']) lrc = morphlib.localrepocache.LocalRepoCache( - os.path.join(cachedir, 'gits'), - self.settings['repo-alias'], + os.path.join(cachedir, 'gits'), repo_resolver, bundle_base_url=self.settings['bundle-server']) if self.settings['cache-server']: rrc = morphlib.remoterepocache.RemoteRepoCache( - self.settings['cache-server'], - self.settings['git-base-url']) + self.settings['cache-server'], repo_resolver) else: rrc = None @@ -584,11 +584,9 @@ class Morph(cliapp.Application): def _resolve_reponame(self, reponame): '''Return the full pull URL of a reponame.''' - # Setup. - aliases = self.settings['repo-alias'] - cache = morphlib.localrepocache.LocalRepoCache(None, aliases, None) - - return cache.pull_url(reponame) + resolver = morphlib.repoaliasresolver.RepoAliasResolver( + self.settings['repo-alias']) + return resolver.pull_url(reponame) def _clone_to_directory(self, dirname, reponame, ref): '''Clone a repository below a directory. diff --git a/morphlib/localrepocache.py b/morphlib/localrepocache.py index ef651f4c..3a79967c 100644 --- a/morphlib/localrepocache.py +++ b/morphlib/localrepocache.py @@ -89,9 +89,9 @@ class LocalRepoCache(object): ''' - def __init__(self, cachedir, aliases, bundle_base_url=None): + def __init__(self, cachedir, resolver, bundle_base_url=None): self._cachedir = cachedir - self._aliases = aliases + self._resolver = resolver if bundle_base_url and not bundle_base_url.endswith('/'): bundle_base_url += '/' # pragma: no cover self._bundle_base_url = bundle_base_url @@ -178,67 +178,9 @@ class LocalRepoCache(object): path = os.path.join(self._cachedir, basename) return path - def _split_reponame(self, reponame): - '''Split reponame into prefix and suffix. - - The prefix is returned as None if there was no prefix. - - ''' - - pat = r'^(?P[a-z0-9]+):(?P.*)$' - m = re.match(pat, reponame) - if m: - return m.group('prefix'), m.group('rest') - else: - return None, reponame - - def _apply_url_pattern(self, pattern, shortname): - if '%s' in pattern: - return shortname.join(pattern.split('%s')) - else: - return pattern + shortname - - def _expand_reponame(self, reponame, patname): - logging.debug('expanding: reponame=%s' % reponame) - logging.debug('expanding: patname=%s' % patname) - - prefix, suffix = self._split_reponame(reponame) - logging.debug('expanding: prefix=%s' % prefix) - logging.debug('expanding: suffix=%s' % suffix) - - # There was no prefix. - if prefix is None: - logging.debug('expanding: no prefix') - return reponame - - pat = r'^(?P[a-z0-9]+)=(?P[^#]+)#(?P[^#]+)$' - for alias in self._aliases: - logging.debug('expanding: alias="%s"' % alias) - m = re.match(pat, alias) - logging.debug('expanding: m=%s' % repr(m)) - if m: - logging.debug('expanding: prefix group=%s' % m.group('prefix')) - if m and m.group('prefix') == prefix: - pullpat = m.group(patname) - logging.debug('expanding: pullpat=%s' % pullpat) - return self._apply_url_pattern(pullpat, suffix) - - # Unknown prefix. Which means it may be a real URL instead. - # Let the caller deal with it. - logging.debug('expanding: unknown prefix') - return reponame - - def pull_url(self, reponame): - '''Expand a possibly shortened repo name to a pull url.''' - return self._expand_reponame(reponame, 'pullpat') - - def push_url(self, reponame): - '''Expand a possibly shortened repo name to a push url.''' - return self._expand_reponame(reponame, 'pushpat') - def has_repo(self, reponame): '''Have we already got a cache of a given repo?''' - url = self.pull_url(reponame) + url = self._resolver.pull_url(reponame) path = self._cache_name(url) return self._exists(path) @@ -281,7 +223,7 @@ class LocalRepoCache(object): pass if self._bundle_base_url: - repourl = self.pull_url(reponame) + repourl = self._resolver.pull_url(reponame) path = self._cache_name(repourl) ok, error = self._clone_with_bundle(repourl, path) if ok: @@ -289,7 +231,7 @@ class LocalRepoCache(object): else: errors.append(error) - repourl = self.pull_url(reponame) + repourl = self._resolver.pull_url(reponame) path = self._cache_name(repourl) try: self._git(['clone', '-n', repourl, path]) @@ -306,7 +248,7 @@ class LocalRepoCache(object): if reponame in self._cached_repo_objects: return self._cached_repo_objects[reponame] else: - repourl = self.pull_url(reponame) + repourl = self._resolver.pull_url(reponame) path = self._cache_name(repourl) if self._exists(path): repo = morphlib.cachedrepo.CachedRepo(reponame, repourl, path) diff --git a/morphlib/localrepocache_tests.py b/morphlib/localrepocache_tests.py index 176becc7..47f92a1d 100644 --- a/morphlib/localrepocache_tests.py +++ b/morphlib/localrepocache_tests.py @@ -24,10 +24,10 @@ class LocalRepoCacheTests(unittest.TestCase): def setUp(self): aliases = ['upstream=git://example.com/#example.com:%s.git'] + repo_resolver = morphlib.repoaliasresolver.RepoAliasResolver(aliases) bundle_base_url = 'http://lorry.example.com/bundles/' self.reponame = 'upstream:reponame' self.repourl = 'git://example.com/reponame' - self.pushurl = 'example.com:reponame.git' escaped_url = 'git___example_com_reponame' self.bundle_url = '%s%s.bndl' % (bundle_base_url, escaped_url) self.cachedir = '/cache/dir' @@ -36,9 +36,8 @@ class LocalRepoCacheTests(unittest.TestCase): self.remotes = {} self.fetched = [] self.removed = [] - self.lrc = morphlib.localrepocache.LocalRepoCache(self.cachedir, - aliases, - bundle_base_url) + self.lrc = morphlib.localrepocache.LocalRepoCache( + self.cachedir, repo_resolver, bundle_base_url) self.lrc._git = self.fake_git self.lrc._exists = self.fake_exists self.lrc._fetch = self.not_found @@ -78,18 +77,6 @@ class LocalRepoCacheTests(unittest.TestCase): self.cache.add(path) return True - def test_expands_shortened_url_correctly_for_pulling(self): - self.assertEqual(self.lrc.pull_url(self.reponame), self.repourl) - - def test_expands_shortened_url_correctly_for_pushing(self): - self.assertEqual(self.lrc.push_url(self.reponame), self.pushurl) - - def test_expands_full_url_correctly_for_pulling(self): - self.assertEqual(self.lrc.pull_url(self.repourl), self.repourl) - - def test_expands_full_url_correctly_for_pushing(self): - self.assertEqual(self.lrc.push_url(self.pushurl), self.pushurl) - def test_has_not_got_shortened_repo_initially(self): self.assertFalse(self.lrc.has_repo(self.reponame)) -- cgit v1.2.1