Source code for rez.cli.depends

# SPDX-License-Identifier: Apache-2.0
# Copyright Contributors to the Rez Project


"""
Perform a reverse package dependency lookup.
"""
from __future__ import print_function


[docs]def setup_parser(parser, completions=False): parser.add_argument( "-d", "--depth", type=int, help="dependency tree depth limit") parser.add_argument( "--paths", type=str, help="set package search path") parser.add_argument( "-b", "--build-requires", action="store_true", help="Include build requirements") parser.add_argument( "-p", "--private-build-requires", action="store_true", help="Include private build requirements of PKG, if any") parser.add_argument( "-g", "--graph", action="store_true", help="display the dependency tree as an image") parser.add_argument( "--pg", "--print-graph", dest="print_graph", action="store_true", help="print the dependency tree as a string") parser.add_argument( "--wg", "--write-graph", dest="write_graph", metavar='FILE', help="write the dependency tree to FILE") parser.add_argument( "-q", "--quiet", action="store_true", help="don't print progress bar or depth indicators") PKG_action = parser.add_argument( "PKG", help="package that other packages depend on") if completions: from rez.cli._complete_util import PackageFamilyCompleter PKG_action.completer = PackageFamilyCompleter
[docs]def command(opts, parser, extra_arg_groups=None): from rez.package_search import get_reverse_dependency_tree from rez.utils.graph_utils import save_graph, view_graph from rez.config import config from rez.vendor.pygraph.readwrite.dot import write as write_dot import os import os.path config.override("warn_none", True) config.override("show_progress", (not opts.quiet)) if opts.paths is None: pkg_paths = None else: pkg_paths = opts.paths.split(os.pathsep) pkg_paths = [os.path.expanduser(x) for x in pkg_paths if x] pkgs_list, g = get_reverse_dependency_tree( package_name=opts.PKG, depth=opts.depth, paths=pkg_paths, build_requires=opts.build_requires, private_build_requires=opts.private_build_requires) if opts.graph or opts.print_graph or opts.write_graph: gstr = write_dot(g) if opts.print_graph: print(gstr) elif opts.write_graph: save_graph(gstr, dest_file=opts.write_graph) else: view_graph(gstr) return 0 for i, pkgs in enumerate(pkgs_list): if opts.quiet: toks = pkgs else: toks = ["#%d:" % i] + pkgs print(' '.join(toks))