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

datamine: improve 'annotate parent' command

Old implementation doesn't work in mostly cases since
all are not parent revisions that have current file.

Changeset a7e342c65f57

Parent ac6e061672e8

by Yuki KODAMA

Changes to 2 files · Browse files at a7e342c65f57 Showing diff from parent ac6e061672e8 Diff from another changeset...

 
21
22
23
 
24
25
26
 
137
138
139
140
 
141
142
143
144
145
146
147
148
149
150
151
152
153
154
 
166
167
168
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
169
170
171
 
21
22
23
24
25
26
27
 
138
139
140
 
141
142
143
144
145
146
 
 
 
 
 
 
147
148
149
 
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
@@ -21,6 +21,7 @@
 from tortoisehg.hgtk.logview.colormap import AnnotateColorMap  from tortoisehg.hgtk.logview.colormap import AnnotateColorSaturation  from tortoisehg.hgtk.logview.treeview import TreeView as LogTreeView +from tortoisehg.hgtk.logview import treemodel as LogTreeModelModule  from tortoisehg.hgtk import gtklib, gdialog, changeset    class DataMineDialog(gdialog.GDialog): @@ -137,18 +138,12 @@
  menu.append(create_menu(_('_zoom to change'), self.cmenu_zoom, objs))   menu.append(create_menu(_('di_splay change'), self.cmenu_display))   menu.append(create_menu(_('_annotate parent'), - self.annotate_parent, objs)) + self.cmenu_annotate_parent, objs))   menu.append(create_menu(_('_view file at revision'), self.cmenu_view))   menu.append(create_menu(_('_file history'), self.cmenu_file_log))   menu.show_all()   return menu   - def annotate_parent(self, menuitem, objs): - if not self.currev: - return - parent = self.repo[self.currev].parents()[0].rev() - self.trigger_annotate(parent, self.curpath, objs) -   def cmenu_zoom(self, menuitem, objs):   (frame, treeview, path, graphview) = objs   graphview.scroll_to_revision(int(self.currev)) @@ -166,6 +161,57 @@
  def cmenu_annotate(self, menuitem):   self.add_annotate_page(self.curpath, self.currev)   + def cmenu_annotate_parent(self, menuitem, objs): + def error_prompt(): + gdialog.Prompt(_('No parent file'), + _('Unable to annotate'), self).run() + return False + (frame, treeview, filepath, graphview) = objs + anotrev = treeview.get_model().rev + graphmodel = graphview.treeview.get_model() + path = graphview.get_path_at_revid(int(self.currev)) + if not path: + return error_prompt() + iter = graphmodel.get_iter(path) + parent_iter = graphmodel.iter_next(iter) + if not parent_iter: + return error_prompt() + parent_path = graphmodel.get_path(parent_iter) + parent_revid = graphmodel[parent_path][LogTreeModelModule.REVID] + parent_ctx = self.repo[parent_revid] + try: + parent_ctx.filectx(filepath) + except LookupError: + # file was renamed/moved, try to find previous file path + end_iter = iter + path = graphview.get_path_at_revid(int(anotrev)) + if not path: + return error_prompt() + iter = graphmodel.get_iter(path) + while iter and iter != end_iter: + path = graphmodel.get_path(iter) + revid = graphmodel[path][LogTreeModelModule.REVID] + ctx = self.repo[revid] + try: + fctx = ctx.filectx(filepath) + renamed = fctx.renamed() + if renamed: + filepath = renamed[0] + break + except LookupError: + # break iteration, but don't use 'break' statement + # so that avoid to drop to 'else' block.kA + iter = end_iter + continue + # move iterator to next + iter = graphmodel.iter_next(iter) + else: + return error_prompt() + # annotate file of parent rev + self.trigger_annotate(parent_revid, filepath, objs) + graphview.scroll_to_revision(int(parent_revid)) + graphview.set_revision_id(int(parent_revid)) +   def cmenu_file_log(self, menuitem):   from tortoisehg.hgtk import history   dlg = history.run(self.ui, filehist=self.curpath)
 
302
303
304
 
 
 
 
 
 
 
 
 
305
306
307
 
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
@@ -302,6 +302,15 @@
  def get_revid_at_path(self, path):   return self.model[path][treemodel.REVID]   + def get_path_at_revid(self, revid): + if revid in self.index: + row_index = self.index[revid] + iter = self.model.get_iter(row_index) + path = self.model.get_path(iter) + return path + else: + return None +   def get_wfile_at_path(self, path):   if self.model:   return self.model[path][treemodel.WFILE]