Made availablity of push/pull related actions dependent on configured remote repository (default/default-push in .hg/hgrc).

Sun, 16 Feb 2014 19:36:52 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 16 Feb 2014 19:36:52 +0100
changeset 3277
b7d9c75223e3
parent 3276
1b7002ea389d
child 3278
243e6075af82

Made availablity of push/pull related actions dependent on configured remote repository (default/default-push in .hg/hgrc).

APIs/Python3/eric5.api file | annotate | diff | comparison | revisions
Documentation/Help/source.qch file | annotate | diff | comparison | revisions
Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.BookmarksExtension.ProjectHelper.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.hg.html file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/FetchExtension/ProjectHelper.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/hg.py file | annotate | diff | comparison | revisions
changelog file | annotate | diff | comparison | revisions
--- a/APIs/Python3/eric5.api	Sat Feb 15 19:29:20 2014 +0100
+++ b/APIs/Python3/eric5.api	Sun Feb 16 19:36:52 2014 +0100
@@ -4713,6 +4713,7 @@
 eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.HgProjectHelper.initActions?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.HgProjectHelper.initMenu?4(menu)
 eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.HgProjectHelper.setObjects?4(vcsObject, projectObject)
+eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.HgProjectHelper.showMenu?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.HgProjectHelper.shutdown?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.HgProjectHelper?1(vcsObject, projectObject, parent=None, name=None)
 eric5.Plugins.VcsPlugins.vcsMercurial.PurgeExtension.HgPurgeListDialog.HgPurgeListDialog?1(entries, parent=None)
@@ -4866,6 +4867,8 @@
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.IgnoreFileName?7
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg._createStatusMonitorThread?5(interval, project)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.activeExtensionsChanged?7
+eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.canPull?4()
+eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.canPush?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.clearStatusCache?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.committed?7
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.getClient?4()
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Sat Feb 15 19:29:20 2014 +0100
+++ b/Documentation/Help/source.qhp	Sun Feb 16 19:36:52 2014 +0100
@@ -1668,6 +1668,7 @@
       <keyword name="BookmarksModel.supportedDropActions" id="BookmarksModel.supportedDropActions" ref="eric5.Helpviewer.Bookmarks.BookmarksModel.html#BookmarksModel.supportedDropActions" />
       <keyword name="BookmarksProjectHelper" id="BookmarksProjectHelper" ref="eric5.Plugins.VcsPlugins.vcsMercurial.BookmarksExtension.ProjectHelper.html#BookmarksProjectHelper" />
       <keyword name="BookmarksProjectHelper (Constructor)" id="BookmarksProjectHelper (Constructor)" ref="eric5.Plugins.VcsPlugins.vcsMercurial.BookmarksExtension.ProjectHelper.html#BookmarksProjectHelper.__init__" />
+      <keyword name="BookmarksProjectHelper.__aboutToShowMenu" id="BookmarksProjectHelper.__aboutToShowMenu" ref="eric5.Plugins.VcsPlugins.vcsMercurial.BookmarksExtension.ProjectHelper.html#BookmarksProjectHelper.__aboutToShowMenu" />
       <keyword name="BookmarksProjectHelper.__hgBookmarkDefine" id="BookmarksProjectHelper.__hgBookmarkDefine" ref="eric5.Plugins.VcsPlugins.vcsMercurial.BookmarksExtension.ProjectHelper.html#BookmarksProjectHelper.__hgBookmarkDefine" />
       <keyword name="BookmarksProjectHelper.__hgBookmarkDelete" id="BookmarksProjectHelper.__hgBookmarkDelete" ref="eric5.Plugins.VcsPlugins.vcsMercurial.BookmarksExtension.ProjectHelper.html#BookmarksProjectHelper.__hgBookmarkDelete" />
       <keyword name="BookmarksProjectHelper.__hgBookmarkIncoming" id="BookmarksProjectHelper.__hgBookmarkIncoming" ref="eric5.Plugins.VcsPlugins.vcsMercurial.BookmarksExtension.ProjectHelper.html#BookmarksProjectHelper.__hgBookmarkIncoming" />
