~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/progress.py

  • Committer: Martin Pool
  • Date: 2005-06-17 07:34:04 UTC
  • Revision ID: mbp@sourcefrog.net-20050617073404-7c914dc1bd15f38a
- don't display progress bars on really dumb terminals

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
17
 
18
18
 
19
 
"""Simple text-mode progress indicator.
 
19
"""
 
20
Simple text-mode progress indicator.
 
21
 
 
22
Everyone loves ascii art!
20
23
 
21
24
To display an indicator, create a ProgressBar object.  Call it,
22
25
passing Progress objects indicating the current state.  When done,
26
29
not to clutter log files.
27
30
"""
28
31
 
 
32
# TODO: remove functions in favour of keeping everything in one class
 
33
 
29
34
# TODO: should be a global option e.g. --silent that disables progress
30
35
# indicators, preferably without needing to adjust all code that
31
36
# potentially calls them.
32
37
 
33
 
# TODO: If not on a tty perhaps just print '......' for the benefit of IDEs, etc
34
 
 
35
 
# TODO: Optionally show elapsed time instead/as well as ETA; nicer
36
 
# when the rate is unpredictable
 
38
# TODO: Perhaps don't write updates faster than a certain rate, say
 
39
# 5/second.
37
40
 
38
41
 
39
42
import sys
115
118
        self.show_bar = show_bar
116
119
        self.show_count = show_count
117
120
 
118
 
        self.width = _width()
119
 
        
120
121
 
121
122
    def tick(self):
122
123
        self.update(self.last_msg, self.last_cnt, self.last_total)
143
144
 
144
145
        self.last_update = now
145
146
        
 
147
        width = _width()
 
148
 
146
149
        if total_cnt:
147
150
            assert current_cnt <= total_cnt
148
151
        if current_cnt:
182
185
 
183
186
        if self.show_bar:
184
187
            # progress bar, if present, soaks up all remaining space
185
 
            cols = self.width - 1 - len(msg) - len(spin_str) - len(pct_str) \
 
188
            cols = width - 1 - len(msg) - len(spin_str) - len(pct_str) \
186
189
                   - len(eta_str) - len(count_str) - 3
187
190
 
188
191
            if total_cnt:
203
206
 
204
207
        m = spin_str + bar_str + msg + count_str + pct_str + eta_str
205
208
 
206
 
        assert len(m) < self.width
207
 
        self.to_file.write('\r' + m.ljust(self.width - 1))
 
209
        assert len(m) < width
 
210
        self.to_file.write('\r' + m.ljust(width - 1))
208
211
        #self.to_file.flush()
209
212
            
210
213
 
212
215
        if self.suppressed:
213
216
            return
214
217
        
215
 
        self.to_file.write('\r%s\r' % (' ' * (self.width - 1)))
 
218
        self.to_file.write('\r%s\r' % (' ' * (_width() - 1)))
216
219
        #self.to_file.flush()        
217
220
    
218
221