#!/usr/bin/python2
#
#Copyright (C) 2015 vmware inc.
#
#Author: Harish Udaiya Kumar <hudaiyakumar@vmware.com>
from SpecUtils import Specutils
from SpecData import SerializedSpecObjects
from RepoDeps import RepoQueryDependency
import sys
import os
from optparse import OptionParser
DEFAULT_INPUT_TYPE = "json"
DEFAULT_DISPLAY_OPTION = "tree"
SPEC_FILE_DIR = "../../SPECS"
INPUT_DATA_DIR = "../../common/data"
def reportMissing(pkg,specDepList, repoDepList, excludeList):
missingList = [];
if None != repoDepList:
for repoItem in repoDepList:
if repoItem not in excludeList and (None == specDepList or repoItem not in specDepList):
missingList.append(repoItem)
if missingList:
if len(pkg) <= 7:
print pkg, "missing\t\t->", missingList
else:
print pkg, "missing\t->", missingList
def main():
usage = os.path.basename(__file__) + "--input-type=[json/pkg] --pkg=[pkg_name] --file=<JSON_FILE_NAME> --repo-file=<photon>.repo"
parser = OptionParser(usage)
parser.add_option("-i", "--input-type", dest="input_type", default=DEFAULT_INPUT_TYPE)
parser.add_option("-p", "--pkg", dest="pkg")
parser.add_option("-f", "--file", dest="json_file", default="packages_full.json")
parser.add_option("-s", "--spec-dir", dest="spec_dir", default=SPEC_FILE_DIR)
parser.add_option("-a", "--input-data-dir", dest="input_data_dir", default=INPUT_DATA_DIR)
parser.add_option("-r", "--repo-file", dest = "repo_file", default="")
excludeList = ["bash","glibc","libgcc","pkg-config","filesystem"]
(options, args) = parser.parse_args()
if(options.repo_file == ""):
print "Error! repo file not provided"
print usage
return
if(False == options.input_data_dir.endswith('/')):
options.input_data_dir += '/'
specDeps = SerializedSpecObjects(options.input_data_dir, "")
repoDeps = RepoQueryDependency(options.repo_file)
displayOption = None
abs_path = os.path.abspath(__file__)
dir_name = os.path.dirname(abs_path)
os.chdir(dir_name)
if(options.input_type == "pkg"):
targetName = options.pkg
specDepList = specDeps.readSpecsAndConvertToSerializableObjects(options.spec_dir, options.input_type, targetName, displayOption)
repoDepList = repoDeps.getRequiresList(targetName)
reportMissing(targetName,specDepList,repoDepList,excludeList)
elif(options.input_type == "json"):
filePath = options.input_data_dir + options.json_file
data = specDeps.get_all_package_names(filePath)
for pkg in data:
specDepList = specDeps.readSpecsAndConvertToSerializableObjects(options.spec_dir, "pkg" , pkg, displayOption)
repoDepList = repoDeps.getRequiresList(pkg)
reportMissing(pkg,specDepList,repoDepList,excludeList)
sys.exit(0)
if __name__=="__main__":
main()