From b1168ffadaff387a8b7ab9a9c861073035c505a8 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Thu, 16 Apr 2009 08:00:42 -0700 Subject: [PATCH] Don't divide by zero in progress meter If there are no projects to fetch, the progress meter would have divided by zero during `repo sync`, and that throws a ZeroDivisionError. Instead we report the progress with an unknown amount remaining. Signed-off-by: Shawn O. Pearce --- progress.py | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/progress.py b/progress.py index 89d6c5ba..580ae884 100644 --- a/progress.py +++ b/progress.py @@ -16,7 +16,7 @@ import sys class Progress(object): - def __init__(self, title, total): + def __init__(self, title, total=0): self._title = title self._total = total self._done = 0 @@ -24,22 +24,35 @@ class Progress(object): def update(self, inc=1): self._done += inc - p = (100 * self._done) / self._total - if self._lastp != p: - self._lastp = p - sys.stderr.write('\r%s: %3d%% (%d/%d) ' % ( + if self._total <= 0: + sys.stderr.write('\r%s: %d, ' % ( + self._title, + self._done)) + sys.stderr.flush() + else: + p = (100 * self._done) / self._total + + if self._lastp != p: + self._lastp = p + sys.stderr.write('\r%s: %3d%% (%d/%d) ' % ( + self._title, + p, + self._done, + self._total)) + sys.stderr.flush() + + def end(self): + if self._total <= 0: + sys.stderr.write('\r%s: %d, done. \n' % ( + self._title, + self._done)) + sys.stderr.flush() + else: + p = (100 * self._done) / self._total + sys.stderr.write('\r%s: %3d%% (%d/%d), done. \n' % ( self._title, p, self._done, self._total)) sys.stderr.flush() - - def end(self): - p = (100 * self._done) / self._total - sys.stderr.write('\r%s: %3d%% (%d/%d), done. \n' % ( - self._title, - p, - self._done, - self._total)) - sys.stderr.flush()