#!/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

from portage import os
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
