aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'pym/gentoolkit/equery/uses.py')
-rw-r--r--pym/gentoolkit/equery/uses.py522
1 files changed, 264 insertions, 258 deletions
diff --git a/pym/gentoolkit/equery/uses.py b/pym/gentoolkit/equery/uses.py
index dfb6f31..7c90b90 100644
--- a/pym/gentoolkit/equery/uses.py
+++ b/pym/gentoolkit/equery/uses.py
@@ -4,7 +4,7 @@
"""Display USE flags for a given package"""
-__docformat__ = 'epytext'
+__docformat__ = "epytext"
# =======
# Imports
@@ -31,288 +31,294 @@ from gentoolkit.flag import get_flags, reduce_flags
# Globals
# =======
-QUERY_OPTS = {"all_versions" : False, "ignore_l10n" : False}
+QUERY_OPTS = {"all_versions": False, "ignore_l10n": False}
# =========
# Functions
# =========
-def print_help(with_description=True):
- """Print description, usage and a detailed help message.
-
- @type with_description: bool
- @param with_description: if true, print module's __doc__ string
- """
- if with_description:
- print(__doc__.strip())
- print()
- print(mod_usage(mod_name=__name__.split('.')[-1]))
- print()
- print(pp.command("options"))
- print(format_options((
- (" -h, --help", "display this help message"),
- (" -a, --all", "include all package versions"),
- (" -i, --ignore-l10n", "don't show l10n USE flags")
- )))
+def print_help(with_description=True):
+ """Print description, usage and a detailed help message.
+
+ @type with_description: bool
+ @param with_description: if true, print module's __doc__ string
+ """
+
+ if with_description:
+ print(__doc__.strip())
+ print()
+ print(mod_usage(mod_name=__name__.split(".")[-1]))
+ print()
+ print(pp.command("options"))
+ print(
+ format_options(
+ (
+ (" -h, --help", "display this help message"),
+ (" -a, --all", "include all package versions"),
+ (" -i, --ignore-l10n", "don't show l10n USE flags"),
+ )
+ )
+ )
def display_useflags(output):
- """Print USE flag descriptions and statuses.
-
- @type output: list
- @param output: [(inuse, inused, flag, desc, restrict), ...]
- inuse (int) = 0 or 1; if 1, flag is set in make.conf
- inused (int) = 0 or 1; if 1, package is installed with flag enabled
- flag (str) = the name of the USE flag
- desc (str) = the flag's description
- restrict (str) = corresponds to the text of restrict in metadata
- """
-
- maxflag_len = len(max([t[2] for t in output], key=len))
-
- twrap = TextWrapper()
- twrap.width = CONFIG['termWidth']
- twrap.subsequent_indent = " " * (maxflag_len + 8)
-
- markers = ("-", "+")
- color = (
- partial(pp.useflag, enabled=False), partial(pp.useflag, enabled=True)
- )
- for in_makeconf, in_installed, flag, desc, restrict in output:
- if CONFIG['verbose']:
- flag_name = ""
- if in_makeconf != in_installed:
- flag_name += pp.emph(" %s %s" %
- (markers[in_makeconf], markers[in_installed]))
- else:
- flag_name += (" %s %s" %
- (markers[in_makeconf], markers[in_installed]))
-
- flag_name += " " + color[in_makeconf](flag.ljust(maxflag_len))
- flag_name += " : "
-
- # Strip initial whitespace at the start of the description
- # Bug 432530
- if desc:
- desc = desc.lstrip()
-
- # print description
- if restrict:
- restrict = "(%s %s)" % (pp.emph("Restricted to"),
- pp.cpv(restrict))
- twrap.initial_indent = flag_name
- pp.uprint(twrap.fill(restrict))
- if desc:
- twrap.initial_indent = twrap.subsequent_indent
- pp.uprint(twrap.fill(desc))
- else:
- print(" : <unknown>")
- else:
- if desc:
- twrap.initial_indent = flag_name
- desc = twrap.fill(desc)
- pp.uprint(desc)
- else:
- twrap.initial_indent = flag_name
- print(twrap.fill("<unknown>"))
- else:
- pp.uprint(markers[in_makeconf] + flag)
+ """Print USE flag descriptions and statuses.
+
+ @type output: list
+ @param output: [(inuse, inused, flag, desc, restrict), ...]
+ inuse (int) = 0 or 1; if 1, flag is set in make.conf
+ inused (int) = 0 or 1; if 1, package is installed with flag enabled
+ flag (str) = the name of the USE flag
+ desc (str) = the flag's description
+ restrict (str) = corresponds to the text of restrict in metadata
+ """
+
+ maxflag_len = len(max([t[2] for t in output], key=len))
+
+ twrap = TextWrapper()
+ twrap.width = CONFIG["termWidth"]
+ twrap.subsequent_indent = " " * (maxflag_len + 8)
+
+ markers = ("-", "+")
+ color = (partial(pp.useflag, enabled=False), partial(pp.useflag, enabled=True))
+ for in_makeconf, in_installed, flag, desc, restrict in output:
+ if CONFIG["verbose"]:
+ flag_name = ""
+ if in_makeconf != in_installed:
+ flag_name += pp.emph(
+ " %s %s" % (markers[in_makeconf], markers[in_installed])
+ )
+ else:
+ flag_name += " %s %s" % (markers[in_makeconf], markers[in_installed])
+
+ flag_name += " " + color[in_makeconf](flag.ljust(maxflag_len))
+ flag_name += " : "
+
+ # Strip initial whitespace at the start of the description
+ # Bug 432530
+ if desc:
+ desc = desc.lstrip()
+
+ # print description
+ if restrict:
+ restrict = "(%s %s)" % (pp.emph("Restricted to"), pp.cpv(restrict))
+ twrap.initial_indent = flag_name
+ pp.uprint(twrap.fill(restrict))
+ if desc:
+ twrap.initial_indent = twrap.subsequent_indent
+ pp.uprint(twrap.fill(desc))
+ else:
+ print(" : <unknown>")
+ else:
+ if desc:
+ twrap.initial_indent = flag_name
+ desc = twrap.fill(desc)
+ pp.uprint(desc)
+ else:
+ twrap.initial_indent = flag_name
+ print(twrap.fill("<unknown>"))
+ else:
+ pp.uprint(markers[in_makeconf] + flag)
def get_global_useflags():
- """Get global and expanded USE flag variables from
- PORTDIR/profiles/use.desc and PORTDIR/profiles/desc/*.desc respectively.
-
- @rtype: dict
- @return: {'flag_name': 'flag description', ...}
- """
-
- global_usedesc = {}
- # Get global USE flag descriptions
- try:
- path = os.path.join(settings["PORTDIR"], 'profiles', 'use.desc')
- with open(_unicode_encode(path, encoding=_encodings['fs']),
- encoding=_encodings['content']) as open_file:
- for line in open_file:
- if line.startswith('#'):
- continue
- # Ex. of fields: ['syslog', 'Enables support for syslog\n']
- fields = line.split(" - ", 1)
- if len(fields) == 2:
- global_usedesc[fields[0]] = fields[1].rstrip()
- except IOError:
- sys.stderr.write(
- pp.warn(
- "Could not load USE flag descriptions from %s" % pp.path(path)
- )
- )
-
- del path, open_file
- # Add USE_EXPANDED variables to usedesc hash -- Bug #238005
- for path in glob(os.path.join(settings["PORTDIR"],
- 'profiles', 'desc', '*.desc')):
- try:
- with open(_unicode_encode(path, encoding=_encodings['fs']),
- encoding=_encodings['content']) as open_file:
- for line in open_file:
- if line.startswith('#'):
- continue
- fields = [field.strip() for field in line.split(" - ", 1)]
- if len(fields) == 2:
- expanded_useflag = "%s_%s" % \
- (path.split("/")[-1][0:-5], fields[0])
- global_usedesc[expanded_useflag] = fields[1]
- except IOError:
- sys.stderr.write(
- pp.warn("Could not load USE flag descriptions from %s" % path)
- )
-
- return global_usedesc
+ """Get global and expanded USE flag variables from
+ PORTDIR/profiles/use.desc and PORTDIR/profiles/desc/*.desc respectively.
+
+ @rtype: dict
+ @return: {'flag_name': 'flag description', ...}
+ """
+
+ global_usedesc = {}
+ # Get global USE flag descriptions
+ try:
+ path = os.path.join(settings["PORTDIR"], "profiles", "use.desc")
+ with open(
+ _unicode_encode(path, encoding=_encodings["fs"]),
+ encoding=_encodings["content"],
+ ) as open_file:
+ for line in open_file:
+ if line.startswith("#"):
+ continue
+ # Ex. of fields: ['syslog', 'Enables support for syslog\n']
+ fields = line.split(" - ", 1)
+ if len(fields) == 2:
+ global_usedesc[fields[0]] = fields[1].rstrip()
+ except IOError:
+ sys.stderr.write(
+ pp.warn("Could not load USE flag descriptions from %s" % pp.path(path))
+ )
+
+ del path, open_file
+ # Add USE_EXPANDED variables to usedesc hash -- Bug #238005
+ for path in glob(os.path.join(settings["PORTDIR"], "profiles", "desc", "*.desc")):
+ try:
+ with open(
+ _unicode_encode(path, encoding=_encodings["fs"]),
+ encoding=_encodings["content"],
+ ) as open_file:
+ for line in open_file:
+ if line.startswith("#"):
+ continue
+ fields = [field.strip() for field in line.split(" - ", 1)]
+ if len(fields) == 2:
+ expanded_useflag = "%s_%s" % (
+ path.split("/")[-1][0:-5],
+ fields[0],
+ )
+ global_usedesc[expanded_useflag] = fields[1]
+ except IOError:
+ sys.stderr.write(
+ pp.warn("Could not load USE flag descriptions from %s" % path)
+ )
+
+ return global_usedesc
def get_output_descriptions(pkg, global_usedesc):
- """Prepare descriptions and usage information for each USE flag."""
-
- if pkg.metadata is None:
- local_usedesc = []
- else:
- local_usedesc = pkg.metadata.use()
-
- iuse, final_use = get_flags(pkg.cpv, final_setting=True)
- usevar = reduce_flags(iuse)
- usevar.sort()
-
- if QUERY_OPTS['ignore_l10n']:
- for a in usevar[:]:
- #TODO: Remove linguas after transition to l10n is complete
- if a.startswith("l10n_") or a.startswith("linguas_"):
- usevar.remove(a)
-
-
- if pkg.is_installed():
- used_flags = pkg.use().split()
- else:
- used_flags = settings["USE"].split()
-
- # store (inuse, inused, flag, desc, restrict)
- output = []
- for flag in usevar:
- inuse = False
- inused = False
-
- local_use = None
- for use in local_usedesc:
- if use.name == flag:
- local_use = use
- break
-
- try:
- desc = local_use.description
- except AttributeError:
- try:
- desc = global_usedesc[flag]
- except KeyError:
- desc = ""
-
- try:
- restrict = local_use.restrict
- restrict = restrict if restrict is not None else ""
- except AttributeError:
- restrict = ""
-
- if flag in final_use:
- inuse = True
- if flag in used_flags:
- inused = True
-
- output.append((inuse, inused, flag, desc, restrict))
-
- return output
+ """Prepare descriptions and usage information for each USE flag."""
+
+ if pkg.metadata is None:
+ local_usedesc = []
+ else:
+ local_usedesc = pkg.metadata.use()
+
+ iuse, final_use = get_flags(pkg.cpv, final_setting=True)
+ usevar = reduce_flags(iuse)
+ usevar.sort()
+
+ if QUERY_OPTS["ignore_l10n"]:
+ for a in usevar[:]:
+ # TODO: Remove linguas after transition to l10n is complete
+ if a.startswith("l10n_") or a.startswith("linguas_"):
+ usevar.remove(a)
+
+ if pkg.is_installed():
+ used_flags = pkg.use().split()
+ else:
+ used_flags = settings["USE"].split()
+
+ # store (inuse, inused, flag, desc, restrict)
+ output = []
+ for flag in usevar:
+ inuse = False
+ inused = False
+
+ local_use = None
+ for use in local_usedesc:
+ if use.name == flag:
+ local_use = use
+ break
+
+ try:
+ desc = local_use.description
+ except AttributeError:
+ try:
+ desc = global_usedesc[flag]
+ except KeyError:
+ desc = ""
+
+ try:
+ restrict = local_use.restrict
+ restrict = restrict if restrict is not None else ""
+ except AttributeError:
+ restrict = ""
+
+ if flag in final_use:
+ inuse = True
+ if flag in used_flags:
+ inused = True
+
+ output.append((inuse, inused, flag, desc, restrict))
+
+ return output
def parse_module_options(module_opts):
- """Parse module options and update QUERY_OPTS"""
+ """Parse module options and update QUERY_OPTS"""
- opts = (x[0] for x in module_opts)
- for opt in opts:
- if opt in ('-h', '--help'):
- print_help()
- sys.exit(0)
- elif opt in ('-a', '--all'):
- QUERY_OPTS['all_versions'] = True
- elif opt in ('-i', '--ignore-l10n'):
- QUERY_OPTS['ignore_l10n'] = True
+ opts = (x[0] for x in module_opts)
+ for opt in opts:
+ if opt in ("-h", "--help"):
+ print_help()
+ sys.exit(0)
+ elif opt in ("-a", "--all"):
+ QUERY_OPTS["all_versions"] = True
+ elif opt in ("-i", "--ignore-l10n"):
+ QUERY_OPTS["ignore_l10n"] = True
def print_legend():
- """Print a legend to explain the output format."""
+ """Print a legend to explain the output format."""
- print("[ Legend : %s - final flag setting for installation]" % pp.emph("U"))
- print("[ : %s - package is installed with flag ]" % pp.emph("I"))
- print("[ Colors : %s, %s ]" % (
- pp.useflag("set", enabled=True), pp.useflag("unset", enabled=False)))
+ print("[ Legend : %s - final flag setting for installation]" % pp.emph("U"))
+ print("[ : %s - package is installed with flag ]" % pp.emph("I"))
+ print(
+ "[ Colors : %s, %s ]"
+ % (pp.useflag("set", enabled=True), pp.useflag("unset", enabled=False))
+ )
def main(input_args):
- """Parse input and run the program"""
-
- short_opts = "hai"
- long_opts = ('help', 'all', 'ignore-l10n')
-
- try:
- module_opts, queries = gnu_getopt(input_args, short_opts, long_opts)
- except GetoptError as err:
- sys.stderr.write(pp.error("Module %s" % err))
- print()
- print_help(with_description=False)
- sys.exit(2)
-
- parse_module_options(module_opts)
-
- if not queries:
- print_help()
- sys.exit(2)
-
- #
- # Output
- #
-
- first_run = True
- legend_printed = False
- for query in (Query(x) for x in queries):
- if not first_run:
- print()
-
- if QUERY_OPTS["all_versions"]:
- matches = query.find(include_masked=True)
- else:
- matches = [query.find_best()]
-
- if not any(matches):
- raise errors.GentoolkitNoMatches(query)
-
- matches.sort()
-
- global_usedesc = get_global_useflags()
- for pkg in matches:
-
- output = get_output_descriptions(pkg, global_usedesc)
- if output:
- if CONFIG['verbose']:
- if not legend_printed:
- print_legend()
- legend_printed = True
- print((" * Found these USE flags for %s:" %
- pp.cpv(str(pkg.cpv))))
- print(pp.emph(" U I"))
- display_useflags(output)
- else:
- if CONFIG['verbose']:
- sys.stderr.write(
- pp.warn("No USE flags found for %s" % pp.cpv(pkg.cpv))
- )
-
- first_run = False
+ """Parse input and run the program"""
+
+ short_opts = "hai"
+ long_opts = ("help", "all", "ignore-l10n")
+
+ try:
+ module_opts, queries = gnu_getopt(input_args, short_opts, long_opts)
+ except GetoptError as err:
+ sys.stderr.write(pp.error("Module %s" % err))
+ print()
+ print_help(with_description=False)
+ sys.exit(2)
+
+ parse_module_options(module_opts)
+
+ if not queries:
+ print_help()
+ sys.exit(2)
+
+ #
+ # Output
+ #
+
+ first_run = True
+ legend_printed = False
+ for query in (Query(x) for x in queries):
+ if not first_run:
+ print()
+
+ if QUERY_OPTS["all_versions"]:
+ matches = query.find(include_masked=True)
+ else:
+ matches = [query.find_best()]
+
+ if not any(matches):
+ raise errors.GentoolkitNoMatches(query)
+
+ matches.sort()
+
+ global_usedesc = get_global_useflags()
+ for pkg in matches:
+
+ output = get_output_descriptions(pkg, global_usedesc)
+ if output:
+ if CONFIG["verbose"]:
+ if not legend_printed:
+ print_legend()
+ legend_printed = True
+ print((" * Found these USE flags for %s:" % pp.cpv(str(pkg.cpv))))
+ print(pp.emph(" U I"))
+ display_useflags(output)
+ else:
+ if CONFIG["verbose"]:
+ sys.stderr.write(
+ pp.warn("No USE flags found for %s" % pp.cpv(pkg.cpv))
+ )
+
+ first_run = False
+
# vim: set ts=4 sw=4 tw=79: