Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 1.0, 1.0.1, and 1.0.2

stable tagadd: update sensitives of bottom buttons interactively

Closes #916

Changeset e2e39e939946

Parent 4ef0414694b9

by Yuki KODAMA

Changes to one file · Browse files at e2e39e939946 Showing diff from parent 4ef0414694b9 Diff from another changeset...

 
10
11
12
13
 
14
15
16
 
36
37
38
39
40
 
 
41
42
43
 
51
52
53
 
54
55
56
 
59
60
61
 
 
62
63
64
 
71
72
73
74
75
76
 
 
77
78
79
 
90
91
92
 
93
94
95
 
110
111
112
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
113
114
115
 
139
140
141
 
 
 
 
142
143
144
 
10
11
12
 
13
14
15
16
 
36
37
38
 
 
39
40
41
42
43
 
51
52
53
54
55
56
57
 
60
61
62
63
64
65
66
67
 
74
75
76
 
77
78
79
80
81
82
83
 
94
95
96
97
98
99
100
 
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
 
182
183
184
185
186
187
188
189
190
191
@@ -10,7 +10,7 @@
 import gtk  import traceback   -from mercurial import hg, ui, util +from mercurial import hg, ui, util, error    from tortoisehg.util.i18n import _  from tortoisehg.util import hglib, settings, i18n @@ -36,8 +36,8 @@
  self.repo = repo     # add buttons - self.add_button(_('Add'), RESPONSE_ADD) - self.add_button(_('Remove'), RESPONSE_REMOVE) + self.addbtn = self.add_button(_('Add'), RESPONSE_ADD) + self.removebtn = self.add_button(_('Remove'), RESPONSE_REMOVE)   self.add_button(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)     # persistent settings @@ -51,6 +51,7 @@
  self.tagcombo = gtk.combo_box_entry_new_text()   self.tagentry = self.tagcombo.get_child()   self.tagentry.set_text(hglib.toutf(tag)) + self.tagcombo.connect('changed', self.combo_changed)   self.tagentry.connect('activate',   lambda *a: self.response(RESPONSE_ADD))   table.add_row(_('Tag:'), self.tagcombo, padding=False) @@ -59,6 +60,8 @@
  self._rev_input = gtk.Entry()   self._rev_input.set_width_chars(12)   self._rev_input.set_text(rev) + self._rev_input.connect('notify::text', + lambda *a: self.update_sensitives())   table.add_row(_('Revision:'), self._rev_input)     # advanced options expander @@ -71,9 +74,10 @@
    ## tagging options   self._local_tag = gtk.CheckButton(_('Tag is local')) - self._local_tag.set_active(self.repo.tagtype(tag) == 'local')   self._local_tag.connect('toggled', self.local_tag_toggled)   self._replace_tag = gtk.CheckButton(_('Replace existing tag')) + self._replace_tag.connect('toggled', + lambda *a: self.update_sensitives())   self._eng_msg = gtk.CheckButton(_('Use English commit message'))   table.add_row(self._local_tag)   table.add_row(self._replace_tag) @@ -90,6 +94,7 @@
  # prepare to show   self.load_settings()   self._refresh(clear=False) + self.update_sensitives(True)   self.tagentry.grab_focus()     def _refresh(self, clear=True): @@ -110,6 +115,44 @@
  if clear:   self.tagentry.set_text('')   + def update_revision(self): + """ update revision entry based on tag """ + tagmap = self.repo.tags() + tag = self.tagentry.get_text() + if not tag or hglib.fromutf(tag) not in tagmap: + return + + node = tagmap[hglib.fromutf(tag)] + ctx = self.repo[node] + self._rev_input.set_text(str(ctx.rev())) + + def update_sensitives(self, affectlocal=False): + """ update bottom button sensitives based on rev and tag """ + rev = self._rev_input.get_text() + tag = self.tagentry.get_text() + if not rev or not tag: + self.addbtn.set_sensitive(False) + self.removebtn.set_sensitive(False) + return + + # check if valid revision + try: + self.repo[hglib.fromutf(rev)] + except (error.LookupError, error.RepoLookupError, error.RepoError): + self.addbtn.set_sensitive(False) + self.removebtn.set_sensitive(False) + return + # check tag existence + force = self._replace_tag.get_active() + is_exist = hglib.fromutf(tag) in self.repo.tags() + self.addbtn.set_sensitive(not is_exist or force) + self.removebtn.set_sensitive(is_exist) + + # check if local + is_local = self.repo.tagtype(hglib.fromutf(tag)) + if affectlocal and is_local is not None: + self._local_tag.set_active(is_local == 'local') +   def load_settings(self):   expanded = self.settings.get_value('expanded', False, True)   self.expander.set_property('expanded', expanded) @@ -139,6 +182,10 @@
  if state:   self._commit_message.grab_focus()   + def combo_changed(self, combo): + self.update_revision() + self.update_sensitives(True) +   def dialog_response(self, dialog, response_id):   # Add button   if response_id == RESPONSE_ADD: