commit: 3e35553df4673ed05615adc088fdbbc3f212c876 Author: Arno Bauernöppel <https://github.com/gronkern> AuthorDate: Sat Jul 9 03:36:17 2022 +0000 Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org> CommitDate: Sat Jul 9 03:39:50 2022 +0000 URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=3e35553d
equery: Add -F TMPL option to depends module Like in other modules it is now possible to format the output of the equery module 'depends' with the commandline switch '-F' and TMPL. The man page was adujusted. A new static method 'print_formated' was created. In method 'format_depend' is checked if the new option is present. Depending on the check the PackageFormatter is used to display the dependencies. manually apply github PR, some minor editing. Signed-off-by: Brian Dolbec <dolsen <AT> gentoo.org> man/equery.1 | 4 +++ pym/gentoolkit/equery/depends.py | 76 ++++++++++++++++++++++++++++------------ 2 files changed, 58 insertions(+), 22 deletions(-) diff --git a/man/equery.1 b/man/equery.1 index ee7ad7b..9cb046f 100644 --- a/man/equery.1 +++ b/man/equery.1 @@ -129,6 +129,10 @@ Include dependencies that are not installed. This can take a while. .br Search for both direct and indirect dependencies. .HP +.B \-F, \-\-format=\fITMPL\fP +.br +Customize the output format of the matched packages using the template string \fITMPL\fP. See the \fB\-\-format\fP option for \fBlist\fP below for a description of the \fITMPL\fP argument. +.HP .BI "\-\-depth=" "NUM" .br Limit the indirect dependency tree to a depth of \fINUM\fP. \fB\-\-depth=0\fP is equivalent to not using \fB\-\-indirect\fP. diff --git a/pym/gentoolkit/equery/depends.py b/pym/gentoolkit/equery/depends.py index 581e2b6..93f0ec1 100644 --- a/pym/gentoolkit/equery/depends.py +++ b/pym/gentoolkit/equery/depends.py @@ -18,7 +18,7 @@ from gentoolkit.dependencies import Dependencies from gentoolkit.equery import format_options, mod_usage, CONFIG from gentoolkit.helpers import get_cpvs, get_installed_cpvs from gentoolkit.cpv import CPV - +from gentoolkit.package import PackageFormatter, FORMAT_TMPL_VARS # ======= # Globals # ======= @@ -27,6 +27,7 @@ QUERY_OPTS = { "include_masked": False, "only_direct": True, "max_depth": -1, + "package_format": None, } # ======= @@ -61,6 +62,26 @@ class DependPrinter: pp.uprint(indent + cpv) + @staticmethod + def print_formated(pkg): + """Print pkg as formatted output depending on CONFIG.""" + + if pkg is None: + return + + if CONFIG['verbose']: + print (PackageFormatter( + pkg, + do_format=True, + custom_format=QUERY_OPTS["package_format"] + )) + else: + print (PackageFormatter( + pkg, + do_format=False, + custom_format=QUERY_OPTS["package_format"] + )) + def format_depend(self, dep, dep_is_displayed): """Format a dependency for printing. @@ -76,27 +97,34 @@ class DependPrinter: indent = " " * depth mdep = dep.matching_dep use_conditional = "" - if mdep.use_conditional: - use_conditional = " & ".join( - pp.useflag(u) for u in mdep.use_conditional.split() - ) - if mdep.operator == "=*": - formatted_dep = "=%s*" % str(mdep.cpv) - else: - formatted_dep = mdep.operator + str(mdep.cpv) - if mdep.slot: - formatted_dep += pp.emph(":") + pp.slot(mdep.slot) - if mdep.sub_slot: - formatted_dep += pp.slot("/") + pp.slot(mdep.sub_slot) - if mdep.use: - useflags = pp.useflag(",".join(mdep.use.tokens)) - formatted_dep += pp.emph("[") + useflags + pp.emph("]") - - if dep_is_displayed: - indent = indent + " " * len(str(dep.cpv)) - self.print_fn(indent, "", use_conditional, formatted_dep) + + if QUERY_OPTS["package_format"] != None: + pkg = Package(str(dep.cpv)) + self.print_formated(pkg) else: self.print_fn(indent, str(dep.cpv), use_conditional, formatted_dep) + if mdep.use_conditional: + use_conditional = " & ".join( + pp.useflag(u) for u in mdep.use_conditional.split() + ) + if mdep.operator == '=*': + formatted_dep = '=%s*' % str(mdep.cpv) + else: + formatted_dep = mdep.operator + str(mdep.cpv) + if mdep.slot: + formatted_dep += pp.emph(':') + pp.slot(mdep.slot) + if mdep.sub_slot: + formatted_dep += pp.slot('/') + pp.slot(mdep.sub_slot) + if mdep.use: + useflags = pp.useflag(','.join(mdep.use.tokens)) + formatted_dep += (pp.emph('[') + useflags + pp.emph(']')) + + if dep_is_displayed: + indent = indent + " " * len(str(dep.cpv)) + self.print_fn(indent, '', use_conditional, formatted_dep) + else: + self.print_fn(indent, \ + str(dep.cpv), use_conditional, formatted_dep) # ========= @@ -126,6 +154,7 @@ def print_help(with_description=True): "include dependencies that are not installed (slow)", ), (" -D, --indirect", "search both direct and indirect dependencies"), + (" -F, --format=TMPL", "specify a custom output format"), (" --depth=N", "limit indirect dependency tree to specified depth"), ) ) @@ -145,6 +174,8 @@ def parse_module_options(module_opts): QUERY_OPTS["include_masked"] = True elif opt in ("-D", "--indirect"): QUERY_OPTS["only_direct"] = False + elif opt in ('-F', '--format'): + QUERY_OPTS["package_format"] = posarg elif opt in ("--depth"): if posarg.isdigit(): depth = int(posarg) @@ -159,8 +190,9 @@ def parse_module_options(module_opts): def main(input_args): """Parse input and run the program""" - short_opts = "hadD" # -d, --direct was old option for default action - long_opts = ("help", "all-packages", "direct", "indirect", "depth=") + short_opts = "hadDF:" # -d, --direct was old option for default action + long_opts = ('help', 'all-packages', 'direct', 'indirect', \ + 'format', 'depth=') try: module_opts, queries = gnu_getopt(input_args, short_opts, long_opts)