Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 0.9, 0.9.1, and 0.9.1.1

thgstrip: check whether the revision is valid immediately

Changeset 601b11908fc0

Parent 2cc85bc2aa92

by Yuki KODAMA

Changes to one file · Browse files at 601b11908fc0 Showing diff from parent 2cc85bc2aa92 Diff from another changeset...

 
51
52
53
54
 
 
 
55
56
57
 
95
96
97
98
 
99
100
101
 
102
103
104
 
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
 
193
194
195
 
 
 
 
 
 
 
 
 
 
 
196
197
198
199
 
 
 
 
 
 
 
200
201
202
203
 
204
205
206
 
51
52
53
 
54
55
56
57
58
59
 
97
98
99
 
100
101
102
 
103
104
105
106
 
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
 
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
@@ -51,7 +51,9 @@
  rev = pats[0]   elif rev is None:   rev = 'tip' - self.prevrev = rev = str(rev) + rev = str(rev) + self.prevrev = None + self.prevnum = None     # layout table   self.table = table = gtklib.LayoutTable() @@ -95,10 +97,10 @@
  self.pstatlbl.size_request()   self.allbtn = gtk.Button(_('Show all')) # add later   self.allbtn.connect('clicked', - lambda b: self.preview_changesets(nocheck=True, limit=False)) + lambda b: self.preview_changesets(limit=False))     # prepare to show - self.preview_changesets(nocheck=True) + self.preview_changesets()   self.stripbtn.grab_focus()   gobject.idle_add(self.after_init)   @@ -121,51 +123,58 @@
  self.notify_args = args   self.notify_kargs = kargs   - def preview_changesets(self, nocheck=False, limit=True): - revstr = self.revcombo.get_active_text() - if len(revstr) == 0 or (not nocheck and self.prevrev == revstr): + def preview_changesets(self, rev=None, limit=True): + if rev is None: + rev = self.get_rev() + if rev is None: + self.update_info() + return + if self.prevrev == rev: + self.update_info(self.prevnum) # use cached count   return - self.prevrev = revstr + self.prevrev = rev   # enumerate all descendants   # borrowed from 'strip' function in 'mercurial/repair.py'   cl = self.repo.changelog - try: - striprev = self.repo[revstr].rev() - except (hglib.RepoError, hglib.LookupError): - return - if striprev is None: - return - tostrip = [striprev,] - for r in xrange(striprev + 1, len(cl)): + tostrip = [rev,] + for r in xrange(rev + 1, len(cl)):   parents = cl.parentrevs(r)   if parents[0] in tostrip or parents[1] in tostrip:   tostrip.append(r) + self.prevnum = numstrip = len(tostrip)     # update changeset preview   for child in self.resultbox.get_children():   self.resultbox.remove(child)   showrevs = limit and tostrip[:50] or tostrip - for rev in showrevs: - r, info = csinfo.changesetinfo(self.repo, rev) + for r in showrevs: + info = csinfo.changesetinfo(self.repo, r)[1]   self.resultbox.pack_start(info, False, False, 2) - if not rev == tostrip[-1]: + if not r == tostrip[-1]:   self.resultbox.pack_start(gtk.HSeparator())   self.resultbox.show_all()     # update info label - numstrip = len(tostrip) - self.resultlbl.set_markup(_('<span weight="bold">%s changesets</span>' - ' will be stripped') % numstrip) + self.update_info(numstrip)     # update preview status - if numstrip > len(showrevs): + notall = numstrip > len(showrevs) + if notall:   text = _('Displaying %(count)d of %(total)d changesets') \   % dict(count=len(showrevs), total=numstrip) - self.allbtn.show()   else:   text = _('Displaying all changesets') - self.allbtn.hide()   self.pstatlbl.set_text(text) + self.allbtn.set_property('visible', notall) + + def update_info(self, num=None): + if num is None: + text = '<span weight="bold" foreground="#880000">%s</span>' \ + % _('Unknown revision!') + else: + text = _('<span weight="bold">%s changesets</span> will' + ' be stripped') % num + self.resultlbl.set_markup(text)     def dialog_response(self, dialog, response_id):   def abort(): @@ -193,14 +202,29 @@
    self.run() # don't close dialog   + def get_rev(self): + """ Return integer revision number or None """ + revstr = self.revcombo.get_active_text() + if len(revstr) == 0: + return None + try: + revnum = self.repo[revstr].rev() + except (hglib.RepoError, hglib.LookupError): + return None + return revnum +   def update_on_timeout(self): - def timeout(id): - if self.timeout_queue[-1] == id[0]: - self.preview_changesets() + rev = self.get_rev() + if rev is None: + self.update_info() + return + def timeout(eid, revnum): + if self.timeout_queue[-1] == eid[0]: + self.preview_changesets(rev=revnum)   self.timeout_queue = []   return False # don't repeat   event_id = [None] - event_id[0] = gobject.timeout_add(600, timeout, event_id) + event_id[0] = gobject.timeout_add(600, timeout, event_id, rev)   self.timeout_queue.append(event_id[0])     def switch_to(self, mode, cmd=True):