Changeset 73e6d5bf66df…
Parent a7252818d702…
by
Changes to 2 files · Browse files at 73e6d5bf66df Showing diff from parent a7252818d702 Diff from another changeset...
|
@@ -20,10 +20,12 @@
TYPE_ADDREMOVE = 1
TYPE_RENAME = 2
+TYPE_CURRENT = 3
-RESPONSE_ADD = 1
-RESPONSE_REMOVE = 2
-RESPONSE_RENAME = 3
+RESPONSE_ADD = 1
+RESPONSE_REMOVE = 2
+RESPONSE_RENAME = 3
+RESPONSE_CURRENT = 4
class BookmarkDialog(gtk.Dialog):
""" Dialog to add bookmark to Mercurial repo """
@@ -43,6 +45,8 @@ self.add_button(_('Remove'), RESPONSE_REMOVE)
elif type == TYPE_RENAME:
self.add_button(_('Rename'), RESPONSE_RENAME)
+ elif type == TYPE_CURRENT:
+ self.add_button(_('Set Current'), RESPONSE_CURRENT)
else:
raise _('unexpected type: %s') % type
self.add_button(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)
@@ -65,7 +69,7 @@ entry.set_width_chars(12)
entry.set_text(rev)
table.add_row(_('Revision:'), entry)
- else:
+ elif type == TYPE_RENAME:
self._name_input = entry
table.add_row(_('New name:'), entry)
@@ -76,10 +80,10 @@
# prepare to show
self._refresh(clear=False)
- if type == TYPE_ADDREMOVE:
+ if type == TYPE_RENAME:
+ self._name_input.grab_focus()
+ else:
self._bookmarklistbox.grab_focus()
- else:
- self._name_input.grab_focus()
def _refresh(self, clear=True):
""" update display on dialog with recent repo data """
@@ -107,6 +111,9 @@ # Rename button
elif response_id == RESPONSE_RENAME:
self._do_rename_bookmark()
+ # Set Current button
+ elif response_id == RESPONSE_CURRENT:
+ self._do_current_bookmark()
# Close button or closed by the user
elif response_id in (gtk.RESPONSE_CLOSE, gtk.RESPONSE_DELETE_EVENT):
self.destroy()
@@ -121,6 +128,8 @@ self.response(RESPONSE_ADD)
elif type == TYPE_RENAME:
self.response(RESPONSE_RENAME)
+ elif type == TYPE_CURRENT:
+ self.response(RESPONSE_CURRENT)
else:
raise _('unexpected type: %s') % type
@@ -207,6 +216,32 @@ traceback.format_exc())
return False
+ def _do_current_bookmark(self):
+ # gather input data
+ name = self._bookmark_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
+
+ # set current bookmark
+ try:
+ self._current_hg_bookmark(name)
+ dialog.info_dialog(self, _('Bookmarking completed'),
+ _('Bookmark "%s" has been made current') %
+ 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 _add_hg_bookmark(self, name, revision):
if name in hglib.get_repo_bookmarks(self.repo):
raise util.Abort(_('a bookmark named "%s" already exists') % name)
@@ -233,3 +268,9 @@ repo=self.repo,
mark=new_name,
rename=name)
+
+ def _current_hg_bookmark(self, name):
+ if name not in hglib.get_repo_bookmarks(self.repo):
+ raise util.Abort(_('no bookmark named "%s" exists') %
+ name)
+ bookmarks.setcurrent(self.repo, name)
|
@@ -876,6 +876,9 @@ self.add_bookmark))
m.append(create_menu(_('Rename Bookmark...'),
self.rename_bookmark))
+ if self.repo.ui.configbool('bookmarks', 'track.current'):
+ m.append(create_menu(_('Set Current Bookmark...'),
+ self.current_bookmark))
return m.create_menu()
def mq_context_menu(self):
@@ -1214,6 +1217,18 @@ else:
if newmarkers != oldmarkers:
self.refresh_model()
+
+ def refresh_on_current_marker_change(self, oldlen, oldmarkers,
+ oldcurrent, newmarkers,
+ newcurrent):
+ self.repo.invalidate()
+ self.changeview.clear_cache()
+ if len(self.repo) != oldlen:
+ self.reload_log()
+ else:
+ if newmarkers != oldmarkers or \
+ oldcurrent != newcurrent:
+ self.refresh_model()
def apply_clicked(self, button):
combo = self.ppullcombo
@@ -1906,6 +1921,27 @@ bmark, rev)
dialog.connect('destroy', refresh)
self.show_dialog(dialog)
+
+ def current_bookmark(self, menuitem):
+ # save current bookmark info for detecting current bookmark changed
+ bookmarks = extensions.find('bookmarks')
+ # Note that the dialog shouldn't change the repo len, or # of bookmarks,
+ # etc, but check in case they've been modified by something else...
+ oldbookmarks = hglib.get_repo_bookmarks(self.repo)
+ oldlen = len(self.repo)
+ oldcurrent = bookmarks.current(self.repo)
+ rev = str(self.currevid)
+ bmark = self.get_rev_tag(rev, include=oldbookmarks)
+
+ def refresh(*args):
+ self.refresh_on_current_marker_change(oldlen, oldbookmarks, oldcurrent,
+ hglib.get_repo_bookmarks(self.repo),
+ bookmarks.current(self.repo))
+
+ dialog = bookmark.BookmarkDialog(self.repo, bookmark.TYPE_CURRENT,
+ bmark, rev)
+ dialog.connect('destroy', refresh)
+ self.show_dialog(dialog)
def bisect_reset(self, menuitem):
commands.bisect(ui=self.ui,
|
Loading...