Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 1.1, 1.1.1, and 1.1.2

hgcmd: take advantage of ui.progress API

Closes #1059

Changeset 54388578ecd3

Parent c0d4f8df1c2f

by Yuki KODAMA

Changes to 2 files · Browse files at 54388578ecd3 Showing diff from parent c0d4f8df1c2f Diff from another changeset...

 
277
278
279
 
 
 
 
 
 
280
281
282
 
313
314
315
 
 
 
 
 
 
 
316
317
318
 
355
356
357
 
358
359
360
 
482
483
484
 
 
 
 
 
 
485
486
487
488
489
490
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
491
492
493
 
277
278
279
280
281
282
283
284
285
286
287
288
 
319
320
321
322
323
324
325
326
327
328
329
330
331
 
368
369
370
371
372
373
374
 
496
497
498
499
500
501
502
503
504
505
506
507
508
 
 
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
@@ -277,6 +277,12 @@
  else:   raise _('unknown CmdWidget style: %s') % style   + # progress status frame + statframe = gtk.Frame() + statframe.set_border_width(4) + statframe.set_shadow_type(gtk.SHADOW_NONE) + self.pack_start(statframe, False, False) +   # progress bar box   self.progbox = progbox = gtklib.SlimToolbar(tooltips)   self.pack_start(progbox, False, False) @@ -313,6 +319,13 @@
  add_icon('succeed', gtk.STOCK_APPLY)   add_icon('error', gtk.STOCK_DIALOG_ERROR)   + # progres status label + self.progstat = gtk.Label() + statframe.add(self.progstat) + self.progstat.set_alignment(0, 0.5) + self.progstat.set_ellipsize(pango.ELLIPSIZE_END) + self.progstat.hide() +   # progress bar   self.pbar = gtk.ProgressBar()   progbox.append_widget(self.pbar, expand=True) @@ -355,6 +368,7 @@
  self.log.clear()     # prepare UI + self.inprogress = False   self.switch_to(working=True)   self.set_buttons(stop=True, close=False)   self.already_opened = self.get_pbar() @@ -482,12 +496,50 @@
    ### internal use functions ###   + def clear_progress(self): + self.pbar.set_fraction(0) + self.pbar.set_text('') + self.progstat.set_text('') + self.inprogress = False +   def update_progress(self):   if not self.pbar:   return   if not self.hgthread.isAlive(): - self.pbar.set_fraction(0) - else: + self.clear_progress() + return + + data = None + while self.hgthread.getprogqueue().qsize(): + try: + data = self.hgthread.getprogqueue().get_nowait() + except Queue.Empty: + pass + counting = False + if data: + topic, item, pos, total, unit = data + if pos is None: + self.clear_progress() + return + if total is None: + count = '%d' % pos + counting = True + else: + self.pbar.set_fraction(float(pos) / float(total)) + count = '%d / %d' % (pos, total) + if unit: + count += ' ' + unit + self.pbar.set_text(count) + if item: + status = '%s: %s' % (topic, item) + else: + status = _('Status: %s') % topic + self.progstat.set_text(status) + if self.progstat.get_property('visible') is False: + self.progstat.show() + self.inprogress = True + + if not self.inprogress or counting:   # pulse the progress bar every ~100ms   tm = shlib.get_system_times()[4]   if tm - self.last_pbar_update < 0.100:
 
25
26
27
28
 
29
30
31
32
33
34
 
35
36
37
38
39
 
40
41
42
 
90
91
92
 
 
 
93
94
95
 
103
104
105
 
106
107
 
108
109
110
 
117
118
119
 
 
 
120
121
122
 
25
26
27
 
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
92
93
94
95
96
97
98
99
100
 
108
109
110
111
112
 
113
114
115
116
 
123
124
125
126
127
128
129
130
131
@@ -25,18 +25,20 @@
  main thread to pickup.   '''   def __init__(self, src=None, outputq=None, errorq=None, dialogq=None, - responseq=None): + responseq=None, progressq=None):   super(GtkUi, self).__init__(src)   if src:   self.outputq = src.outputq   self.errorq = src.errorq   self.dialogq = src.dialogq   self.responseq = src.responseq + self.progressq = src.progressq   else:   self.outputq = outputq   self.errorq = errorq   self.dialogq = dialogq   self.responseq = responseq + self.progressq = progressq   self.setconfig('ui', 'interactive', 'on')   self.setconfig('progress', 'disable', 'True')   @@ -90,6 +92,9 @@
  raise util.Abort(_('response expected'))   return r   + def progress(self, topic, pos, item='', unit='', total=None): + self.progressq.put( (topic, item, pos, total, unit) ) +    class HgThread(thread2.Thread):   ''' @@ -103,8 +108,9 @@
  self.errorq = Queue.Queue()   self.dialogq = Queue.Queue()   self.responseq = Queue.Queue() + self.progressq = Queue.Queue()   self.ui = GtkUi(None, self.outputq, self.errorq, self.dialogq, - self.responseq) + self.responseq, self.progressq)   self.args = args   self.ret = None   self.postfunc = postfunc @@ -117,6 +123,9 @@
  def geterrqueue(self):   return self.errorq   + def getprogqueue(self): + return self.progressq +   def return_code(self):   '''   None - command is incomplete, possibly exited with exception