summaryrefslogtreecommitdiff
path: root/morphlib/app.py
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2014-06-30 13:47:06 +0000
committerSam Thursfield <sam.thursfield@codethink.co.uk>2014-07-07 15:06:22 +0100
commitc029130068e3a08c51dd551fda88cc5302671d53 (patch)
tree185e204a874c085b625d2ca536593ceba3f26833 /morphlib/app.py
parent770a6cb434ac31238eb2eee526e235728ce07aff (diff)
downloadmorph-c029130068e3a08c51dd551fda88cc5302671d53.tar.gz
Fix Morph failing to update some cached git repos
I was getting the following error when running the 'do-release.py' script: ERROR:root:Command failed: morph --quiet --trove-host=git.baserock.org list-artifacts baserock:baserock/definitions sam/auto-release minimal-system-x86_32-generic ERROR: Ref d67a0e110187abd560a1de63fa172894a52839d5 is an invalid reference for repo git://git.baserock.org/delta/linux The commit that it wants did actually exist in git.baserock.org and the logs show that Morph hadn't done a `git remote update` to get the commit locally. This turned out to be because it'd had already looked up a different ref in linux.git. It hadn't needed to run 'git remote update', but it *had* added linux.git to a "don't need to update this repo again" list. Oops! I've moved the code in question to the cachedrepo module so that the repo object keeps that of whether it should be updated. The bug is now fixed. As a side effect this patch fixes the spurious 'Updating repo file:///...' messages, which were printed even though repos with file:/// URLs are never updated.
Diffstat (limited to 'morphlib/app.py')
-rw-r--r--morphlib/app.py13
1 files changed, 2 insertions, 11 deletions
diff --git a/morphlib/app.py b/morphlib/app.py
index 07e6348f..df8c360a 100644
--- a/morphlib/app.py
+++ b/morphlib/app.py
@@ -306,14 +306,9 @@ class Morph(cliapp.Application):
'''
absref = None
- def cached_repo_requires_update_for_ref(repo, ref):
- # Named refs that are valid SHA1s will confuse this code.
- ref_can_change = not morphlib.git.is_valid_sha1(ref)
- return (ref_can_change or not repo.ref_exists(ref))
-
if lrc.has_repo(reponame):
repo = lrc.get_repo(reponame)
- if update and cached_repo_requires_update_for_ref(repo, ref):
+ if update and repo.requires_update_for_ref(ref):
self.status(msg='Updating cached git repository %(reponame)s '
'for ref %(ref)s', reponame=reponame, ref=ref)
repo.update()
@@ -347,23 +342,19 @@ class Morph(cliapp.Application):
morph_factory = morphlib.morphologyfactory.MorphologyFactory(lrc, rrc,
self)
queue = collections.deque(triplets)
- updated_repos = set()
resolved_refs = {}
resolved_morphologies = {}
while queue:
reponame, ref, filename = queue.popleft()
- update_repo = update and reponame not in updated_repos
# Resolve the (repo, ref) reference, cache result.
reference = (reponame, ref)
if not reference in resolved_refs:
resolved_refs[reference] = self.resolve_ref(
- lrc, rrc, reponame, ref, update_repo)
+ lrc, rrc, reponame, ref, update)
absref, tree = resolved_refs[reference]
- updated_repos.add(reponame)
-
# Fetch the (repo, ref, filename) morphology, cache result.
reference = (reponame, absref, filename)
if not reference in resolved_morphologies: