blob: 1e394bf6d49b60be3118745c394de452044809e9 [file] [log] [blame]
#!/usr/bin/env python
Builds synthetic feature file that includes all core, provider, and application
features, so that we can pre-stage all bundles required to run ONOS off-line.
import os
import xml.etree.ElementTree as ET
FEATURE_TAG = '{}feature'
STAGED_REPOS = 'target/staged-repos.xml'
if 'ONOS_ROOT' in os.environ:
ONOS_ROOT = os.environ['ONOS_ROOT']
# fallback to working directory if ONOS_ROOT is not set
ONOS_ROOT = os.getcwd()
def findFeatureFiles(path=ONOS_ROOT):
#only descend into target directories that have pom
for root, dirs, files in os.walk(path):
if 'pom.xml' not in files:
if 'target' in dirs:
#pruning target dir with no pom.xml
if '/target' in root:
if '/classes/' in root:
#filter out features.xml for maven-plugin
for f in files:
if f.endswith('features.xml'):
yield os.path.join(root, f)
def featuresFromFile(file):
features = []
tree = ET.parse(file)
root = tree.getroot()
for feature in root.findall(FEATURE_TAG):
return features
if __name__ == '__main__':
outputTree = ET.Element('features')
uberFeature = ET.Element('feature', attrib={'name' : 'onos-uber-synthetic'})
for file in findFeatureFiles():
features = featuresFromFile(file)
if len(features) > 0:
ET.SubElement(outputTree, 'repository').text = 'file:%s' % file
for feature in features:
ET.SubElement(uberFeature, 'feature').text = feature
outputFile = os.path.join(os.path.dirname(os.path.realpath(__file__)), STAGED_REPOS)
outputDir = os.path.dirname(outputFile)
if not os.path.exists(outputDir):
import sys
if '-d' in sys.argv:
# -------- TODO for debug only --------
def indent(elem, level=0):
#function borrowed from:
i = "\n" + level*" "
if len(elem):
if not elem.text or not elem.text.strip():
elem.text = i + " "
if not elem.tail or not elem.tail.strip():
elem.tail = i
for elem in elem:
indent(elem, level+1)
if not elem.tail or not elem.tail.strip():
elem.tail = i
if level and (not elem.tail or not elem.tail.strip()):
elem.tail = i
print 'Writing to file:', outputFile