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

add bookmark renaming

Addresses #498

Changeset 2525801b8b8d

Parent ddb08f5804ce

by Emmanuel Rosa

Changes to 2 files · Browse files at 2525801b8b8d Showing diff from parent ddb08f5804ce Diff from another changeset...

 
155
156
157
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
@@ -155,3 +155,106 @@
  repo=self.repo,   mark=name,   delete=True) + +class BookmarkRenameDialog(gtk.Dialog): + """ Dialog to rename a bookmark """ + def __init__(self, repo, bookmark='', rev=''): + """ Initialize the Dialog """ + gtk.Dialog.__init__(self, + buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)) + gtklib.set_tortoise_keys(self) + self.set_title(_('Bookmark - %s') % hglib.get_reponame(repo)) + self.set_resizable(False) + self.set_has_separator(False) + self.connect('response', self.dialog_response) + + self.repo = repo + + # add Rename button + renamebutton = gtk.Button(_('Rename')) + renamebutton.connect('clicked', lambda b: self._do_rename_bookmark()) + self.action_area.pack_end(renamebutton) + + # top layout table + table = gtklib.LayoutTable() + self.vbox.pack_start(table, True, True, 2) + + ## bookmark name input + self._bookmarkslist = gtk.ListStore(str) + self._bookmarklistbox = gtk.ComboBoxEntry(self._bookmarkslist, 0) + self._bookmark_input = self._bookmarklistbox.get_child() + self._bookmark_input.connect('activate', self._bookmarkinput_activated) + self._bookmark_input.set_text(bookmark) + table.add_row(_('Bookmark:'), self._bookmarklistbox, padding=False) + + ## revision input + self._name_input = gtk.Entry() + table.add_row(_('New name:'), self._name_input) + + # prepare to show + self._refresh() + self._bookmarklistbox.grab_focus() + + def _refresh(self): + """ update display on dialog with recent repo data """ + self.repo.invalidate() + self._bookmarkslist.clear() + self._bookmark_input.set_text("") + + # add bookmarks to drop-down list + bookmarks = hglib.get_repo_bookmarks(self.repo) + bookmarks.sort() + for bookmarkname in bookmarks: + if bookmarkname == "tip": + continue + self._bookmarkslist.append([bookmarkname]) + + def dialog_response(self, dialog, response_id): + if response_id == gtk.RESPONSE_CLOSE \ + or response_id == gtk.RESPONSE_DELETE_EVENT: + self.destroy() + + def _bookmarkinput_activated(self, bookmarkinput): + self._do_rename_bookmark() + + def _do_rename_bookmark(self): + # gather input data + name = self._bookmark_input.get_text() + new_name = self._name_input.get_text() + + # verify input + if name == '': + dialog.error_dialog(self, _('Bookmark input is empty'), + _('Please enter bookmark name')) + self._bookmark_input.grab_focus() + return False + + if new_name == '': + dialog.error_dialog(self, _('Bookmark new name input is empty'), + _('Please enter new bookmark name')) + self._bookmark_input.grab_focus() + return False + + # rename bookmark + try: + self._rename_hg_bookmark(name, new_name) + dialog.info_dialog(self, _('Bookmarking completed'), + _('Bookmark "%s" has been renamed to "%s"') % + (name, new_name)) + self._refresh() + except util.Abort, inst: + dialog.error_dialog(self, _('Error in bookmarking'), str(inst)) + return False + except: + dialog.error_dialog(self, _('Error in bookmarking'), + traceback.format_exc()) + return False + + def _rename_hg_bookmark(self, name, new_name): + if new_name in hglib.get_repo_bookmarks(self.repo): + raise util.Abort(_('a bookmark named "%s" already exists') % new_name) + bookmarks.bookmark(ui=ui.ui(), + repo=self.repo, + mark=new_name, + rename=name) +
 
722
723
724
 
 
725
726
727
 
1741
1742
1743
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1744
1745
1746
 
722
723
724
725
726
727
728
729
 
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
@@ -722,6 +722,8 @@
  if 'bookmarks' in self.exs:   m.append(create_menu(_('Add/Remove B_ookmark...'),   self.add_bookmark)) + m.append(create_menu(_('Rename Bookmark...'), + self.rename_bookmark))   m.append_sep()     cmenu_backout = create_menu(_('Backout Revision...'), self.backout_rev) @@ -1741,6 +1743,21 @@
  dialog.connect('destroy', refresh)   self.show_dialog(dialog)   + def rename_bookmark(self, menuitem): + # save bookmark info for detecting new bookmarks added + oldbookmarks = hglib.get_repo_bookmarks(self.repo) + oldlen = len(self.repo) + rev = self.currevid + + def refresh(*args): + self.refresh_on_marker_change(oldlen, + oldbookmarks, + hglib.get_repo_bookmarks(self.repo)) + + dialog = bookmark.BookmarkRenameDialog(self.repo, rev=str(rev)) + dialog.connect('destroy', refresh) + self.show_dialog(dialog) +   def show_status(self, menuitem):   rev = self.currevid   statopts = self.merge_opts(commands.table['^status|st'][1],