* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2024-05-03 5:42 Sam James
0 siblings, 0 replies; 43+ messages in thread
From: Sam James @ 2024-05-03 5:42 UTC (permalink / raw
To: gentoo-commits
commit: 7a5a2f540bc4776121d08d331b141d897eac92f6
Author: Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Fri May 3 05:41:46 2024 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri May 3 05:41:46 2024 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=7a5a2f54
eclean: dist: fix crash with excluded items
Bug: https://bugs.gentoo.org/915055
Signed-off-by: Sam James <sam <AT> gentoo.org>
pym/gentoolkit/eclean/cli.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/pym/gentoolkit/eclean/cli.py b/pym/gentoolkit/eclean/cli.py
index 52ddf2a..94f87f4 100644
--- a/pym/gentoolkit/eclean/cli.py
+++ b/pym/gentoolkit/eclean/cli.py
@@ -623,6 +623,7 @@ def doAction(action, options, exclude={}, output=None):
elif not options["quiet"]:
output.einfo("Your " + action + " directory was already clean.")
if saved and not options["quiet"]:
+ verb = "would be"
print()
print(
pp.emph(" The following ")
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2024-05-03 5:40 Sam James
0 siblings, 0 replies; 43+ messages in thread
From: Sam James @ 2024-05-03 5:40 UTC (permalink / raw
To: gentoo-commits
commit: 607d7d58638b5f5b085ec861ffb8f751bbe01743
Author: Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Fri May 3 05:25:20 2024 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri May 3 05:25:20 2024 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=607d7d58
eclean: dist: fix typo in comment
Signed-off-by: Sam James <sam <AT> gentoo.org>
pym/gentoolkit/eclean/search.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index 7f050ee..d38b88e 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -641,8 +641,8 @@ def findPackages(
dead_binpkgs: dict[str, list[str]] = {}
keep_binpkgs = {}
- # FEATURES=pkgdir-index-trusted is now on by default which makes portages inavlids
- # inaccessible
+ # FEATURES=pkgdir-index-trusted is now on by default which makes Portage's
+ # invalids inaccessible
settings = var_dbapi.settings
bin_dbapi = portage.binarytree(pkgdir=pkgdir, settings=settings).dbapi
populate_kwargs = {}
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2024-05-03 5:40 Sam James
0 siblings, 0 replies; 43+ messages in thread
From: Sam James @ 2024-05-03 5:40 UTC (permalink / raw
To: gentoo-commits
commit: bb6faf478f7e64d75224e55c3b81deb843dc9749
Author: Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Fri May 3 05:40:05 2024 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri May 3 05:40:05 2024 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=bb6faf47
eclean: dist: fix printing VCS clean items with --quiet
Bug: https://bugs.gentoo.org/928951
Signed-off-by: Sam James <sam <AT> gentoo.org>
pym/gentoolkit/eclean/output.py | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/pym/gentoolkit/eclean/output.py b/pym/gentoolkit/eclean/output.py
index 75f7b02..04fb493 100644
--- a/pym/gentoolkit/eclean/output.py
+++ b/pym/gentoolkit/eclean/output.py
@@ -138,8 +138,11 @@ class OutputControl:
print(self.prettySize(size, True), self.pkg_color(key))
elif self.options["pretend"] or self.options["interactive"]:
# file list mode
- for file_ in clean_list:
- print(file_)
+ if file_type == "checkout":
+ print(clean_list)
+ else:
+ for file_ in clean_list:
+ print(file_)
if self.options["pretend"]:
return False
elif (
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2024-05-03 5:40 Sam James
0 siblings, 0 replies; 43+ messages in thread
From: Sam James @ 2024-05-03 5:40 UTC (permalink / raw
To: gentoo-commits
commit: a239275df515741aa20289d7fea067b83ab8daf8
Author: Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Fri May 3 05:25:39 2024 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri May 3 05:26:17 2024 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=a239275d
eclean: dist: fix copyright headers
Signed-off-by: Sam James <sam <AT> gentoo.org>
pym/gentoolkit/eclean/clean.py | 2 +-
pym/gentoolkit/eclean/exclude.py | 2 +-
pym/gentoolkit/eclean/output.py | 2 +-
pym/gentoolkit/eclean/search.py | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/pym/gentoolkit/eclean/clean.py b/pym/gentoolkit/eclean/clean.py
index 0347f1d..918d4dc 100644
--- a/pym/gentoolkit/eclean/clean.py
+++ b/pym/gentoolkit/eclean/clean.py
@@ -1,6 +1,6 @@
#!/usr/bin/python
-# Copyright 2003-2010 Gentoo Foundation
+# Copyright 2003-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
diff --git a/pym/gentoolkit/eclean/exclude.py b/pym/gentoolkit/eclean/exclude.py
index c731ec0..c20574c 100644
--- a/pym/gentoolkit/eclean/exclude.py
+++ b/pym/gentoolkit/eclean/exclude.py
@@ -1,6 +1,6 @@
#!/usr/bin/python
-# Copyright 2003-2010 Gentoo Foundation
+# Copyright 2003-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
diff --git a/pym/gentoolkit/eclean/output.py b/pym/gentoolkit/eclean/output.py
index ebba499..75f7b02 100644
--- a/pym/gentoolkit/eclean/output.py
+++ b/pym/gentoolkit/eclean/output.py
@@ -1,6 +1,6 @@
#!/usr/bin/python
-# Copyright 2003-2010 Gentoo Foundation
+# Copyright 2003-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index d38b88e..aaa67dc 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -1,6 +1,6 @@
#!/usr/bin/python
-# Copyright 2003-2010 Gentoo Foundation
+# Copyright 2003-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2024-05-03 5:11 Sam James
0 siblings, 0 replies; 43+ messages in thread
From: Sam James @ 2024-05-03 5:11 UTC (permalink / raw
To: gentoo-commits
commit: 7405fdccd73364662089f1001231bf8c24916ca3
Author: Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Fri May 3 05:10:41 2024 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri May 3 05:10:41 2024 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=7405fdcc
eclean: dist: fix operating on an empty directory
Zac pointed out that not all return paths had been updated.
Bug: https://bugs.gentoo.org/928138
Fixes: 87912b460c533f8b010617018fdad42246db85f0
Signed-off-by: Sam James <sam <AT> gentoo.org>
pym/gentoolkit/eclean/search.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index b696b63..7f050ee 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -115,10 +115,11 @@ class DistfilesSearch:
pkgs = {}
saved = {}
deprecated = {}
+ vcs = {}
installed_included = False
# Check if DISTDIR is empty, return early
if not os.listdir(_distdir):
- return clean_me, saved, deprecated
+ return clean_me, saved, deprecated, vcs
# create a big CPV->SRC_URI dict of packages
# whose distfiles should be kept
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2024-02-18 2:19 Brian Dolbec
0 siblings, 0 replies; 43+ messages in thread
From: Brian Dolbec @ 2024-02-18 2:19 UTC (permalink / raw
To: gentoo-commits
commit: f410ba4ae94c801564f5b0bd3003e429adf2b12e
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sat Feb 17 02:34:39 2024 +0000
Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Sun Feb 18 02:16:28 2024 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=f410ba4a
eclean/search.py: Fix find_packages docstring for invalid_paths
Signed-off-by: Brian Dolbec <dolsen <AT> gentoo.org>
pym/gentoolkit/eclean/search.py | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index 47df3a1..b696b63 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -591,7 +591,6 @@ def findPackages(
) -> tuple[dict[str, list[str]], dict[str, list[str]]]:
"""Find obsolete binary packages.
- @param invalid_paths:
@param options: dict of options determined at runtime
@type options: dict
@param exclude: exclusion dict (as defined in the exclude.parseExcludeFile class)
@@ -610,8 +609,8 @@ def findPackages(
@param var_dbapi: defaults to portage.db[portage.root]["vartree"].dbapi
Can be overridden for tests.
- @return binary packages to remove. e.g. {'cat/pkg-ver': [filepath]}
- @rtype: dict
+ @return binary packages to remove. e.g. {'cat/pkg-ver': [filepath]}, invalid_paths
+ @rtype: dict, dict
"""
if exclude is None:
exclude = {}
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2024-02-18 2:19 Brian Dolbec
0 siblings, 0 replies; 43+ messages in thread
From: Brian Dolbec @ 2024-02-18 2:19 UTC (permalink / raw
To: gentoo-commits
commit: 70cb55fa5fd2af7c7e46c94dc423a96bbedd83a5
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sun Feb 4 21:00:49 2024 +0000
Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Sun Feb 18 02:16:03 2024 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=70cb55fa
eclean: Handle InvalidDepstring info in _deps_equal
Add try/except pair to _deps_equal() to output relavent details
causing the exception in order to aid the user to fix the issue.
Mark binpkg dep failures as a non match for possible deletion.
Make the ebuild dep failure a warning only, return True to save
the binpkg.
Add parameter docstring info
Bug: https://bugs.gentoo.org/923439
Signed-off-by: Brian Dolbec <dolsen <AT> gentoo.org>
pym/gentoolkit/eclean/search.py | 54 ++++++++++++++++++++++++++++++++++++-----
1 file changed, 48 insertions(+), 6 deletions(-)
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index 2eebcfd..47df3a1 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -17,6 +17,7 @@ import portage
from portage.dep import Atom, use_reduce
from portage.dep._slot_operator import strip_slots
from portage.dep.libc import find_libc_deps, strip_libc_deps
+from portage.exception import InvalidDependString
import gentoolkit.pprinter as pp
from gentoolkit.eclean.exclude import (
@@ -526,13 +527,51 @@ class DistfilesSearch:
return clean_me, saved
-def _deps_equal(deps_a, eapi_a, deps_b, eapi_b, libc_deps, uselist=None):
- """Compare two dependency lists given a set of USE flags"""
+def _deps_equal(deps_a, eapi_a, deps_b, eapi_b, libc_deps, uselist=None, cpv=None):
+ """Compare two dependency lists given a set of USE flags
+
+ @param deps_a: binpkg DEPEND string (for InvalidDependString errors)
+ @rtype: string
+ @param eapi_a: EAPI
+ @rtype: string
+ @param deps_b: ebuild DEPEND string (for InvalidDependString errors)
+ @rtype: string
+ @param eapi_b: EAPI
+ @rtype: string
+ @param libc_deps: List of libc packages (or atoms if realized is passed).
+ @rtype: list
+ @param uselist: use flag list
+ @rtype: frozenset
+ @param cpv: Cat/Pkg-version
+ @rtype: string
+ """
if deps_a == deps_b:
return True
+ try:
+ deps_a = use_reduce(deps_a, uselist=uselist, eapi=eapi_a, token_class=Atom)
+ except InvalidDependString: # the binpkg depend string is bad
+ print(
+ pp.warn(
+ "Warning: Invalid binpkg DEPEND string found for: %s, %s"
+ " | tagging for removal" % (cpv, deps_a)
+ ),
+ file=sys.stderr,
+ )
+ return False
+ try:
+ deps_b = use_reduce(deps_b, uselist=uselist, eapi=eapi_b, token_class=Atom)
+ except InvalidDependString as er: # the ebuild depend string is bad
+ print(
+ pp.warn("Warning: Invalid ebuild DEPEND String found for: %s" % cpv),
+ file=sys.stderr,
+ )
+ print(
+ pp.warn("Warning: DEPEND string for ebuild: %s" % deps_b),
+ file=sys.stderr,
+ )
+ print(er, file=sys.stderr)
+ return True
- deps_a = use_reduce(deps_a, uselist=uselist, eapi=eapi_a, token_class=Atom)
- deps_b = use_reduce(deps_b, uselist=uselist, eapi=eapi_b, token_class=Atom)
strip_libc_deps(deps_a, libc_deps)
strip_libc_deps(deps_b, libc_deps)
strip_slots(deps_a)
@@ -656,13 +695,16 @@ def findPackages(
binpkg_metadata = dict(zip(keys, bin_dbapi.aux_get(cpv, keys)))
ebuild_metadata = dict(zip(keys, port_dbapi.aux_get(cpv, keys)))
+ deps_binpkg = " ".join(binpkg_metadata[key] for key in dep_keys)
+ deps_ebuild = " ".join(ebuild_metadata[key] for key in dep_keys)
if _deps_equal(
- " ".join(binpkg_metadata[key] for key in dep_keys),
+ deps_binpkg,
binpkg_metadata["EAPI"],
- " ".join(ebuild_metadata[key] for key in dep_keys),
+ deps_ebuild,
ebuild_metadata["EAPI"],
libc_deps,
frozenset(binpkg_metadata["USE"].split()),
+ cpv,
):
continue
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2024-01-19 7:03 Sam James
0 siblings, 0 replies; 43+ messages in thread
From: Sam James @ 2024-01-19 7:03 UTC (permalink / raw
To: gentoo-commits
commit: bd9c485781584e951e703ee191308db23506af9a
Author: Siddhanth Rathod <xsiddhanthrathod <AT> gmail <DOT> com>
AuthorDate: Fri Jan 19 06:59:55 2024 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Jan 19 07:03:39 2024 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=bd9c4857
eclean: handle when git3-src doesn't exist (port to Pathlib)
Followup to c584d83705a2ca08961e4f0b541442fdf9a75947.
Bug: https://bugs.gentoo.org/922455
Signed-off-by: Siddhanth Rathod <xsiddhanthrathod <AT> gmail.com>
Closes: https://github.com/gentoo/gentoolkit/pull/41
Signed-off-by: Sam James <sam <AT> gentoo.org>
pym/gentoolkit/eclean/search.py | 50 ++++++++++++++++++++---------------------
1 file changed, 25 insertions(+), 25 deletions(-)
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index 3610920..2eebcfd 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -5,12 +5,13 @@
import os
+import shlex
import stat
import sys
-import shlex
from functools import partial
from inspect import signature
-from typing import Optional
+from pathlib import Path
+from typing import Optional, Set
import portage
from portage.dep import Atom, use_reduce
@@ -136,7 +137,7 @@ class DistfilesSearch:
# gather the files to be cleaned
self.output("...checking limits for %d ebuild sources" % len(pkgs))
- vcs = self.vcs_check(_distdir)
+ vcs = self.vcs_check(Path(_distdir))
checks = self._get_default_checks(size_limit, time_limit, exclude, destructive)
checks.extend(extra_checks)
clean_me = self._check_limits(_distdir, checks, clean_me)
@@ -335,31 +336,30 @@ class DistfilesSearch:
deprecated.update(_deprecated)
return pkgs, deprecated
- def vcs_check(self, distdir):
+ def vcs_check(self, distdir: Path) -> Set:
"""Checks $DISTDIR/vcs-src for checkouts which are not in the vardb"""
# For now we only check git
- vcs_src = os.path.join(distdir, "git3-src")
- if not os.path.exists(vcs_src):
- return {}
-
+ vcs_src = distdir / "git3-src"
expected_dirs = set()
- for i in set(self.vardb.cpv_all()):
- if "live" in self.vardb.aux_get(i, ["PROPERTIES"]):
- try:
- # try to get the dir names of the cloned
- # repos from the environment file.
- vcs_dir = {
- i.split("=")[-1].strip('"')
- for i in shlex.split(
- self.vardb._aux_env_search(i, ["EVCS_STORE_DIRS"])[
- "EVCS_STORE_DIRS"
- ].strip("()")
- )
- }
- expected_dirs.update(vcs_dir)
- except KeyError:
- pass
- actual_dirs = {os.path.join(vcs_src, i) for i in os.listdir(vcs_src)}
+ actual_dirs = set()
+ if vcs_src.is_dir():
+ for i in set(self.vardb.cpv_all()):
+ if "live" in self.vardb.aux_get(i, ["PROPERTIES"]):
+ try:
+ # try to get the dir names of the cloned
+ # repos from the environment file.
+ vcs_dir = {
+ i.split("=")[-1].strip('"')
+ for i in shlex.split(
+ self.vardb._aux_env_search(i, ["EVCS_STORE_DIRS"])[
+ "EVCS_STORE_DIRS"
+ ].strip("()")
+ )
+ }
+ expected_dirs.update(vcs_dir)
+ except KeyError:
+ pass
+ actual_dirs = {str(i) for i in vcs_src.iterdir() if i.is_dir()}
return actual_dirs.difference(expected_dirs)
def _fetch_restricted(self, pkgs_, cpvs):
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2024-01-19 6:15 Sam James
0 siblings, 0 replies; 43+ messages in thread
From: Sam James @ 2024-01-19 6:15 UTC (permalink / raw
To: gentoo-commits
commit: c584d83705a2ca08961e4f0b541442fdf9a75947
Author: Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Fri Jan 19 06:14:43 2024 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Jan 19 06:15:12 2024 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=c584d837
eclean: fix eclean-dist with no git3-src dir
Bug: https://bugs.gentoo.org/922455
Signed-off-by: Sam James <sam <AT> gentoo.org>
pym/gentoolkit/eclean/search.py | 3 +++
1 file changed, 3 insertions(+)
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index f03c521..3610920 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -339,6 +339,9 @@ class DistfilesSearch:
"""Checks $DISTDIR/vcs-src for checkouts which are not in the vardb"""
# For now we only check git
vcs_src = os.path.join(distdir, "git3-src")
+ if not os.path.exists(vcs_src):
+ return {}
+
expected_dirs = set()
for i in set(self.vardb.cpv_all()):
if "live" in self.vardb.aux_get(i, ["PROPERTIES"]):
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2024-01-12 19:16 Matt Turner
0 siblings, 0 replies; 43+ messages in thread
From: Matt Turner @ 2024-01-12 19:16 UTC (permalink / raw
To: gentoo-commits
commit: a3e56252cdde2f4fb51766c580c0137f28843510
Author: Matt Turner <mattst88 <AT> gentoo <DOT> org>
AuthorDate: Thu Jan 11 21:31:12 2024 +0000
Commit: Matt Turner <mattst88 <AT> gentoo <DOT> org>
CommitDate: Fri Jan 12 19:15:28 2024 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=a3e56252
eclean: Strip libc dependencies from --changed-deps calculations
Closes: https://bugs.gentoo.org/921679
Closes: https://github.com/gentoo/gentoolkit/pull/38
Signed-off-by: Matt Turner <mattst88 <AT> gentoo.org>
pym/gentoolkit/eclean/search.py | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index de424c5..f03c521 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -15,6 +15,7 @@ from typing import Optional
import portage
from portage.dep import Atom, use_reduce
from portage.dep._slot_operator import strip_slots
+from portage.dep.libc import find_libc_deps, strip_libc_deps
import gentoolkit.pprinter as pp
from gentoolkit.eclean.exclude import (
@@ -522,13 +523,15 @@ class DistfilesSearch:
return clean_me, saved
-def _deps_equal(deps_a, eapi_a, deps_b, eapi_b, uselist=None):
+def _deps_equal(deps_a, eapi_a, deps_b, eapi_b, libc_deps, uselist=None):
"""Compare two dependency lists given a set of USE flags"""
if deps_a == deps_b:
return True
deps_a = use_reduce(deps_a, uselist=uselist, eapi=eapi_a, token_class=Atom)
deps_b = use_reduce(deps_b, uselist=uselist, eapi=eapi_b, token_class=Atom)
+ strip_libc_deps(deps_a, libc_deps)
+ strip_libc_deps(deps_b, libc_deps)
strip_slots(deps_a)
strip_slots(deps_b)
return deps_a == deps_b
@@ -583,6 +586,8 @@ def findPackages(
print(pp.error("Error: %s" % str(er)), file=sys.stderr)
exit(1)
+ libc_deps = find_libc_deps(var_dbapi, False)
+
# Create a dictionary of all installed packages
if destructive and package_names:
installed = dict.fromkeys(var_dbapi.cp_all())
@@ -653,6 +658,7 @@ def findPackages(
binpkg_metadata["EAPI"],
" ".join(ebuild_metadata[key] for key in dep_keys),
ebuild_metadata["EAPI"],
+ libc_deps,
frozenset(binpkg_metadata["USE"].split()),
):
continue
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2023-12-03 7:51 Sam James
0 siblings, 0 replies; 43+ messages in thread
From: Sam James @ 2023-12-03 7:51 UTC (permalink / raw
To: gentoo-commits
commit: 87912b460c533f8b010617018fdad42246db85f0
Author: Siddhanth Rathod <xsiddhanthrathod <AT> gmail <DOT> com>
AuthorDate: Thu Sep 21 20:20:15 2023 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sun Dec 3 07:51:44 2023 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=87912b46
Enhancement: eclean-dist handle git checkouts
A new feature for eclean-dist to clean git3-src.
Optionally, cleaning the vcs-src can be skipped with --skip-vcs.
Bug: https://bugs.gentoo.org/622938
Signed-off-by: Siddhanth Rathod <xsiddhanthrathod <AT> gmail.com>
Closes: https://github.com/gentoo/gentoolkit/pull/33
Signed-off-by: Sam James <sam <AT> gentoo.org>
pym/gentoolkit/eclean/clean.py | 35 ++++++++++++++++++++++++++++++++--
pym/gentoolkit/eclean/cli.py | 42 ++++++++++++++++++++++++++++-------------
pym/gentoolkit/eclean/search.py | 28 ++++++++++++++++++++++++++-
3 files changed, 89 insertions(+), 16 deletions(-)
diff --git a/pym/gentoolkit/eclean/clean.py b/pym/gentoolkit/eclean/clean.py
index 92449b4..0347f1d 100644
--- a/pym/gentoolkit/eclean/clean.py
+++ b/pym/gentoolkit/eclean/clean.py
@@ -5,6 +5,7 @@
import os
+import shutil
import sys
import gentoolkit.pprinter as pp
@@ -25,7 +26,7 @@ class CleanUp:
self.controller = controller
self.quiet = quiet
- def clean_dist(self, clean_dict):
+ def clean_dist(self, clean_dict, vcs):
"""Calculate size of each entry for display, prompt user if needed,
delete files if approved and return the total size of files that
have been deleted.
@@ -41,6 +42,7 @@ class CleanUp:
for key in sorted(clean_dict):
clean_size += self._clean_files(clean_dict[key], key, file_type)
# return total size of deleted or to delete files
+ clean_size += self._clean_vcs_src(vcs)
return clean_size
def clean_pkgs(self, clean_dict, pkgdir):
@@ -74,7 +76,7 @@ class CleanUp:
# return total size of deleted or to delete files
return clean_size
- def pretend_clean(self, clean_dict):
+ def pretend_clean(self, clean_dict, vcs={}):
"""Shortcut function that calculates total space savings
for the files in clean_dict.
@@ -85,6 +87,8 @@ class CleanUp:
file_type = "file"
clean_size = 0
# tally all entries one by one; sorting helps reading
+ if vcs:
+ clean_size += self._clean_vcs_src(vcs, pretend=True)
for key in sorted(clean_dict):
key_size = self._get_size(clean_dict[key])
self.controller(key_size, key, clean_dict[key], file_type)
@@ -153,3 +157,30 @@ class CleanUp:
print(pp.error("Could not delete " + file_), file=sys.stderr)
print(pp.error("Error: %s" % str(er)), file=sys.stderr)
return clean_size
+
+ def _clean_vcs_src(self, deprecated_vcs, pretend=False):
+ clean_size = 0
+ for checkout in deprecated_vcs:
+ csize = 0
+ for path, dirs, files in os.walk(checkout):
+ for f in files:
+ fp = os.path.join(path, f)
+ try:
+ statinfo = os.stat(fp)
+ except OSError as er:
+ print(
+ pp.error("Could not get stat info for:" + fp),
+ file=sys.stderr,
+ )
+ print(pp.error("Error: %s" % str(er)), file=sys.stderr)
+ clean_size += statinfo.st_size
+ csize += statinfo.st_size
+
+ try:
+ self.controller(csize, checkout, checkout, "checkout")
+ if not pretend:
+ shutil.rmtree(checkout)
+ except OSError as er:
+ print(pp.error("Could not delete " + checkout), file=sys.stderr)
+ print(pp.error("Error: %s" % str(er)), file=sys.stderr)
+ return clean_size
diff --git a/pym/gentoolkit/eclean/cli.py b/pym/gentoolkit/eclean/cli.py
index e3dd540..52ddf2a 100644
--- a/pym/gentoolkit/eclean/cli.py
+++ b/pym/gentoolkit/eclean/cli.py
@@ -13,25 +13,25 @@ __version__ = "@VERSION@"
__productname__ = "eclean"
__description__ = "A cleaning tool for Gentoo distfiles and binaries."
+import getopt
import os
-import sys
import re
+import sys
import time
-import getopt
import portage
-from portage.output import white, yellow, turquoise, green, red
+from portage.output import green, red, turquoise, white, yellow
import gentoolkit.pprinter as pp
+from gentoolkit.eclean.clean import CleanUp
+from gentoolkit.eclean.exclude import ParseExcludeFileException, parseExcludeFile
+from gentoolkit.eclean.output import OutputControl
from gentoolkit.eclean.search import (
DistfilesSearch,
findPackages,
- port_settings,
pkgdir,
+ port_settings,
)
-from gentoolkit.eclean.exclude import parseExcludeFile, ParseExcludeFileException
-from gentoolkit.eclean.clean import CleanUp
-from gentoolkit.eclean.output import OutputControl
# from gentoolkit.eclean.dbapi import Dbapi
from gentoolkit.eprefix import EPREFIX
@@ -309,6 +309,10 @@ def printUsage(_error=None, help=None, unresolved_invalids=None):
" " + '"two hundreds kilobytes", etc. Units are: ' + "G, M, K and B.",
file=out,
)
+ print(
+ yellow(" --skip-vcs") + " - skip cleaning of vcs_src ",
+ file=out,
+ )
print(file=out)
print(
"More detailed instruction can be found in",
@@ -420,6 +424,8 @@ def parseArgs(options={}):
options["unique-use"] = True
elif o in ("--no-clean-invalid"):
options["no-clean-invalid"] = True
+ elif o in ("--skip-vcs"):
+ options["skip-vcs"] = True
else:
return_code = False
# sanity check of --deep only options:
@@ -457,7 +463,11 @@ def parseArgs(options={}):
"verbose",
]
getopt_options["short"]["distfiles"] = "fs:"
- getopt_options["long"]["distfiles"] = ["fetch-restricted", "size-limit="]
+ getopt_options["long"]["distfiles"] = [
+ "fetch-restricted",
+ "size-limit=",
+ "skip-vcs",
+ ]
getopt_options["short"]["packages"] = "iu"
getopt_options["long"]["packages"] = [
"ignore-failure",
@@ -481,6 +491,7 @@ def parseArgs(options={}):
options["ignore-failure"] = False
options["no-clean-invalid"] = False
options["unique-use"] = False
+ options["skip-vcs"] = False
# if called by a well-named symlink, set the action accordingly:
action = None
# temp print line to ensure it is the svn/branch code running, etc..
@@ -546,6 +557,7 @@ def doAction(action, options, exclude={}, output=None):
files_type = "distfiles"
saved = {}
deprecated = {}
+ vcs = []
# find files to delete, depending on the action
if not options["quiet"]:
output.einfo("Building file list for " + action + " cleaning...")
@@ -567,7 +579,7 @@ def doAction(action, options, exclude={}, output=None):
# portdb=Dbapi(portage.db[portage.root]["porttree"].dbapi),
# var_dbapi=Dbapi(portage.db[portage.root]["vartree"].dbapi),
)
- clean_me, saved, deprecated = engine.findDistfiles(
+ clean_me, saved, deprecated, vcs = engine.findDistfiles(
exclude=exclude,
destructive=options["destructive"],
fetch_restricted=options["fetch-restricted"],
@@ -581,7 +593,7 @@ def doAction(action, options, exclude={}, output=None):
cleaner = CleanUp(output.progress_controller, options["quiet"])
# actually clean files if something was found
- if clean_me:
+ if clean_me or vcs:
# verbose pretend message
if options["pretend"] and not options["quiet"]:
output.einfo("Here are the " + files_type + " that would be deleted:")
@@ -590,9 +602,13 @@ def doAction(action, options, exclude={}, output=None):
output.einfo("Cleaning " + files_type + "...")
# do the cleanup, and get size of deleted files
if options["pretend"]:
- clean_size = cleaner.pretend_clean(clean_me)
+ if options["skip-vcs"]:
+ vcs = {}
+ clean_size = cleaner.pretend_clean(clean_me, vcs)
elif action in ["distfiles"]:
- clean_size = cleaner.clean_dist(clean_me)
+ if options["skip-vcs"]:
+ vcs = {}
+ clean_size = cleaner.clean_dist(clean_me, vcs)
elif action in ["packages"]:
clean_size = cleaner.clean_pkgs(clean_me, pkgdir)
# vocabulary for final message
@@ -602,7 +618,7 @@ def doAction(action, options, exclude={}, output=None):
verb = "were"
# display freed space
if not options["quiet"]:
- output.total("normal", clean_size, len(clean_me), verb, action)
+ output.total("normal", clean_size, len(clean_me) + len(vcs), verb, action)
# nothing was found
elif not options["quiet"]:
output.einfo("Your " + action + " directory was already clean.")
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index 77f16af..de424c5 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -7,6 +7,7 @@
import os
import stat
import sys
+import shlex
from functools import partial
from inspect import signature
from typing import Optional
@@ -134,6 +135,7 @@ class DistfilesSearch:
# gather the files to be cleaned
self.output("...checking limits for %d ebuild sources" % len(pkgs))
+ vcs = self.vcs_check(_distdir)
checks = self._get_default_checks(size_limit, time_limit, exclude, destructive)
checks.extend(extra_checks)
clean_me = self._check_limits(_distdir, checks, clean_me)
@@ -148,7 +150,7 @@ class DistfilesSearch:
+ "%s remaining candidates to clean" % len(clean_me)
)
clean_me, saved = self._check_excludes(exclude, clean_me)
- return clean_me, saved, deprecated
+ return clean_me, saved, deprecated, vcs
# begin _check_limits code block
@@ -332,6 +334,30 @@ class DistfilesSearch:
deprecated.update(_deprecated)
return pkgs, deprecated
+ def vcs_check(self, distdir):
+ """Checks $DISTDIR/vcs-src for checkouts which are not in the vardb"""
+ # For now we only check git
+ vcs_src = os.path.join(distdir, "git3-src")
+ expected_dirs = set()
+ for i in set(self.vardb.cpv_all()):
+ if "live" in self.vardb.aux_get(i, ["PROPERTIES"]):
+ try:
+ # try to get the dir names of the cloned
+ # repos from the environment file.
+ vcs_dir = {
+ i.split("=")[-1].strip('"')
+ for i in shlex.split(
+ self.vardb._aux_env_search(i, ["EVCS_STORE_DIRS"])[
+ "EVCS_STORE_DIRS"
+ ].strip("()")
+ )
+ }
+ expected_dirs.update(vcs_dir)
+ except KeyError:
+ pass
+ actual_dirs = {os.path.join(vcs_src, i) for i in os.listdir(vcs_src)}
+ return actual_dirs.difference(expected_dirs)
+
def _fetch_restricted(self, pkgs_, cpvs):
"""perform fetch restricted non-destructive source
filename lookups
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2023-10-08 3:28 Sam James
0 siblings, 0 replies; 43+ messages in thread
From: Sam James @ 2023-10-08 3:28 UTC (permalink / raw
To: gentoo-commits
commit: a12d24f99d03c3c4975d84d63083449cd8487ef9
Author: Siddhanth Rathod <xsiddhanthrathod <AT> gmail <DOT> com>
AuthorDate: Thu Oct 5 13:34:59 2023 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sun Oct 8 03:27:53 2023 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=a12d24f9
eclean: pkg: suppress invalid binary error
[sam: Note that this needs https://github.com/gentoo/portage/pull/1123 on
the Portage side.]
Bug: https://bugs.gentoo.org/900224
Signed-off-by: Siddhanth Rathod <xsiddhanthrathod <AT> gmail.com>
Closes: https://github.com/gentoo/gentoolkit/pull/35
Signed-off-by: Sam James <sam <AT> gentoo.org>
pym/gentoolkit/eclean/search.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index ce8fe37..77f16af 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -572,8 +572,11 @@ def findPackages(
# inaccessible
settings = var_dbapi.settings
bin_dbapi = portage.binarytree(pkgdir=pkgdir, settings=settings).dbapi
+ populate_kwargs = {}
+ if "invalid_errors" in signature(bin_dbapi.bintree.populate).parameters:
+ populate_kwargs["invalid_errors"] = False
if "force_reindex" in signature(bin_dbapi.bintree.populate).parameters:
- bin_dbapi.bintree.populate(force_reindex=True)
+ bin_dbapi.bintree.populate(force_reindex=True, **populate_kwargs)
for cpv in bin_dbapi.cpv_all():
cp = portage.cpv_getkey(cpv)
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2023-10-08 3:28 Sam James
0 siblings, 0 replies; 43+ messages in thread
From: Sam James @ 2023-10-08 3:28 UTC (permalink / raw
To: gentoo-commits
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)
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2023-09-29 7:20 Sam James
0 siblings, 0 replies; 43+ messages in thread
From: Sam James @ 2023-09-29 7:20 UTC (permalink / raw
To: gentoo-commits
commit: e49cc3493ab77678a740bf8a27cf22e77e061409
Author: Siddhanth Rathod <xsiddhanthrathod <AT> gmail <DOT> com>
AuthorDate: Thu Sep 28 18:54:44 2023 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Sep 29 07:20:18 2023 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=e49cc349
eclean-pkg: fix compatibility with FEATURES=pkgdir-index-trusted
Portage recently enabled FEATURES=pkgdir-index-trusted by default which breaks
the eclean-invalids feature.
Force reindexing after cleaning up to fix this.
See-also: https://github.com/gentoo/portage/commit/3bc7bfef51d88fd716e882d3931f2873e3493e01
Bug: https://bugs.gentoo.org/889300
Bug: https://bugs.gentoo.org/900224
Signed-off-by: Siddhanth Rathod <xsiddhanthrathod <AT> gmail.com>
Closes: https://github.com/gentoo/gentoolkit/pull/34
Signed-off-by: Sam James <sam <AT> gentoo.org>
pym/gentoolkit/eclean/search.py | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index a2ac0ce..ce8fe37 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -8,6 +8,7 @@ import os
import stat
import sys
from functools import partial
+from inspect import signature
from typing import Optional
import portage
@@ -16,13 +17,12 @@ from portage.dep._slot_operator import strip_slots
import gentoolkit.pprinter as pp
from gentoolkit.eclean.exclude import (
- exclDictMatchCP,
exclDictExpand,
exclDictExpandPkgname,
+ exclDictMatchCP,
exclMatchFilename,
)
-
# Misc. shortcuts to some portage stuff:
port_settings = portage.settings
pkgdir = port_settings["PKGDIR"]
@@ -568,7 +568,12 @@ def findPackages(
dead_binpkgs: dict[str, list[str]] = {}
keep_binpkgs = {}
- bin_dbapi = portage.binarytree(pkgdir=pkgdir, settings=var_dbapi.settings).dbapi
+ # FEATURES=pkgdir-index-trusted is now on by default which makes portages inavlids
+ # inaccessible
+ settings = var_dbapi.settings
+ bin_dbapi = portage.binarytree(pkgdir=pkgdir, settings=settings).dbapi
+ if "force_reindex" in signature(bin_dbapi.bintree.populate).parameters:
+ bin_dbapi.bintree.populate(force_reindex=True)
for cpv in bin_dbapi.cpv_all():
cp = portage.cpv_getkey(cpv)
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2023-08-24 19:52 Sam James
0 siblings, 0 replies; 43+ messages in thread
From: Sam James @ 2023-08-24 19:52 UTC (permalink / raw
To: gentoo-commits
commit: 9ea9cfe27f3debe4f97f3b04da6681fc3ae11b88
Author: Siddhanth Rathod <xsiddhanthrathod <AT> gmail <DOT> com>
AuthorDate: Thu Aug 24 15:41:35 2023 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Thu Aug 24 19:52:20 2023 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=9ea9cfe2
eclean: Make cleaning invalid default
Bug: https://bugs.gentoo.org/900224
Signed-off-by: Siddhanth Rathod <xsiddhanthrathod <AT> gmail.com>
Closes: https://github.com/gentoo/gentoolkit/pull/31
Signed-off-by: Sam James <sam <AT> gentoo.org>
pym/gentoolkit/eclean/cli.py | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/pym/gentoolkit/eclean/cli.py b/pym/gentoolkit/eclean/cli.py
index 75c5c63..b180641 100644
--- a/pym/gentoolkit/eclean/cli.py
+++ b/pym/gentoolkit/eclean/cli.py
@@ -262,7 +262,8 @@ def printUsage(_error=None, help=None, unresolved_invalids=None):
file=out,
)
print(
- yellow(" -N, --clean-invalid") + " - cleanup invalid binpkgs",
+ yellow(" --no-clean-invalid")
+ + " - Skip cleaning invalid binpkgs",
file=out,
)
print(
@@ -417,8 +418,8 @@ def parseArgs(options={}):
options["ignore-failure"] = True
elif o in ("-u", "--unique-use"):
options["unique-use"] = True
- elif o in ("-N", "--skip-invalid"):
- options["clean-invalid"] = False
+ elif o in ("--no-clean-invalid"):
+ options["no-clean-invalid"] = True
else:
return_code = False
# sanity check of --deep only options:
@@ -457,12 +458,12 @@ def parseArgs(options={}):
]
getopt_options["short"]["distfiles"] = "fs:"
getopt_options["long"]["distfiles"] = ["fetch-restricted", "size-limit="]
- getopt_options["short"]["packages"] = "iNu"
+ getopt_options["short"]["packages"] = "iu"
getopt_options["long"]["packages"] = [
"ignore-failure",
"changed-deps",
- "clean-invalid",
"unique-use",
+ "no-clean-invalid",
]
# set default options, except 'nocolor', which is set in main()
options["interactive"] = False
@@ -478,7 +479,7 @@ def parseArgs(options={}):
options["verbose"] = False
options["changed-deps"] = False
options["ignore-failure"] = False
- options["clean-invalid"] = False
+ options["no-clean-invalid"] = False
options["unique-use"] = False
# if called by a well-named symlink, set the action accordingly:
action = None
@@ -625,7 +626,7 @@ def doAction(action, options, exclude={}, output=None):
output.set_colors("deprecated")
output.list_pkgs(deprecated)
if action in ["packages"]:
- if invalids and options["clean-invalid"]:
+ if invalids and not options["no-clean-invalid"]:
if type(invalids) == list:
printUsage(_error="invalid_paths", unresolved_invalids=invalids)
sys.exit(1)
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2023-08-22 20:54 Sam James
0 siblings, 0 replies; 43+ messages in thread
From: Sam James @ 2023-08-22 20:54 UTC (permalink / raw
To: gentoo-commits
commit: 62ae253a36d77ac238f1dbc47e4757b92456b174
Author: Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Tue Aug 22 20:54:01 2023 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue Aug 22 20:54:01 2023 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=62ae253a
eclean-pkg: placate black
Signed-off-by: Sam James <sam <AT> gentoo.org>
pym/gentoolkit/eclean/cli.py | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/pym/gentoolkit/eclean/cli.py b/pym/gentoolkit/eclean/cli.py
index adc4210..75c5c63 100644
--- a/pym/gentoolkit/eclean/cli.py
+++ b/pym/gentoolkit/eclean/cli.py
@@ -262,8 +262,7 @@ def printUsage(_error=None, help=None, unresolved_invalids=None):
file=out,
)
print(
- yellow(" -N, --clean-invalid")
- + " - cleanup invalid binpkgs",
+ yellow(" -N, --clean-invalid") + " - cleanup invalid binpkgs",
file=out,
)
print(
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2023-08-22 20:52 Sam James
0 siblings, 0 replies; 43+ messages in thread
From: Sam James @ 2023-08-22 20:52 UTC (permalink / raw
To: gentoo-commits
commit: d40b5009c1f73730ad4d68169b1302393cdce8cf
Author: Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Tue Aug 22 20:52:35 2023 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue Aug 22 20:52:35 2023 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=d40b5009
eclean-pkg: fix --help alignment, mention shortopt for clean-invalid
Bug: https://bugs.gentoo.org/900224
Signed-off-by: Sam James <sam <AT> gentoo.org>
pym/gentoolkit/eclean/cli.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pym/gentoolkit/eclean/cli.py b/pym/gentoolkit/eclean/cli.py
index 7591959..adc4210 100644
--- a/pym/gentoolkit/eclean/cli.py
+++ b/pym/gentoolkit/eclean/cli.py
@@ -262,8 +262,8 @@ def printUsage(_error=None, help=None, unresolved_invalids=None):
file=out,
)
print(
- yellow(" --clean-invalid")
- + " - cleanup invalid binpkgs",
+ yellow(" -N, --clean-invalid")
+ + " - cleanup invalid binpkgs",
file=out,
)
print(
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2023-08-22 20:50 Sam James
0 siblings, 0 replies; 43+ messages in thread
From: Sam James @ 2023-08-22 20:50 UTC (permalink / raw
To: gentoo-commits
commit: 2aae0531f51064651240a5957bf724f30f5c0cd1
Author: Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Tue Aug 22 20:49:41 2023 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue Aug 22 20:50:14 2023 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=2aae0531
eclean-pkg: fix --unique-use shortopt
Signed-off-by: Sam James <sam <AT> gentoo.org>
pym/gentoolkit/eclean/cli.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pym/gentoolkit/eclean/cli.py b/pym/gentoolkit/eclean/cli.py
index aa8b20f..7591959 100644
--- a/pym/gentoolkit/eclean/cli.py
+++ b/pym/gentoolkit/eclean/cli.py
@@ -458,7 +458,7 @@ def parseArgs(options={}):
]
getopt_options["short"]["distfiles"] = "fs:"
getopt_options["long"]["distfiles"] = ["fetch-restricted", "size-limit="]
- getopt_options["short"]["packages"] = "iN"
+ getopt_options["short"]["packages"] = "iNu"
getopt_options["long"]["packages"] = [
"ignore-failure",
"changed-deps",
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2023-08-22 20:50 Sam James
0 siblings, 0 replies; 43+ messages in thread
From: Sam James @ 2023-08-22 20:50 UTC (permalink / raw
To: gentoo-commits
commit: 6b17633d0d74cb8fa0eeb46c8ee4f4f05d0e38b2
Author: Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Tue Aug 22 20:43:25 2023 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue Aug 22 20:49:55 2023 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=6b17633d
eclean-pkg: add --clean-invalid to help, fix parsing
* Rename --clean-invalids -> --clean-invalid
* Add --clean-invalid to help
* Make it default-off for now to match the option name (rather than
the help saying --no-clean-invalids).
(I could go either way on what the actual default should be, but this is more
conservative for now.)
* Fix typo in option name.
* Make it a package specific arg, not a global one.
Bug: https://bugs.gentoo.org/900224
Fixes: 204b1abca2c0cbbdad188c7fd4b84452c2f630a0
Fixes: a16d0d4fbfb4614832c4b682b41284a9050af29f
Signed-off-by: Sam James <sam <AT> gentoo.org>
pym/gentoolkit/eclean/cli.py | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
diff --git a/pym/gentoolkit/eclean/cli.py b/pym/gentoolkit/eclean/cli.py
index c8381a0..aa8b20f 100644
--- a/pym/gentoolkit/eclean/cli.py
+++ b/pym/gentoolkit/eclean/cli.py
@@ -261,6 +261,11 @@ def printUsage(_error=None, help=None, unresolved_invalids=None):
+ " - delete packages for which ebuild dependencies have changed",
file=out,
)
+ print(
+ yellow(" --clean-invalid")
+ + " - cleanup invalid binpkgs",
+ file=out,
+ )
print(
yellow(" -i, --ignore-failure")
+ " - ignore failure to locate PKGDIR",
@@ -413,8 +418,8 @@ def parseArgs(options={}):
options["ignore-failure"] = True
elif o in ("-u", "--unique-use"):
options["unique-use"] = True
- elif o in ("-N", "--skip-invalids"):
- options["clean-invalids"] = False
+ elif o in ("-N", "--skip-invalid"):
+ options["clean-invalid"] = False
else:
return_code = False
# sanity check of --deep only options:
@@ -435,7 +440,7 @@ def parseArgs(options={}):
# here are the different allowed command line options (getopt args)
getopt_options = {"short": {}, "long": {}}
- getopt_options["short"]["global"] = "CdDipqe:t:nhVvN"
+ getopt_options["short"]["global"] = "CdDipqe:t:nhVv"
getopt_options["long"]["global"] = [
"nocolor",
"deep",
@@ -450,14 +455,14 @@ def parseArgs(options={}):
"help",
"version",
"verbose",
- "clean-inavlids",
]
getopt_options["short"]["distfiles"] = "fs:"
getopt_options["long"]["distfiles"] = ["fetch-restricted", "size-limit="]
- getopt_options["short"]["packages"] = "i"
+ getopt_options["short"]["packages"] = "iN"
getopt_options["long"]["packages"] = [
"ignore-failure",
"changed-deps",
+ "clean-invalid",
"unique-use",
]
# set default options, except 'nocolor', which is set in main()
@@ -474,8 +479,8 @@ def parseArgs(options={}):
options["verbose"] = False
options["changed-deps"] = False
options["ignore-failure"] = False
+ options["clean-invalid"] = False
options["unique-use"] = False
- options["clean-invalids"] = True
# if called by a well-named symlink, set the action accordingly:
action = None
# temp print line to ensure it is the svn/branch code running, etc..
@@ -621,7 +626,7 @@ def doAction(action, options, exclude={}, output=None):
output.set_colors("deprecated")
output.list_pkgs(deprecated)
if action in ["packages"]:
- if invalids and options["clean-invalids"]:
+ if invalids and options["clean-invalid"]:
if type(invalids) == list:
printUsage(_error="invalid_paths", unresolved_invalids=invalids)
sys.exit(1)
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2023-08-22 20:35 Sam James
0 siblings, 0 replies; 43+ messages in thread
From: Sam James @ 2023-08-22 20:35 UTC (permalink / raw
To: gentoo-commits
commit: 204b1abca2c0cbbdad188c7fd4b84452c2f630a0
Author: Siddhanth Rathod <xsiddhanthrathod <AT> gmail <DOT> com>
AuthorDate: Tue Aug 22 13:55:48 2023 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue Aug 22 20:34:30 2023 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=204b1abc
eclean-pkg: Limit invalid search to 'packages' action
Bug: https://bugs.gentoo.org/900224
Fixes: a16d0d4fbfb4614832c4b682b41284a9050af29f
Signed-off-by: Siddhanth Rathod <xsiddhanthrathod <AT> gmail.com>
Closes: https://github.com/gentoo/gentoolkit/pull/30
Signed-off-by: Sam James <sam <AT> gentoo.org>
pym/gentoolkit/eclean/cli.py | 46 +++++++++++++++++++++++---------------------
1 file changed, 24 insertions(+), 22 deletions(-)
diff --git a/pym/gentoolkit/eclean/cli.py b/pym/gentoolkit/eclean/cli.py
index 40fc4f9..c8381a0 100644
--- a/pym/gentoolkit/eclean/cli.py
+++ b/pym/gentoolkit/eclean/cli.py
@@ -435,7 +435,7 @@ def parseArgs(options={}):
# here are the different allowed command line options (getopt args)
getopt_options = {"short": {}, "long": {}}
- getopt_options["short"]["global"] = "CdDipqe:t:nhVv"
+ getopt_options["short"]["global"] = "CdDipqe:t:nhVvN"
getopt_options["long"]["global"] = [
"nocolor",
"deep",
@@ -450,6 +450,7 @@ def parseArgs(options={}):
"help",
"version",
"verbose",
+ "clean-inavlids",
]
getopt_options["short"]["distfiles"] = "fs:"
getopt_options["long"]["distfiles"] = ["fetch-restricted", "size-limit="]
@@ -619,28 +620,29 @@ def doAction(action, options, exclude={}, output=None):
)
output.set_colors("deprecated")
output.list_pkgs(deprecated)
- if invalids and options["clean-invalids"]:
- if type(invalids) == list:
- printUsage(_error="invalid_paths", unresolved_invalids=invalids)
- sys.exit(1)
- verb = "were"
- if options["pretend"]:
- verb = "would be"
- if not options["quiet"]:
- print()
- print(
- (
- pp.emph(" The following ")
- + red("invalid")
- + pp.emph(" binpkgs were found")
+ if action in ["packages"]:
+ if invalids and options["clean-invalids"]:
+ if type(invalids) == list:
+ printUsage(_error="invalid_paths", unresolved_invalids=invalids)
+ sys.exit(1)
+ verb = "were"
+ if options["pretend"]:
+ verb = "would be"
+ if not options["quiet"]:
+ print()
+ print(
+ (
+ pp.emph(" The following ")
+ + red("invalid")
+ + pp.emph(" binpkgs were found")
+ )
)
- )
- output.set_colors("invalid")
- output.list_pkgs(invalids)
- clean_size = cleaner.clean_pkgs(invalids, pkgdir)
- output.total("invalid", clean_size, len(invalids), verb, action)
- else:
- cleaner.clean_pkgs(invalids, pkgdir)
+ output.set_colors("invalid")
+ output.list_pkgs(invalids)
+ clean_size = cleaner.clean_pkgs(invalids, pkgdir)
+ output.total("invalid", clean_size, len(invalids), verb, action)
+ else:
+ cleaner.clean_pkgs(invalids, pkgdir)
def main():
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2023-08-21 5:16 Sam James
0 siblings, 0 replies; 43+ messages in thread
From: Sam James @ 2023-08-21 5:16 UTC (permalink / raw
To: gentoo-commits
commit: a16d0d4fbfb4614832c4b682b41284a9050af29f
Author: Siddhanth Rathod <xsiddhanthrathod <AT> gmail <DOT> com>
AuthorDate: Thu Mar 23 12:14:36 2023 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Aug 21 05:16:18 2023 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=a16d0d4f
eclean-pkg: deal with invalid binpkgs
Changes required in portage -> https://github.com/gentoo/portage/pull/1016
Bug: https://bugs.gentoo.org/900224
Signed-off-by: Siddhanth Rathod <xsiddhanthrathod <AT> gmail.com>
Signed-off-by: Sam James <sam <AT> gentoo.org>
pym/gentoolkit/eclean/cli.py | 47 +++++++++++++++++++++++++++++++++++++----
pym/gentoolkit/eclean/output.py | 14 ++++++++++++
pym/gentoolkit/eclean/search.py | 9 ++++++--
3 files changed, 64 insertions(+), 6 deletions(-)
diff --git a/pym/gentoolkit/eclean/cli.py b/pym/gentoolkit/eclean/cli.py
index fa94a55..40fc4f9 100644
--- a/pym/gentoolkit/eclean/cli.py
+++ b/pym/gentoolkit/eclean/cli.py
@@ -13,7 +13,6 @@ __version__ = "git"
__productname__ = "eclean"
__description__ = "A cleaning tool for Gentoo distfiles and binaries."
-
import os
import sys
import re
@@ -21,7 +20,7 @@ import time
import getopt
import portage
-from portage.output import white, yellow, turquoise, green
+from portage.output import white, yellow, turquoise, green, red
import gentoolkit.pprinter as pp
from gentoolkit.eclean.search import (
@@ -47,7 +46,7 @@ def printVersion():
print("Distributed under the terms of the GNU General Public License v2")
-def printUsage(_error=None, help=None):
+def printUsage(_error=None, help=None, unresolved_invalids=None):
"""Print help message. May also print partial help to stderr if an
error from {'options','actions'} is specified."""
@@ -63,10 +62,25 @@ def printUsage(_error=None, help=None):
"merged-distfiles-options",
"time",
"size",
+ "invalid_paths",
):
_error = None
if not _error and not help:
help = "all"
+ if _error == "invalid_paths":
+ print(
+ pp.error(
+ "eclean was not able to remove invalid binpkgs due to missing features in the currently installed portage"
+ ),
+ file=out,
+ )
+ print(
+ pp.error("Please remove the following binpkgs manually:"),
+ file=out,
+ )
+ for invalid in unresolved_invalids:
+ print(pp.error(invalid), file=out)
+ return
if _error == "time":
print(pp.error("Wrong time specification"), file=out)
print(
@@ -399,6 +413,8 @@ def parseArgs(options={}):
options["ignore-failure"] = True
elif o in ("-u", "--unique-use"):
options["unique-use"] = True
+ elif o in ("-N", "--skip-invalids"):
+ options["clean-invalids"] = False
else:
return_code = False
# sanity check of --deep only options:
@@ -458,6 +474,7 @@ def parseArgs(options={}):
options["changed-deps"] = False
options["ignore-failure"] = False
options["unique-use"] = False
+ options["clean-invalids"] = True
# if called by a well-named symlink, set the action accordingly:
action = None
# temp print line to ensure it is the svn/branch code running, etc..
@@ -527,7 +544,7 @@ def doAction(action, options, exclude={}, output=None):
if not options["quiet"]:
output.einfo("Building file list for " + action + " cleaning...")
if action == "packages":
- clean_me = findPackages(
+ clean_me, invalids = findPackages(
options,
exclude=exclude,
destructive=options["destructive"],
@@ -602,6 +619,28 @@ def doAction(action, options, exclude={}, output=None):
)
output.set_colors("deprecated")
output.list_pkgs(deprecated)
+ if invalids and options["clean-invalids"]:
+ if type(invalids) == list:
+ printUsage(_error="invalid_paths", unresolved_invalids=invalids)
+ sys.exit(1)
+ verb = "were"
+ if options["pretend"]:
+ verb = "would be"
+ if not options["quiet"]:
+ print()
+ print(
+ (
+ pp.emph(" The following ")
+ + red("invalid")
+ + pp.emph(" binpkgs were found")
+ )
+ )
+ output.set_colors("invalid")
+ output.list_pkgs(invalids)
+ clean_size = cleaner.clean_pkgs(invalids, pkgdir)
+ output.total("invalid", clean_size, len(invalids), verb, action)
+ else:
+ cleaner.clean_pkgs(invalids, pkgdir)
def main():
diff --git a/pym/gentoolkit/eclean/output.py b/pym/gentoolkit/eclean/output.py
index 62777b7..ebba499 100644
--- a/pym/gentoolkit/eclean/output.py
+++ b/pym/gentoolkit/eclean/output.py
@@ -39,6 +39,9 @@ class OutputControl:
self.pkg_color = cpv # green
self.numbers = number # turquoise
self.brace = blue
+ if mode == "invalid":
+ self.pkg_color = red
+ self.numbers = teal
elif mode == "deprecated":
self.pkg_color = yellow
self.numbers = teal # darkgreen
@@ -169,6 +172,17 @@ class OutputControl:
)
print(" ===========")
print(self.prettySize(size, True, red), message)
+ elif mode == "invalid":
+ message = (
+ red(str(num_files))
+ + " invalid binpkgs "
+ + verb
+ + " removed from the "
+ + action
+ + " directory"
+ )
+ print(" ===========")
+ print(self.prettySize(size, True, red), message)
elif mode == "deprecated":
message = (
"Total space from "
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index eb26ac8..a2ac0ce 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -517,9 +517,10 @@ def findPackages(
pkgdir: str = None,
port_dbapi=portage.db[portage.root]["porttree"].dbapi,
var_dbapi=portage.db[portage.root]["vartree"].dbapi,
-) -> dict[str, list[str]]:
+) -> tuple[dict[str, list[str]], dict[str, list[str]]]:
"""Find obsolete binary packages.
+ @param invalid_paths:
@param options: dict of options determined at runtime
@type options: dict
@param exclude: exclusion dict (as defined in the exclude.parseExcludeFile class)
@@ -638,8 +639,12 @@ def findPackages(
binpkg_path = bin_dbapi.bintree.getname(cpv)
dead_binpkgs.setdefault(cpv, []).append(binpkg_path)
+ try:
+ invalid_paths = bin_dbapi.bintree.invalid_paths
+ except AttributeError:
+ invalid_paths = bin_dbapi.bintree.invalids
- return dead_binpkgs
+ return dead_binpkgs, invalid_paths
# vim: set ts=4 sw=4 tw=79:
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2023-08-21 5:16 Sam James
0 siblings, 0 replies; 43+ messages in thread
From: Sam James @ 2023-08-21 5:16 UTC (permalink / raw
To: gentoo-commits
commit: d93602634628ee5f0063b14efa52f98b141d2cc9
Author: Siddhanth Rathod <xsiddhanthrathod <AT> gmail <DOT> com>
AuthorDate: Thu Apr 6 15:17:28 2023 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Aug 21 05:16:18 2023 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=d9360263
eclean: Add type hints
Signed-off-by: Siddhanth Rathod <xsiddhanthrathod <AT> gmail.com>
Signed-off-by: Sam James <sam <AT> gentoo.org>
pym/gentoolkit/eclean/search.py | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index 3288208..eb26ac8 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -8,6 +8,7 @@ import os
import stat
import sys
from functools import partial
+from typing import Optional
import portage
from portage.dep import Atom, use_reduce
@@ -508,15 +509,15 @@ def _deps_equal(deps_a, eapi_a, deps_b, eapi_b, uselist=None):
def findPackages(
- options,
- exclude=None,
- destructive=False,
- time_limit=0,
- package_names=False,
- pkgdir=None,
+ options: dict[str, bool],
+ exclude: Optional[dict] = None,
+ destructive: bool = False,
+ time_limit: Optional[int] = 0,
+ package_names: Optional[bool] = False,
+ pkgdir: str = None,
port_dbapi=portage.db[portage.root]["porttree"].dbapi,
var_dbapi=portage.db[portage.root]["vartree"].dbapi,
-):
+) -> dict[str, list[str]]:
"""Find obsolete binary packages.
@param options: dict of options determined at runtime
@@ -563,7 +564,7 @@ def findPackages(
# Dictionary of binary packages to clean. Organized as cpv->[pkgs] in order
# to support FEATURES=binpkg-multi-instance.
- dead_binpkgs = {}
+ dead_binpkgs: dict[str, list[str]] = {}
keep_binpkgs = {}
bin_dbapi = portage.binarytree(pkgdir=pkgdir, settings=var_dbapi.settings).dbapi
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2022-07-11 7:17 Brian Dolbec
0 siblings, 0 replies; 43+ messages in thread
From: Brian Dolbec @ 2022-07-11 7:17 UTC (permalink / raw
To: gentoo-commits
commit: bf3eb16e451fd1bdee8ef03a0d22e0040e033f19
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Mon Jul 11 06:41:33 2022 +0000
Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Mon Jul 11 06:53:33 2022 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=bf3eb16e
eclean/pkgindex.py: Fix typo in function call
File "/usr/lib/python3.10/site-packages/gentoolkit/eclean/pkgindex.py", line
60, in clean_pkgs_index
if self.get_emaint_binhost():
AttributeError: 'PkgIndex' object has no attribute 'get_emaint_binhost'. Did
you mean: '_get_emaint_binhost'?
Also fix too many parameters in line 68 for the self.controller() call
Bug: https://bugs.gentoo.org/857555
Signed-off-by: Brian Dolbec <dolsen <AT> gentoo.org>
pym/gentoolkit/eclean/pkgindex.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pym/gentoolkit/eclean/pkgindex.py b/pym/gentoolkit/eclean/pkgindex.py
index d0878a1..7d6fade 100644
--- a/pym/gentoolkit/eclean/pkgindex.py
+++ b/pym/gentoolkit/eclean/pkgindex.py
@@ -57,7 +57,7 @@ class PkgIndex:
statinfo = os.stat(file_)
size1 = statinfo.st_size
show_progress = not quiet
- if self.get_emaint_binhost():
+ if self._get_emaint_binhost():
self.taskmaster = TaskHandler(show_progress_bar=show_progress)
tasks = [self.binhost]
self.taskmaster.run_tasks(tasks)
@@ -65,7 +65,7 @@ class PkgIndex:
self.call_emaint()
statinfo = os.stat(file_)
clean_size = size1 - statinfo.st_size
- self.controller("\n", clean_size, "Packages Index", file_, "Index")
+ self.controller(clean_size, "Packages Index", file_, "Index")
return clean_size
def call_emaint(self):
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2022-07-09 22:45 Brian Dolbec
0 siblings, 0 replies; 43+ messages in thread
From: Brian Dolbec @ 2022-07-09 22:45 UTC (permalink / raw
To: gentoo-commits
commit: 125142667c338eddb3777433e513fbe58e7bfd45
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sat Jul 9 22:35:33 2022 +0000
Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Sat Jul 9 22:42:48 2022 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=12514266
eclean: add early return for empty DISTDIR
Gentoo-bug-url: https://bugs.gentoo.org/703282
Signed-off-by: Brian Dolbec <dolsen <AT> gentoo.org>
pym/gentoolkit/eclean/search.py | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index 365970c..60ced02 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -111,6 +111,10 @@ class DistfilesSearch:
saved = {}
deprecated = {}
installed_included = False
+ # Check if DISTDIR is empty, return early
+ if not os.listdir(_distdir):
+ return clean_me, saved, deprecated
+
# create a big CPV->SRC_URI dict of packages
# whose distfiles should be kept
if (not destructive) or fetch_restricted:
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2022-07-09 21:46 Brian Dolbec
0 siblings, 0 replies; 43+ messages in thread
From: Brian Dolbec @ 2022-07-09 21:46 UTC (permalink / raw
To: gentoo-commits
commit: 680dd160e1e5a41f008bd1a47afa2da2eb25714f
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sat Jul 9 21:41:39 2022 +0000
Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Sat Jul 9 21:45:04 2022 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=680dd160
eclean: Complete migration to imported emaint code
eclean-pkg now uses imported emaint binhost code to run,
Properly handle --quiet option for progressbar suppression from emaint.
Keeps the standalone emaint binhost subprocess call as backup.
Closes: https://bugs.gentoo.org/688550
Signed-off-by: Brian Dolbec <dolsen <AT> gentoo.org>
pym/gentoolkit/eclean/clean.py | 5 ++--
pym/gentoolkit/eclean/cli.py | 2 +-
pym/gentoolkit/eclean/pkgindex.py | 56 ++++++++++++++++++---------------------
3 files changed, 30 insertions(+), 33 deletions(-)
diff --git a/pym/gentoolkit/eclean/clean.py b/pym/gentoolkit/eclean/clean.py
index a6358a4..37a042a 100644
--- a/pym/gentoolkit/eclean/clean.py
+++ b/pym/gentoolkit/eclean/clean.py
@@ -19,8 +19,9 @@ class CleanUp:
or bypassing/ignoring
"""
- def __init__(self, controller):
+ def __init__(self, controller, quiet):
self.controller = controller
+ self.quiet = quiet
def clean_dist(self, clean_dict):
"""Calculate size of each entry for display, prompt user if needed,
@@ -64,7 +65,7 @@ class CleanUp:
# emaint is not yet importable so call it
# print a blank line here for separation
print()
- clean_size += index_control.call_emaint()
+ clean_size += index_control.clean_pkgs_index(self.quiet)
# return total size of deleted or to delete files
return clean_size
diff --git a/pym/gentoolkit/eclean/cli.py b/pym/gentoolkit/eclean/cli.py
index e3bc21a..23c7f3b 100644
--- a/pym/gentoolkit/eclean/cli.py
+++ b/pym/gentoolkit/eclean/cli.py
@@ -555,7 +555,7 @@ def doAction(action, options, exclude={}, output=None):
)
# initialize our cleaner
- cleaner = CleanUp(output.progress_controller)
+ cleaner = CleanUp(output.progress_controller, options["quiet"])
# actually clean files if something was found
if clean_me:
diff --git a/pym/gentoolkit/eclean/pkgindex.py b/pym/gentoolkit/eclean/pkgindex.py
index 617b437..d0878a1 100644
--- a/pym/gentoolkit/eclean/pkgindex.py
+++ b/pym/gentoolkit/eclean/pkgindex.py
@@ -11,6 +11,11 @@ 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:
@@ -32,37 +37,36 @@ class PkgIndex:
@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.emaint_control = Modules()
self.binhost = self.emaint_control._get_class("binhost")
- except InvalidModuleName as er: # noqa
+ 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 _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:
- return False
- return True
+ def clean_pkgs_index(self, quiet):
+ """This will clean the binpkgs packages index file
- 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)
+ @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("\n", clean_size, "Packages Index", file_, "Index")
+ return clean_size
def call_emaint(self):
"""Run the stand alone emaint script from
@@ -71,9 +75,6 @@ class PkgIndex:
@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:
@@ -83,8 +84,3 @@ class PkgIndex:
)
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
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2022-06-01 10:25 Yixun Lan
0 siblings, 0 replies; 43+ messages in thread
From: Yixun Lan @ 2022-06-01 10:25 UTC (permalink / raw
To: gentoo-commits
commit: b3251b763901ec5a5d7690fd8ec2885629104ee2
Author: Yixun Lan <dlan <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 1 10:23:49 2022 +0000
Commit: Yixun Lan <dlan <AT> gentoo <DOT> org>
CommitDate: Wed Jun 1 10:24:41 2022 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=b3251b76
fix missing short option "-u" for --unique-use
Signed-off-by: Yixun Lan <dlan <AT> gentoo.org>
pym/gentoolkit/eclean/cli.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pym/gentoolkit/eclean/cli.py b/pym/gentoolkit/eclean/cli.py
index c129d5e..e3bc21a 100644
--- a/pym/gentoolkit/eclean/cli.py
+++ b/pym/gentoolkit/eclean/cli.py
@@ -397,7 +397,7 @@ def parseArgs(options={}):
options["changed-deps"] = True
elif o in ("-i", "--ignore-failure"):
options["ignore-failure"] = True
- elif o in ("--unique-use"):
+ elif o in ("-u", "--unique-use"):
options["unique-use"] = True
else:
return_code = False
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2022-05-28 15:28 Yixun Lan
0 siblings, 0 replies; 43+ messages in thread
From: Yixun Lan @ 2022-05-28 15:28 UTC (permalink / raw
To: gentoo-commits
commit: 2fffbd450df2443bbd671f7ec760051ce3c930e9
Author: Yixun Lan <dlan <AT> gentoo <DOT> org>
AuthorDate: Wed May 25 08:08:09 2022 +0000
Commit: Yixun Lan <dlan <AT> gentoo <DOT> org>
CommitDate: Sat May 28 15:24:32 2022 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=2fffbd45
implement --unique-use option for eclean-pkg
this will help to clean duplicated binpkg which has exact same USEs flags enabled,
and it will choose the more recent version according to BUILD_TIME by default
Closes: https://bugs.gentoo.org/727576
Closes: https://github.com/gentoo/gentoolkit/pull/20
Signed-off-by: Yixun Lan <dlan <AT> gentoo.org>
pym/gentoolkit/eclean/cli.py | 14 +++++++++++++-
pym/gentoolkit/eclean/search.py | 26 ++++++++++++++++++++++++++
2 files changed, 39 insertions(+), 1 deletion(-)
diff --git a/pym/gentoolkit/eclean/cli.py b/pym/gentoolkit/eclean/cli.py
index 2ad2ae9..c129d5e 100644
--- a/pym/gentoolkit/eclean/cli.py
+++ b/pym/gentoolkit/eclean/cli.py
@@ -252,6 +252,11 @@ def printUsage(_error=None, help=None):
+ " - ignore failure to locate PKGDIR",
file=out,
)
+ print(
+ yellow(" -u, --unique-use")
+ + " - keep unique packages which have no duplicated USE",
+ file=out,
+ )
print(file=out)
if _error in ("distfiles-options", "merged-distfiles-options") or help in (
"all",
@@ -392,6 +397,8 @@ def parseArgs(options={}):
options["changed-deps"] = True
elif o in ("-i", "--ignore-failure"):
options["ignore-failure"] = True
+ elif o in ("--unique-use"):
+ options["unique-use"] = True
else:
return_code = False
# sanity check of --deep only options:
@@ -431,7 +438,11 @@ def parseArgs(options={}):
getopt_options["short"]["distfiles"] = "fs:"
getopt_options["long"]["distfiles"] = ["fetch-restricted", "size-limit="]
getopt_options["short"]["packages"] = "i"
- getopt_options["long"]["packages"] = ["ignore-failure", "changed-deps"]
+ getopt_options["long"]["packages"] = [
+ "ignore-failure",
+ "changed-deps",
+ "unique-use",
+ ]
# set default options, except 'nocolor', which is set in main()
options["interactive"] = False
options["pretend"] = False
@@ -446,6 +457,7 @@ def parseArgs(options={}):
options["verbose"] = False
options["changed-deps"] = False
options["ignore-failure"] = False
+ options["unique-use"] = False
# if called by a well-named symlink, set the action accordingly:
action = None
# temp print line to ensure it is the svn/branch code running, etc..
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index cb695c0..365970c 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -560,6 +560,7 @@ def findPackages(
# Dictionary of binary packages to clean. Organized as cpv->[pkgs] in order
# to support FEATURES=binpkg-multi-instance.
dead_binpkgs = {}
+ keep_binpkgs = {}
bin_dbapi = portage.binarytree(pkgdir=pkgdir, settings=var_dbapi.settings).dbapi
for cpv in bin_dbapi.cpv_all():
@@ -575,6 +576,28 @@ def findPackages(
if mtime >= time_limit:
continue
+ # Exclude if binpkg has exact same USEs
+ if not destructive and options["unique-use"]:
+ keys = ("CPV", "EAPI", "USE")
+ binpkg_metadata = dict(zip(keys, bin_dbapi.aux_get(cpv, keys)))
+ cpv_key = "_".join(binpkg_metadata[key] for key in keys)
+ if cpv_key in keep_binpkgs:
+ old_cpv = keep_binpkgs[cpv_key]
+ # compare BUILD_TIME, keep the new one
+ old_time = int(bin_dbapi.aux_get(old_cpv, ["BUILD_TIME"])[0])
+ new_time = int(bin_dbapi.aux_get(cpv, ["BUILD_TIME"])[0])
+ drop_cpv = old_cpv if new_time >= old_time else cpv
+
+ binpkg_path = bin_dbapi.bintree.getname(drop_cpv)
+ dead_binpkgs.setdefault(drop_cpv, []).append(binpkg_path)
+
+ if new_time >= old_time:
+ keep_binpkgs[cpv_key] = cpv
+ else:
+ continue
+ else:
+ keep_binpkgs[cpv_key] = cpv
+
# Exclude if binpkg exists in the porttree and not --deep
if not destructive and port_dbapi.cpv_exists(cpv):
if not options["changed-deps"]:
@@ -605,6 +628,9 @@ def findPackages(
if buildtime == bin_dbapi.aux_get(cpv, ["BUILD_TIME"])[0]:
continue
+ if not destructive and options["unique-use"]:
+ del keep_binpkgs[cpv_key]
+
binpkg_path = bin_dbapi.bintree.getname(cpv)
dead_binpkgs.setdefault(cpv, []).append(binpkg_path)
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2022-02-09 10:48 Sam James
0 siblings, 0 replies; 43+ messages in thread
From: Sam James @ 2022-02-09 10:48 UTC (permalink / raw
To: gentoo-commits
commit: 76c188b5189375b3b3b7c92f31491990e29a1669
Author: Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 9 10:47:54 2022 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Wed Feb 9 10:48:13 2022 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=76c188b5
*/*: reformat with latest Black 22.1.0
Signed-off-by: Sam James <sam <AT> gentoo.org>
pym/gentoolkit/eclean/cli.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pym/gentoolkit/eclean/cli.py b/pym/gentoolkit/eclean/cli.py
index bb6deeb..2ad2ae9 100644
--- a/pym/gentoolkit/eclean/cli.py
+++ b/pym/gentoolkit/eclean/cli.py
@@ -309,7 +309,7 @@ def parseSize(size):
@raise ParseArgsException: in case of failure
"""
- units = {"G": (1024 ** 3), "M": (1024 ** 2), "K": 1024, "B": 1}
+ units = {"G": (1024**3), "M": (1024**2), "K": 1024, "B": 1}
try:
match = re.match(r"^(?P<value>\d+)(?P<unit>[GMKBgmkb])?$", size)
size = int(match.group("value"))
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2020-06-09 17:29 Zac Medico
0 siblings, 0 replies; 43+ messages in thread
From: Zac Medico @ 2020-06-09 17:29 UTC (permalink / raw
To: gentoo-commits
commit: c0b355cf51ca73ad9dd52a0f5c1aebf807be42fc
Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Tue Jun 9 01:54:46 2020 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Tue Jun 9 01:57:07 2020 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=c0b355cf
eclean --changed-deps: fix EAPI logic (bug 727596)
Use separate variables for binary package and corresponding ebuild
EAPI values, since the ebuild EAPI may have changed. This avoids
a possible InvalidAtom exception as reported in bug 727596.
Bug: https://bugs.gentoo.org/727596
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
pym/gentoolkit/eclean/search.py | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index 51edc63..f68aacf 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -490,12 +490,12 @@ class DistfilesSearch(object):
return clean_me, saved
-def _deps_equal(deps_a, deps_b, eapi, uselist=None):
+def _deps_equal(deps_a, eapi_a, deps_b, eapi_b, uselist=None):
"""Compare two dependency lists given a set of USE flags"""
if deps_a == deps_b: return True
- deps_a = use_reduce(deps_a, uselist=uselist, eapi=eapi, token_class=Atom)
- deps_b = use_reduce(deps_b, uselist=uselist, eapi=eapi, token_class=Atom)
+ deps_a = use_reduce(deps_a, uselist=uselist, eapi=eapi_a, token_class=Atom)
+ deps_b = use_reduce(deps_b, uselist=uselist, eapi=eapi_b, token_class=Atom)
strip_slots(deps_a)
strip_slots(deps_b)
return deps_a == deps_b
@@ -578,12 +578,14 @@ def findPackages(
if not options['changed-deps']:
continue
- keys = ('RDEPEND', 'PDEPEND')
- binpkg_deps = ' '.join(bin_dbapi.aux_get(cpv, keys))
- ebuild_deps = ' '.join(port_dbapi.aux_get(cpv, keys))
- uselist = bin_dbapi.aux_get(cpv, ['USE'])[0].split()
+ dep_keys = ('RDEPEND', 'PDEPEND')
+ keys = ('EAPI', 'USE') + dep_keys
+ binpkg_metadata = dict(zip(keys, bin_dbapi.aux_get(cpv, keys)))
+ ebuild_metadata = dict(zip(keys, port_dbapi.aux_get(cpv, keys)))
- if _deps_equal(binpkg_deps, ebuild_deps, cpv.eapi, uselist):
+ if _deps_equal(' '.join(binpkg_metadata[key] for key in dep_keys), binpkg_metadata['EAPI'],
+ ' '.join(ebuild_metadata[key] for key in dep_keys), ebuild_metadata['EAPI'],
+ frozenset(binpkg_metadata['USE'].split())):
continue
if destructive and var_dbapi.cpv_exists(cpv):
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2020-03-12 16:51 Matt Turner
0 siblings, 0 replies; 43+ messages in thread
From: Matt Turner @ 2020-03-12 16:51 UTC (permalink / raw
To: gentoo-commits
commit: 98cdccea8f0abc88d360c0c7143263b210910611
Author: Matt Turner <mattst88 <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 18 21:39:08 2020 +0000
Commit: Matt Turner <mattst88 <AT> gentoo <DOT> org>
CommitDate: Wed Mar 11 23:33:01 2020 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=98cdccea
eclean: Add option to delete binpkgs with changed deps
Signed-off-by: Matt Turner <mattst88 <AT> gentoo.org>
pym/gentoolkit/eclean/cli.py | 7 ++++++-
pym/gentoolkit/eclean/search.py | 24 +++++++++++++++++++++++-
2 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/pym/gentoolkit/eclean/cli.py b/pym/gentoolkit/eclean/cli.py
index 1a99b3e..39aafd3 100644
--- a/pym/gentoolkit/eclean/cli.py
+++ b/pym/gentoolkit/eclean/cli.py
@@ -147,6 +147,8 @@ def printUsage(_error=None, help=None):
or help in ('all','packages'):
print( "Available", yellow("options"),"for the",
green("packages"),"action:", file=out)
+ print( yellow(" --changed-deps")+
+ " - delete packages for which ebuild dependencies have changed", file=out)
print( yellow(" -i, --ignore-failure")+
" - ignore failure to locate PKGDIR", file=out)
print( file=out)
@@ -263,6 +265,8 @@ def parseArgs(options={}):
options['size-limit'] = parseSize(a)
elif o in ("-v", "--verbose") and not options['quiet']:
options['verbose'] = True
+ elif o in ("--changed-deps"):
+ options['changed-deps'] = True
elif o in ("-i", "--ignore-failure"):
options['ignore-failure'] = True
else:
@@ -290,7 +294,7 @@ def parseArgs(options={}):
getopt_options['short']['distfiles'] = "fs:"
getopt_options['long']['distfiles'] = ["fetch-restricted", "size-limit="]
getopt_options['short']['packages'] = "i"
- getopt_options['long']['packages'] = ["ignore-failure"]
+ getopt_options['long']['packages'] = ["ignore-failure", "changed-deps"]
# set default options, except 'nocolor', which is set in main()
options['interactive'] = False
options['pretend'] = False
@@ -303,6 +307,7 @@ def parseArgs(options={}):
options['fetch-restricted'] = False
options['size-limit'] = 0
options['verbose'] = False
+ options['changed-deps'] = False
options['ignore-failure'] = False
# if called by a well-named symlink, set the action accordingly:
action = None
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index 0efefdb..51edc63 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -13,6 +13,8 @@ import sys
from functools import partial
import portage
+from portage.dep import Atom, use_reduce
+from portage.dep._slot_operator import strip_slots
import gentoolkit.pprinter as pp
from gentoolkit.eclean.exclude import (exclDictMatchCP, exclDictExpand,
@@ -488,6 +490,17 @@ class DistfilesSearch(object):
return clean_me, saved
+def _deps_equal(deps_a, deps_b, eapi, uselist=None):
+ """Compare two dependency lists given a set of USE flags"""
+ if deps_a == deps_b: return True
+
+ deps_a = use_reduce(deps_a, uselist=uselist, eapi=eapi, token_class=Atom)
+ deps_b = use_reduce(deps_b, uselist=uselist, eapi=eapi, token_class=Atom)
+ strip_slots(deps_a)
+ strip_slots(deps_b)
+ return deps_a == deps_b
+
+
def findPackages(
options,
exclude=None,
@@ -562,7 +575,16 @@ def findPackages(
# Exclude if binpkg exists in the porttree and not --deep
if not destructive and port_dbapi.cpv_exists(cpv):
- continue
+ if not options['changed-deps']:
+ continue
+
+ keys = ('RDEPEND', 'PDEPEND')
+ binpkg_deps = ' '.join(bin_dbapi.aux_get(cpv, keys))
+ ebuild_deps = ' '.join(port_dbapi.aux_get(cpv, keys))
+ uselist = bin_dbapi.aux_get(cpv, ['USE'])[0].split()
+
+ if _deps_equal(binpkg_deps, ebuild_deps, cpv.eapi, uselist):
+ continue
if destructive and var_dbapi.cpv_exists(cpv):
# Exclude if an instance of the package is installed due to
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2020-03-12 16:51 Matt Turner
0 siblings, 0 replies; 43+ messages in thread
From: Matt Turner @ 2020-03-12 16:51 UTC (permalink / raw
To: gentoo-commits
commit: e4f75fd355cfee672f64a1f9c42a19894e9f7703
Author: Matt Turner <mattst88 <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 18 21:05:00 2020 +0000
Commit: Matt Turner <mattst88 <AT> gentoo <DOT> org>
CommitDate: Sat Mar 7 06:07:38 2020 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=e4f75fd3
eclean: Rewrite findPackages()
I found the original code to be nearly incomprehensible. Instead of
populating a dict of potential binpkgs to remove and then removing from
the to-be-removed list, just selectively add to-be-removed packages.
Signed-off-by: Matt Turner <mattst88 <AT> gentoo.org>
pym/gentoolkit/eclean/search.py | 113 +++++++++++++++++++---------------------
1 file changed, 55 insertions(+), 58 deletions(-)
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index 58bd97e..0efefdb 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -498,89 +498,86 @@ def findPackages(
port_dbapi=portage.db[portage.root]["porttree"].dbapi,
var_dbapi=portage.db[portage.root]["vartree"].dbapi
):
- """Find all obsolete binary packages.
-
- XXX: packages are found only by symlinks.
- Maybe i should also return .tbz2 files from All/ that have
- no corresponding symlinks.
+ """Find obsolete binary packages.
@param options: dict of options determined at runtime
- @param exclude: an exclusion dict as defined in
- exclude.parseExcludeFile class.
- @param destructive: boolean, defaults to False
- @param time_limit: integer time value as returned by parseTime()
- @param package_names: boolean, defaults to False.
- used only if destructive=True
- @param pkgdir: path to the binary package dir being checked
+ @type options: dict
+ @param exclude: exclusion dict (as defined in the exclude.parseExcludeFile class)
+ @type exclude: dict, optional
+ @param destructive: binpkg is obsolete if not installed (default: `False`)
+ @type destructive: bool, optional
+ @param time_limit: exclude binpkg if newer than time value as returned by parseTime()
+ @type time_limit: int, optional
+ @param package_names: exclude all binpkg versions if package is installed
+ (used with `destructive=True`) (default: `False`)
+ @type package_names: bool, optional
+ @param pkgdir: path to the binpkg cache (PKGDIR)
+ @type pkgdir: str
@param port_dbapi: defaults to portage.db[portage.root]["porttree"].dbapi
- can be overridden for tests.
- @param var_dbapi: defaults to portage.db[portage.root]["vartree"].dbapi
- can be overridden for tests.
+ Can be overridden for tests.
+ @param var_dbapi: defaults to portage.db[portage.root]["vartree"].dbapi
+ Can be overridden for tests.
+ @return binary packages to remove. e.g. {'cat/pkg-ver': [filepath]}
@rtype: dict
- @return clean_me i.e. {'cat/pkg-ver.tbz2': [filepath],}
"""
if exclude is None:
exclude = {}
- clean_me = {}
- # create a full package dictionary
- # now do an access test, os.walk does not error for "no read permission"
+ # Access test, os.walk does not error for "no read permission"
try:
test = os.listdir(pkgdir)
del test
except EnvironmentError as er:
if options['ignore-failure']:
exit(0)
- print( pp.error("Error accessing PKGDIR." ), file=sys.stderr)
- print( pp.error("(Check your make.conf file and environment)."), file=sys.stderr)
- print( pp.error("Error: %s" %str(er)), file=sys.stderr)
+ print(pp.error("Error accessing PKGDIR."), file=sys.stderr)
+ print(pp.error("(Check your make.conf file and environment)."), file=sys.stderr)
+ print(pp.error("Error: %s" % str(er)), file=sys.stderr)
exit(1)
- # if portage supports FEATURES=binpkg-multi-instance, then
- # cpv_all can return multiple instances per cpv, where
- # instances are distinguishable by some extra attributes
- # provided by portage's _pkg_str class
+ # Create a dictionary of all installed packages
+ if destructive and package_names:
+ installed = dict.fromkeys(var_dbapi.cp_all())
+ else:
+ installed = {}
+
+ # Dictionary of binary packages to clean. Organized as cpv->[pkgs] in order
+ # to support FEATURES=binpkg-multi-instance.
+ dead_binpkgs = {}
+
bin_dbapi = portage.binarytree(pkgdir=pkgdir, settings=var_dbapi.settings).dbapi
for cpv in bin_dbapi.cpv_all():
- mtime = int(bin_dbapi.aux_get(cpv, ['_mtime_'])[0])
- if time_limit and mtime >= time_limit:
- # time-limit exclusion
- continue
- # dict is cpv->[pkgs] (supports binpkg-multi-instance)
- clean_me.setdefault(cpv, []).append(cpv)
+ cp = portage.cpv_getkey(cpv)
- # keep only obsolete ones
- if destructive and package_names:
- cp_all = dict.fromkeys(var_dbapi.cp_all())
- else:
- cp_all = {}
- for cpv in list(clean_me):
- if exclDictMatchCP(exclude,portage.cpv_getkey(cpv)):
- # exclusion because of the exclude file
- del clean_me[cpv]
+ # Exclude per --exclude-file=...
+ if exclDictMatchCP(exclude, cp):
continue
+
+ # Exclude if binpkg is newer than --time-limit=...
+ if time_limit:
+ mtime = int(bin_dbapi.aux_get(cpv, ['_mtime_'])[0])
+ if mtime >= time_limit:
+ continue
+
+ # Exclude if binpkg exists in the porttree and not --deep
if not destructive and port_dbapi.cpv_exists(cpv):
- # exclusion because pkg still exists (in porttree)
- del clean_me[cpv]
continue
+
if destructive and var_dbapi.cpv_exists(cpv):
+ # Exclude if an instance of the package is installed due to
+ # the --package-names option.
+ if cp in installed and port_dbapi.cpv_exists(cpv):
+ continue
+
+ # Exclude if BUILD_TIME of binpkg is same as vartree
buildtime = var_dbapi.aux_get(cpv, ['BUILD_TIME'])[0]
- clean_me[cpv] = [pkg for pkg in clean_me[cpv]
- # only keep path if BUILD_TIME is identical with vartree
- if bin_dbapi.aux_get(pkg, ['BUILD_TIME'])[0] != buildtime]
- if not clean_me[cpv]:
- # nothing we can clean for this package
- del clean_me[cpv]
+ if buildtime == bin_dbapi.aux_get(cpv, ['BUILD_TIME'])[0]:
continue
- if portage.cpv_getkey(cpv) in cp_all and port_dbapi.cpv_exists(cpv):
- # exclusion because of --package-names
- del clean_me[cpv]
- # the getname method correctly supports FEATURES=binpkg-multi-instance,
- # allowing for multiple paths per cpv (the API used here is also compatible
- # with older portage which does not support binpkg-multi-instance)
- for cpv, pkgs in clean_me.items():
- clean_me[cpv] = [bin_dbapi.bintree.getname(pkg) for pkg in pkgs]
+ binpkg_path = bin_dbapi.bintree.getname(cpv)
+ dead_binpkgs.setdefault(cpv, []).append(binpkg_path)
+
+ return dead_binpkgs
- return clean_me
+# vim: set ts=4 sw=4 tw=79:
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2020-01-03 4:31 Matt Turner
0 siblings, 0 replies; 43+ messages in thread
From: Matt Turner @ 2020-01-03 4:31 UTC (permalink / raw
To: gentoo-commits
commit: fba1039db46156089840896d3b6aa90076872d73
Author: Matt Turner <mattst88 <AT> gentoo <DOT> org>
AuthorDate: Tue Dec 10 18:29:27 2019 +0000
Commit: Matt Turner <mattst88 <AT> gentoo <DOT> org>
CommitDate: Tue Dec 10 18:42:44 2019 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=fba1039d
eclean: Fix typos
Signed-off-by: Matt Turner <mattst88 <AT> gentoo.org>
pym/gentoolkit/eclean/cli.py | 4 ++--
pym/gentoolkit/eclean/search.py | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/pym/gentoolkit/eclean/cli.py b/pym/gentoolkit/eclean/cli.py
index 1d2f52b..1a99b3e 100644
--- a/pym/gentoolkit/eclean/cli.py
+++ b/pym/gentoolkit/eclean/cli.py
@@ -304,7 +304,7 @@ def parseArgs(options={}):
options['size-limit'] = 0
options['verbose'] = False
options['ignore-failure'] = False
- # if called by a well-named symlink, set the acction accordingly:
+ # if called by a well-named symlink, set the action accordingly:
action = None
# temp print line to ensure it is the svn/branch code running, etc..
#print( "###### svn/branch/gentoolkit_eclean ####### ==> ", os.path.basename(sys.argv[0]))
@@ -400,7 +400,7 @@ def doAction(action,options,exclude={}, output=None):
)
# initialize our cleaner
- cleaner = CleanUp( output.progress_controller)
+ cleaner = CleanUp(output.progress_controller)
# actually clean files if something was found
if clean_me:
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index ce455a3..58bd97e 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -574,7 +574,7 @@ def findPackages(
del clean_me[cpv]
continue
if portage.cpv_getkey(cpv) in cp_all and port_dbapi.cpv_exists(cpv):
- # exlusion because of --package-names
+ # exclusion because of --package-names
del clean_me[cpv]
# the getname method correctly supports FEATURES=binpkg-multi-instance,
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2019-12-05 16:51 Matt Turner
0 siblings, 0 replies; 43+ messages in thread
From: Matt Turner @ 2019-12-05 16:51 UTC (permalink / raw
To: gentoo-commits
commit: 3f25e307ba5116892beb48fec2809500882dcf4f
Author: Matt Turner <mattst88 <AT> gentoo <DOT> org>
AuthorDate: Mon Dec 2 22:15:14 2019 +0000
Commit: Matt Turner <mattst88 <AT> gentoo <DOT> org>
CommitDate: Thu Dec 5 02:23:20 2019 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=3f25e307
eclean: Delete empty directories
Closes: https://bugs.gentoo.org/671592
Signed-off-by: Matt Turner <mattst88 <AT> gentoo.org>
pym/gentoolkit/eclean/clean.py | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/pym/gentoolkit/eclean/clean.py b/pym/gentoolkit/eclean/clean.py
index e00bcc0..c62abb9 100644
--- a/pym/gentoolkit/eclean/clean.py
+++ b/pym/gentoolkit/eclean/clean.py
@@ -139,6 +139,10 @@ class CleanUp(object):
# only count size if successfully deleted and not a link
if statinfo.st_nlink == 1:
clean_size += statinfo.st_size
+ try:
+ os.rmdir(os.path.dirname(file_))
+ except OSError:
+ pass
except EnvironmentError as er:
print( pp.error("Could not delete "+file_), file=sys.stderr)
print( pp.error("Error: %s" %str(er)), file=sys.stderr)
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2019-12-05 16:51 Matt Turner
0 siblings, 0 replies; 43+ messages in thread
From: Matt Turner @ 2019-12-05 16:51 UTC (permalink / raw
To: gentoo-commits
commit: af21727e35249aceda111b345b50c9dbf95de805
Author: Matt Turner <mattst88 <AT> gentoo <DOT> org>
AuthorDate: Mon Dec 2 20:28:15 2019 +0000
Commit: Matt Turner <mattst88 <AT> gentoo <DOT> org>
CommitDate: Thu Dec 5 02:23:20 2019 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=af21727e
eclean: Inline _sort_keys method
The boilerplate for calling this method was larger than what it actually
contained. Additionally I think this change will allow the loop to run
on a generator rather than a full list.
Signed-off-by: Matt Turner <mattst88 <AT> gentoo.org>
pym/gentoolkit/eclean/clean.py | 21 ++++++---------------
1 file changed, 6 insertions(+), 15 deletions(-)
diff --git a/pym/gentoolkit/eclean/clean.py b/pym/gentoolkit/eclean/clean.py
index fd59976..e00bcc0 100644
--- a/pym/gentoolkit/eclean/clean.py
+++ b/pym/gentoolkit/eclean/clean.py
@@ -36,10 +36,9 @@ class CleanUp(object):
@return: total size that was cleaned
"""
file_type = 'file'
- clean_keys = self._sort_keys(clean_dict)
clean_size = 0
- # clean all entries one by one
- for key in clean_keys:
+ # clean all entries one by one; sorting helps reading
+ for key in sorted(clean_dict):
clean_size += self._clean_files(clean_dict[key], key, file_type)
# return total size of deleted or to delete files
return clean_size
@@ -57,10 +56,9 @@ class CleanUp(object):
@return: total size that was cleaned
"""
file_type = 'binary package'
- clean_keys = self._sort_keys(clean_dict)
clean_size = 0
- # clean all entries one by one
- for key in clean_keys:
+ # clean all entries one by one; sorting helps reading
+ for key in sorted(clean_dict):
clean_size += self._clean_files(clean_dict[key], key, file_type)
# run 'emaint --fix' here
@@ -83,10 +81,9 @@ class CleanUp(object):
@return: total size that would be cleaned
"""
file_type = 'file'
- clean_keys = self._sort_keys(clean_dict)
clean_size = 0
- # tally all entries one by one
- for key in clean_keys:
+ # tally all entries one by one; sorting helps reading
+ for key in sorted(clean_dict):
key_size = self._get_size(clean_dict[key])
self.controller(key_size, key, clean_dict[key], file_type)
clean_size += key_size
@@ -110,12 +107,6 @@ class CleanUp(object):
print( pp.error("Error: %s" %str(er)), file=sys.stderr)
return key_size
- def _sort_keys(self, clean_dict):
- """Returns a list of sorted dictionary keys."""
- # sorting helps reading
- clean_keys = sorted(clean_dict)
- return clean_keys
-
def _clean_files(self, files, key, file_type):
"""File removal function."""
clean_size = 0
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2019-09-13 23:34 Zac Medico
0 siblings, 0 replies; 43+ messages in thread
From: Zac Medico @ 2019-09-13 23:34 UTC (permalink / raw
To: gentoo-commits
commit: d03253b11ba067c6a396af76fa18ed4d9c27d4ea
Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Fri Sep 13 23:33:15 2019 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Fri Sep 13 23:33:54 2019 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=d03253b1
eclean: tox fix: local variable 'e' is assigned to but never used
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
pym/gentoolkit/eclean/pkgindex.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pym/gentoolkit/eclean/pkgindex.py b/pym/gentoolkit/eclean/pkgindex.py
index 584a5bc..c1f5f9d 100644
--- a/pym/gentoolkit/eclean/pkgindex.py
+++ b/pym/gentoolkit/eclean/pkgindex.py
@@ -55,7 +55,7 @@ class PkgIndex(object):
try:
from emaint.module import Modules # noqa
from emaint.main import TaskHandler # noqa
- except ImportError as e:
+ except ImportError:
return False
return True
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2017-12-12 5:51 Zac Medico
0 siblings, 0 replies; 43+ messages in thread
From: Zac Medico @ 2017-12-12 5:51 UTC (permalink / raw
To: gentoo-commits
commit: 8eda4c13bee9c6a78b2489deec210c8b37375029
Author: Göktürk Yüksek <gokturk <AT> gentoo <DOT> org>
AuthorDate: Mon Dec 11 14:21:59 2017 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Tue Dec 12 05:51:19 2017 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=8eda4c13
eclean: add the missing ')' in the help string of --package-names
pym/gentoolkit/eclean/cli.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pym/gentoolkit/eclean/cli.py b/pym/gentoolkit/eclean/cli.py
index d8c5bd2..7ffb596 100644
--- a/pym/gentoolkit/eclean/cli.py
+++ b/pym/gentoolkit/eclean/cli.py
@@ -120,7 +120,7 @@ def printUsage(_error=None, help=None):
print( yellow(" -i, --interactive")+
" - ask confirmation before deletions", file=out)
print( yellow(" -n, --package-names")+
- " - protect all versions (when --deep", file=out)
+ " - protect all versions (when --deep)", file=out)
print( yellow(" -p, --pretend")+
" - only display what would be cleaned", file=out)
print( yellow(" -q, --quiet")+
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2016-07-03 6:29 Zac Medico
0 siblings, 0 replies; 43+ messages in thread
From: Zac Medico @ 2016-07-03 6:29 UTC (permalink / raw
To: gentoo-commits
commit: a6b0f09806845ba305eb1a39b90ff8752552c9df
Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Jul 3 06:27:43 2016 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Jul 3 06:29:17 2016 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=a6b0f098
eclean: fix DeprecationWarning: Passing nonexistent key 'NOCOLOR'
pym/gentoolkit/eclean/cli.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pym/gentoolkit/eclean/cli.py b/pym/gentoolkit/eclean/cli.py
index aa9af3f..d8c5bd2 100644
--- a/pym/gentoolkit/eclean/cli.py
+++ b/pym/gentoolkit/eclean/cli.py
@@ -1,6 +1,6 @@
#!/usr/bin/python
-# Copyright 2003-2010 Gentoo Foundation
+# Copyright 2003-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
@@ -448,7 +448,7 @@ def main():
"""Parse command line and execute all actions."""
# set default options
options = {}
- options['nocolor'] = (port_settings["NOCOLOR"] in ('yes','true')
+ options['nocolor'] = (port_settings.get("NOCOLOR") in ('yes','true')
or not sys.stdout.isatty())
if options['nocolor']:
pp.output.nocolor()
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2016-07-01 6:19 Zac Medico
0 siblings, 0 replies; 43+ messages in thread
From: Zac Medico @ 2016-07-01 6:19 UTC (permalink / raw
To: gentoo-commits
commit: 1952ecb9f2912968dd2f4487089fa50ed3d3bad1
Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Jun 25 23:55:33 2016 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Fri Jul 1 06:18:27 2016 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=1952ecb9
eclean: optimize binpkg-multi-instance support from bug 586658
Use the portage binarytree API to optimize binary package access,
so that metadata is read from $PKGDIR/Packages instead of from the
individual binary packages. Symlinks will now be ignored, since
portage hasn't used symlinks for years, and there's no harm
in ignoring them now. The APIs used are compatible with very old
portage, though they internally support binpkg-multi-instance
in recent versions of portage.
X-Gentoo-bug: 586658
X-Gentoo-bug-url: https://bugs.gentoo.org/show_bug.cgi?id=586658
pym/gentoolkit/eclean/search.py | 47 +++++++++++++++++++----------------------
1 file changed, 22 insertions(+), 25 deletions(-)
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index ce796f5..b9d111a 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -538,29 +538,20 @@ def findPackages(
print( pp.error("(Check your make.conf file and environment)."), file=sys.stderr)
print( pp.error("Error: %s" %str(er)), file=sys.stderr)
exit(1)
- for root, dirs, files in os.walk(pkgdir):
- if root[-3:] == 'All':
+
+ # if portage supports FEATURES=binpkg-multi-instance, then
+ # cpv_all can return multiple instances per cpv, where
+ # instances are distinguishable by some extra attributes
+ # provided by portage's _pkg_str class
+ bin_dbapi = portage.binarytree(pkgdir=pkgdir, settings=var_dbapi.settings).dbapi
+ for cpv in bin_dbapi.cpv_all():
+ mtime = int(bin_dbapi.aux_get(cpv, ['_mtime_'])[0])
+ if time_limit and mtime >= time_limit:
+ # time-limit exclusion
continue
- for file in files:
- if file[-5:] == ".tbz2":
- category = os.path.basename(root)
- cpv = category+"/"+file[:-5]
- elif file[-5:] == ".xpak":
- category = os.path.basename(os.path.dirname(root))
- cpv = category+"/"+file.rpartition('-')[0]
- else:
- # ignore other files
- continue
- path = os.path.join(root, file)
- st = os.lstat(path)
- if time_limit and (st[stat.ST_MTIME] >= time_limit):
- # time-limit exclusion
- continue
- # dict is cpv->[files] (2 files in general, because of symlink)
- clean_me.setdefault(cpv,[]).append(path)
- #if os.path.islink(path):
- if stat.S_ISLNK(st[stat.ST_MODE]):
- clean_me[cpv].append(os.path.realpath(path))
+ # dict is cpv->[pkgs] (supports binpkg-multi-instance)
+ clean_me.setdefault(cpv, []).append(cpv)
+
# keep only obsolete ones
if destructive and package_names:
cp_all = dict.fromkeys(var_dbapi.cp_all())
@@ -576,10 +567,10 @@ def findPackages(
del clean_me[cpv]
continue
if destructive and var_dbapi.cpv_exists(cpv):
- buildtime = var_dbapi.aux_get(cpv, ['BUILD_TIME'])[0].encode('utf-8').strip()
- clean_me[cpv] = [path for path in clean_me[cpv]
+ buildtime = var_dbapi.aux_get(cpv, ['BUILD_TIME'])[0]
+ clean_me[cpv] = [pkg for pkg in clean_me[cpv]
# only keep path if BUILD_TIME is identical with vartree
- if portage.xpak.tbz2(path).getfile('BUILD_TIME').strip() != buildtime]
+ if bin_dbapi.aux_get(pkg, ['BUILD_TIME'])[0] != buildtime]
if not clean_me[cpv]:
# nothing we can clean for this package
del clean_me[cpv]
@@ -588,4 +579,10 @@ def findPackages(
# exlusion because of --package-names
del clean_me[cpv]
+ # the getname method correctly supports FEATURES=binpkg-multi-instance,
+ # allowing for multiple paths per cpv (the API used here is also compatible
+ # with older portage which does not support binpkg-multi-instance)
+ for cpv, pkgs in clean_me.items():
+ clean_me[cpv] = [bin_dbapi.bintree.getname(pkg) for pkg in pkgs]
+
return clean_me
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2016-06-24 21:40 Zac Medico
0 siblings, 0 replies; 43+ messages in thread
From: Zac Medico @ 2016-06-24 21:40 UTC (permalink / raw
To: gentoo-commits
commit: 824953dd70d650ee0b2c057b0dfb44efb8f56a9b
Author: Manuel Mommertz <2kmm <AT> gmx <DOT> de>
AuthorDate: Fri Jun 24 15:40:56 2016 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Fri Jun 24 21:40:28 2016 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=824953dd
eclean: Keep only packages with BUILD_TIME equal to installed one
X-Gentoo-bug: 586658
X-Gentoo-bug-url: https://bugs.gentoo.org/show_bug.cgi?id=586658
Acked-by: Paul Varner <fuzzyray <AT> gentoo.org>
pym/gentoolkit/eclean/search.py | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index 7b261b8..ce796f5 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -562,24 +562,28 @@ def findPackages(
if stat.S_ISLNK(st[stat.ST_MODE]):
clean_me[cpv].append(os.path.realpath(path))
# keep only obsolete ones
- if destructive:
- dbapi = var_dbapi
- if package_names:
- cp_all = dict.fromkeys(dbapi.cp_all())
- else:
- cp_all = {}
+ if destructive and package_names:
+ cp_all = dict.fromkeys(var_dbapi.cp_all())
else:
- dbapi = port_dbapi
cp_all = {}
for cpv in list(clean_me):
if exclDictMatchCP(exclude,portage.cpv_getkey(cpv)):
# exclusion because of the exclude file
del clean_me[cpv]
continue
- if dbapi.cpv_exists(cpv):
- # exclusion because pkg still exists (in porttree or vartree)
+ if not destructive and port_dbapi.cpv_exists(cpv):
+ # exclusion because pkg still exists (in porttree)
del clean_me[cpv]
continue
+ if destructive and var_dbapi.cpv_exists(cpv):
+ buildtime = var_dbapi.aux_get(cpv, ['BUILD_TIME'])[0].encode('utf-8').strip()
+ clean_me[cpv] = [path for path in clean_me[cpv]
+ # only keep path if BUILD_TIME is identical with vartree
+ if portage.xpak.tbz2(path).getfile('BUILD_TIME').strip() != buildtime]
+ if not clean_me[cpv]:
+ # nothing we can clean for this package
+ del clean_me[cpv]
+ continue
if portage.cpv_getkey(cpv) in cp_all and port_dbapi.cpv_exists(cpv):
# exlusion because of --package-names
del clean_me[cpv]
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2016-06-24 21:36 Zac Medico
0 siblings, 0 replies; 43+ messages in thread
From: Zac Medico @ 2016-06-24 21:36 UTC (permalink / raw
To: gentoo-commits
commit: 78a446d0859fd1d3c2922d821fe0664099287312
Author: Manuel Mommertz <2kmm <AT> gmx <DOT> de>
AuthorDate: Fri Jun 24 15:40:56 2016 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Fri Jun 24 21:35:15 2016 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=78a446d0
eclean: Keep only packages with BUILD_TIME equal to installed one
X-Gentoo-bug: 586658
X-Gentoo-bug-url: https://bugs.gentoo.org/show_bug.cgi?id=586658
Acked-by: Paul Varner <fuzzyray <AT> gentoo.org>
pym/gentoolkit/eclean/search.py | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index 7b261b8..ce796f5 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -562,24 +562,28 @@ def findPackages(
if stat.S_ISLNK(st[stat.ST_MODE]):
clean_me[cpv].append(os.path.realpath(path))
# keep only obsolete ones
- if destructive:
- dbapi = var_dbapi
- if package_names:
- cp_all = dict.fromkeys(dbapi.cp_all())
- else:
- cp_all = {}
+ if destructive and package_names:
+ cp_all = dict.fromkeys(var_dbapi.cp_all())
else:
- dbapi = port_dbapi
cp_all = {}
for cpv in list(clean_me):
if exclDictMatchCP(exclude,portage.cpv_getkey(cpv)):
# exclusion because of the exclude file
del clean_me[cpv]
continue
- if dbapi.cpv_exists(cpv):
- # exclusion because pkg still exists (in porttree or vartree)
+ if not destructive and port_dbapi.cpv_exists(cpv):
+ # exclusion because pkg still exists (in porttree)
del clean_me[cpv]
continue
+ if destructive and var_dbapi.cpv_exists(cpv):
+ buildtime = var_dbapi.aux_get(cpv, ['BUILD_TIME'])[0].encode('utf-8').strip()
+ clean_me[cpv] = [path for path in clean_me[cpv]
+ # only keep path if BUILD_TIME is identical with vartree
+ if portage.xpak.tbz2(path).getfile('BUILD_TIME').strip() != buildtime]
+ if not clean_me[cpv]:
+ # nothing we can clean for this package
+ del clean_me[cpv]
+ continue
if portage.cpv_getkey(cpv) in cp_all and port_dbapi.cpv_exists(cpv):
# exlusion because of --package-names
del clean_me[cpv]
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2016-06-23 20:01 Paul Varner
0 siblings, 0 replies; 43+ messages in thread
From: Paul Varner @ 2016-06-23 20:01 UTC (permalink / raw
To: gentoo-commits
commit: 0c95b6b4aea0b7baa86c6f41e6b643c477f60203
Author: Paul Varner <fuzzyray <AT> gentoo <DOT> org>
AuthorDate: Thu Jun 23 20:00:15 2016 +0000
Commit: Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Thu Jun 23 20:00:15 2016 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=0c95b6b4
eclean: Apply handle binpkgs with .xpak suffix patch from bug 586658
Author: Manuel Mommertz <2kmm <AT> gmx.de>
X-Gentoo-bug: 586658
X-Gentoo-bug-url: https://bugs.gentoo.org/show_bug.cgi?id=586658
pym/gentoolkit/eclean/search.py | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index f771ffc..7b261b8 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -542,18 +542,22 @@ def findPackages(
if root[-3:] == 'All':
continue
for file in files:
- if not file[-5:] == ".tbz2":
- # ignore non-tbz2 files
+ if file[-5:] == ".tbz2":
+ category = os.path.basename(root)
+ cpv = category+"/"+file[:-5]
+ elif file[-5:] == ".xpak":
+ category = os.path.basename(os.path.dirname(root))
+ cpv = category+"/"+file.rpartition('-')[0]
+ else:
+ # ignore other files
continue
path = os.path.join(root, file)
- category = os.path.split(root)[-1]
- cpv = category+"/"+file[:-5]
st = os.lstat(path)
if time_limit and (st[stat.ST_MTIME] >= time_limit):
# time-limit exclusion
continue
# dict is cpv->[files] (2 files in general, because of symlink)
- clean_me[cpv] = [path]
+ clean_me.setdefault(cpv,[]).append(path)
#if os.path.islink(path):
if stat.S_ISLNK(st[stat.ST_MODE]):
clean_me[cpv].append(os.path.realpath(path))
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2015-10-19 21:33 Paul Varner
0 siblings, 0 replies; 43+ messages in thread
From: Paul Varner @ 2015-10-19 21:33 UTC (permalink / raw
To: gentoo-commits
commit: 00fa83ca375064247acf92c402e7920c1a5c922f
Author: Paul Varner <fuzzyray <AT> gentoo <DOT> org>
AuthorDate: Mon Oct 19 21:32:28 2015 +0000
Commit: Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Mon Oct 19 21:32:28 2015 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=00fa83ca
eclean: Fix traceback error caused by adding -i option
pym/gentoolkit/eclean/cli.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/pym/gentoolkit/eclean/cli.py b/pym/gentoolkit/eclean/cli.py
index 1c8e66f..aa9af3f 100644
--- a/pym/gentoolkit/eclean/cli.py
+++ b/pym/gentoolkit/eclean/cli.py
@@ -303,6 +303,7 @@ def parseArgs(options={}):
options['fetch-restricted'] = False
options['size-limit'] = 0
options['verbose'] = False
+ options['ignore-failure'] = False
# if called by a well-named symlink, set the acction accordingly:
action = None
# temp print line to ensure it is the svn/branch code running, etc..
^ permalink raw reply related [flat|nested] 43+ messages in thread
* [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/
@ 2015-10-15 21:39 Paul Varner
0 siblings, 0 replies; 43+ messages in thread
From: Paul Varner @ 2015-10-15 21:39 UTC (permalink / raw
To: gentoo-commits
commit: 68283db9d0a775c334087a27601edf042987294c
Author: Marc Joliet <marcec <AT> gmx <DOT> de>
AuthorDate: Thu Oct 15 21:16:57 2015 +0000
Commit: Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Thu Oct 15 21:38:45 2015 +0000
URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=68283db9
eclean: fix eclean-pkg -n -d Bug #472020
Signed-off-by: Paul Varner <fuzzyray <AT> gentoo.org>
pym/gentoolkit/eclean/search.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
index 5fcb6bc..1a83fd4 100644
--- a/pym/gentoolkit/eclean/search.py
+++ b/pym/gentoolkit/eclean/search.py
@@ -574,7 +574,7 @@ def findPackages(
# exclusion because pkg still exists (in porttree or vartree)
del clean_me[cpv]
continue
- if portage.cpv_getkey(cpv) in cp_all:
+ if portage.cpv_getkey(cpv) in cp_all and port_dbapi.cpv_exists(cpv):
# exlusion because of --package-names
del clean_me[cpv]
^ permalink raw reply related [flat|nested] 43+ messages in thread
end of thread, other threads:[~2024-05-03 5:42 UTC | newest]
Thread overview: 43+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-03 5:42 [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eclean/ Sam James
-- strict thread matches above, loose matches on Subject: below --
2024-05-03 5:40 Sam James
2024-05-03 5:40 Sam James
2024-05-03 5:40 Sam James
2024-05-03 5:11 Sam James
2024-02-18 2:19 Brian Dolbec
2024-02-18 2:19 Brian Dolbec
2024-01-19 7:03 Sam James
2024-01-19 6:15 Sam James
2024-01-12 19:16 Matt Turner
2023-12-03 7:51 Sam James
2023-10-08 3:28 Sam James
2023-10-08 3:28 Sam James
2023-09-29 7:20 Sam James
2023-08-24 19:52 Sam James
2023-08-22 20:54 Sam James
2023-08-22 20:52 Sam James
2023-08-22 20:50 Sam James
2023-08-22 20:50 Sam James
2023-08-22 20:35 Sam James
2023-08-21 5:16 Sam James
2023-08-21 5:16 Sam James
2022-07-11 7:17 Brian Dolbec
2022-07-09 22:45 Brian Dolbec
2022-07-09 21:46 Brian Dolbec
2022-06-01 10:25 Yixun Lan
2022-05-28 15:28 Yixun Lan
2022-02-09 10:48 Sam James
2020-06-09 17:29 Zac Medico
2020-03-12 16:51 Matt Turner
2020-03-12 16:51 Matt Turner
2020-01-03 4:31 Matt Turner
2019-12-05 16:51 Matt Turner
2019-12-05 16:51 Matt Turner
2019-09-13 23:34 Zac Medico
2017-12-12 5:51 Zac Medico
2016-07-03 6:29 Zac Medico
2016-07-01 6:19 Zac Medico
2016-06-24 21:40 Zac Medico
2016-06-24 21:36 Zac Medico
2016-06-23 20:01 Paul Varner
2015-10-19 21:33 Paul Varner
2015-10-15 21:39 Paul Varner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox