Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py

changeset 5503
20dd5c1e43ec
parent 5501
59ed7b2dd952
child 5506
9482a0ded319
--- 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):
         """

eric ide

mercurial