#!/usr/bin/env python

import optparse
import os
import sys
import portage

def main(argv):

	usage = "%s [options] <provider>" % (os.path.basename(argv[0],))
	parser = optparse.OptionParser(usage=usage)

	parser.add_option("--exclude-providers",
		help="space separated list of installed packages",
		dest="exclude_providers")

	parser.add_option("--version",
		help="display version info and exit",
		action="store_true",
		dest="version")

	options, args = parser.parse_args(argv[1:])

	if options.version:
		sys.stdout.write("Portage %s\n" % (portage.VERSION))
		sys.stdout.flush()
		return os.EX_OK

	if len(args) != 1:
		parser.error(usage)

	provider, = args

	root = portage.settings['ROOT']
	vardb = portage.db[root]['vartree'].dbapi
	linkmap = vardb._linkmap

	kargs = {}
	if options.exclude_providers is not None:
		kargs["exclude_providers"] = tuple(vardb._dblink(x).isowner
			for x in options.exclude_providers.split())

	try:
		consumers = linkmap.findConsumers(provider, **kargs)
	except KeyError:
		sys.stderr.write('none\n')
		returncode = 1
	else:
		sys.stdout.write("".join("%s\n" % x for x in sorted(consumers)))
		returncode = os.EX_OK

	return returncode

if __name__ == "__main__":
	sys.exit(main(sys.argv))
