| #!/usr/bin/env python |
| # Copyright 1999-2024 Gentoo Authors |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| 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__))), "lib") |
| ) |
| import portage |
| |
| portage._internal_caller = True |
| from portage.output import EOutput |
| from textwrap import wrap |
| from portage._global_updates import _global_updates |
| |
| |
| def main(): |
| 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( |
| f"!!! Failed to change nice value to '{mysettings['PORTAGE_NICENESS']}'\n" |
| ) |
| portage.writemsg(f"!!! {str(e)}\n") |
| del e |
| |
| _global_updates(mytrees, mtimedb["updates"], if_mtime_changed=False) |
| |
| print() |
| print("Done.") |
| print() |
| |
| |
| if __name__ == "__main__": |
| main() |