Gentoo Archives: gentoo-commits

From: Zac Medico <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:master commit in: cnf/repo.postsync.d/, man/, bin/
Date: Tue, 08 Sep 2020 00:43:25
Message-Id: 1599525338.00bb1df12827cfce898e6fce8514d59a4cc844b1.zmedico@gentoo
1 commit: 00bb1df12827cfce898e6fce8514d59a4cc844b1
2 Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
3 AuthorDate: Tue Sep 1 06:44:57 2020 +0000
4 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
5 CommitDate: Tue Sep 8 00:35:38 2020 +0000
6 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=00bb1df1
7
8 egencache --update-pkg-desc-index: emulate esync --verbose output (bug 737470)
9
10 When the --verbose flag is given, make --update-pkg-desc-index emulate
11 esync --verbose output. Example:
12
13 * Searching for changes
14
15 [ N] acct-group/ultimaker (0): Group for ultimaker
16 [ N] acct-user/ultimaker (0): User for ultimaker
17 [ U] www-client/opera (70.0.3728.144): A fast and secure web browser
18 [MU] www-client/opera-developer (72.0.3798.0): A fast and secure web browser
19 [ U] x11-libs/gtksourceview (4.6.1-r1): A text widget implementing syntax highlighting and other features
20
21 Bug: https://bugs.gentoo.org/737470
22 Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
23
24 bin/egencache | 76 +++++++++++++++++++++++++++++++++++++++++----
25 cnf/repo.postsync.d/example | 2 +-
26 man/egencache.1 | 3 ++
27 3 files changed, 74 insertions(+), 7 deletions(-)
28
29 diff --git a/bin/egencache b/bin/egencache
30 index 264c600fe..532e37f20 100755
31 --- a/bin/egencache
32 +++ b/bin/egencache
33 @@ -35,6 +35,7 @@ else:
34
35 signal.signal(debug_signum, debug_signal)
36
37 +import functools
38 import io
39 import logging
40 import subprocess
41 @@ -50,8 +51,10 @@ portage._internal_caller = True
42 from portage import os, _encodings, _unicode_encode, _unicode_decode
43 from _emerge.MetadataRegen import MetadataRegen
44 from portage.cache.cache_errors import CacheError, StatCollision
45 -from portage.cache.index.pkg_desc_index import pkg_desc_index_line_format
46 +from portage.cache.index.pkg_desc_index import pkg_desc_index_line_format, pkg_desc_index_line_read
47 from portage.const import TIMESTAMP_FORMAT
48 +from portage.dep import _repo_separator
49 +from portage.output import colorize, EOutput
50 from portage.package.ebuild._parallel_manifest.ManifestScheduler import ManifestScheduler
51 from portage.util import cmp_sort_key, writemsg_level
52 from portage.util._async.AsyncFunction import AsyncFunction
53 @@ -131,6 +134,9 @@ def parse_args(args):
54 common.add_argument("--ignore-default-opts",
55 action="store_true",
56 help="do not use the EGENCACHE_DEFAULT_OPTS environment variable")
57 + common.add_argument("-v", "--verbose",
58 + action="count", default=0,
59 + help="increase verbosity")
60 common.add_argument("--write-timestamp",
61 action="store_true",
62 help="write metadata/timestamp.chk as required for rsync repositories")
63 @@ -448,13 +454,27 @@ class GenCache:
64 trg_cache._prune_empty_dirs()
65
66 class GenPkgDescIndex:
67 - def __init__(self, portdb, output_file):
68 + def __init__(self, repo_config, portdb, output_file, verbose=False):
69 self.returncode = os.EX_OK
70 + self._repo_config = repo_config
71 self._portdb = portdb
72 self._output_file = output_file
73 + self._verbose = verbose
74
75 def run(self):
76
77 + display_updates = self._verbose > 0
78 + old = {}
79 + new = {}
80 + if display_updates:
81 + try:
82 + with open(self._output_file, 'rt', encoding=_encodings["repo.content"]) as f:
83 + for line in f:
84 + pkg_desc = pkg_desc_index_line_read(line)
85 + old[pkg_desc.cp] = pkg_desc
86 + except FileNotFoundError:
87 + pass
88 +
89 portage.util.ensure_dirs(os.path.dirname(self._output_file))
90 f = portage.util.atomic_ofstream(self._output_file,
91 encoding=_encodings["repo.content"])
92 @@ -466,10 +486,52 @@ class GenPkgDescIndex:
93 continue
94 desc, = portdb.aux_get(pkgs[-1], ["DESCRIPTION"])
95
96 - f.write(pkg_desc_index_line_format(cp, pkgs, desc))
97 + line = pkg_desc_index_line_format(cp, pkgs, desc)
98 + f.write(line)
99 + if display_updates:
100 + new[cp] = pkg_desc_index_line_read(line)
101
102 f.close()
103
104 + if display_updates:
105 + out = EOutput()
106 + out.einfo("Searching for changes")
107 + print("")
108 + items = sorted(new.values(), key=lambda pkg_desc: pkg_desc.cp)
109 + haspkgs = False
110 + for pkg_desc in items:
111 + masked = False
112 + version = self._portdb.xmatch("bestmatch-visible",
113 + Atom("{}{}{}".format(pkg_desc.cp, _repo_separator, self._repo_config.name)))
114 + if not version:
115 + version = pkg_desc.cpv_list[-1]
116 + masked = True
117 + old_versions = old.get(pkg_desc.cp)
118 + if old_versions is None or version not in old_versions.cpv_list:
119 + prefix0 = " "
120 + prefix1 = " "
121 +
122 + if old_versions is None:
123 + color = functools.partial(colorize, "darkgreen")
124 + prefix1 = "N"
125 + else:
126 + color = functools.partial(colorize, "turquoise")
127 + prefix1 = "U"
128 +
129 + if masked:
130 + prefix0 = "M"
131 +
132 + print(" [%s%s] %s (%s): %s" % (
133 + colorize("red", prefix0),
134 + color(prefix1),
135 + colorize("bold", pkg_desc.cp),
136 + color(version[len(pkg_desc.cp)+1:]),
137 + pkg_desc.desc))
138 + haspkgs = True
139 +
140 + if not haspkgs:
141 + out.einfo("No updates found")
142 +
143 class GenUseLocalDesc:
144 def __init__(self, portdb, output=None,
145 preserve_comments=False):
146 @@ -862,7 +924,8 @@ def egencache_main(args):
147 # completely controlled by commandline arguments.
148 env = {}
149
150 - if not sys.stdout.isatty():
151 + if (not sys.stdout.isatty() or
152 + os.environ.get('NOCOLOR', '').lower() in ('yes', 'true')):
153 portage.output.nocolor()
154 env['NOCOLOR'] = 'true'
155
156 @@ -1052,8 +1115,9 @@ def egencache_main(args):
157 writemsg_level(msg,
158 level=logging.WARNING, noiselevel=-1)
159
160 - gen_index = GenPkgDescIndex(portdb, os.path.join(
161 - writable_location, "metadata", "pkg_desc_index"))
162 + gen_index = GenPkgDescIndex(repo_config, portdb, os.path.join(
163 + writable_location, "metadata", "pkg_desc_index"),
164 + verbose=options.verbose)
165 gen_index.run()
166 ret.append(gen_index.returncode)
167
168
169 diff --git a/cnf/repo.postsync.d/example b/cnf/repo.postsync.d/example
170 index 708c7c4b9..d1e385c11 100644
171 --- a/cnf/repo.postsync.d/example
172 +++ b/cnf/repo.postsync.d/example
173 @@ -52,7 +52,7 @@ if [ -n "${repository_name}" ]; then
174 if [[ ! -e ${repository_path}/metadata/pkg_desc_index || (
175 -d ${repository_path}/metadata/md5-cache &&
176 -n $(find "${repository_path}/metadata/md5-cache" -type f -newer "${repository_path}/metadata/pkg_desc_index" -print -quit) ) ]]; then
177 - if ! egencache --update-pkg-desc-index --repo="${repository_name}"
178 + if ! egencache --update-pkg-desc-index --repo="${repository_name}" ${PORTAGE_VERBOSE+--verbose}
179 then
180 echo "!!! egencache failed!"
181 ret=1
182
183 diff --git a/man/egencache.1 b/man/egencache.1
184 index 98b230a14..ae7370e21 100644
185 --- a/man/egencache.1
186 +++ b/man/egencache.1
187 @@ -111,6 +111,9 @@ due to invalid Manifest entries.
188 .BR "\-\-use\-local\-desc\-output=ULD_OUTPUT"
189 Output file for use.local.desc data (or '-' for stdout)
190 .TP
191 +.BR \-\-verbose ", " \-v
192 +Increase verbosity.
193 +.TP
194 .BR "\-\-write\-timestamp
195 Write metadata/timestamp.chk as required for rsync repositories
196 .SH "ENVIRONMENT OPTIONS"