[Pkg-bazaar-commits] ./bzr/unstable r647: - split out updated progress indicator

Martin Pool mbp at sourcefrog.net
Fri Apr 10 08:20:35 UTC 2009


------------------------------------------------------------
revno: 647
committer: Martin Pool <mbp at sourcefrog.net>
timestamp: Fri 2005-06-10 16:34:26 +1000
message:
  - split out updated progress indicator
modified:
  patches/annotate4.patch
  patches/progress.diff
-------------- next part --------------
=== modified file 'patches/annotate4.patch'
--- a/patches/annotate4.patch	2005-06-10 06:32:17 +0000
+++ b/patches/annotate4.patch	2005-06-10 06:34:26 +0000
@@ -500,149 +500,6 @@
 +    test()
 +# arch-tag: d1541a25-eac5-4de9-a476-08a7cecd5683
 
-*** added file 'bzrlib/progress.py'
---- /dev/null 
-+++ bzrlib/progress.py 
-@@ -0,0 +1,138 @@
-+# Copyright (C) 2005 Aaron Bentley
-+# <aaron.bentley at utoronto.ca>
-+#
-+#    This program is free software; you can redistribute it and/or modify
-+#    it under the terms of the GNU General Public License as published by
-+#    the Free Software Foundation; either version 2 of the License, or
-+#    (at your option) any later version.
-+#
-+#    This program is distributed in the hope that it will be useful,
-+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+#    GNU General Public License for more details.
-+#
-+#    You should have received a copy of the GNU General Public License
-+#    along with this program; if not, write to the Free Software
-+#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+
-+import sys
-+import datetime
-+
-+class Progress(object):
-+    def __init__(self, units, current, total=None):
-+        self.units = units
-+        self.current = current
-+        self.total = total
-+
-+    def _get_percent(self):
-+        if self.total is not None and self.current is not None:
-+            return 100.0 * self.current / self.total
-+
-+    percent = property(_get_percent)
-+
-+    def __str__(self):
-+        if self.total is not None:
-+            return "%i of %i %s %.1f%%" % (self.current, self.total, self.units,
-+                                         self.percent)
-+        else:
-+            return "%i %s" (self.current, self.units) 
-+
-+class ProgressBar(object):
-+    def __init__(self):
-+        self.start = None
-+        object.__init__(self)
-+
-+    def __call__(self, progress):
-+        if self.start is None:
-+            self.start = datetime.datetime.now()
-+        progress_bar(progress, start_time=self.start)
-+        
-+def divide_timedelta(delt, divisor):
-+    """Divides a timedelta object"""
-+    return datetime.timedelta(float(delt.days)/divisor, 
-+                              float(delt.seconds)/divisor, 
-+                              float(delt.microseconds)/divisor)
-+
-+def str_tdelta(delt):
-+    if delt is None:
-+        return "-:--:--"
-+    return str(datetime.timedelta(delt.days, delt.seconds))
-+
-+def get_eta(start_time, progress, enough_samples=20):
-+    if start_time is None or progress.current == 0:
-+        return None
-+    elif progress.current < enough_samples:
-+        return None
-+    elapsed = datetime.datetime.now() - start_time
-+    total_duration = divide_timedelta((elapsed) * long(progress.total), 
-+                                      progress.current)
-+    if elapsed < total_duration:
-+        eta = total_duration - elapsed
-+    else:
-+        eta = total_duration - total_duration
-+    return eta
-+
-+def progress_bar(progress, start_time=None):
-+    eta = get_eta(start_time, progress)
-+    if start_time is not None:
-+        eta_str = " "+str_tdelta(eta)
-+    else:
-+        eta_str = ""
-+
-+    fmt = " %i of %i %s (%.1f%%)"
-+    f = fmt % (progress.total, progress.total, progress.units, 100.0)
-+    max = len(f)
-+    cols = 77 - max
-+    if start_time is not None:
-+        cols -= len(eta_str)
-+    markers = int (float(cols) * progress.current / progress.total)
-+    txt = fmt % (progress.current, progress.total, progress.units,
-+                 progress.percent)
-+    sys.stderr.write("\r[%s%s]%s%s" % ('='*markers, ' '*(cols-markers), txt, 
-+                                       eta_str))
-+
-+def clear_progress_bar():
-+    sys.stderr.write('\r%s\r' % (' '*79))
-+
-+def spinner_str(progress, show_text=False):
-+    """
-+    Produces the string for a textual "spinner" progress indicator
-+    :param progress: an object represinting current progress
-+    :param show_text: If true, show progress text as well
-+    :return: The spinner string
-+
-+    >>> spinner_str(Progress("baloons", 0))
-+    '|'
-+    >>> spinner_str(Progress("baloons", 5))
-+    '/'
-+    >>> spinner_str(Progress("baloons", 6), show_text=True)
-+    '- 6 baloons'
-+    """
-+    positions = ('|', '/', '-', '\\')
-+    text = positions[progress.current % 4]
-+    if show_text:
-+        text+=" %i %s" % (progress.current, progress.units)
-+    return text
-+
-+def spinner(progress, show_text=False, output=sys.stderr):
-+    """
-+    Update a spinner progress indicator on an output
-+    :param progress: The progress to display
-+    :param show_text: If true, show text as well as spinner
-+    :param output: The output to write to
-+
-+    >>> spinner(Progress("baloons", 6), show_text=True, output=sys.stdout)
-+    \r- 6 baloons
-+    """
-+    output.write('\r%s' % spinner_str(progress, show_text))
-+
-+def run_tests():
-+    import doctest
-+    result = doctest.testmod()
-+    if result[1] > 0:
-+        if result[0] == 0:
-+            print "All tests passed"
-+    else:
-+        print "No tests to run"
-+if __name__ == "__main__":
-+    run_tests()
-
 *** added directory 'testdata'
 *** added file 'testdata/diff'
 --- /dev/null 