@@ -4934,6 +4935,7 @@
       <keyword name="FetchExtension (Package)" id="FetchExtension (Package)" ref="index-eric5.Plugins.VcsPlugins.vcsMercurial.FetchExtension.html" />
       <keyword name="FetchProjectHelper" id="FetchProjectHelper" ref="eric5.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html#FetchProjectHelper" />
       <keyword name="FetchProjectHelper (Constructor)" id="FetchProjectHelper (Constructor)" ref="eric5.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html#FetchProjectHelper.__init__" />
+      <keyword name="FetchProjectHelper.__aboutToShowMenu" id="FetchProjectHelper.__aboutToShowMenu" ref="eric5.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html#FetchProjectHelper.__aboutToShowMenu" />
       <keyword name="FetchProjectHelper.__hgFetch" id="FetchProjectHelper.__hgFetch" ref="eric5.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html#FetchProjectHelper.__hgFetch" />
       <keyword name="FetchProjectHelper.initActions" id="FetchProjectHelper.initActions" ref="eric5.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html#FetchProjectHelper.initActions" />
       <keyword name="FetchProjectHelper.initMenu" id="FetchProjectHelper.initMenu" ref="eric5.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html#FetchProjectHelper.initMenu" />
@@ -5717,6 +5719,7 @@
       <keyword name="Helpviewer (Package)" id="Helpviewer (Package)" ref="index-eric5.Helpviewer.html" />
       <keyword name="Hg" id="Hg" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg" />
       <keyword name="Hg (Constructor)" id="Hg (Constructor)" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__init__" />
+      <keyword name="Hg.__checkDefaults" id="Hg.__checkDefaults" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__checkDefaults" />
       <keyword name="Hg.__getExtensionsInfo" id="Hg.__getExtensionsInfo" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__getExtensionsInfo" />
       <keyword name="Hg.__hgGetFileForRevision" id="Hg.__hgGetFileForRevision" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__hgGetFileForRevision" />
       <keyword name="Hg.__hgURL" id="Hg.__hgURL" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__hgURL" />
@@ -5724,6 +5727,8 @@
       <keyword name="Hg.__monitorRepoIniFile" id="Hg.__monitorRepoIniFile" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__monitorRepoIniFile" />
       <keyword name="Hg.__vcsCommit_Step2" id="Hg.__vcsCommit_Step2" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__vcsCommit_Step2" />
       <keyword name="Hg._createStatusMonitorThread" id="Hg._createStatusMonitorThread" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg._createStatusMonitorThread" />
+      <keyword name="Hg.canPull" id="Hg.canPull" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.canPull" />
+      <keyword name="Hg.canPush" id="Hg.canPush" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.canPush" />
       <keyword name="Hg.clearStatusCache" id="Hg.clearStatusCache" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.clearStatusCache" />
       <keyword name="Hg.getClient" id="Hg.getClient" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.getClient" />
       <keyword name="Hg.getExtensionObject" id="Hg.getExtensionObject" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.getExtensionObject" />
@@ -6284,6 +6289,7 @@
       <keyword name="HgProjectHelper.initActions" id="HgProjectHelper.initActions" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.initActions" />
       <keyword name="HgProjectHelper.initMenu" id="HgProjectHelper.initMenu" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.initMenu" />
       <keyword name="HgProjectHelper.setObjects" id="HgProjectHelper.setObjects" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.setObjects" />
+      <keyword name="HgProjectHelper.showMenu" id="HgProjectHelper.showMenu" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.showMenu" />
       <keyword name="HgProjectHelper.shutdown" id="HgProjectHelper.shutdown" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.shutdown" />
       <keyword name="HgPurgeListDialog" id="HgPurgeListDialog" ref="eric5.Plugins.VcsPlugins.vcsMercurial.PurgeExtension.HgPurgeListDialog.html#HgPurgeListDialog" />
       <keyword name="HgPurgeListDialog (Constructor)" id="HgPurgeListDialog (Constructor)" ref="eric5.Plugins.VcsPlugins.vcsMercurial.PurgeExtension.HgPurgeListDialog.html#HgPurgeListDialog.__init__" />
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.BookmarksExtension.ProjectHelper.html	Sat Feb 15 19:29:20 2014 +0100
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.BookmarksExtension.ProjectHelper.html	Sun Feb 16 19:36:52 2014 +0100
@@ -60,6 +60,9 @@
 <td><a href="#BookmarksProjectHelper.__init__">BookmarksProjectHelper</a></td>
 <td>Constructor</td>
 </tr><tr>
