[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