summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Maw <richard.maw@codethink.co.uk>2014-02-12 16:14:30 +0000
committerRichard Maw <richard.maw@codethink.co.uk>2014-02-13 15:39:37 +0000
commit4e50b8850f13bef14ec31710c31801330e41cc32 (patch)
treec220bece8112fb14d399857150820b0c6060a483
parentf6c767a64edd2634f1d513e15ce7bb5cfe62dfd9 (diff)
downloadmorph-4e50b8850f13bef14ec31710c31801330e41cc32.tar.gz
Allow omitting repo and ref when referring to strata
-rw-r--r--morphlib/app.py10
-rw-r--r--morphlib/artifactresolver.py8
-rw-r--r--morphlib/buildbranch.py4
-rw-r--r--morphlib/buildcommand.py4
-rw-r--r--morphlib/morphset.py37
-rw-r--r--morphlib/plugins/branch_and_merge_new_plugin.py6
6 files changed, 35 insertions, 34 deletions
diff --git a/morphlib/app.py b/morphlib/app.py
index aecee42b..7fb71c7b 100644
--- a/morphlib/app.py
+++ b/morphlib/app.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2011-2013 Codethink Limited
+# Copyright (C) 2011-2014 Codethink Limited
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -346,14 +346,14 @@ class Morph(cliapp.Application):
visit(reponame, ref, filename, absref, tree, morphology)
if morphology['kind'] == 'system':
- queue.extend((s['repo'] or reponame,
- s['ref'] or ref,
+ queue.extend((s.get('repo') or reponame,
+ s.get('ref') or ref,
'%s.morph' % s['morph'])
for s in morphology['strata'])
elif morphology['kind'] == 'stratum':
if morphology['build-depends']:
- queue.extend((s['repo'] or reponame,
- s['ref'] or ref,
+ queue.extend((s.get('repo') or reponame,
+ s.get('ref') or ref,
'%s.morph' % s['morph'])
for s in morphology['build-depends'])
queue.extend((c['repo'], c['ref'], '%s.morph' % c['morph'])
diff --git a/morphlib/artifactresolver.py b/morphlib/artifactresolver.py
index ae0cfcf5..00976eb7 100644
--- a/morphlib/artifactresolver.py
+++ b/morphlib/artifactresolver.py
@@ -140,8 +140,8 @@ class ArtifactResolver(object):
for info in source.morphology['strata']:
stratum_source = self._source_pool.lookup(
- info['repo'] or source.repo_name,
- info['ref'] or source.original_ref,
+ info.get('repo') or source.repo_name,
+ info.get('ref') or source.original_ref,
'%s.morph' % info['morph'])
stratum_name = stratum_source.morphology['name']
@@ -165,8 +165,8 @@ class ArtifactResolver(object):
for stratum_info in source.morphology.get('build-depends') or []:
other_source = self._source_pool.lookup(
- stratum_info['repo'] or source.repo_name,
- stratum_info['ref'] or source.original_ref,
+ stratum_info.get('repo') or source.repo_name,
+ stratum_info.get('ref') or source.original_ref,
'%s.morph' % stratum_info['morph'])
# Make every stratum artifact this stratum source produces
diff --git a/morphlib/buildbranch.py b/morphlib/buildbranch.py
index d4426afb..546a29d5 100644
--- a/morphlib/buildbranch.py
+++ b/morphlib/buildbranch.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2013 Codethink Limited
+# Copyright (C) 2013-2014 Codethink Limited
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -125,7 +125,7 @@ class BuildBranch(object):
sb_info[repo, ref] = (gd, build_ref)
def filter(m, kind, spec):
- return (spec['repo'], spec['ref']) in sb_info
+ return (spec.get('repo'), spec.get('ref')) in sb_info
def process(m, kind, spec):
repo, ref = spec['repo'], spec['ref']
gd, build_ref = sb_info[repo, ref]
diff --git a/morphlib/buildcommand.py b/morphlib/buildcommand.py
index 6485f510..137c63b4 100644
--- a/morphlib/buildcommand.py
+++ b/morphlib/buildcommand.py
@@ -228,8 +228,8 @@ class BuildCommand(object):
def _validate_cross_refs_for_xxx(self, src, srcpool, specs, wanted):
for spec in specs:
- repo_name = spec['repo'] or src.repo_name
- ref = spec['ref'] or src.original_ref
+ repo_name = spec.get('repo') or src.repo_name
+ ref = spec.get('ref') or src.original_ref
filename = '%s.morph' % spec['morph']
logging.debug(
'Validating cross ref to %s:%s:%s' %
diff --git a/morphlib/morphset.py b/morphlib/morphset.py
index 6aabbde5..dedbabd5 100644
--- a/morphlib/morphset.py
+++ b/morphlib/morphset.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2013 Codethink Limited
+# Copyright (C) 2013-2014 Codethink Limited
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -81,7 +81,7 @@ class MorphologySet(object):
for spec in specs:
name = spec.get('morph', spec.get('name'))
if name == wanted_name:
- return spec['repo'], spec['ref'], name
+ return spec.get('repo'), spec.get('ref'), name
return None, None, None
def get_stratum_in_system(self, system_morph, stratum_name):
@@ -160,7 +160,8 @@ class MorphologySet(object):
specs = m[kind]
for spec in specs:
if cb_filter(m, kind, spec):
- orig_spec = (spec['repo'], spec['ref'], spec['morph'])
+ orig_spec = (spec.get('repo'), spec.get('ref'),
+ spec['morph'])
dirtied = cb_process(m, kind, spec)
if dirtied:
m.dirty = True
@@ -177,11 +178,11 @@ class MorphologySet(object):
tup = (m.repo_url, m.ref, m.filename[:-len('.morph')])
if tup in altered_references:
spec = altered_references[tup]
- if m.ref != spec['ref']:
- m.ref = spec['ref']
+ if m.ref != spec.get('ref'):
+ m.ref = spec.get('ref')
m.dirty = True
assert (m.filename == spec['morph'] + '.morph'
- or m.repo_url == spec['repo']), \
+ or m.repo_url == spec.get('repo')), \
'Moving morphologies is not supported.'
def change_ref(self, repo_url, orig_ref, morph_filename, new_ref):
@@ -193,12 +194,12 @@ class MorphologySet(object):
'''
def wanted_spec(m, kind, spec):
- return (spec['repo'] == repo_url and
- spec['ref'] == orig_ref and
+ return (spec.get('repo') == repo_url and
+ spec.get('ref') == orig_ref and
spec['morph'] + '.morph' == morph_filename)
def process_spec(m, kind, spec):
- spec['unpetrify-ref'] = spec['ref']
+ spec['unpetrify-ref'] = spec.get('ref')
spec['ref'] = new_ref
return True
@@ -214,10 +215,10 @@ class MorphologySet(object):
known = set()
def wanted_spec(m, kind, spec):
- return (spec['repo'], spec['ref']) not in known
+ return (spec.get('repo'), spec.get('ref')) not in known
def process_spec(m, kind, spec):
- known.add((spec['repo'], spec['ref']))
+ known.add((spec.get('repo'), spec.get('ref')))
return False
self.traverse_specs(process_spec, wanted_spec)
@@ -234,11 +235,11 @@ class MorphologySet(object):
'''
def wanted_spec(m, kind, spec):
- return spec['repo'] == repo_url
+ return spec.get('repo') == repo_url
def process_spec(m, kind, spec):
if 'unpetrify-ref' not in spec:
- spec['unpetrify-ref'] = spec['ref']
+ spec['unpetrify-ref'] = spec.get('ref')
spec['ref'] = new_ref
return True
@@ -262,13 +263,13 @@ class MorphologySet(object):
# the details are tricky.
if not (m['kind'] == 'stratum' and kind == 'chunks'):
return
- ref = spec['ref']
+ ref = spec.get('ref')
return (not morphlib.git.is_valid_sha1(ref)
- and (spec['repo'], ref) in resolutions)
+ and (spec.get('repo'), ref) in resolutions)
def process_chunk_spec(m, kind, spec):
- tup = (spec['repo'], spec['ref'])
- spec['unpetrify-ref'] = spec['ref']
+ tup = (spec.get('repo'), spec.get('ref'))
+ spec['unpetrify-ref'] = spec.get('ref')
spec['ref'] = resolutions[tup]
return True
@@ -281,7 +282,7 @@ class MorphologySet(object):
def wanted_spec(m, kind, spec):
return ('unpetrify-ref' in spec and
- morphlib.git.is_valid_sha1(spec['ref']))
+ morphlib.git.is_valid_sha1(spec.get('ref')))
def process_spec(m, kind, spec):
spec['ref'] = spec.pop('unpetrify-ref')
return True
diff --git a/morphlib/plugins/branch_and_merge_new_plugin.py b/morphlib/plugins/branch_and_merge_new_plugin.py
index f3b47468..94b2381c 100644
--- a/morphlib/plugins/branch_and_merge_new_plugin.py
+++ b/morphlib/plugins/branch_and_merge_new_plugin.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2012,2013 Codethink Limited
+# Copyright (C) 2012,2013,2014 Codethink Limited
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -284,8 +284,8 @@ class SimpleBranchAndMergePlugin(cliapp.Plugin):
# of triplets (repo url, ref, filename).
return [
- (spec['repo'] or morph.repo_url,
- spec['ref'] or morph.ref,
+ (spec.get('repo') or morph.repo_url,
+ spec.get('ref') or morph.ref,
'%s.morph' % spec['morph'])
for spec in specs
]