blob: 1afe886aa84dfbc4468e7fa4a5123218f8330955 [file] [log] [blame]
# Copyright 2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
import portage
from portage import os
from portage.dep import Atom
from portage.exception import InvalidAtom
from portage.package.ebuild._ipc.IpcCommand import IpcCommand
from portage.util import normalize_path
from portage.versions import best
class QueryCommand(IpcCommand):
__slots__ = ('settings',)
_db = None
def __init__(self, settings):
IpcCommand.__init__(self)
self.settings = settings
def __call__(self, argv):
"""
@returns: tuple of (stdout, stderr, returncode)
"""
cmd, root, atom = argv
try:
atom = Atom(atom)
except InvalidAtom:
return ('', 'invalid atom: %s\n' % atom, 2)
use = self.settings.get('PORTAGE_BUILT_USE')
if use is None:
use = self.settings['PORTAGE_USE']
use = frozenset(use.split())
atom = atom.evaluate_conditionals(use)
db = self._db
if db is None:
db = portage.db
root = normalize_path(root).rstrip(os.path.sep) + os.path.sep
if root not in db:
return ('', 'invalid ROOT: %s\n' % root, 2)
vardb = db[root]["vartree"].dbapi
if cmd == 'has_version':
if vardb.match(atom):
returncode = 0
else:
returncode = 1
return ('', '', returncode)
elif cmd == 'best_version':
m = best(vardb.match(atom))
return ('%s\n' % m, '', 0)
else:
return ('', 'invalid command: %s\n' % cmd, 2)