On 1/8/19 5:42 AM, Fabian Groffen wrote:
> The reporting of files remaining can look somewhat odd since the report
> interval is hardcoded to be per 1000 objects.  Adjust this interval to
> be time based.  This means that modern (fast) machines likely will never
> see the countdown messages at all.  On slow setups the message will be
> informative that there is progress, albeit rather slowly.  While at it,
> report percentage done.
> 
> Output before this patch:
> 
>  * checking 6158 files for package collisions
> 5158 files remaining ...
> 4158 files remaining ...
> 3158 files remaining ...
> 2158 files remaining ...
> 1158 files remaining ...
> 158 files remaining ...
> 
> Possible output after this patch on a slower machine:
> 
>  * checking 6158 files for package collisions
>  48% done, 3145 files remaining ...
>  96% done, 192 files remaining ...
> 100% done
> 
> Signed-off-by: Fabian Groffen <grob...@gentoo.org>
> ---
>  lib/portage/dbapi/vartree.py | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/lib/portage/dbapi/vartree.py b/lib/portage/dbapi/vartree.py
> index 4b91caea8..244195fad 100644
> --- a/lib/portage/dbapi/vartree.py
> +++ b/lib/portage/dbapi/vartree.py
> @@ -3475,13 +3475,18 @@ class dblink(object):
>                       symlink_collisions = []
>                       destroot = self.settings['ROOT']
>                       totfiles = len(file_list) + len(symlink_list)
> +                     tnow = time.time()
> +                     tinterv = 2  # seconds
> +                     ninterv = tnow + tinterv
>                       showMessage(_(" %s checking %d files for package 
> collisions\n") % \
>                               (colorize("GOOD", "*"), totfiles))
>                       for i, (f, f_type) in enumerate(chain(
>                               ((f, "reg") for f in file_list),
>                               ((f, "sym") for f in symlink_list))):
> -                             if i % 1000 == 0 and i != 0:
> -                                     showMessage(_("%d files remaining 
> ...\n") % (totfiles - i))
> +                             if time.time() > ninterv:
> +                                     showMessage(_("%3d%% done, %d files 
> remaining ...\n") %
> +                                                     (i * 100 / totfiles, 
> totfiles - i))
> +                                     ninterv = time.time() + tinterv
>  
>                               dest_path = normalize_path(
>                                       os.path.join(destroot, 
> f.lstrip(os.path.sep)))
> @@ -3570,6 +3575,8 @@ class dblink(object):
>                                                       break
>                                       if stopmerge:
>                                               collisions.append(f)
> +                     if tnow + tinterv < ninterv:
> +                             showMessage(_("100% done\n"))
>                       return collisions, dirs_ro, symlink_collisions, 
> plib_collisions
>  
>       def _lstat_inode_map(self, path_iter):
> 

Please replace time.time() with portage.util.monotonic.monotonic().
-- 
Thanks,
Zac

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to