public inbox for gentoo-portage-dev@lists.gentoo.org
 help / color / mirror / Atom feed
From: Fabian Groffen <grobian@gentoo.org>
To: gentoo-portage-dev@lists.gentoo.org
Cc: Fabian Groffen <grobian@gentoo.org>
Subject: [gentoo-portage-dev] [PATCH v5] collision_protect: use dynamic report interval
Date: Thu, 10 Jan 2019 16:30:14 +0100	[thread overview]
Message-ID: <20190110153013.6186-1-grobian@gentoo.org> (raw)
In-Reply-To: <20190109083323.3590-1-grobian@gentoo.org>

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 <grobian@gentoo.org>
---
 lib/portage/dbapi/vartree.py | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/lib/portage/dbapi/vartree.py b/lib/portage/dbapi/vartree.py
index 4b91caea8..909c0e473 100644
--- a/lib/portage/dbapi/vartree.py
+++ b/lib/portage/dbapi/vartree.py
@@ -35,6 +35,7 @@ portage.proxy.lazyimport.lazyimport(globals(),
 	'portage.util.install_mask:install_mask_dir,InstallMask',
 	'portage.util.listdir:dircache,listdir',
 	'portage.util.movefile:movefile',
+	'portage.util.monotonic:monotonic',
 	'portage.util.path:first_existing,iter_parents',
 	'portage.util.writeable_check:get_ro_checker',
 	'portage.util._xattr:xattr',
@@ -3475,13 +3476,21 @@ class dblink(object):
 			symlink_collisions = []
 			destroot = self.settings['ROOT']
 			totfiles = len(file_list) + len(symlink_list)
+			previous = monotonic()
+			progress_shown = False
+			report_interval = 1.7  # seconds
+			falign = len("%d" % totfiles)
 			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))
+				current = monotonic()
+				if current - previous > report_interval:
+					showMessage(_("%3d%% done,  %*d files remaining ...\n") %
+							(i * 100 / totfiles, falign, totfiles - i))
+					previous = current
+					progress_shown = True
 
 				dest_path = normalize_path(
 					os.path.join(destroot, f.lstrip(os.path.sep)))
@@ -3570,6 +3579,8 @@ class dblink(object):
 							break
 					if stopmerge:
 						collisions.append(f)
+			if progress_shown:
+				showMessage(_("100% done\n"))
 			return collisions, dirs_ro, symlink_collisions, plib_collisions
 
 	def _lstat_inode_map(self, path_iter):
-- 
2.20.1



  parent reply	other threads:[~2019-01-10 15:30 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-07 14:31 [gentoo-portage-dev] [PATCH] lib/portage/dbapi/vartree: use dynamic report interval in _collision_protect Fabian Groffen
2019-01-07 18:54 ` Zac Medico
2019-01-07 19:05 ` Michał Górny
2019-01-08  8:09   ` [gentoo-portage-dev] [PATCH] collision_protect: use dynamic report interval Fabian Groffen
2019-01-08  8:17     ` Ulrich Mueller
2019-01-08  8:18       ` Fabian Groffen
2019-01-08 13:42 ` [gentoo-portage-dev] [PATCH v3] " Fabian Groffen
2019-01-08 19:15   ` Zac Medico
2019-01-08 20:59     ` M. J. Everitt
2019-01-09  8:09       ` Fabian Groffen
2019-01-09  8:33   ` [gentoo-portage-dev] [PATCH v4] " Fabian Groffen
2019-01-10  5:22     ` Zac Medico
2019-01-10  8:22       ` Fabian Groffen
2019-01-10 15:30     ` Fabian Groffen [this message]
2019-01-11  4:37       ` [gentoo-portage-dev] [PATCH v5] " Zac Medico
2019-01-11 10:16         ` Fabian Groffen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190110153013.6186-1-grobian@gentoo.org \
    --to=grobian@gentoo.org \
    --cc=gentoo-portage-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox