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() |