diff options
author | Siddhanth Rathod <xsiddhanthrathod@gmail.com> | 2023-10-05 18:59:32 +0530 |
---|---|---|
committer | Sam James <sam@gentoo.org> | 2023-10-08 04:27:35 +0100 |
commit | c846c08c046588a98f2b40a45ac74b84cda21a89 (patch) | |
tree | 000843036dd616c4bca9832eee69e8c29945043a | |
parent | eclean-pkg: fix compatibility with FEATURES=pkgdir-index-trusted (diff) | |
download | gentoolkit-c846c08c046588a98f2b40a45ac74b84cda21a89.tar.gz gentoolkit-c846c08c046588a98f2b40a45ac74b84cda21a89.tar.bz2 gentoolkit-c846c08c046588a98f2b40a45ac74b84cda21a89.zip |
eclean: pkg: fix pkgindex handling
Last implemention was importing binhost module incorrectly:
calling Modules() from portage.module which sets binhost var to the BinhostHandler class
which would always fail as it needs name and namepath, leading to always call emaint
via a subprocess call.
Signed-off-by: Siddhanth Rathod <xsiddhanthrathod@gmail.com>
Signed-off-by: Sam James <sam@gentoo.org>
-rw-r--r-- | pym/gentoolkit/eclean/clean.py | 17 | ||||
-rw-r--r-- | pym/gentoolkit/eclean/pkgindex.py | 86 |
2 files changed, 11 insertions, 92 deletions
diff --git a/pym/gentoolkit/eclean/clean.py b/pym/gentoolkit/eclean/clean.py index 87d7aac..92449b4 100644 --- a/pym/gentoolkit/eclean/clean.py +++ b/pym/gentoolkit/eclean/clean.py @@ -8,7 +8,9 @@ import os import sys import gentoolkit.pprinter as pp -from gentoolkit.eclean.pkgindex import PkgIndex +import portage +from portage.emaint.main import TaskHandler +from portage.emaint.modules.binhost import binhost class CleanUp: @@ -61,11 +63,14 @@ class CleanUp: # run 'emaint --fix' here if clean_size: - index_control = PkgIndex(self.controller) - # emaint is not yet importable so call it - # print a blank line here for separation - print() - clean_size += index_control.clean_pkgs_index(self.quiet) + file = os.path.join(portage.settings["PKGDIR"], "Packages") + size1 = os.stat(file).st_size + TaskHandler(show_progress_bar=self.quiet).run_tasks( + [binhost.BinhostHandler], "fix" + ) + size = size1 - os.stat(file).st_size + self.controller(size, "Packages Index", file, "Index") + clean_size += size # return total size of deleted or to delete files return clean_size diff --git a/pym/gentoolkit/eclean/pkgindex.py b/pym/gentoolkit/eclean/pkgindex.py deleted file mode 100644 index 7d6fade..0000000 --- a/pym/gentoolkit/eclean/pkgindex.py +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/python - -# Copyright 2003-2010 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 - -import subprocess -import os -import sys - -import gentoolkit.pprinter as pp -from gentoolkit.eprefix import EPREFIX - -import portage -from portage.module import ( - InvalidModuleName, - Modules, -) -from portage.emaint.main import TaskHandler - - -class PkgIndex: - """Handle the cleaning of the binpkg Package - Index file - - @type output: class - @param output: optional output class for printing - """ - - def __init__(self, controller=None): - self.controller = controller - # backup command line call - self.emaint_cmd = "%s/usr/sbin/emaint --fix binhost" % EPREFIX - - def _get_emaint_binhost(self): - """Obtain a reference to the binhost module class - - @sets: self.binhost to BinhostHandler class - @rtype: boolean - """ - try: - self.emaint_control = Modules() - self.binhost = self.emaint_control._get_class("binhost") - except InvalidModuleName as er: - print(pp.error("Error importing emaint binhost module"), file=sys.stderr) - print(pp.error("Original error: " + er), file=sys.stderr) - except: - return False - return True - - def clean_pkgs_index(self, quiet): - """This will clean the binpkgs packages index file - - @param quiet: boolean - @return: the difference in file size - """ - file_ = os.path.join(portage.settings["PKGDIR"], "Packages") - statinfo = os.stat(file_) - size1 = statinfo.st_size - show_progress = not quiet - if self._get_emaint_binhost(): - self.taskmaster = TaskHandler(show_progress_bar=show_progress) - tasks = [self.binhost] - self.taskmaster.run_tasks(tasks) - else: - self.call_emaint() - statinfo = os.stat(file_) - clean_size = size1 - statinfo.st_size - self.controller(clean_size, "Packages Index", file_, "Index") - return clean_size - - def call_emaint(self): - """Run the stand alone emaint script from - a subprocess call. - - @rtype: integer - @return: the difference in file size - """ - try: - retcode = subprocess.call(self.emaint_cmd, shell=True) - if retcode < 0: - print( - pp.error("Child was terminated by signal" + str(-retcode)), - file=sys.stderr, - ) - except OSError as e: - print(pp.error("Execution failed:" + e), file=sys.stderr) |