Replacing karaf-assembly bash script with python script
Also, removing self-referencing repo from: apps/openstackswitching/app/features.xml Change-Id: I041325a1a114ee4d5ef01afd24f73db4f92b30b3
Showing
4 changed files
with
83 additions
and
39 deletions
... | @@ -15,7 +15,6 @@ | ... | @@ -15,7 +15,6 @@ |
15 | ~ limitations under the License. | 15 | ~ limitations under the License. |
16 | --> | 16 | --> |
17 | <features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}"> | 17 | <features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}"> |
18 | - <repository>mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features</repository> | ||
19 | <feature name="${project.artifactId}" version="${project.version}" | 18 | <feature name="${project.artifactId}" version="${project.version}" |
20 | description="${project.description}"> | 19 | description="${project.description}"> |
21 | <feature>onos-api</feature> | 20 | <feature>onos-api</feature> | ... | ... |
1 | -#!/bin/bash | ||
2 | -# ----------------------------------------------------------------------------- | ||
3 | -# Assembles together all bundles required to run ONOS off-line. | ||
4 | -# ----------------------------------------------------------------------------- | ||
5 | - | ||
6 | -mkdir -p target | ||
7 | - | ||
8 | -features=target/features-list.xml | ||
9 | -repos=target/staged-repos.xml | ||
10 | - | ||
11 | -echo "<features>" > $repos | ||
12 | -echo " <repository>mvn:org.onosproject/onos-features/1.4.0-SNAPSHOT/xml/features</repository>" >> $repos | ||
13 | - | ||
14 | -# Find all app feature files | ||
15 | -find $ONOS_ROOT -name '*-features.xml' | grep -v features-repo > $features | ||
16 | - | ||
17 | -# Produce repository entry for each file | ||
18 | -cat $features | while read feature; do | ||
19 | - echo " <repository>file:$feature</repository>" >> $repos | ||
20 | -done | ||
21 | - | ||
22 | -# Create a synthetic feature that depends on all other ONOS features | ||
23 | -echo " <feature name=\"foo\">" >> $repos | ||
24 | -grep "feature name=" $ONOS_ROOT/features/features.xml | cut -d\" -f2 | while read f; do | ||
25 | - echo " <feature>$f</feature>" >> $repos | ||
26 | -done | ||
27 | - | ||
28 | -cat $features | while read feature; do | ||
29 | - grep "feature name=" $feature | cut -d\" -f2 | while read f; do | ||
30 | - echo " <feature>$f</feature>" >> $repos | ||
31 | - done | ||
32 | -done | ||
33 | -echo " </feature>" >> $repos | ||
34 | - | ||
35 | -echo "</features>" >> $repos | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +#!/usr/bin/env python | ||
2 | +''' | ||
3 | + Builds synthetic feature file that includes all core, provider, and application | ||
4 | + features, so that we can pre-stage all bundles required to run ONOS off-line. | ||
5 | +''' | ||
6 | + | ||
7 | +import os | ||
8 | +import xml.etree.ElementTree as ET | ||
9 | + | ||
10 | +FEATURE_TAG = '{http://karaf.apache.org/xmlns/features/v1.2.0}feature' | ||
11 | +STAGED_REPOS = 'target/staged-repos.xml' | ||
12 | + | ||
13 | +if 'ONOS_ROOT' in os.environ: | ||
14 | + ONOS_ROOT = os.environ['ONOS_ROOT'] | ||
15 | +else: | ||
16 | + # fallback to working directory if ONOS_ROOT is not set | ||
17 | + ONOS_ROOT = os.getcwd() | ||
18 | + | ||
19 | +def findFeatureFiles(path=ONOS_ROOT): | ||
20 | + #only descend into target directories that have pom | ||
21 | + for root, dirs, files in os.walk(path): | ||
22 | + if 'pom.xml' not in files: | ||
23 | + if 'target' in dirs: | ||
24 | + #pruning target dir with no pom.xml | ||
25 | + dirs.remove('target') | ||
26 | + if '/target' in root: | ||
27 | + if '/classes/' in root: | ||
28 | + #filter out features.xml for maven-plugin | ||
29 | + continue | ||
30 | + for f in files: | ||
31 | + if f.endswith('features.xml'): | ||
32 | + yield os.path.join(root, f) | ||
33 | + | ||
34 | +def featuresFromFile(file): | ||
35 | + features = [] | ||
36 | + tree = ET.parse(file) | ||
37 | + root = tree.getroot() | ||
38 | + for feature in root.findall(FEATURE_TAG): | ||
39 | + features.append(feature.attrib['name']) | ||
40 | + return features | ||
41 | + | ||
42 | +if __name__ == '__main__': | ||
43 | + outputTree = ET.Element('features') | ||
44 | + uberFeature = ET.Element('feature', attrib={'name' : 'onos-uber-synthetic'}) | ||
45 | + for file in findFeatureFiles(): | ||
46 | + features = featuresFromFile(file) | ||
47 | + if len(features) > 0: | ||
48 | + ET.SubElement(outputTree, 'repository').text = 'file:%s' % file | ||
49 | + for feature in features: | ||
50 | + ET.SubElement(uberFeature, 'feature').text = feature | ||
51 | + outputTree.append(uberFeature) | ||
52 | + | ||
53 | + outputFile = os.path.join(os.path.dirname(os.path.realpath(__file__)), STAGED_REPOS) | ||
54 | + outputDir = os.path.dirname(outputFile) | ||
55 | + if not os.path.exists(outputDir): | ||
56 | + os.mkdir(outputDir) | ||
57 | + ET.ElementTree(outputTree).write(outputFile) | ||
58 | + | ||
59 | + import sys | ||
60 | + if '-d' in sys.argv: | ||
61 | + # -------- TODO for debug only -------- | ||
62 | + def indent(elem, level=0): | ||
63 | + #function borrowed from: http://effbot.org/zone/element-lib.htm#prettyprint | ||
64 | + i = "\n" + level*" " | ||
65 | + if len(elem): | ||
66 | + if not elem.text or not elem.text.strip(): | ||
67 | + elem.text = i + " " | ||
68 | + if not elem.tail or not elem.tail.strip(): | ||
69 | + elem.tail = i | ||
70 | + for elem in elem: | ||
71 | + indent(elem, level+1) | ||
72 | + if not elem.tail or not elem.tail.strip(): | ||
73 | + elem.tail = i | ||
74 | + else: | ||
75 | + if level and (not elem.tail or not elem.tail.strip()): | ||
76 | + elem.tail = i | ||
77 | + | ||
78 | + print 'Writing to file:', outputFile | ||
79 | + indent(outputTree) | ||
80 | + ET.dump(outputTree) |
... | @@ -42,8 +42,8 @@ | ... | @@ -42,8 +42,8 @@ |
42 | <phase>generate-sources</phase> | 42 | <phase>generate-sources</phase> |
43 | <configuration> | 43 | <configuration> |
44 | <target> | 44 | <target> |
45 | - <exec executable="bash"> | 45 | + <exec executable="python"> |
46 | - <arg value="${basedir}/onos-assembly"/> | 46 | + <arg value="${basedir}/onos-assembly.py"/> |
47 | </exec> | 47 | </exec> |
48 | </target> | 48 | </target> |
49 | </configuration> | 49 | </configuration> |
... | @@ -70,7 +70,7 @@ | ... | @@ -70,7 +70,7 @@ |
70 | <descriptor>file:${basedir}/target/staged-repos.xml</descriptor> | 70 | <descriptor>file:${basedir}/target/staged-repos.xml</descriptor> |
71 | </descriptors> | 71 | </descriptors> |
72 | <features> | 72 | <features> |
73 | - <feature>foo</feature> | 73 | + <feature>onos-uber-synthetic</feature> |
74 | </features> | 74 | </features> |
75 | <repository>target/repo</repository> | 75 | <repository>target/repo</repository> |
76 | </configuration> | 76 | </configuration> | ... | ... |
-
Please register or login to post a comment