commit:     c846c08c046588a98f2b40a45ac74b84cda21a89
Author:     Siddhanth Rathod <xsiddhanthrathod <AT> gmail <DOT> com>
AuthorDate: Thu Oct  5 13:29:32 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sun Oct  8 03:27:35 2023 +0000
URL:        https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=c846c08c

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 <AT> gmail.com>
Signed-off-by: Sam James <sam <AT> gentoo.org>

 pym/gentoolkit/eclean/clean.py    | 17 +++++---
 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)

Reply via email to