summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Ipsum <richard.ipsum@codethink.co.uk>2013-11-15 12:36:17 +0000
committerRichard Ipsum <richard.ipsum@codethink.co.uk>2013-11-15 14:45:21 +0000
commit313593827334bc59d5cce60d545d104084c9d180 (patch)
treedc0c66709597cba0753791c96257956b5cc1a681
parent0b3ec68ce46f638e79e52f9f97f26727d9c4daa1 (diff)
downloadmorph-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.py19
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')])