From 4e50b8850f13bef14ec31710c31801330e41cc32 Mon Sep 17 00:00:00 2001 From: Richard Maw Date: Wed, 12 Feb 2014 16:14:30 +0000 Subject: Allow omitting repo and ref when referring to strata --- morphlib/app.py | 10 +++---- morphlib/artifactresolver.py | 8 +++--- morphlib/buildbranch.py | 4 +-- morphlib/buildcommand.py | 4 +-- morphlib/morphset.py | 37 +++++++++++++------------ morphlib/plugins/branch_and_merge_new_plugin.py | 6 ++-- 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 ] -- cgit v1.2.1