def prepare_minimal_packages_list(graphs):
"""
Prepares the minimal list of package names that are needed to be installed
in the chroot so that rpmrebuild can be used inside it.
@param graphs The list of dependency graphs of repositories.
@return The list of packages.
"""
symbols = ["useradd", "mkdir", "awk", "cpio", "make", "rpmbuild", "sed"]
deprecated_substrings = ["mic-bootstrap", "x86", "x64"]
providers = {}
for symbol in symbols:
for graph in graphs:
if providers.get(symbol) is None:
providers[symbol] = Set()
names = graph.get_provider_names(symbol)
if names is not None:
providers[symbol] = providers[symbol] | Set(names)
logging.debug("Got providers {0} for symbol "
"{1}".format(names, symbol))
logging.debug("{0}".format(providers[symbol]))
packages = []
for symbol in symbols:
provider = None
if len(providers[symbol]) < 1:
for graph in graphs:
for key in graph.symbol_providers.keys():
logging.debug("{0} : {1}".format(
key, graph.symbol_providers[key]))
logging.error("Failed to find symbol {0}".format(symbol))
logging.error("size: {0}".format(len(graph.symbol_providers)))
sys.exit("Error.")
elif len(providers[symbol]) > 1:
logging.debug("Analyzing symbol {0}:".format(symbol))
for provider in providers[symbol]:
logging.debug(" Provided by {0}".format(provider))
for substring in deprecated_substrings:
if substring in provider:
logging.debug(" ^--- will be ignored, contains "
"{0}".format(substring))
providers[symbol] = providers[symbol] - Set([provider])
logging.debug(" {0}".format(providers[symbol]))
if len(providers[symbol]) > 1:
logging.warning("Multiple provider names for symbol "
"\"{0}\":".format(symbol))
for provider in providers[symbol]:
logging.warning(" * {0}".format(provider))
provider = next(iter(providers[symbol])) # FIXME: is it correct?
else:
provider = next(iter(providers[symbol]))
packages.append(provider)
logging.debug("Minimal packages list:")
for package in packages:
logging.debug(" * {0}".format(package))
return packages
评论列表
文章目录