+<td><a href="#BookmarksProjectHelper.__aboutToShowMenu">__aboutToShowMenu</a></td>
+<td>Private slot to handle the aboutToShow signal of the background menu.</td>
+</tr><tr>
 <td><a href="#BookmarksProjectHelper.__hgBookmarkDefine">__hgBookmarkDefine</a></td>
 <td>Private slot used to define a bookmark.</td>
 </tr><tr>
@@ -106,6 +109,11 @@
 <b>BookmarksProjectHelper</b>(<i></i>)
 <p>
         Constructor
+</p><a NAME="BookmarksProjectHelper.__aboutToShowMenu" ID="BookmarksProjectHelper.__aboutToShowMenu"></a>
+<h4>BookmarksProjectHelper.__aboutToShowMenu</h4>
+<b>__aboutToShowMenu</b>(<i></i>)
+<p>
+        Private slot to handle the aboutToShow signal of the background menu.
 </p><a NAME="BookmarksProjectHelper.__hgBookmarkDefine" ID="BookmarksProjectHelper.__hgBookmarkDefine"></a>
 <h4>BookmarksProjectHelper.__hgBookmarkDefine</h4>
 <b>__hgBookmarkDefine</b>(<i></i>)
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html	Sat Feb 15 19:29:20 2014 +0100
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html	Sun Feb 16 19:36:52 2014 +0100
@@ -60,6 +60,9 @@
 <td><a href="#FetchProjectHelper.__init__">FetchProjectHelper</a></td>
 <td>Constructor</td>
 </tr><tr>
+<td><a href="#FetchProjectHelper.__aboutToShowMenu">__aboutToShowMenu</a></td>
+<td>Private slot to handle the aboutToShow signal of the background menu.</td>
+</tr><tr>
 <td><a href="#FetchProjectHelper.__hgFetch">__hgFetch</a></td>
 <td>Private slot used to fetch changes from a remote repository.</td>
 </tr><tr>
@@ -82,6 +85,11 @@
 <b>FetchProjectHelper</b>(<i></i>)
 <p>
         Constructor
+</p><a NAME="FetchProjectHelper.__aboutToShowMenu" ID="FetchProjectHelper.__aboutToShowMenu"></a>
+<h4>FetchProjectHelper.__aboutToShowMenu</h4>
+<b>__aboutToShowMenu</b>(<i></i>)
+<p>
+        Private slot to handle the aboutToShow signal of the background menu.
 </p><a NAME="FetchProjectHelper.__hgFetch" ID="FetchProjectHelper.__hgFetch"></a>
 <h4>FetchProjectHelper.__hgFetch</h4>
 <b>__hgFetch</b>(<i></i>)
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html	Sat Feb 15 19:29:20 2014 +0100
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html	Sun Feb 16 19:36:52 2014 +0100
@@ -219,6 +219,9 @@
 <td><a href="#HgProjectHelper.setObjects">setObjects</a></td>
 <td>Public method to set references to the vcs and project objects.</td>
 </tr><tr>
+<td><a href="#HgProjectHelper.showMenu">showMenu</a></td>
+<td>Public slot called before the vcs menu is shown.</td>
+</tr><tr>
 <td><a href="#HgProjectHelper.shutdown">shutdown</a></td>
 <td>Public method to perform shutdown actions.</td>
 </tr>
@@ -538,7 +541,12 @@
 <dd>
 reference to the project object
 </dd>
