summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJannis Pohlmann <jannis.pohlmann@codethink.co.uk>2012-05-04 14:55:13 +0000
committerJannis Pohlmann <jannis.pohlmann@codethink.co.uk>2012-05-04 14:55:13 +0000
commitf3b377ab6ba580dc5eda28b3e53024b841226bd0 (patch)
treee50c201013c2bc787ed32af29adaad448c1f5056
parent1bae1c3f268ddc80e5466ff714ae1b5873754c47 (diff)
downloadmorph-f3b377ab6ba580dc5eda28b3e53024b841226bd0.tar.gz
Change LocalRepoCache to use the new RepoAliasResolver.
-rwxr-xr-xmorph32
-rw-r--r--morphlib/localrepocache.py70
-rw-r--r--morphlib/localrepocache_tests.py19
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<prefix>[a-z0-9]+):(?P<rest>.*)$'
- 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<prefix>[a-z0-9]+)=(?P<pullpat>[^#]+)#(?P<pushpat>[^#]+)$'
- 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))