def print_tools(self, pattern=None, buf=sys.stdout): """Print a list of visible tools. Args: pattern (str): Only list tools that match this glob pattern. """ seen = set() rows = [] context = self.context if context: data = context.get_tools() conflicts = set(context.get_conflicting_tools().keys()) for _, (variant, tools) in sorted(data.items()): pkg_str = variant.qualified_package_name for tool in tools: if pattern and not fnmatch(tool, pattern): continue if tool in conflicts: label = "(in conflict)" color = critical else: label = '' color = None rows.append([tool, '-', pkg_str, "active context", label, color]) seen.add(tool) for suite in self.suites: for tool, d in suite.get_tools().iteritems(): if tool in seen: continue if pattern and not fnmatch(tool, pattern): continue label = [] color = None path = which(tool) if path: path_ = os.path.join(suite.tools_path, tool) if path != path_: label.append("(hidden by unknown tool '%s')" % path) color = warning variant = d["variant"] if isinstance(variant, set): pkg_str = ", ".join(variant) label.append("(in conflict)") color = critical else: pkg_str = variant.qualified_package_name orig_tool = d["tool_name"] if orig_tool == tool: orig_tool = '-' label = ' '.join(label) source = ("context '%s' in suite '%s'" % (d["context_name"], suite.load_path)) rows.append([tool, orig_tool, pkg_str, source, label, color]) seen.add(tool) _pr = Printer(buf) if not rows: _pr("No matching tools.") return False headers = [["TOOL", "ALIASING", "PACKAGE", "SOURCE", "", None], ["----", "--------", "-------", "------", "", None]] rows = headers + sorted(rows, key=lambda x: x[0].lower()) print_colored_columns(_pr, rows) return True
def print_tools(self, pattern=None, buf=sys.stdout): """Print a list of visible tools. Args: pattern (str): Only list tools that match this glob pattern. """ seen = set() rows = [] context = self.context if context: data = context.get_tools() conflicts = set(context.get_conflicting_tools().keys()) for _, (variant, tools) in sorted(data.items()): pkg_str = variant.qualified_package_name for tool in tools: if pattern and not fnmatch(tool, pattern): continue if tool in conflicts: label = "(in conflict)" color = critical else: label = '' color = None rows.append( [tool, '-', pkg_str, "active context", label, color]) seen.add(tool) for suite in self.suites: for tool, d in suite.get_tools().iteritems(): if tool in seen: continue if pattern and not fnmatch(tool, pattern): continue label = [] color = None path = which(tool) if path: path_ = os.path.join(suite.tools_path, tool) if path != path_: label.append("(hidden by unknown tool '%s')" % path) color = warning variant = d["variant"] if isinstance(variant, set): pkg_str = ", ".join(variant) label.append("(in conflict)") color = critical else: pkg_str = variant.qualified_package_name orig_tool = d["tool_name"] if orig_tool == tool: orig_tool = '-' label = ' '.join(label) source = ("context '%s' in suite '%s'" % (d["context_name"], suite.load_path)) rows.append([tool, orig_tool, pkg_str, source, label, color]) seen.add(tool) _pr = Printer(buf) if not rows: _pr("No matching tools.") return False headers = [["TOOL", "ALIASING", "PACKAGE", "SOURCE", "", None], ["----", "--------", "-------", "------", "", None]] rows = headers + sorted(rows, key=lambda x: x[0].lower()) print_colored_columns(_pr, rows) return True
def command(opts, parser, extra_arg_groups=None): from rez.config import config from rez.package_cache import PackageCache from rez.utils.formatting import print_colored_columns from rez.utils import colorize statuses = { PackageCache.VARIANT_FOUND: ("cached", colorize.local, 0), PackageCache.VARIANT_COPYING: ("copying", colorize.warning, 1), PackageCache.VARIANT_COPY_STALLED: ("stalled", colorize.error, 2), PackageCache.VARIANT_PENDING: ("pending", colorize.inactive, 3) } cachepath = opts.DIR or config.cache_packages_path if not cachepath: parser.error( "DIR must be specified, as there is no configured " "'cache_packages_path'" ) pkgcache = PackageCache(cachepath) if opts.daemon: pkgcache.run_daemon() elif opts.add_variants: for uri in opts.add_variants: add_variant(pkgcache, uri, opts) elif opts.remove_variants: for uri in opts.remove_variants: remove_variant(pkgcache, uri, opts) elif opts.clean: pkgcache.clean() elif opts.logs: view_logs(pkgcache, opts) else: tty = sys.stdout.isatty() # just print current state of package cache if tty: print("Package cache at %s:\n" % cachepath) def _sort(entry): variant, _, status = entry return (statuses[status][-1], variant.name) entries = sorted(pkgcache.get_variants(), key=_sort) if not entries: print("No cached packages.", file=sys.stderr) sys.exit(0) rows = [] if tty: rows.append([c.replace('_', ' ') for c in opts.columns] + [None]) # headers rows.append([('-' * len(c)) for c in opts.columns] + [None]) # underlines for variant, rootpath, status in entries: status_str, color, _ = statuses[status] row = [] for c in opts.columns: if c == "status": row.append(status_str) elif c == "package": row.append(variant.parent.qualified_name) elif c == "variant_uri": row.append(variant.uri) elif c == "orig_path": row.append(variant.root) else: # cached_path row.append(rootpath or '-') row.append(color) rows.append(row) pr = colorize.Printer() print_colored_columns(pr, rows)