from portage import os
from portage.util import writemsg, writemsg_stdout
+def eval_atom_use(atom):
+ if 'USE' in os.environ:
+ use = frozenset(os.environ['USE'].split())
+ atom = atom.evaluate_conditionals(use)
+ return atom
+
#-----------------------------------------------------------------------------
#
# To add functionality to this tool, add a function below.
if (len(argv) < 2):
print("ERROR: insufficient parameters!")
sys.exit(2)
- if atom_validate_strict and not portage.isvalidatom(argv[1]):
- portage.writemsg("ERROR: Invalid atom: '%s'\n" % argv[1],
- noiselevel=-1)
- return 2
try:
- mylist=portage.db[argv[0]]["vartree"].dbapi.match(argv[1])
+ atom = portage.dep.Atom(argv[1])
+ except portage.exception.InvalidAtom:
+ if atom_validate_strict:
+ portage.writemsg("ERROR: Invalid atom: '%s'\n" % argv[1],
+ noiselevel=-1)
+ return 2
+ else:
+ atom = argv[1]
+ else:
+ atom = eval_atom_use(atom)
+
+ try:
+ mylist = portage.db[argv[0]]["vartree"].dbapi.match(atom)
if mylist:
sys.exit(0)
else:
if (len(argv) < 2):
print("ERROR: insufficient parameters!")
sys.exit(2)
- if atom_validate_strict and not portage.isvalidatom(argv[1]):
- portage.writemsg("ERROR: Invalid atom: '%s'\n" % argv[1],
- noiselevel=-1)
- return 2
try:
- mylist=portage.db[argv[0]]["vartree"].dbapi.match(argv[1])
+ atom = portage.dep.Atom(argv[1])
+ except portage.exception.InvalidAtom:
+ if atom_validate_strict:
+ portage.writemsg("ERROR: Invalid atom: '%s'\n" % argv[1],
+ noiselevel=-1)
+ return 2
+ else:
+ atom = argv[1]
+ else:
+ atom = eval_atom_use(atom)
+ try:
+ mylist = portage.db[argv[0]]["vartree"].dbapi.match(atom)
print(portage.best(mylist))
except KeyError:
sys.exit(1)
# Show our commands -- we do this by scanning the functions in this
# file, and formatting each functions documentation.
#
- non_commands = frozenset(['exithandler', 'main',
+ non_commands = frozenset(['eval_atom_use', 'exithandler', 'main',
'usage', 'writemsg', 'writemsg_stdout'])
commands = sorted(k for k, v in globals().items() \
if type(v) is types.FunctionType and k not in non_commands)
return False
+ def evaluate_conditionals(self, use):
+ """
+ Create an atom instance with any USE conditionals evaluated.
+ @param use: The set of enabled USE flags
+ @type use: set
+ @rtype: Atom
+ @return: an atom instance with any USE conditionals evaluated
+ """
+ if not (self.use and self.use.conditional):
+ return self
+ atom = remove_slot(self)
+ if self.slot:
+ atom += ":%s" % self.slot
+ atom += str(self.use.evaluate_conditionals(use))
+ return Atom(atom)
+
def __copy__(self):
"""Immutable, so returns self."""
return self