--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/configurationengine/source/dev-tools/deprfea.py Tue Aug 10 14:29:28 2010 +0300
@@ -0,0 +1,230 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+import os
+import sys
+import re
+import shutil
+from optparse import OptionParser
+
+ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
+sys.path.append(os.path.join(ROOT_PATH, '..'))
+if sys.version_info[0] == 2 and (sys.version_info[1] == 5 or sys.version_info[1] == 6):
+ cone_basedir = os.path.join(ROOT_PATH, 'configurationengine',
+ 'win', '%s.%s' % (sys.version_info[0], sys.version_info[1]))
+ cone_scriptdir = os.path.join(cone_basedir, 'scripts')
+ cone_libdir = os.path.join(cone_basedir, 'lib')
+ sys.path.append(cone_basedir)
+ sys.path.append(cone_scriptdir)
+ sys.path.append(cone_libdir)
+else:
+ print 'You are using an unsupported Python version: %s.%s' % (sys.version_info[0], sys.version_info[1])
+ sys.exit(1)
+
+print sys.path
+print os.getenv('PATH')
+
+try:
+ import scripts.cone_common
+except:
+ import cone_common
+from cone.public import api, plugin, utils, exceptions
+from cone.storage.filestorage import FileStorage
+
+CARBON_PROJECT_URL = 'http://carbon.nokia.com/extapi'
+
+CONFIGS_FILE = os.path.join(ROOT_PATH, 'configs.txt')
+ALL_FEATURES_FILE = os.path.join(ROOT_PATH, 'all_features_and_values.txt')
+REPORT_FILE = os.path.join(ROOT_PATH, 'deprecated_features.txt')
+EXPORT_STORAGE = os.path.join(ROOT_PATH, 'exported')
+
+
+def get_list_of_configurations_from_carbon(carbon_prj):
+ config_list = carbon_prj.list_configurations()
+ config_list.sort()
+ return config_list
+
+def filter_configurations_from_file(cfilter=""):
+ config_list = []
+ fh = open(CONFIGS_FILE, 'r')
+ config_list = fh.readlines()
+ fh.close()
+ if cfilter:
+ return [elem.strip() for elem in config_list if match_filter(cfilter, elem)]
+ else:
+ return config_list
+
+def check_deprecated_features(config, depr_features):
+ default_view = config.get_default_view()
+ f = open(ALL_FEATURES_FILE, 'a')
+ f.write('\n\n### %s ###\n\n' % config.get_name())
+ for fea_ref in default_view.list_all_features():
+ feature = default_view.get_feature(fea_ref)
+ # If feature has subfeatures, skip it
+ if len(feature.list_features()) > 0:
+ f.write('%-15s # %s\n' % ('Has subs', fea_ref))
+ continue
+ fea_value = default_view.get_feature(fea_ref).get_value()
+ f.write('%-15s # %s\n' % (fea_value, fea_ref))
+ # If the value is None and it is not on the list yet, append it to deprecated features
+ if fea_value == None and depr_features.count(fea_ref) == 0:
+ depr_features.append(fea_ref)
+ # If the value is something else and the feature is on the list, remove it
+ elif fea_value != None and depr_features.count(fea_ref) != 0:
+ depr_features.remove(fea_ref)
+ f.close()
+ return depr_features
+
+def save_report(depr_features):
+ fh = open(REPORT_FILE, 'w')
+ try: [fh.write(df + '\n') for df in depr_features]
+ finally: fh.close()
+
+
+def match_filter(cfilter, element):
+ filters = cfilter.split(';')
+ for f in filters:
+ if f.strip().lower() == element.strip().lower():
+ return True
+ if re.match('.*' + f.strip().lower() + '.*', element.strip().lower()):
+ return True
+ return False
+
+def create_options():
+ #parser = OptionParser(usage="Sumthin")
+ parser = OptionParser()
+ parser.add_option("-f", "--filter",
+ action="store",
+ dest="filter",
+ help="Filter configurations. Multiple filters can be given, separated by \';\'. E.g. -f \"\(Vasco 01\);\(Vasco 06\)\"",
+ metavar="REGEX",
+ default="")
+ parser.add_option("-l", "--list-configurations",
+ action="store_true",
+ dest="list_configs",
+ help="Only list available configurations in Carbon. When used with the -f option, preview the configurations which would be fetched from Carbon.",
+ default=False)
+ parser.add_option("--force-carbon",
+ action="store_true",
+ dest="force_carbon",
+ help="Get configurations from Carbon even if they have already been fetched.",
+ default=False)
+ return parser
+
+def main():
+ parser = create_options()
+ (options, args) = parser.parse_args()
+ configs = []
+ carbon_prj = None
+ local_prj = None
+
+ if options.filter == "":
+ selection = raw_input('No filter given! ALL the configs in Carbon will be fetched and it will take a loooong time. Are you ABSOLUTELY sure you want to continue (y/n)? ')
+ if selection.lower() != 'y':
+ print '\nGood choice :)'
+ return 0
+ else:
+ print '\nOk...\n'
+
+ try:
+ os.remove(ALL_FEATURES_FILE)
+ except Exception, e:
+ pass
+
+ print '\nOpening project in Carbon (%s)...' % CARBON_PROJECT_URL
+ try:
+ carbon_prj = api.Project(api.Storage.open(CARBON_PROJECT_URL,"r"))
+ except Exception, e:
+ print 'Unable to open Carbon project. %s' % e
+ return 1
+
+ if os.path.exists(EXPORT_STORAGE):
+ print '\nOpening project on local disk (%s)...' % EXPORT_STORAGE
+ try:
+ local_prj = api.Project(api.Storage.open(EXPORT_STORAGE, 'r'))
+ except Exception, e:
+ print 'Unable to open local project. %s' % e
+ return 1
+
+ # Force script to get everything from Carbon again
+ if options.force_carbon:
+ try:
+ os.remove(CONFIGS_FILE)
+ shutil.rmtree(EXPORT_STORAGE, ignore_errors=True)
+ except:
+ pass
+
+ # Only get available configs and exit
+ if options.list_configs:
+ print 'Getting available configurations from Carbon (%s)' % CARBON_PROJECT_URL
+ configs = get_list_of_configurations_from_carbon(carbon_prj)
+ print 'Saving configs to %s...' % CONFIGS_FILE
+ fh = open(CONFIGS_FILE, 'w')
+ try: [fh.write('%s\n' % c) for c in configs]
+ finally: fh.close()
+ print 'Filtered configs: '
+ configs = filter_configurations_from_file(options.filter)
+ for elem in configs: print elem.strip()
+ return 0
+
+
+ if not os.path.exists(CONFIGS_FILE):
+ print 'Configurations file not found. Getting list of configurations in project...'
+ configs = get_list_of_configurations_from_carbon(carbon_prj)
+ print 'Saving configs to %s...' % CONFIGS_FILE
+ fh = open(CONFIGS_FILE, 'w')
+ try: [fh.write('%s\n' % c) for c in configs]
+ finally: fh.close()
+
+ print '\nFilter wanted configurations from file: '
+ configs = filter_configurations_from_file(options.filter)
+ for elem in configs: print elem.strip()
+
+ depr_features = []
+
+ for c in configs:
+ config_name = c.strip()
+ # Configuration has not been exported yet
+ if not os.path.exists(os.path.join(EXPORT_STORAGE, config_name)):
+ print '\nExport configuration %s from Carbon' % config_name
+ if not carbon_prj:
+ carbon_prj = api.Project(api.Storage.open(CARBON_PROJECT_URL,"r"))
+ try:
+ config = carbon_prj.get_configuration(config_name)
+ carbon_prj.export_configuration(config, FileStorage(EXPORT_STORAGE, 'w'))
+ except:
+ print 'Unable to export %s' % config_name
+ continue
+ print '\nOpen configuration %s in project %s' % (config_name, EXPORT_STORAGE)
+ if not local_prj:
+ try:
+ local_prj = api.Project(api.Storage.open(EXPORT_STORAGE, 'r'))
+ except Exception, e:
+ print 'Unable to open local project. %s' % e
+ if carbon_prj: carbon_prj.close()
+ return 1
+ config = local_prj.get_configuration(c.strip())
+ depr_features = check_deprecated_features(config, depr_features)
+
+ if local_prj: local_prj.close()
+ if carbon_prj: carbon_prj.close()
+
+ save_report(depr_features)
+
+ return 0
+
+if __name__ == '__main__':
+ sys.exit(main())
\ No newline at end of file