Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 0.7, 0.7.1, and 0.7.2

rename: further robustness improvements

Catch stderr and util.Abort(). Exit on success only

Changeset 285d2dcec3a4

Parent 8ae7eb737959

by Steve Borho

Changes to one file · Browse files at 285d2dcec3a4 Showing diff from parent 8ae7eb737959 Diff from another changeset...

Change 1 of 2 Show Changes Only hggtk/​rename.py Stacked
1
2
3
4
5
6
7
8
9
 
10
 
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
 
 
 
61
62
63
64
65
66
67
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
69
70
71
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
 
 
 
 
 
 
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 #  # rename.py - TortoiseHg's dialogs for handling renames  #  # Copyright (C) 2009 Steve Borho <steve@borho.org>  #    import os  import sys  import gtk +import cStringIO  from shlib import shell_notify +from dialog import error_dialog  from mercurial import hg, ui, commands, util  from mercurial.repo import RepoError    class DetectRenameDialog(gtk.Window):   """ Detect renames after they occur """   def __init__(self, root=''):   """ Initialize the Dialog """   gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)     self.root = root   self.set_title('Detect Renames in %s' + os.path.basename(root))     adjustment = gtk.Adjustment(50, 0, 100, 1)   adjustment.connect('value-changed', self._adj_changed)   hscale = gtk.HScale(adjustment)   self.add(mainvbox)     def _adj_changed(self, adj):   print adj.get_value()    def run(fname='', **opts):   from dialog import entry_dialog   title = 'Rename ' + fname   dialog = entry_dialog(None, title, True, fname, rename_resp)   dialog.orig = fname   dialog.show_all()   dialog.connect('destroy', gtk.main_quit)   gtk.gdk.threads_init()   gtk.gdk.threads_enter()   gtk.main()   gtk.gdk.threads_leave()    def rename_resp(dialog, response):   if response != gtk.RESPONSE_OK:   gtk.main_quit()   return   try:   import hglib   root = hglib.rootpath()   repo = hg.repository(ui.ui(), root)   except ImportError, RepoError:   gtk.main_quit()   return     new_name = dialog.entry.get_text()   opts = {}   opts['force'] = False # Checkbox? Nah.   opts['after'] = False   opts['dry_run'] = False   + saved = sys.stderr + errors = cStringIO.StringIO() + quit = False   try: - # Sigh, some errors go to ui.warn(), which is regrettable - commands.rename(repo.ui, repo, dialog.orig, new_name, **opts) - gtk.main_quit() - except util.Abort, e: - from dialog import error_dialog - error_dialog(None, 'rename error', str(e)) + sys.stderr = errors + repo.ui.pushbuffer() + try: + commands.rename(repo.ui, repo, dialog.orig, new_name, **opts) + quit = True + except util.Abort, inst: + error_dialog(None, 'rename error', str(inst)) + quit = False + finally: + sys.stderr = saved + textout = errors.getvalue() + repo.ui.popbuffer() + errors.close() + if len(textout) > 1: + error_dialog(None, 'rename error', textout) + elif quit: + gtk.main_quit()    if __name__ == "__main__":   opts = {'fname' : sys.argv[1]}   run(**opts)