diff -r 59ed7b2dd952 -r 20dd5c1e43ec Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py --- a/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py Thu Feb 09 20:03:00 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py Fri Feb 10 19:49:38 2017 +0100 @@ -339,11 +339,18 @@ self.__stripAct.setToolTip(self.tr( "Strip changesets from a repository")) + self.__actionsMenu.addSeparator() + + self.__selectAllAct = self.__actionsMenu.addAction( + self.tr("Select All Entries"), self.__selectAllActTriggered) + self.__unselectAllAct = self.__actionsMenu.addAction( + self.tr("Deselect All Entries"), + lambda: self.__selectAllActTriggered(False)) + self.actionsButton.setIcon( UI.PixmapCache.getIcon("actionsToolButton.png")) self.actionsButton.setMenu(self.__actionsMenu) - # TODO: add action "Create Changegroup" (>=1 revs, lowest rev is base) # TODO: add action "Sign Revision" (>= 1 revs) (GPG extension) # TODO: add action "Verify Signature" (1 rev) (GPG extension) @@ -2160,11 +2167,60 @@ Private slot to create a changegroup file. """ if self.initialCommandMode == "log": - # TODO: implement bundle - pass + selectedItems = self.logTree.selectedItems() + if len(selectedItems) == 0: + # all revisions of the local repository will be bundled + bundleData = { + "revs": [], + "base": "", + "all": True, + } + elif len(selectedItems) == 1: + # the selected changeset is the base + rev = selectedItems[0].text(self.RevisionColumn)\ + .split(":", 1)[0].strip() + bundleData = { + "revs": [], + "base": rev, + "all": False, + } + else: + # lowest revision is the base, others will be bundled + revs = [] + for itm in selectedItems: + rev = itm.text(self.RevisionColumn).split(":", 1)[0] + try: + revs.append(int(rev)) + except ValueError: + # ignore silently + pass + baseRev = min(revs) + while baseRev in revs: + revs.remove(baseRev) + + bundleData = { + "revs": [str(rev) for rev in revs], + "base": str(baseRev), + "all": False, + } elif self.initialCommandMode == "outgoing": # TODO: implement bundle for outgoing mode pass + + self.vcs.hgBundle(self.repodir, bundleData=bundleData) + + def __selectAllActTriggered(self, select=True): + """ + Private method to select or unselect all log entries. + + @param select flag indicating to select all entries + @type bool + """ + blocked = self.logTree.blockSignals(True) + for row in range(self.logTree.topLevelItemCount()): + self.logTree.topLevelItem(row).setSelected(select) + self.logTree.blockSignals(blocked) + self.on_logTree_itemSelectionChanged() def __actionMode(self): """