Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 0.8, 0.8.1, and 0.8.2

tagadd: focus on textbox on init

Changeset b1f71cfb8602

Parent 8f20f4f51c09

by Yuki KODAMA

Changes to one file · Browse files at b1f71cfb8602 Showing diff from parent 8f20f4f51c09 Diff from another changeset...

Change 1 of 1 Show Changes Only hggtk/​tagadd.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
 
 
 
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
 #  # TortoiseHg dialog to add tag  #  # Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>  #    import os  import gtk  import traceback    from mercurial import hg, ui, util    from thgutil.i18n import _  from thgutil import hglib    from hggtk import dialog, gtklib    class TagAddDialog(gtk.Window):   """ Dialog to add tag to Mercurial repo """   def __init__(self, root='', tag='', rev=''):   """ Initialize the Dialog """   gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)   gtklib.set_tortoise_keys(self)     title = _('TortoiseHg Tag - %s') % (root or os.getcwd())   self.set_title(title)     self.root = root   self.repo = None     try:   self.repo = hg.repository(ui.ui(), path=self.root)   except hglib.RepoError:   pass     # build dialog   self._create(tag, rev)     def _create(self, tag, rev):   self.set_default_size(350, 180)     # add toolbar with tooltips   self.tbar = gtk.Toolbar()   self.tips = gtk.Tooltips()     self._btn_addtag = self._toolbutton(   gtk.STOCK_ADD, _('Add'),   self._btn_addtag_clicked,   tip=_('Add tag to selected version'))   self._btn_rmtag = self._toolbutton(   gtk.STOCK_DELETE, _('Remove'),   self._btn_rmtag_clicked,   tip=_('Remove tag from repository'))   tbuttons = [   self._btn_addtag,   self._btn_rmtag   ]   for btn in tbuttons:   self.tbar.insert(btn, -1)   vbox = gtk.VBox()   self.add(vbox)   vbox.pack_start(self.tbar, False, False, 2)     # tag name input   tagbox = gtk.HBox()   lbl = gtk.Label(_('Tag:'))   lbl.set_property('width-chars', 10)   lbl.set_alignment(0, 0.5)   self._tagslist = gtk.ListStore(str)   self._taglistbox = gtk.ComboBoxEntry(self._tagslist, 0)   self._tag_input = self._taglistbox.get_child()   self._tag_input.set_text(tag)   tagbox.pack_start(lbl, False, False)   tagbox.pack_start(self._taglistbox, True, True)   vbox.pack_start(tagbox, True, True, 2)     # revision input   revbox = gtk.HBox()   lbl = gtk.Label(_('Revision:'))   lbl.set_property('width-chars', 10)   lbl.set_alignment(0, 0.5)   self._rev_input = gtk.Entry()   self._rev_input.set_text(rev)   revbox.pack_start(lbl, False, False)   revbox.pack_start(self._rev_input, False, False)   vbox.pack_start(revbox, False, False, 2)     # tag options   option_box = gtk.VBox()   self._local_tag = gtk.CheckButton(_('Tag is local'))   self._replace_tag = gtk.CheckButton(_('Replace existing tag'))   self._use_msg = gtk.CheckButton(_('Use custom commit message'))   option_box.pack_start(self._local_tag, False, False)   option_box.pack_start(self._replace_tag, False, False)   option_box.pack_start(self._use_msg, False, False)   vbox.pack_start(option_box, False, False, 15)     # commit message   lbl = gtk.Label(_('Commit message:'))   lbl.set_alignment(0, 0.5)   self._commit_message = gtk.Entry()   vbox.pack_end(self._commit_message, False, False, 1)   vbox.pack_end(lbl, False, False, 1)   + # focus on tag input + self._taglistbox.grab_focus() +   # show them all   self._refresh()   vbox.show_all()     def _toolbutton(self, stock, label, handler,   menu=None, userdata=None, tip=None):   if menu:   tbutton = gtk.MenuToolButton(stock)   tbutton.set_menu(menu)   else:   tbutton = gtk.ToolButton(stock)     tbutton.set_label(label)   if tip:   tbutton.set_tooltip(self.tips, tip)   tbutton.connect('clicked', handler, userdata)   return tbutton     def _refresh(self):   """ update display on dialog with recent repo data """   self.repo.invalidate()   self._tagslist.clear()   self._tag_input.set_text("")     # add tags to drop-down list   tags = [x[0] for x in self.repo.tagslist()]   tags.sort()   for tagname in tags:   if tagname == "tip":   continue   self._tagslist.append([tagname])     def _btn_tag_clicked(self, button):   """ select tag from tags dialog """   import tags   tag = tags.select(self.root)   if tag is not None:   self._tag_input.set_text(tag)     def _btn_addtag_clicked(self, button, data=None):   self._do_add_tag()     def _btn_rmtag_clicked(self, button, data=None):   self._do_rm_tag()     def _do_add_tag(self):   # gather input data   is_local = self._local_tag.get_active()   name = self._tag_input.get_text()   rev = self._rev_input.get_text()   force = self._replace_tag.get_active()   use_msg = self._use_msg.get_active()   message = self._commit_message.get_text()     # verify input   if name == '':   dialog.error_dialog(self, _('Tag input is empty'),   _('Please enter tag name'))   self._tag_input.grab_focus()   return False   if use_msg and not message:   dialog.error_dialog(self, _('Custom commit message is empty'),   _('Please enter commit message'))   self._commit_message.grab_focus()   return False     # add tag to repo   try:   self._add_hg_tag(name, rev, message, is_local, force=force)   dialog.info_dialog(self, _('Tagging completed'),   _('Tag "%s" has been added') % name)   self._refresh()   except util.Abort, inst:   dialog.error_dialog(self, _('Error in tagging'), str(inst))   return False   except:   dialog.error_dialog(self, _('Error in tagging'),   traceback.format_exc())   return False     def _do_rm_tag(self):   # gather input data   is_local = self._local_tag.get_active()   name = self._tag_input.get_text()   use_msg = self._use_msg.get_active()     # verify input   if name == '':   dialog.error_dialog(self, _('Tag name is empty'),   _('Please select tag name to remove'))   self._tag_input.grab_focus()   return False     if use_msg:   message = self._commit_message.get_text()   else:   message = ''     try:   self._rm_hg_tag(name, message, is_local)   dialog.info_dialog(self, _('Tagging completed'),   _('Tag "%s" has been removed') % name)   self._refresh()   except util.Abort, inst:   dialog.error_dialog(self, _('Error in tagging'), str(inst))   return False   except:   dialog.error_dialog(self, _('Error in tagging'),   traceback.format_exc())   return False       def _add_hg_tag(self, name, revision, message, local, user=None,   date=None, force=False):   if name in self.repo.tags() and not force:   raise util.Abort(_('a tag named "%s" already exists') % name)     ctx = self.repo[revision]   r = ctx.node()     if not message:   message = _('Added tag %s for changeset %s') % (name, str(ctx))   if name in self.repo.tags() and not force:   raise util.Abort(_("Tag '%s' already exist") % name)     self.repo.tag(name, r, hglib.fromutf(message), local, user, date)     def _rm_hg_tag(self, name, message, local, user=None, date=None):   if not name in self.repo.tags():   raise util.Abort(_("Tag '%s' does not exist") % name)     if not message:   message = _('Removed tag %s') % name   r = self.repo[-1].node()   self.repo.tag(name, r, message, local, user, date)