-</dl><a NAME="HgProjectHelper.shutdown" ID="HgProjectHelper.shutdown"></a>
+</dl><a NAME="HgProjectHelper.showMenu" ID="HgProjectHelper.showMenu"></a>
+<h4>HgProjectHelper.showMenu</h4>
+<b>showMenu</b>(<i></i>)
+<p>
+        Public slot called before the vcs menu is shown.
+</p><a NAME="HgProjectHelper.shutdown" ID="HgProjectHelper.shutdown"></a>
 <h4>HgProjectHelper.shutdown</h4>
 <b>shutdown</b>(<i></i>)
 <p>
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.hg.html	Sat Feb 15 19:29:20 2014 +0100
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.hg.html	Sun Feb 16 19:36:52 2014 +0100
@@ -70,6 +70,9 @@
 <td><a href="#Hg.__init__">Hg</a></td>
 <td>Constructor</td>
 </tr><tr>
+<td><a href="#Hg.__checkDefaults">__checkDefaults</a></td>
+<td>Private method to check, if the default and default-push URLs have been configured.</td>
+</tr><tr>
 <td><a href="#Hg.__getExtensionsInfo">__getExtensionsInfo</a></td>
 <td>Private method to get the active extensions from Mercurial.</td>
 </tr><tr>
@@ -91,6 +94,12 @@
 <td><a href="#Hg._createStatusMonitorThread">_createStatusMonitorThread</a></td>
 <td>Protected method to create an instance of the VCS status monitor thread.</td>
 </tr><tr>
+<td><a href="#Hg.canPull">canPull</a></td>
+<td>Public method to check, if pull is possible.</td>
+</tr><tr>
+<td><a href="#Hg.canPush">canPush</a></td>
+<td>Public method to check, if push is possible.</td>
+</tr><tr>
 <td><a href="#Hg.clearStatusCache">clearStatusCache</a></td>
 <td>Public method to clear the status cache.</td>
 </tr><tr>
@@ -358,7 +367,13 @@
 <dd>
 name of this object (string)
 </dd>
-</dl><a NAME="Hg.__getExtensionsInfo" ID="Hg.__getExtensionsInfo"></a>
+</dl><a NAME="Hg.__checkDefaults" ID="Hg.__checkDefaults"></a>
+<h4>Hg.__checkDefaults</h4>
+<b>__checkDefaults</b>(<i></i>)
+<p>
+        Private method to check, if the default and default-push URLs
+        have been configured.
+</p><a NAME="Hg.__getExtensionsInfo" ID="Hg.__getExtensionsInfo"></a>
 <h4>Hg.__getExtensionsInfo</h4>
 <b>__getExtensionsInfo</b>(<i></i>)
 <p>
@@ -443,6 +458,26 @@
 <dd>
 reference to the monitor thread (QThread)
 </dd>
+</dl><a NAME="Hg.canPull" ID="Hg.canPull"></a>
+<h4>Hg.canPull</h4>
+<b>canPull</b>(<i></i>)
+<p>
+        Public method to check, if pull is possible.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating pull capability (boolean)
+</dd>
+</dl><a NAME="Hg.canPush" ID="Hg.canPush"></a>
+<h4>Hg.canPush</h4>
+<b>canPush</b>(<i></i>)
+<p>
+        Public method to check, if push is possible.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating push capability (boolean)
+</dd>
 </dl><a NAME="Hg.clearStatusCache" ID="Hg.clearStatusCache"></a>
 <h4>Hg.clearStatusCache</h4>
 <b>clearStatusCache</b>(<i></i>)
--- a/Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py	Sat Feb 15 19:29:20 2014 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py	Sun Feb 16 19:36:52 2014 +0100
@@ -196,8 +196,20 @@
         menu.addAction(self.hgBookmarkOutgoingAct)
         menu.addAction(self.hgBookmarkPushAct)
         
+        menu.aboutToShow.connect(self.__aboutToShowMenu)
+        
         return menu
     
