commit: 00bb1df12827cfce898e6fce8514d59a4cc844b1 Author: Zac Medico <zmedico <AT> gentoo <DOT> org> AuthorDate: Tue Sep 1 06:44:57 2020 +0000 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> CommitDate: Tue Sep 8 00:35:38 2020 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=00bb1df1
egencache --update-pkg-desc-index: emulate esync --verbose output (bug 737470) When the --verbose flag is given, make --update-pkg-desc-index emulate esync --verbose output. Example: * Searching for changes [ N] acct-group/ultimaker (0): Group for ultimaker [ N] acct-user/ultimaker (0): User for ultimaker [ U] www-client/opera (70.0.3728.144): A fast and secure web browser [MU] www-client/opera-developer (72.0.3798.0): A fast and secure web browser [ U] x11-libs/gtksourceview (4.6.1-r1): A text widget implementing syntax highlighting and other features Bug: https://bugs.gentoo.org/737470 Signed-off-by: Zac Medico <zmedico <AT> gentoo.org> bin/egencache | 76 +++++++++++++++++++++++++++++++++++++++++---- cnf/repo.postsync.d/example | 2 +- man/egencache.1 | 3 ++ 3 files changed, 74 insertions(+), 7 deletions(-) diff --git a/bin/egencache b/bin/egencache index 264c600fe..532e37f20 100755 --- a/bin/egencache +++ b/bin/egencache @@ -35,6 +35,7 @@ else: signal.signal(debug_signum, debug_signal) +import functools import io import logging import subprocess @@ -50,8 +51,10 @@ portage._internal_caller = True from portage import os, _encodings, _unicode_encode, _unicode_decode from _emerge.MetadataRegen import MetadataRegen from portage.cache.cache_errors import CacheError, StatCollision -from portage.cache.index.pkg_desc_index import pkg_desc_index_line_format +from portage.cache.index.pkg_desc_index import pkg_desc_index_line_format, pkg_desc_index_line_read from portage.const import TIMESTAMP_FORMAT +from portage.dep import _repo_separator +from portage.output import colorize, EOutput from portage.package.ebuild._parallel_manifest.ManifestScheduler import ManifestScheduler from portage.util import cmp_sort_key, writemsg_level from portage.util._async.AsyncFunction import AsyncFunction @@ -131,6 +134,9 @@ def parse_args(args): common.add_argument("--ignore-default-opts", action="store_true", help="do not use the EGENCACHE_DEFAULT_OPTS environment variable") + common.add_argument("-v", "--verbose", + action="count", default=0, + help="increase verbosity") common.add_argument("--write-timestamp", action="store_true", help="write metadata/timestamp.chk as required for rsync repositories") @@ -448,13 +454,27 @@ class GenCache: trg_cache._prune_empty_dirs() class GenPkgDescIndex: - def __init__(self, portdb, output_file): + def __init__(self, repo_config, portdb, output_file, verbose=False): self.returncode = os.EX_OK + self._repo_config = repo_config self._portdb = portdb self._output_file = output_file + self._verbose = verbose def run(self): + display_updates = self._verbose > 0 + old = {} + new = {} + if display_updates: + try: + with open(self._output_file, 'rt', encoding=_encodings["repo.content"]) as f: + for line in f: + pkg_desc = pkg_desc_index_line_read(line) + old[pkg_desc.cp] = pkg_desc + except FileNotFoundError: + pass + portage.util.ensure_dirs(os.path.dirname(self._output_file)) f = portage.util.atomic_ofstream(self._output_file, encoding=_encodings["repo.content"]) @@ -466,10 +486,52 @@ class GenPkgDescIndex: continue desc, = portdb.aux_get(pkgs[-1], ["DESCRIPTION"]) - f.write(pkg_desc_index_line_format(cp, pkgs, desc)) + line = pkg_desc_index_line_format(cp, pkgs, desc) + f.write(line) + if display_updates: + new[cp] = pkg_desc_index_line_read(line) f.close() + if display_updates: + out = EOutput() + out.einfo("Searching for changes") + print("") + items = sorted(new.values(), key=lambda pkg_desc: pkg_desc.cp) + haspkgs = False + for pkg_desc in items: + masked = False + version = self._portdb.xmatch("bestmatch-visible", + Atom("{}{}{}".format(pkg_desc.cp, _repo_separator, self._repo_config.name))) + if not version: + version = pkg_desc.cpv_list[-1] + masked = True + old_versions = old.get(pkg_desc.cp) + if old_versions is None or version not in old_versions.cpv_list: + prefix0 = " " + prefix1 = " " + + if old_versions is None: + color = functools.partial(colorize, "darkgreen") + prefix1 = "N" + else: + color = functools.partial(colorize, "turquoise") + prefix1 = "U" + + if masked: + prefix0 = "M" + + print(" [%s%s] %s (%s): %s" % ( + colorize("red", prefix0), + color(prefix1), + colorize("bold", pkg_desc.cp), + color(version[len(pkg_desc.cp)+1:]), + pkg_desc.desc)) + haspkgs = True + + if not haspkgs: + out.einfo("No updates found") + class GenUseLocalDesc: def __init__(self, portdb, output=None, preserve_comments=False): @@ -862,7 +924,8 @@ def egencache_main(args): # completely controlled by commandline arguments. env = {} - if not sys.stdout.isatty(): + if (not sys.stdout.isatty() or + os.environ.get('NOCOLOR', '').lower() in ('yes', 'true')): portage.output.nocolor() env['NOCOLOR'] = 'true' @@ -1052,8 +1115,9 @@ def egencache_main(args): writemsg_level(msg, level=logging.WARNING, noiselevel=-1) - gen_index = GenPkgDescIndex(portdb, os.path.join( - writable_location, "metadata", "pkg_desc_index")) + gen_index = GenPkgDescIndex(repo_config, portdb, os.path.join( + writable_location, "metadata", "pkg_desc_index"), + verbose=options.verbose) gen_index.run() ret.append(gen_index.returncode) diff --git a/cnf/repo.postsync.d/example b/cnf/repo.postsync.d/example index 708c7c4b9..d1e385c11 100644 --- a/cnf/repo.postsync.d/example +++ b/cnf/repo.postsync.d/example @@ -52,7 +52,7 @@ if [ -n "${repository_name}" ]; then if [[ ! -e ${repository_path}/metadata/pkg_desc_index || ( -d ${repository_path}/metadata/md5-cache && -n $(find "${repository_path}/metadata/md5-cache" -type f -newer "${repository_path}/metadata/pkg_desc_index" -print -quit) ) ]]; then - if ! egencache --update-pkg-desc-index --repo="${repository_name}" + if ! egencache --update-pkg-desc-index --repo="${repository_name}" ${PORTAGE_VERBOSE+--verbose} then echo "!!! egencache failed!" ret=1 diff --git a/man/egencache.1 b/man/egencache.1 index 98b230a14..ae7370e21 100644 --- a/man/egencache.1 +++ b/man/egencache.1 @@ -111,6 +111,9 @@ due to invalid Manifest entries. .BR "\-\-use\-local\-desc\-output=ULD_OUTPUT" Output file for use.local.desc data (or '-' for stdout) .TP +.BR \-\-verbose ", " \-v +Increase verbosity. +.TP .BR "\-\-write\-timestamp Write metadata/timestamp.chk as required for rsync repositories .SH "ENVIRONMENT OPTIONS"