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

from __future__ import print_function

import os
import sys

from os import path as osp
pym_path = osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym")
sys.path.insert(0, pym_path)
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()