+    def __aboutToShowMenu(self):
+        """
+        Private slot to handle the aboutToShow signal of the background menu.
+        """
+        self.hgBookmarkPullAct.setEnabled(self.vcs.canPull())
+        self.hgBookmarkIncomingAct.setEnabled(self.vcs.canPull())
+        
+        self.hgBookmarkPushAct.setEnabled(self.vcs.canPush())
+        self.hgBookmarkOutgoingAct.setEnabled(self.vcs.canPush())
+    
     def menuTitle(self):
         """
         Public method to get the menu title.
--- a/Plugins/VcsPlugins/vcsMercurial/FetchExtension/ProjectHelper.py	Sat Feb 15 19:29:20 2014 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/FetchExtension/ProjectHelper.py	Sun Feb 16 19:36:52 2014 +0100
@@ -63,8 +63,16 @@
         
         menu.addAction(self.hgFetchAct)
         
+        menu.aboutToShow.connect(self.__aboutToShowMenu)
+        
         return menu
     
+    def __aboutToShowMenu(self):
+        """
+        Private slot to handle the aboutToShow signal of the background menu.
+        """
+        self.hgFetchAct.setEnabled(self.vcs.canPull())
+    
     def menuTitle(self):
         """
         Public method to get the menu title.
--- a/Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py	Sat Feb 15 19:29:20 2014 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py	Sun Feb 16 19:36:52 2014 +0100
@@ -1171,6 +1171,20 @@
         menu.addAction(self.hgEditUserConfigAct)
         menu.addAction(self.hgConfigAct)
     
+    def showMenu(self):
+        """
+        Public slot called before the vcs menu is shown.
+        """
+        super().showMenu()
+        
+        self.hgPullAct.setEnabled(self.vcs.canPull())
+        self.hgIncomingAct.setEnabled(self.vcs.canPull())
+        
+        self.hgPushAct.setEnabled(self.vcs.canPush())
+        self.hgPushBranchAct.setEnabled(self.vcs.canPush())
+        self.hgPushForcedAct.setEnabled(self.vcs.canPush())
+        self.hgOutgoingAct.setEnabled(self.vcs.canPush())
+    
     def shutdown(self):
         """
         Public method to perform shutdown actions.
--- a/Plugins/VcsPlugins/vcsMercurial/hg.py	Sat Feb 15 19:29:20 2014 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/hg.py	Sun Feb 16 19:36:52 2014 +0100
@@ -121,6 +121,11 @@
         
         self.__client = None
         
+        self.__repoDir = ""
+        self.__repoIniFile = ""
+        self.__defaultConfigured = False
+        self.__defaultPushConfigured = False
+        
         # instantiate the extensions
         from .BookmarksExtension.bookmarks import Bookmarks
         from .QueuesExtension.queues import Queues
@@ -3216,9 +3221,60 @@
                     shutil.rmtree(subrepoAbsPath, True)
     
     ###########################################################################
-    ## Methods to handle extensions are below.
+    ## Methods to handle configuration dependent stuff are below.
     ###########################################################################
     
+    def __checkDefaults(self):
+        """
+        Private method to check, if the default and default-push URLs
+        have been configured.
+        """
+        args = []
+        args.append('showconfig')
+        args.append('paths')
+        
+        output = ""
+        if self.__client is None:
+            process = QProcess()
+            self.__repoDir and process.setWorkingDirectory(self.__repoDir)
+            process.start('hg', args)
+            procStarted = process.waitForStarted(5000)
+            if procStarted:
+                finished = process.waitForFinished(30000)
+                if finished and process.exitCode() == 0:
+                    output = str(
+                        process.readAllStandardOutput(),
+                        Preferences.getSystem("IOEncoding"), 'replace')
+        else:
+            output, error = self.__client.runcommand(args)
+        
+        if output:
+            self.__defaultConfigured = False
+            self.__defaultPushConfigured = False
+            for line in output.splitlines():
+                if line.startswith("paths.default=") and \
+                        not line.strip().endswith("="):
+                    self.__defaultConfigured = True
+                if line.startswith("paths.default-push=") and \
+                        not line.strip().endswith("="):
+                    self.__defaultPushConfigured = True
+    
+    def canPull(self):
+        """
+        Public method to check, if pull is possible.
+        
+        @return flag indicating pull capability (boolean)
+        """
+        return self.__defaultConfigured
+    
+    def canPush(self):
+        """
+        Public method to check, if push is possible.
+        
+        @return flag indicating push capability (boolean)
+        """
+        return self.__defaultPushConfigured or self.__defaultConfigured
+    
     def __iniFileChanged(self, path):
         """
         Private slot to handle a change of the Mercurial configuration file.
