#!/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 argparse
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 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 = argparse.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()
