blob: 584a5bcb2b34c0dd168bfe1be4e7c82e9f78af0c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
#!/usr/bin/python
# Copyright 2003-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
from __future__ import print_function
import subprocess
import os
import sys
import gentoolkit.pprinter as pp
from gentoolkit.eprefix import EPREFIX
import portage
class PkgIndex(object):
"""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
"""
# About noqa below: I don't understand how this code can run at all.
# TODO: verify soundness
try:
self.emaint_control = Modules() # noqa
self.binhost = self.emaint_control._get_class('binhost')
except InvalidModuleName as er: # noqa
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 _load_modules(self):
"""Import the emaint modules and report the success/fail of them
"""
try:
from emaint.module import Modules # noqa
from emaint.main import TaskHandler # noqa
except ImportError as e:
return False
return True
def clean_pkgs_index(self,):
"""This will clean the binpkgs packages index file"""
go = self._load_modules()
if go:
if self.get_emaint_binhost():
self.taskmaster = TaskHandler(show_progress_bar=True) # noqa
tasks = [self.binhost]
self.taskmaster.run_tasks(tasks)
def call_emaint(self):
"""Run the stand alone emaint script from
a subprocess call.
@rtype: integer
@return: the difference in file size
"""
file_ = os.path.join(portage.settings['PKGDIR'], 'Packages')
statinfo = os.stat(file_)
size1 = statinfo.st_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)
print()
statinfo = os.stat(file_)
clean_size = size1 - statinfo.st_size
self.controller(clean_size, "Packages Index", file_, "Index")
return clean_size
|