#!/usr/bin/python
# Copyright 1999-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

import os,sys
os.environ["PORTAGE_CALLER"]="fixpackages"
try:
	import portage
except ImportError:
	from os import path as osp
	sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
	import portage

mysettings = portage.settings
mytrees = portage.db
mtimedb = portage.mtimedb

try:
	os.nice(int(mysettings.get("PORTAGE_NICENESS", "0")))
except (OSError, ValueError), e:
	portage.writemsg("!!! Failed to change nice value to '%s'\n" % \
		mysettings["PORTAGE_NICENESS"])
	portage.writemsg("!!! %s\n" % str(e))
	del e

portage._global_updates(mytrees, mtimedb["updates"])

print
print "Done."
print
