diff options
author | Richard Ipsum <richard.ipsum@codethink.co.uk> | 2013-11-15 12:36:17 +0000 |
---|---|---|
committer | Richard Ipsum <richard.ipsum@codethink.co.uk> | 2013-11-15 14:45:21 +0000 |
commit | 313593827334bc59d5cce60d545d104084c9d180 (patch) | |
tree | dc0c66709597cba0753791c96257956b5cc1a681 | |
parent | 0b3ec68ce46f638e79e52f9f97f26727d9c4daa1 (diff) | |
download | morph-richardipsum/9579/fix_conflicting_strata.tar.gz |
Fix conflicting strata problemrichardipsum/9579/fix_conflicting_strata
The _traverse_specs function which is used by morph
edit does not update refs for strata that depend on
the stratum being edited.
-rw-r--r-- | morphlib/morphset.py | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/morphlib/morphset.py b/morphlib/morphset.py index 9ef1e804..e27b4b1f 100644 --- a/morphlib/morphset.py +++ b/morphlib/morphset.py @@ -15,7 +15,7 @@ # # =*= License: GPL-2 =*= - +import sets import morphlib @@ -155,6 +155,7 @@ class MorphologySet(object): ''' altered_references = {} + altered_strata = sets.Set() def process_spec_list(m, kind): specs = m[kind] @@ -166,12 +167,24 @@ class MorphologySet(object): m.dirty = True altered_references[orig_spec] = spec + return m.dirty + for m in self.morphologies: if m['kind'] == 'system': process_spec_list(m, 'strata') elif m['kind'] == 'stratum': - process_spec_list(m, 'build-depends') - process_spec_list(m, 'chunks') + if process_spec_list(m, 'build-depends'): + altered_strata.add(m['name']) + + if process_spec_list(m, 'chunks'): + altered_strata.add(m['name']) + + for m in self.morphologies: + if m['kind'] == 'system': + specs = m['strata'] + for spec in specs: + if spec['morph'] in altered_strata: + cb_process(m, 'strata', spec) for m in self.morphologies: tup = (m.repo_url, m.ref, m.filename[:-len('.morph')]) |