Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py

changeset 4409
ff1cb0107d40
parent 4395
6a13466ac768
child 4410
a3a2b652286d
diff -r 146030035bdc -r ff1cb0107d40 Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py
--- a/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Sun Aug 30 19:33:16 2015 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Mon Aug 31 18:32:20 2015 +0200
@@ -35,7 +35,6 @@
 COLORS = [str(QColor(x).name()) for x in COLORNAMES]
 
 
-# TODO: add push and pull actions
 class HgLogBrowserDialog(QWidget, Ui_HgLogBrowserDialog):
     """
     Class implementing a dialog to browse the log history.
@@ -158,6 +157,12 @@
             'M': self.tr('Modified'),
         }
         
+        self.phases = {
+            'draft': self.tr("Draft"),
+            'public': self.tr("Public"),
+            'secret': self.tr("Secret"),
+        }
+        
         self.__dotRadius = 8
         self.__rowHeight = 20
         
@@ -169,6 +174,12 @@
         if self.vcs.version < (2, 1):
             self.logTree.setColumnHidden(self.PhaseColumn, True)
         
+        self.__initActionsMenu()
+    
+    def __initActionsMenu(self):
+        """
+        Private method to initialize the actions menu.
+        """
         self.__actionsMenu = QMenu()
         if self.vcs.version >= (2, 0):
             self.__graftAct = self.__actionsMenu.addAction(
@@ -199,6 +210,12 @@
         self.__switchAct.setToolTip(self.tr(
             "Switch the working directory to the selected revision"))
         
+        self.__actionsMenu.addSeparator()
+        
+        self.__pullAct = self.__actionsMenu.addAction(
+            self.tr("Pull Changes"), self.__pullActTriggered)
+        self.__pullAct.setToolTip(self.tr(
+            "Pull changes from a remote repository"))
         if self.vcs.version >= (2, 0):
             self.__lfPullAct = self.__actionsMenu.addAction(
                 self.tr("Pull Large Files"), self.__lfPullActTriggered)
@@ -207,6 +224,18 @@
         else:
             self.__lfPullAct = None
         
+        self.__actionsMenu.addSeparator()
+        
+        self.__pushAct = self.__actionsMenu.addAction(
+            self.tr("Push Selected Changes"), self.__pushActTriggered)
+        self.__pushAct.setToolTip(self.tr(
+            "Push changes of the selected changeset and its ancestors"
+            " to a remote repository"))
+        self.__pushAllAct = self.__actionsMenu.addAction(
+            self.tr("Push All Changes"), self.__pushAllActTriggered)
+        self.__pushAllAct.setToolTip(self.tr(
+            "Push all changes to a remote repository"))
+        
         self.actionsButton.setIcon(
             UI.PixmapCache.getIcon("actionsToolButton.png"))
         self.actionsButton.setMenu(self.__actionsMenu)
@@ -651,11 +680,15 @@
         msgtxt = msg[0]
         if len(msgtxt) > 30:
             msgtxt = "{0}...".format(msgtxt[:30])
+        if phase in self.phases:
+            phaseStr = self.phases[phase]
+        else:
+            phaseStr = phase
         columnLabels = [
             "",
             branches[0] + closedStr,
             "{0:>7}:{1}".format(rev, node),
-            phase,
+            phaseStr,
             author,
             date,
             msgtxt,
@@ -1192,9 +1225,9 @@
                 public = 0
                 for itm in self.logTree.selectedItems():
                     phase = itm.text(self.PhaseColumn)
-                    if phase == "draft":
+                    if phase == self.phases["draft"]:
                         draft += 1
-                    elif phase == "secret":
+                    elif phase == self.phases["secret"]:
                         secret += 1
                     else:
                         public += 1
@@ -1229,6 +1262,11 @@
                 else:
                     self.__lfPullAct.setEnabled(False)
             
+            self.__pushAct.setEnabled(
+                len(self.logTree.selectedItems()) == 1 and
+                self.logTree.selectedItems()[0].text(self.PhaseColumn) ==
+                self.phases["draft"])
+            
             self.actionsButton.setEnabled(True)
         else:
             self.actionsButton.setEnabled(False)
@@ -1608,11 +1646,11 @@
             self.__phaseAct.setEnabled(False)
             return
         
-        if currentPhase == "draft":
-            newPhase = "secret"
+        if currentPhase == self.phases["draft"]:
+            newPhase = self.phases["secret"]
             data = (revs, "s", True)
         else:
-            newPhase = "draft"
+            newPhase = self.phases["draft"]
             data = (revs, "d", False)
         res = self.vcs.hgPhase(self.repodir, data)
         if res:
@@ -1684,6 +1722,7 @@
                 
                 self.on_refreshButton_clicked()
     
+    @pyqtSlot()
     def __lfPullActTriggered(self):
         """
         Private slot to pull large files of selected revisions.
@@ -1698,6 +1737,33 @@
             self.vcs.getExtensionObject("largefiles").hgLfPull(
                 self.repodir, revisions=revs)
     
+    @pyqtSlot()
+    def __pullActTriggered(self):
+        """
+        Private slot to pull changes from a remote repository.
+        """
+        res = self.vcs.hgPull(self.repodir)
+        if res:
+            self.on_refreshButton_clicked()
+    
+    @pyqtSlot()
+    def __pushActTriggered(self):
+        """
+        Private slot to push changes to a remote repository up to a selected
+        changeset.
+        """
+        itm = self.logTree.selectedItems()[0]
+        rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0]
+        if rev:
+            self.vcs.hgPush(self.repodir, rev=rev)
+    
+    @pyqtSlot()
+    def __pushAllActTriggered(self):
+        """
+        Private slot to push all changes to a remote repository.
+        """
+        self.vcs.hgPush(self.repodir)
+    
     def __actionMode(self):
         """
         Private method to get the selected action mode.

eric ide

mercurial