=== modified file 'patches/progress.diff'
--- a/patches/progress.diff	2005-06-10 06:29:35 +0000
+++ b/patches/progress.diff	2005-06-10 06:34:26 +0000
@@ -1,7 +1,7 @@
 *** added file 'bzrlib/progress.py'
 --- /dev/null 
 +++ bzrlib/progress.py 
-@@ -0,0 +1,91 @@
+@@ -0,0 +1,138 @@
 +# Copyright (C) 2005 Aaron Bentley
 +# <aaron.bentley at utoronto.ca>
 +#
@@ -20,15 +20,19 @@
 +#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 +
 +import sys
++import datetime
 +
 +class Progress(object):
 +    def __init__(self, units, current, total=None):
 +        self.units = units
 +        self.current = current
 +        self.total = total
-+        self.percent = None
-+        if self.total is not None:
-+            self.percent = 100.0 * current / total
++
++    def _get_percent(self):
++        if self.total is not None and self.current is not None:
++            return 100.0 * self.current / self.total
++
++    percent = property(_get_percent)
 +
 +    def __str__(self):
 +        if self.total is not None:
@@ -37,16 +41,59 @@
 +        else:
 +            return "%i %s" (self.current, self.units) 
 +
-+
-+def progress_bar(progress):
++class ProgressBar(object):
++    def __init__(self):
++        self.start = None
++        object.__init__(self)
++
++    def __call__(self, progress):
++        if self.start is None:
++            self.start = datetime.datetime.now()
++        progress_bar(progress, start_time=self.start)
++        
++def divide_timedelta(delt, divisor):
++    """Divides a timedelta object"""
++    return datetime.timedelta(float(delt.days)/divisor, 
++                              float(delt.seconds)/divisor, 
++                              float(delt.microseconds)/divisor)
++
++def str_tdelta(delt):
++    if delt is None:
++        return "-:--:--"
++    return str(datetime.timedelta(delt.days, delt.seconds))
++
++def get_eta(start_time, progress, enough_samples=20):
++    if start_time is None or progress.current == 0:
++        return None
++    elif progress.current < enough_samples:
++        return None
++    elapsed = datetime.datetime.now() - start_time
++    total_duration = divide_timedelta((elapsed) * long(progress.total), 
++                                      progress.current)
++    if elapsed < total_duration:
++        eta = total_duration - elapsed
++    else:
++        eta = total_duration - total_duration
++    return eta
++
++def progress_bar(progress, start_time=None):
++    eta = get_eta(start_time, progress)
++    if start_time is not None:
++        eta_str = " "+str_tdelta(eta)
++    else:
++        eta_str = ""
++
 +    fmt = " %i of %i %s (%.1f%%)"
 +    f = fmt % (progress.total, progress.total, progress.units, 100.0)
 +    max = len(f)
 +    cols = 77 - max
++    if start_time is not None:
++        cols -= len(eta_str)
 +    markers = int (float(cols) * progress.current / progress.total)
 +    txt = fmt % (progress.current, progress.total, progress.units,
 +                 progress.percent)
-+    sys.stderr.write("\r[%s%s]%s" % ('='*markers, ' '*(cols-markers), txt))
++    sys.stderr.write("\r[%s%s]%s%s" % ('='*markers, ' '*(cols-markers), txt, 
++                                       eta_str))
 +
 +def clear_progress_bar():
 +    sys.stderr.write('\r%s\r' % (' '*79))



More information about the Pkg-bazaar-commits mailing list