@@ -3237,6 +3293,9 @@
                         """<p>The Mercurial Command Server could not be"""
                         """ restarted.</p><p>Reason: {0}</p>""").format(err))
                 self.__client = None
+        
+        if self.__repoIniFile and path == self.__repoIniFile:
+            self.__checkDefaults()
     
     def __monitorRepoIniFile(self, name):
         """
@@ -3257,6 +3316,12 @@
         cfgFile = os.path.join(repodir, self.adminDir, "hgrc")
         if os.path.exists(cfgFile):
             self.__iniWatcher.addPath(cfgFile)
+            self.__repoIniFile = cfgFile
+            self.__checkDefaults()
+    
+    ###########################################################################
+    ## Methods to handle extensions are below.
+    ###########################################################################
     
     def __getExtensionsInfo(self):
         """
@@ -3272,6 +3337,7 @@
         output = ""
         if self.__client is None:
             process = QProcess()
+            self.__repoDir and process.setWorkingDirectory(self.__repoDir)
             process.start('hg', args)
             procStarted = process.waitForStarted(5000)
             if procStarted:
@@ -3349,31 +3415,35 @@
         @param project reference to the project object
         @return the project helper object
         """
+        # find the root of the repo
+        repodir = project.getProjectPath()
+        while not os.path.isdir(os.path.join(repodir, self.adminDir)):
+            repodir = os.path.dirname(repodir)
+            if not repodir or os.path.splitdrive(repodir)[1] == os.sep:
+                repodir = ""
+                break
+        if repodir:
+            self.__repoDir = repodir
+        
         self.__projectHelper = self.__plugin.getProjectHelper()
         self.__projectHelper.setObjects(self, project)
         self.__monitorRepoIniFile(project.getProjectPath())
         
-        if not Utilities.isMacPlatform() and self.version >= (1, 9):
-            # find the root of the repo
-            repodir = project.getProjectPath()
-            while not os.path.isdir(os.path.join(repodir, self.adminDir)):
-                repodir = os.path.dirname(repodir)
-                if not repodir or os.path.splitdrive(repodir)[1] == os.sep:
-                    repodir = ""
-                    break
-            if repodir:
-                from .HgClient import HgClient
-                client = HgClient(repodir, "utf-8", self)
-                ok, err = client.startServer()
-                if ok:
-                    self.__client = client
-                else:
-                    E5MessageBox.warning(
-                        None,
-                        self.tr("Mercurial Command Server"),
-                        self.tr(
-                            """<p>The Mercurial Command Server could not be"""
-                            """ started.</p><p>Reason: {0}</p>""").format(err))
+        if not Utilities.isMacPlatform() and \
+            self.version >= (1, 9) and \
+                repodir:
+            from .HgClient import HgClient
+            client = HgClient(repodir, "utf-8", self)
+            ok, err = client.startServer()
+            if ok:
+                self.__client = client
+            else:
+                E5MessageBox.warning(
+                    None,
+                    self.tr("Mercurial Command Server"),
+                    self.tr(
+                        """<p>The Mercurial Command Server could not be"""
+                        """ started.</p><p>Reason: {0}</p>""").format(err))
         
         return self.__projectHelper
 
--- a/changelog	Sat Feb 15 19:29:20 2014 +0100
+++ b/changelog	Sun Feb 16 19:36:52 2014 +0100
@@ -16,8 +16,10 @@
          tagging of a specific revision
      --- added dialogs to enter the contents for initial .hgrc/mercurial.ini
          and .hg/hgrc files
-     --- added a configuration option to enforce the useage of the internal
+     --- added a configuration option to enforce the usage of the internal
          merge tool
+     --- made availablity of push/pull related actions dependent on configured
+         remote repository (default/default-push in .hg/hgrc)
 
 Version 5.4.0:
 - bug fixes

eric ide

mercurial