1 |
When DeletionIterator fails, report all stat() errors. Reporting |
2 |
just the first one results in confusing logs, suggesting that one |
3 |
of the location did not exist but the other existed and was removed. |
4 |
--- |
5 |
lib/portage/_emirrordist/DeletionIterator.py | 8 ++++---- |
6 |
1 file changed, 4 insertions(+), 4 deletions(-) |
7 |
|
8 |
diff --git a/lib/portage/_emirrordist/DeletionIterator.py b/lib/portage/_emirrordist/DeletionIterator.py |
9 |
index cd773b3c8..dab6eaea2 100644 |
10 |
--- a/lib/portage/_emirrordist/DeletionIterator.py |
11 |
+++ b/lib/portage/_emirrordist/DeletionIterator.py |
12 |
@@ -25,20 +25,20 @@ class DeletionIterator(object): |
13 |
distfiles_set.update(layout.get_filenames(distdir)) |
14 |
for filename in distfiles_set: |
15 |
# require at least one successful stat() |
16 |
- first_exception = None |
17 |
+ exceptions = [] |
18 |
for layout in reversed(self._config.layouts): |
19 |
try: |
20 |
st = os.stat( |
21 |
os.path.join(distdir, layout.get_path(filename))) |
22 |
except OSError as e: |
23 |
- first_exception = e |
24 |
+ exceptions.append(e) |
25 |
else: |
26 |
if stat.S_ISREG(st.st_mode): |
27 |
break |
28 |
else: |
29 |
- if first_exception is not None: |
30 |
+ if exceptions: |
31 |
logging.error("stat failed on '%s' in distfiles: %s\n" % |
32 |
- (filename, first_exception)) |
33 |
+ (filename, '; '.join(str(x) for x in exceptions))) |
34 |
continue |
35 |
|
36 |
if filename in file_owners: |
37 |
-- |
38 |
2.23.0 |