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

from __future__ import print_function

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) as 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()
