[PATCH 2 of 4] Add a progress bar for events in which the maxval is unknown
Stefano
stefano at inventati.org
Fri May 2 08:28:21 CDT 2008
Matt Mackall wrote:
> So we print a dot for every step in the op? What if there are 100k
> steps? Also, seems this should have been derived from the other class.
>
Actually during cloning that's not an issue since it prints less than 10
points.
Anyway you're right, it would be better to do logarithmic dots.
What do you think about something like using a rotating bar? (see patch
attached)
It works on Unix, Windows and MacOs as well.
I think that for this to make sense I should update the 'progress bar' more
often in clone. Could this lead to performance issues?
As far as the inheritance from noprogress is concerned, there are no
practical consequences
in this case (indeed in the attached patch I derive from progress) since
every function has
been overridden.
From a logical point of view it depends on whether we call the
percentage class 'progress' or 'progresspercentage'. In the second case
progressnoval would be a logical specialization
of noprogress (I mean, at the same level of progresspercentage).
Stefano
diff --git a/mercurial/progress.py b/mercurial/progress.py
--- a/mercurial/progress.py
+++ b/mercurial/progress.py
@@ -76,7 +76,7 @@
self._clean = True
self._fd.write('\n')
-class progressnoval(noprogress):
+class progressnoval(progress):
"""Simple progress indicator with no maxval"""
@@ -85,13 +85,17 @@
self._fd = fd
self._clean = True
self.update()
+ self.pos = 0
+ self._status = '|/-\\|/-\\'
def update(self):
if self._clean:
self._clean = False
- self._fd.write('%s' % self._msg)
+ self._fd.write('%s\n' % self._msg)
else:
- self._fd.write('.')
+ self.pos = (self.pos + 1) % len(self._status)
+ self._fd.write('\r%s' % self._status[self.pos])
+ self._fd.flush()
def finish(self):
self._fd.write('done!')
More information about the Mercurial-devel
mailing list