#!/usr/bin/python -b
# Copyright 1999-2014 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
if osp.isfile(osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), ".portage_not_installed")):
	sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
import portage
portage._internal_caller = True
from portage import os
from portage.output import EOutput
from portage.util._argparse import ArgumentParser
from textwrap import wrap
from portage._global_updates import _global_updates
mysettings = portage.settings
mytrees = portage.db
mtimedb = portage.mtimedb

description = """The fixpackages program performs package move updates on
	configuration files, installed packages, and binary packages."""
description = " ".join(description.split())

parser = ArgumentParser(description=description)
parser.parse_args()

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