1 |
When the --verbose flag is given, make --update-pkg-desc-index emulate |
2 |
esync --verbose output. Example: |
3 |
|
4 |
* Searching for changes |
5 |
|
6 |
[ N] acct-group/ultimaker (0): Group for ultimaker |
7 |
[ N] acct-user/ultimaker (0): User for ultimaker |
8 |
[ U] www-client/opera (70.0.3728.144): A fast and secure web browser |
9 |
[MU] www-client/opera-developer (72.0.3798.0): A fast and secure web browser |
10 |
[ U] x11-libs/gtksourceview (4.6.1-r1): A text widget implementing syntax highlighting and other features |
11 |
|
12 |
Bug: https://bugs.gentoo.org/737470 |
13 |
Signed-off-by: Zac Medico <zmedico@g.o> |
14 |
--- |
15 |
bin/egencache | 68 ++++++++++++++++++++++++++++++++++++++++++++++--- |
16 |
man/egencache.1 | 3 +++ |
17 |
2 files changed, 67 insertions(+), 4 deletions(-) |
18 |
|
19 |
diff --git a/bin/egencache b/bin/egencache |
20 |
index 264c600fe..968d5706f 100755 |
21 |
--- a/bin/egencache |
22 |
+++ b/bin/egencache |
23 |
@@ -35,6 +35,7 @@ else: |
24 |
|
25 |
signal.signal(debug_signum, debug_signal) |
26 |
|
27 |
+import functools |
28 |
import io |
29 |
import logging |
30 |
import subprocess |
31 |
@@ -50,8 +51,9 @@ portage._internal_caller = True |
32 |
from portage import os, _encodings, _unicode_encode, _unicode_decode |
33 |
from _emerge.MetadataRegen import MetadataRegen |
34 |
from portage.cache.cache_errors import CacheError, StatCollision |
35 |
-from portage.cache.index.pkg_desc_index import pkg_desc_index_line_format |
36 |
+from portage.cache.index.pkg_desc_index import pkg_desc_index_line_format, pkg_desc_index_line_read |
37 |
from portage.const import TIMESTAMP_FORMAT |
38 |
+from portage.output import colorize, EOutput |
39 |
from portage.package.ebuild._parallel_manifest.ManifestScheduler import ManifestScheduler |
40 |
from portage.util import cmp_sort_key, writemsg_level |
41 |
from portage.util._async.AsyncFunction import AsyncFunction |
42 |
@@ -131,6 +133,9 @@ def parse_args(args): |
43 |
common.add_argument("--ignore-default-opts", |
44 |
action="store_true", |
45 |
help="do not use the EGENCACHE_DEFAULT_OPTS environment variable") |
46 |
+ common.add_argument("-v", "--verbose", |
47 |
+ action="count", default=0, |
48 |
+ help="increase verbosity") |
49 |
common.add_argument("--write-timestamp", |
50 |
action="store_true", |
51 |
help="write metadata/timestamp.chk as required for rsync repositories") |
52 |
@@ -448,13 +453,26 @@ class GenCache: |
53 |
trg_cache._prune_empty_dirs() |
54 |
|
55 |
class GenPkgDescIndex: |
56 |
- def __init__(self, portdb, output_file): |
57 |
+ def __init__(self, portdb, output_file, verbose=False): |
58 |
self.returncode = os.EX_OK |
59 |
self._portdb = portdb |
60 |
self._output_file = output_file |
61 |
+ self._verbose = verbose |
62 |
|
63 |
def run(self): |
64 |
|
65 |
+ display_updates = self._verbose > 0 |
66 |
+ old = {} |
67 |
+ new = {} |
68 |
+ if display_updates: |
69 |
+ try: |
70 |
+ with open(self._output_file, 'rt', encoding=_encodings["repo.content"]) as f: |
71 |
+ for line in f: |
72 |
+ pkg_desc = pkg_desc_index_line_read(line) |
73 |
+ old[pkg_desc.cp] = pkg_desc |
74 |
+ except FileNotFoundError: |
75 |
+ pass |
76 |
+ |
77 |
portage.util.ensure_dirs(os.path.dirname(self._output_file)) |
78 |
f = portage.util.atomic_ofstream(self._output_file, |
79 |
encoding=_encodings["repo.content"]) |
80 |
@@ -466,10 +484,51 @@ class GenPkgDescIndex: |
81 |
continue |
82 |
desc, = portdb.aux_get(pkgs[-1], ["DESCRIPTION"]) |
83 |
|
84 |
- f.write(pkg_desc_index_line_format(cp, pkgs, desc)) |
85 |
+ line = pkg_desc_index_line_format(cp, pkgs, desc) |
86 |
+ f.write(line) |
87 |
+ if display_updates: |
88 |
+ new[cp] = pkg_desc_index_line_read(line) |
89 |
|
90 |
f.close() |
91 |
|
92 |
+ if display_updates: |
93 |
+ out = EOutput() |
94 |
+ out.einfo("Searching for changes") |
95 |
+ print("") |
96 |
+ items = sorted(new.values(), key=lambda pkg_desc: pkg_desc.cp) |
97 |
+ haspkgs = False |
98 |
+ for pkg_desc in items: |
99 |
+ masked = False |
100 |
+ version = self._portdb.xmatch("bestmatch-visible", pkg_desc.cp) |
101 |
+ if not version: |
102 |
+ version = pkg_desc.cpv_list[-1] |
103 |
+ masked = True |
104 |
+ old_versions = old.get(pkg_desc.cp) |
105 |
+ if old_versions is None or version not in old_versions.cpv_list: |
106 |
+ prefix0 = " " |
107 |
+ prefix1 = " " |
108 |
+ |
109 |
+ if old_versions is None: |
110 |
+ color = functools.partial(colorize, "darkgreen") |
111 |
+ prefix1 = "N" |
112 |
+ else: |
113 |
+ color = functools.partial(colorize, "turquoise") |
114 |
+ prefix1 = "U" |
115 |
+ |
116 |
+ if masked: |
117 |
+ prefix0 = "M" |
118 |
+ |
119 |
+ print(" [%s%s] %s (%s): %s" % ( |
120 |
+ colorize("red", prefix0), |
121 |
+ color(prefix1), |
122 |
+ colorize("bold", pkg_desc.cp), |
123 |
+ color(version[len(pkg_desc.cp)+1:]), |
124 |
+ pkg_desc.desc)) |
125 |
+ haspkgs = True |
126 |
+ |
127 |
+ if not haspkgs: |
128 |
+ out.einfo("No updates found") |
129 |
+ |
130 |
class GenUseLocalDesc: |
131 |
def __init__(self, portdb, output=None, |
132 |
preserve_comments=False): |
133 |
@@ -1053,7 +1112,8 @@ def egencache_main(args): |
134 |
level=logging.WARNING, noiselevel=-1) |
135 |
|
136 |
gen_index = GenPkgDescIndex(portdb, os.path.join( |
137 |
- writable_location, "metadata", "pkg_desc_index")) |
138 |
+ writable_location, "metadata", "pkg_desc_index"), |
139 |
+ verbose=options.verbose) |
140 |
gen_index.run() |
141 |
ret.append(gen_index.returncode) |
142 |
|
143 |
diff --git a/man/egencache.1 b/man/egencache.1 |
144 |
index 98b230a14..ae7370e21 100644 |
145 |
--- a/man/egencache.1 |
146 |
+++ b/man/egencache.1 |
147 |
@@ -111,6 +111,9 @@ due to invalid Manifest entries. |
148 |
.BR "\-\-use\-local\-desc\-output=ULD_OUTPUT" |
149 |
Output file for use.local.desc data (or '-' for stdout) |
150 |
.TP |
151 |
+.BR \-\-verbose ", " \-v |
152 |
+Increase verbosity. |
153 |
+.TP |
154 |
.BR "\-\-write\-timestamp |
155 |
Write metadata/timestamp.chk as required for rsync repositories |
156 |
.SH "ENVIRONMENT OPTIONS" |
157 |
-- |
158 |
2.25.3 |