diff -r 07b4da7d6833 -r c2cabdca0734 Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py --- a/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py Mon Nov 14 19:24:11 2016 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py Mon Nov 14 19:58:22 2016 +0100 @@ -20,7 +20,7 @@ QSize, QPoint from PyQt5.QtGui import QCursor, QColor, QPixmap, QPainter, QPen, QBrush, QIcon from PyQt5.QtWidgets import QWidget, QDialogButtonBox, QHeaderView, \ - QTreeWidgetItem, QApplication, QLineEdit, QMenu + QTreeWidgetItem, QApplication, QLineEdit, QMenu, QInputDialog from E5Gui.E5Application import e5App from E5Gui import E5MessageBox @@ -178,6 +178,7 @@ """ Private method to initialize the actions menu. """ + # TODO: add some eye candy self.__actionsMenu = QMenu() self.__graftAct = self.__actionsMenu.addAction( self.tr("Copy Changesets"), self.__graftActTriggered) @@ -204,6 +205,17 @@ self.__actionsMenu.addSeparator() + self.__bookmarkAct = self.__actionsMenu.addAction( + self.tr("Define Bookmark..."), self.__bookmarkActTriggered) + self.__bookmarkAct.setToolTip( + self.tr("Bookmark the selected revision")) + self.__bookmarkMoveAct = self.__actionsMenu.addAction( + self.tr("Move Bookmark..."), self.__bookmarkMoveActTriggered) + self.__bookmarkMoveAct.setToolTip( + self.tr("Move bookmark to the selected revision")) + + self.__actionsMenu.addSeparator() + self.__pullAct = self.__actionsMenu.addAction( self.tr("Pull Changes"), self.__pullActTriggered) self.__pullAct.setToolTip(self.tr( @@ -1243,6 +1255,10 @@ self.__tagAct.setEnabled(len(self.logTree.selectedItems()) == 1) self.__switchAct.setEnabled(len(self.logTree.selectedItems()) == 1) + self.__bookmarkAct.setEnabled( + len(self.logTree.selectedItems()) == 1) + self.__bookmarkMoveAct.setEnabled( + len(self.logTree.selectedItems()) == 1) if self.vcs.canPull(): self.__pullAct.setEnabled(True) @@ -1726,6 +1742,50 @@ self.on_refreshButton_clicked() @pyqtSlot() + def __bookmarkActTriggered(self): + """ + Private slot to bookmark the selected revision. + """ + if len(self.logTree.selectedItems()) == 1: + itm = self.logTree.selectedItems()[0] + rev, changeset = \ + itm.text(self.RevisionColumn).strip().split(":", 1) + bookmark, ok = QInputDialog.getText( + self, + self.tr("Define Bookmark"), + self.tr('Enter bookmark name for changeset "{0}":').format( + changeset), + QLineEdit.Normal) + if ok and bool(bookmark): + self.vcs.hgBookmarkDefine( + self.repodir, revision="rev({0})".format(rev), + bookmark=bookmark) + self.on_refreshButton_clicked() + + @pyqtSlot() + def __bookmarkMoveActTriggered(self): + """ + Private slot to move a bookmark to the selected revision. + """ + if len(self.logTree.selectedItems()) == 1: + itm = self.logTree.selectedItems()[0] + rev, changeset = \ + itm.text(self.RevisionColumn).strip().split(":", 1) + bookmarksList = self.vcs.hgGetBookmarksList(self.repodir) + bookmark, ok = QInputDialog.getItem( + self, + self.tr("Move Bookmark"), + self.tr('Select the bookmark to be moved to changeset' + ' "{0}":').format(changeset), + [""] + bookmarksList, + 0, False) + if ok and bool(bookmark): + self.vcs.hgBookmarkMove( + self.repodir, revision="rev({0})".format(rev), + bookmark=bookmark) + self.on_refreshButton_clicked() + + @pyqtSlot() def __lfPullActTriggered(self): """ Private slot to pull large files of selected revisions.