[PATCH] emirrordist: Report all stat() errors instead of first one

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

[PATCH] emirrordist: Report all stat() errors instead of first one

Michał Górny-5
When DeletionIterator fails, report all stat() errors.  Reporting
just the first one results in confusing logs, suggesting that one
of the location did not exist but the other existed and was removed.
---
 lib/portage/_emirrordist/DeletionIterator.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/lib/portage/_emirrordist/DeletionIterator.py b/lib/portage/_emirrordist/DeletionIterator.py
index cd773b3c8..dab6eaea2 100644
--- a/lib/portage/_emirrordist/DeletionIterator.py
+++ b/lib/portage/_emirrordist/DeletionIterator.py
@@ -25,20 +25,20 @@ class DeletionIterator(object):
  distfiles_set.update(layout.get_filenames(distdir))
  for filename in distfiles_set:
  # require at least one successful stat()
- first_exception = None
+ exceptions = []
  for layout in reversed(self._config.layouts):
  try:
  st = os.stat(
  os.path.join(distdir, layout.get_path(filename)))
  except OSError as e:
- first_exception = e
+ exceptions.append(e)
  else:
  if stat.S_ISREG(st.st_mode):
  break
  else:
- if first_exception is not None:
+ if exceptions:
  logging.error("stat failed on '%s' in distfiles: %s\n" %
- (filename, first_exception))
+ (filename, '; '.join(str(x) for x in exceptions)))
  continue
 
  if filename in file_owners:
--
2.23.0


Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] emirrordist: Report all stat() errors instead of first one

Zac Medico-2
On 10/20/19 2:54 AM, Michał Górny wrote:

> When DeletionIterator fails, report all stat() errors.  Reporting
> just the first one results in confusing logs, suggesting that one
> of the location did not exist but the other existed and was removed.
> ---
>  lib/portage/_emirrordist/DeletionIterator.py | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/lib/portage/_emirrordist/DeletionIterator.py b/lib/portage/_emirrordist/DeletionIterator.py
> index cd773b3c8..dab6eaea2 100644
> --- a/lib/portage/_emirrordist/DeletionIterator.py
> +++ b/lib/portage/_emirrordist/DeletionIterator.py
> @@ -25,20 +25,20 @@ class DeletionIterator(object):
>   distfiles_set.update(layout.get_filenames(distdir))
>   for filename in distfiles_set:
>   # require at least one successful stat()
> - first_exception = None
> + exceptions = []
>   for layout in reversed(self._config.layouts):
>   try:
>   st = os.stat(
>   os.path.join(distdir, layout.get_path(filename)))
>   except OSError as e:
> - first_exception = e
> + exceptions.append(e)
>   else:
>   if stat.S_ISREG(st.st_mode):
>   break
>   else:
> - if first_exception is not None:
> + if exceptions:
>   logging.error("stat failed on '%s' in distfiles: %s\n" %
> - (filename, first_exception))
> + (filename, '; '.join(str(x) for x in exceptions)))
>   continue
>  
>   if filename in file_owners:
>
Looks good. Please merge.
--
Thanks,
Zac


signature.asc (1000 bytes) Download Attachment