[game-data-packager] 03/03: Make progress bar display time-based, not size-based

Simon McVittie smcv at debian.org
Tue Feb 2 21:53:04 UTC 2016


This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to branch master
in repository game-data-packager.

commit 54a3b9319ceab71180f48e84f6e540935efdb230
Author: Simon McVittie <smcv at debian.org>
Date:   Tue Feb 2 21:48:41 2016 +0000

    Make progress bar display time-based, not size-based
---
 game_data_packager/build.py        | 45 +++++++++-----------------------------
 game_data_packager/command_line.py |  7 +++++-
 game_data_packager/data.py         |  9 +++++---
 3 files changed, 22 insertions(+), 39 deletions(-)

diff --git a/game_data_packager/build.py b/game_data_packager/build.py
index 0653d5a..873e0aa 100644
--- a/game_data_packager/build.py
+++ b/game_data_packager/build.py
@@ -60,12 +60,6 @@ if FORMAT == 'deb':
 logging.basicConfig()
 logger = logging.getLogger(__name__)
 
-# arbitrary cutoff for providing progress bars
-if os.path.isfile('/etc/rpi-issue'):
-    QUITE_LARGE = 10 * MEBIBYTE
-else:
-    QUITE_LARGE = 50 * MEBIBYTE
-
 class FillResult(Enum):
     UNDETERMINED = 0
     IMPOSSIBLE = 1
@@ -247,7 +241,7 @@ class PackagingTask(object):
         self.compress_deb = game.compress_deb
 
         # Factory for a progress report (or None).
-        self.progress_factory = lambda: None
+        self.progress_factory = lambda info=None: None
 
         self.game.load_file_data()
 
@@ -302,14 +296,8 @@ class PackagingTask(object):
             return False
 
         if hashes is None:
-            if size > QUITE_LARGE:
-                logger.info('checking %s', path)
-                progress = self.progress_factory()
-            else:
-                progress = None
-
             hashes = HashedFile.from_file(path, open(path, 'rb'), size=size,
-                    progress=progress)
+                    progress=self.progress_factory(info='checking %s' % path))
 
         for wanted in remaining:
             if not wanted.skip_hash_matching and not hashes.matches(wanted):
@@ -622,16 +610,12 @@ class PackagingTask(object):
 
                 wf = open(tmp, 'wb')
 
-                if entry.size is not None and entry.size > QUITE_LARGE:
-                    progress = self.progress_factory()
-                    logger.info('extracting %s from %s', entry.name, name)
-                else:
-                    progress = None
-                    logger.debug('extracting %s from %s', entry.name, name)
-
                 hf = HashedFile.from_file(
                         name + '//' + entry.name, entryfile, wf,
-                        size=entry.size, progress=progress)
+                        size=entry.size,
+                        progress=self.progress_factory(
+                            info='extracting %s from %s' % (entry.name, name)),
+                        )
                 wf.close()
 
                 if entry.mtime is not None:
@@ -671,14 +655,11 @@ class PackagingTask(object):
                     for p in other_parts:
                         yield open(self.found[p], 'rb')
 
-                if wanted.size >= QUITE_LARGE:
-                    progress = self.progress_factory()
-                else:
-                    progress = None
-
                 hasher = HashedFile.from_concatenated_files(wanted.name,
                         open_files(), writer, size=wanted.size,
-                        progress=progress)
+                        progress=self.progress_factory(info='building %s' %
+                            wanted.name),
+                        )
             orig_time = os.stat(self.found[provider.name]).st_mtime
             os.utime(path, (orig_time, orig_time))
             self.use_file(wanted.name, (wanted,), path, hasher)
@@ -2727,11 +2708,5 @@ class PackagingTask(object):
         if hashes is not None:
             return hashes
 
-        if size > QUITE_LARGE:
-            logger.info('identifying %s', path)
-            progress = self.progress_factory()
-        else:
-            progress = None
-
         return HashedFile.from_file(path, open(path, 'rb'), size=size,
-                progress=progress)
+                progress=self.progress_factory(info='identifying %s' % path))
diff --git a/game_data_packager/command_line.py b/game_data_packager/command_line.py
index ab3d524..88ecf67 100644
--- a/game_data_packager/command_line.py
+++ b/game_data_packager/command_line.py
@@ -34,7 +34,7 @@ from .util import (human_size)
 logger = logging.getLogger(__name__)
 
 class TerminalProgress(ProgressCallback):
-    def __init__(self, interval=0.2):
+    def __init__(self, interval=0.2, info=None):
         """Constructor.
 
         Progress will update at most once per @interval seconds, unless we
@@ -43,6 +43,7 @@ class TerminalProgress(ProgressCallback):
         self.pad = ' '
         self.interval = interval
         self.ts = time.time()
+        self.info = info
 
     def __call__(self, done=None, total=None, checkpoint=False):
         ts = time.time()
@@ -50,6 +51,10 @@ class TerminalProgress(ProgressCallback):
         if done is None or (ts < self.ts + self.interval and not checkpoint):
             return
 
+        if self.info is not None:
+            print(self.info, file=sys.stderr)
+            self.info = None
+
         if done is None or total == 0:
             s = ''
         elif total is None or total == 0:
diff --git a/game_data_packager/data.py b/game_data_packager/data.py
index f63cd06..bde3d0b 100644
--- a/game_data_packager/data.py
+++ b/game_data_packager/data.py
@@ -57,15 +57,18 @@ class HashedFile:
         sha256 = hashlib.new('sha256')
         done = 0
 
-        with (progress or ProgressCallback()) as update_progress:
+        if progress is None:
+            progress = ProgressCallback()
+
+        with progress:
             for f in fs:
                 while True:
-                    update_progress(done, size)
+                    progress(done, size)
 
                     blob = f.read(io.DEFAULT_BUFFER_SIZE)
 
                     if not blob:
-                        update_progress(done, size, checkpoint=True)
+                        progress(done, size, checkpoint=True)
                         break
 
                     done += len(blob)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/game-data-packager.git



More information about the Pkg-games-commits mailing list