Changeset e319b7311c28…
Parent c4375a6a7b9f…
by
Changes to 3 files · Browse files at e319b7311c28 Showing diff from parent c4375a6a7b9f Diff from another changeset...
|
@@ -26,6 +26,7 @@ RESPONSE_REMOVE = 2
RESPONSE_RENAME = 3
RESPONSE_CURRENT = 4
+RESPONSE_MOVE = 5
class BookmarkDialog(gtk.Dialog):
""" Dialog to add bookmark to Mercurial repo """
@@ -41,7 +42,8 @@
# add buttons
if type == TYPE_ADDREMOVE:
- self.add_button(_('Add'), RESPONSE_ADD)
+ self._button_add = self.add_button(_('Add'), RESPONSE_ADD)
+ self._button_move = self.add_button(_('Move'), RESPONSE_MOVE)
self.add_button(_('Remove'), RESPONSE_REMOVE)
elif type == TYPE_RENAME:
self.add_button(_('Rename'), RESPONSE_RENAME)
@@ -82,8 +84,12 @@ self.connect('response', self.dialog_response)
self._bookmark_input.connect('activate', self.entry_activated, type)
entry.connect('activate', self.entry_activated, type)
+ if type == TYPE_ADDREMOVE:
+ self._bookmark_input.connect('changed', self.bookmark_changed)
# prepare to show
+ if type == TYPE_ADDREMOVE:
+ self.set_add_move_button_sensitivity()
self._refresh(clear=False)
if type == TYPE_RENAME:
self._name_input.grab_focus()
@@ -110,6 +116,9 @@ # Add button
if response_id == RESPONSE_ADD:
self._do_add_bookmark()
+ # Move button
+ elif response_id == RESPONSE_MOVE:
+ self._do_move_bookmark()
# Remove button
elif response_id == RESPONSE_REMOVE:
self._do_remove_bookmark()
@@ -130,7 +139,10 @@
def entry_activated(self, entry, type):
if type == TYPE_ADDREMOVE:
- self.response(RESPONSE_ADD)
+ if self._button_add.get_property('sensitive'):
+ self.response(RESPONSE_ADD)
+ else:
+ self.response(RESPONSE_MOVE)
elif type == TYPE_RENAME:
self.response(RESPONSE_RENAME)
elif type == TYPE_CURRENT:
@@ -138,6 +150,19 @@ else:
raise _('unexpected type: %s') % type
+ def bookmark_changed(self, bookmark_widget):
+ self.set_add_move_button_sensitivity()
+
+ def set_add_move_button_sensitivity(self):
+ mark = self._bookmark_input.get_text()
+ if mark in hglib.get_repo_bookmarks(self.repo):
+ self._button_add.set_sensitive(False)
+ self._button_move.set_sensitive(True)
+ else:
+ self._button_add.set_sensitive(True)
+ self._button_move.set_sensitive(False)
+
+
def _do_add_bookmark(self):
# gather input data
name = self._bookmark_input.get_text()
@@ -164,6 +189,32 @@ traceback.format_exc())
return False
+ def _do_move_bookmark(self):
+ # gather input data
+ name = self._bookmark_input.get_text()
+ rev = self._rev_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
+
+ # move bookmark
+ try:
+ self._move_hg_bookmark(name, rev)
+ dialog.info_dialog(self, _('Bookmarking completed'),
+ _('Bookmark "%s" has been moved') % 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 _do_remove_bookmark(self):
# gather input data
name = self._bookmark_input.get_text()
@@ -256,6 +307,16 @@ rev=revision,
mark=name)
+ def _move_hg_bookmark(self, name, revision):
+ if name not in hglib.get_repo_bookmarks(self.repo):
+ raise util.Abort(_('No bookmark named "%s" exists') % name)
+
+ bookmarks.bookmark(ui=ui.ui(),
+ repo=self.repo,
+ rev=revision,
+ mark=name,
+ force=True)
+
def _remove_hg_bookmark(self, name):
if not name in hglib.get_repo_bookmarks(self.repo):
raise util.Abort(_("Bookmark '%s' does not exist") % name)
|
@@ -875,7 +875,7 @@ m = gtklib.MenuItems()
m.append(create_menu(_('Add/Remove _Tag...'), self.add_tag))
if 'bookmarks' in self.exs:
- m.append(create_menu(_('Add/Remove B_ookmark...'),
+ m.append(create_menu(_('Add/Move/Remove B_ookmark...'),
self.add_bookmark))
m.append(create_menu(_('Rename Bookmark...'),
self.rename_bookmark))
@@ -1213,6 +1213,9 @@ return self.stbar
def refresh_on_marker_change(self, oldlen, oldmarkers, newmarkers):
+ # Note that oldmarkers/newmarkers may be either dicts
+ # (for add/remove bookmarks, which can also 'move'
+ # bookmarks), or lists (everything else)
self.repo.invalidate()
self.changeview.clear_cache()
if len(self.repo) != oldlen:
@@ -1906,14 +1909,17 @@
def add_bookmark(self, menuitem):
# save bookmark info for detecting new bookmarks added
- oldbookmarks = hglib.get_repo_bookmarks(self.repo)
+ # since we can now move bookmarks, need to store
+ # the associated changesets as well
+ oldbookmarks = hglib.get_repo_bookmarks(self.repo, values=True)
oldlen = len(self.repo)
rev = str(self.currevid)
bmark = self.get_rev_tag(rev, include=oldbookmarks)
def refresh(*args):
self.refresh_on_marker_change(oldlen, oldbookmarks,
- hglib.get_repo_bookmarks(self.repo))
+ hglib.get_repo_bookmarks(self.repo,
+ values=True))
dialog = bookmark.BookmarkDialog(self.repo, bookmark.TYPE_ADDREMOVE,
bmark, rev)
|
@@ -235,5 +235,8 @@ return_path = path_aux
return return_path
-def get_repo_bookmarks(repo):
- return repo._bookmarks.keys()
+def get_repo_bookmarks(repo, values=False):
+ if values:
+ return dict(repo._bookmarks)
+ else:
+ return repo._bookmarks.keys()
|
Loading...