aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSiddhanth Rathod <xsiddhanthrathod@gmail.com>2023-10-05 18:59:32 +0530
committerSam James <sam@gentoo.org>2023-10-08 04:27:35 +0100
commitc846c08c046588a98f2b40a45ac74b84cda21a89 (patch)
tree000843036dd616c4bca9832eee69e8c29945043a
parenteclean-pkg: fix compatibility with FEATURES=pkgdir-index-trusted (diff)
downloadgentoolkit-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.py17
-rw-r--r--pym/gentoolkit/eclean/pkgindex.py86
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)