support/package-builder/SpecDeps.py
87815216
 #! /usr/bin/python3
2cbd5a80
 #
 #    Copyright (C) 2015 vmware inc.
 #
 #    Author: Harish Udaiya Kumar <hudaiyakumar@vmware.com>
 import sys
 import os
8f5f4df4
 from argparse import ArgumentParser
accc8120
 import shutil
 import traceback
cfd85ba2
 from SpecData import SpecDependencyGenerator, SPECS
94cdb4d4
 from jsonwrapper import JsonWrapper
accc8120
 from constants import constants
 from CommandUtils import CommandUtils
cfd85ba2
 from StringUtils import StringUtils
26b55679
 from Logger import Logger
2cbd5a80
 
 DEFAULT_INPUT_TYPE = "pkg"
 DEFAULT_DISPLAY_OPTION = "tree"
 SPEC_FILE_DIR = "../../SPECS"
 LOG_FILE_DIR = "../../stage/LOGS"
 
accc8120
 
2cbd5a80
 def main():
8f5f4df4
     usage = "Usage: %prog [options]"
     parser = ArgumentParser(usage)
     parser.add_argument("-i", "--input-type", dest="input_type", default=DEFAULT_INPUT_TYPE)
     parser.add_argument("-p", "--pkg", dest="pkg")
     parser.add_argument("-f", "--file", dest="json_file", default="packages_minimal.json")
     parser.add_argument("-d", "--disp", dest="display_option", default=DEFAULT_DISPLAY_OPTION)
     parser.add_argument("-s", "--spec-dir", dest="spec_dir", default=SPEC_FILE_DIR)
accc8120
     parser.add_argument("-l", "--log-dir", dest="log_dir", default=LOG_FILE_DIR)
26b55679
     parser.add_argument("-y", "--log-level", dest="log_level", default="info")
8f5f4df4
     parser.add_argument("-t", "--stage-dir", dest="stage_dir", default="../../stage")
accc8120
     parser.add_argument("-a", "--input-data-dir", dest="input_data_dir", default="../../common/data/")
     parser.add_argument("-o", "--output-dir", dest="output_dir", default="../../stage/common/data")
8f5f4df4
     options = parser.parse_args()
4ddea019
 
accc8120
     constants.setSpecPath(options.spec_dir)
     constants.setLogPath(options.log_dir)
26b55679
     constants.setLogLevel(options.log_level)
accc8120
     constants.initialize()
 
     cmdUtils = CommandUtils()
26b55679
     logger = Logger.getLogger("SpecDeps", options.log_dir, options.log_level)
accc8120
 
     if not os.path.isdir(options.output_dir):
         cmdUtils.runCommandInShell2("mkdir -p "+options.output_dir)
 
87815216
     if not options.input_data_dir.endswith('/'):
4ddea019
         options.input_data_dir += '/'
87815216
     try:
26b55679
         specDeps = SpecDependencyGenerator(options.log_dir, options.log_level)
4ddea019
 
cfd85ba2
         if options.input_type == "remove-upward-deps":
0f588052
             whoNeedsList = specDeps.process("get-upward-deps", options.pkg, options.display_option)
26b55679
             logger.info("Removing upward dependencies: " + str(whoNeedsList))
cfd85ba2
             for pkg in whoNeedsList:
                 package, version = StringUtils.splitPackageNameAndVersion(pkg)
                 release = SPECS.getData().getRelease(package, version)
0f588052
                 for p in SPECS.getData().getPackages(package,version):
                     buildarch=SPECS.getData().getBuildArch(p, version)
                     rpmFile = "stage/RPMS/" + buildarch + "/" + p + "-" + version + "-" + release + ".*" + buildarch+".rpm"
                     cmdUtils.runCommandInShell2("rm -f "+rpmFile)
         elif options.input_type == "print-upward-deps":
             whoNeedsList = specDeps.process("get-upward-deps", options.pkg, options.display_option)
26b55679
             logger.info("Upward dependencies: " + str(whoNeedsList))
87815216
         # To display/print package dependencies on console
cfd85ba2
         elif (options.input_type == "pkg" or
29d834bc
                 options.input_type == "who-needs"):
accc8120
             specDeps.process(options.input_type, options.pkg, options.display_option)
 
8f5f4df4
         elif options.input_type == "json":
accc8120
             list_json_files = options.json_file.split("\n")
             # Generate the expanded package dependencies json file based on package_list_file
26b55679
             logger.info("Generating the install time dependency list for all json files")
accc8120
             for json_file in list_json_files:
                 shutil.copy2(json_file, options.output_dir)
                 json_wrapper_option_list = JsonWrapper(json_file)
                 option_list_json = json_wrapper_option_list.read()
                 options_sorted = option_list_json.items()
                 for install_option in options_sorted:
                     output_file = None
                     input_value = os.path.join(os.path.dirname(json_file), install_option[1]["file"])
                     if options.display_option == "tree" and install_option[1]["title"] == "ISO Packages":
                         continue
                     if options.display_option == "json":
                         output_file = os.path.join(options.output_dir, install_option[1]["file"])
                     specDeps.process(options.input_type, input_value, options.display_option, output_file)
     except Exception as e:
         traceback.print_exc()
         sys.stderr.write(str(e))
87815216
         sys.stderr.write("Failed to generate dependency lists from spec files\n")
         sys.exit(1)
4ddea019
 
     sys.exit(0)
2cbd5a80
 
accc8120
 
87815216
 if __name__ == "__main__":
2cbd5a80
     main()