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

from __future__ import print_function

import os
import sys

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
from portage.output import EOutput
from textwrap import wrap
from portage._global_updates import _global_updates
mysettings = portage.settings
mytrees = portage.db
mtimedb = portage.mtimedb

if mysettings['ROOT'] != "/":
	out = EOutput()
	msg = "The fixpackages program is not intended for use with " + \
		"ROOT != \"/\". Instead use `emaint --fix movebin` and/or " + \
		"`emaint --fix moveinst."
	for line in wrap(msg, 72):
		out.eerror(line)
	sys.exit(1)

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

_global_updates(mytrees, mtimedb["updates"], if_mtime_changed=False)

print()
print("Done.")
print()
