summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--morphlib/localrepocache.py13
1 files changed, 10 insertions, 3 deletions
diff --git a/morphlib/localrepocache.py b/morphlib/localrepocache.py
index b6aa272b..27c581aa 100644
--- a/morphlib/localrepocache.py
+++ b/morphlib/localrepocache.py
@@ -80,6 +80,7 @@ class LocalRepoCache(object):
bundle_base_url += '/' # pragma: no cover
self._bundle_base_url = bundle_base_url
self._ex = morphlib.execute.Execute(cachedir, logging.debug)
+ self._cached_repo_objects = {}
def _exists(self, filename): # pragma: no cover
'''Does a file exist?
@@ -239,8 +240,14 @@ class LocalRepoCache(object):
def get_repo(self, reponame):
'''Return an object representing a cached repository.'''
- for repourl, path in self._base_iterate(reponame):
- if self._exists(path):
- return morphlib.cachedrepo.CachedRepo(repourl, path)
+ if reponame in self._cached_repo_objects:
+ return self._cached_repo_objects[reponame]
+ else:
+ for repourl, path in self._base_iterate(reponame):
+ if self._exists(path):
+ repo = morphlib.cachedrepo.CachedRepo(
+ reponame, repourl, path)
+ self._cached_repo_objects[reponame] = repo
+ return repo
raise NotCached(reponame)