Fixed some bugs introduced by signal/slot API conversion.

Mon, 09 Aug 2010 16:20:50 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 09 Aug 2010 16:20:50 +0200
changeset 470
99d8c50ba42f
parent 467
0911d8be9b07
child 471
dff188fccb5e

Fixed some bugs introduced by signal/slot API conversion.

Debugger/DebugServer.py file | annotate | diff | comparison | revisions
Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.py file | annotate | diff | comparison | revisions
Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgAnnotateDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgDiffDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgLogDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgTagBranchListDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnBlameDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnLogDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnRepoBrowserDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.py file | annotate | diff | comparison | revisions
Project/ProjectFormsBrowser.py file | annotate | diff | comparison | revisions
Project/ProjectInterfacesBrowser.py file | annotate | diff | comparison | revisions
Project/ProjectResourcesBrowser.py file | annotate | diff | comparison | revisions
Project/ProjectTranslationsBrowser.py file | annotate | diff | comparison | revisions
UI/UserInterface.py file | annotate | diff | comparison | revisions
--- a/Debugger/DebugServer.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Debugger/DebugServer.py	Mon Aug 09 16:20:50 2010 +0200
@@ -287,8 +287,10 @@
         # only start the client, if we are not in passive mode
         if not self.passive:
             if self.clientProcess:
-                self.clientProcess.readyReadStandardOutput.disconnect(self.__clientProcessError)
-                self.clientProcess.readyReadStandardOutput.disconnect(self.__clientProcessOutput)
+                self.clientProcess.readyReadStandardError.disconnect(
+                    self.__clientProcessError)
+                self.clientProcess.readyReadStandardOutput.disconnect(
+                    self.__clientProcessOutput)
                 self.clientProcess.close()
                 self.clientProcess.kill()
                 self.clientProcess.waitForFinished(10000)
@@ -310,8 +312,10 @@
                     self.debuggerInterface.startRemote(self.serverPort(), runInConsole)
             
             if self.clientProcess:
-                self.clientProcess.readyReadStandardOutput.connect(self.__clientProcessError)
-                self.clientProcess.readyReadStandardOutput.connect(self.__clientProcessOutput)
+                self.clientProcess.readyReadStandardError.connect(
+                    self.__clientProcessError)
+                self.clientProcess.readyReadStandardOutput.connect(
+                    self.__clientProcessOutput)
                 
                 if not isNetworked:
                     # the client is connected through stdin and stdout
@@ -1241,4 +1245,4 @@
         
         @return flag indicating a connection (boolean)
         """
-        return self.debuggerInterface and self.debuggerInterface.isConnected()
\ No newline at end of file
+        return self.debuggerInterface and self.debuggerInterface.isConnected()
--- a/Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.py	Mon Aug 09 16:20:50 2010 +0200
@@ -72,7 +72,7 @@
         self.process.setWorkingDirectory(dname)
         
         self.process.readyReadStandardOutput.connect(self.__readStdout)
-        self.process.readyReadStandardOutput.connect(self.__readStderr)
+        self.process.readyReadStandardError.connect(self.__readStderr)
         self.process.finished.connect(self.__finish)
             
         self.setWindowTitle(self.trUtf8('{0} - {1}').format(self.cmdname, self.filename))
@@ -152,4 +152,4 @@
                     Preferences.getSystem("IOEncoding"), 
                     'replace')
             self.errors.insertPlainText(s)
-            self.errors.ensureCursorVisible()
\ No newline at end of file
+            self.errors.ensureCursorVisible()
--- a/Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.py	Mon Aug 09 16:20:50 2010 +0200
@@ -72,7 +72,7 @@
         self.process.setWorkingDirectory(dname)
         
         self.process.readyReadStandardOutput.connect(self.__readStdout)
-        self.process.readyReadStandardOutput.connect(self.__readStderr)
+        self.process.readyReadStandardError.connect(self.__readStderr)
         self.process.finished.connect(self.__finish)
         
         self.setWindowTitle(self.trUtf8('{0} - {1}').format(self.cmdname, self.filename))
@@ -152,4 +152,4 @@
                     Preferences.getSystem("IOEncoding"), 
                     'replace')
             self.errors.insertPlainText(s)
-            self.errors.ensureCursorVisible()
\ No newline at end of file
+            self.errors.ensureCursorVisible()
--- a/Plugins/VcsPlugins/vcsMercurial/HgAnnotateDialog.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgAnnotateDialog.py	Mon Aug 09 16:20:50 2010 +0200
@@ -50,7 +50,7 @@
         
         self.process.finished.connect(self.__procFinished)
         self.process.readyReadStandardOutput.connect(self.__readStdout)
-        self.process.readyReadStandardOutput.connect(self.__readStderr)
+        self.process.readyReadStandardError.connect(self.__readStderr)
     
     def closeEvent(self, e):
         """
--- a/Plugins/VcsPlugins/vcsMercurial/HgDialog.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgDialog.py	Mon Aug 09 16:20:50 2010 +0200
@@ -121,7 +121,7 @@
         
         self.proc.finished.connect(self.__procFinished)
         self.proc.readyReadStandardOutput.connect(self.__readStdout)
-        self.proc.readyReadStandardOutput.connect(self.__readStderr)
+        self.proc.readyReadStandardError.connect(self.__readStderr)
         
         if workingDir:
             self.proc.setWorkingDirectory(workingDir)
--- a/Plugins/VcsPlugins/vcsMercurial/HgDiffDialog.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgDiffDialog.py	Mon Aug 09 16:20:50 2010 +0200
@@ -53,7 +53,7 @@
         
         self.process.finished.connect(self.__procFinished)
         self.process.readyReadStandardOutput.connect(self.__readStdout)
-        self.process.readyReadStandardOutput.connect(self.__readStderr)
+        self.process.readyReadStandardError.connect(self.__readStderr)
     
     def closeEvent(self, e):
         """
--- a/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Mon Aug 09 16:20:50 2010 +0200
@@ -86,7 +86,7 @@
         self.process = QProcess()
         self.process.finished.connect(self.__procFinished)
         self.process.readyReadStandardOutput.connect(self.__readStdout)
-        self.process.readyReadStandardOutput.connect(self.__readStderr)
+        self.process.readyReadStandardError.connect(self.__readStderr)
         
         self.flags = {
             'A' : self.trUtf8('Added'),
--- a/Plugins/VcsPlugins/vcsMercurial/HgLogDialog.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgLogDialog.py	Mon Aug 09 16:20:50 2010 +0200
@@ -55,7 +55,7 @@
         
         self.process.finished.connect(self.__procFinished)
         self.process.readyReadStandardOutput.connect(self.__readStdout)
-        self.process.readyReadStandardOutput.connect(self.__readStderr)
+        self.process.readyReadStandardError.connect(self.__readStderr)
         
         self.connect(self.contents, SIGNAL('anchorClicked(const QUrl&)'),
             self.__sourceChanged)
@@ -425,4 +425,4 @@
             self.intercept = False
             evt.accept()
             return
-        QWidget.keyPressEvent(self, evt)
\ No newline at end of file
+        QWidget.keyPressEvent(self, evt)
--- a/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py	Mon Aug 09 16:20:50 2010 +0200
@@ -155,7 +155,7 @@
             self.process = QProcess()
             self.process.finished.connect(self.__procFinished)
             self.process.readyReadStandardOutput.connect(self.__readStdout)
-            self.process.readyReadStandardOutput.connect(self.__readStderr)
+            self.process.readyReadStandardError.connect(self.__readStderr)
         
         args = []
         args.append('status')
@@ -475,4 +475,4 @@
         for itm in self.statusList.selectedItems():
             if itm.text(self.__statusColumn) in self.missingIndicators:
                 missingItems.append(itm)
-        return missingItems
\ No newline at end of file
+        return missingItems
--- a/Plugins/VcsPlugins/vcsMercurial/HgTagBranchListDialog.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgTagBranchListDialog.py	Mon Aug 09 16:20:50 2010 +0200
@@ -44,7 +44,7 @@
         
         self.process.finished.connect(self.__procFinished)
         self.process.readyReadStandardOutput.connect(self.__readStdout)
-        self.process.readyReadStandardOutput.connect(self.__readStderr)
+        self.process.readyReadStandardError.connect(self.__readStderr)
     
     def closeEvent(self, e):
         """
--- a/Plugins/VcsPlugins/vcsSubversion/SvnBlameDialog.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnBlameDialog.py	Mon Aug 09 16:20:50 2010 +0200
@@ -47,7 +47,7 @@
         
         self.process.finished.connect(self.__procFinished)
         self.process.readyReadStandardOutput.connect(self.__readStdout)
-        self.process.readyReadStandardOutput.connect(self.__readStderr)
+        self.process.readyReadStandardError.connect(self.__readStderr)
         
     def closeEvent(self, e):
         """
@@ -242,4 +242,4 @@
             self.intercept = False
             evt.accept()
             return
-        QDialog.keyPressEvent(self, evt)
\ No newline at end of file
+        QDialog.keyPressEvent(self, evt)
--- a/Plugins/VcsPlugins/vcsSubversion/SvnDialog.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnDialog.py	Mon Aug 09 16:20:50 2010 +0200
@@ -118,7 +118,7 @@
         
         self.proc.finished.connect(self.__procFinished)
         self.proc.readyReadStandardOutput.connect(self.__readStdout)
-        self.proc.readyReadStandardOutput.connect(self.__readStderr)
+        self.proc.readyReadStandardError.connect(self.__readStderr)
         
         if workingDir:
             self.proc.setWorkingDirectory(workingDir)
@@ -236,4 +236,4 @@
         
         @return flag indicating the presence of an add or delete (boolean)
         """
-        return self.__hasAddOrDelete
\ No newline at end of file
+        return self.__hasAddOrDelete
--- a/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.py	Mon Aug 09 16:20:50 2010 +0200
@@ -54,7 +54,7 @@
         
         self.process.finished.connect(self.__procFinished)
         self.process.readyReadStandardOutput.connect(self.__readStdout)
-        self.process.readyReadStandardOutput.connect(self.__readStderr)
+        self.process.readyReadStandardError.connect(self.__readStderr)
         
     def closeEvent(self, e):
         """
@@ -359,4 +359,4 @@
             self.intercept = False
             evt.accept()
             return
-        QWidget.keyPressEvent(self, evt)
\ No newline at end of file
+        QWidget.keyPressEvent(self, evt)
--- a/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py	Mon Aug 09 16:20:50 2010 +0200
@@ -61,7 +61,7 @@
         self.process = QProcess()
         self.process.finished.connect(self.__procFinished)
         self.process.readyReadStandardOutput.connect(self.__readStdout)
-        self.process.readyReadStandardOutput.connect(self.__readStderr)
+        self.process.readyReadStandardError.connect(self.__readStderr)
         
         self.rx_sep1 = QRegExp('\\-+\\s*')
         self.rx_sep2 = QRegExp('=+\\s*')
@@ -640,4 +640,4 @@
             self.intercept = False
             evt.accept()
             return
-        QWidget.keyPressEvent(self, evt)
\ No newline at end of file
+        QWidget.keyPressEvent(self, evt)
--- a/Plugins/VcsPlugins/vcsSubversion/SvnLogDialog.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnLogDialog.py	Mon Aug 09 16:20:50 2010 +0200
@@ -45,7 +45,7 @@
         
         self.process.finished.connect(self.__procFinished)
         self.process.readyReadStandardOutput.connect(self.__readStdout)
-        self.process.readyReadStandardOutput.connect(self.__readStderr)
+        self.process.readyReadStandardError.connect(self.__readStderr)
         
         self.connect(self.contents, SIGNAL('anchorClicked(const QUrl&)'),
             self.__sourceChanged)
@@ -318,4 +318,4 @@
             self.intercept = False
             evt.accept()
             return
-        QWidget.keyPressEvent(self, evt)
\ No newline at end of file
+        QWidget.keyPressEvent(self, evt)
--- a/Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.py	Mon Aug 09 16:20:50 2010 +0200
@@ -39,7 +39,7 @@
         
         self.process.finished.connect(self.__procFinished)
         self.process.readyReadStandardOutput.connect(self.__readStdout)
-        self.process.readyReadStandardOutput.connect(self.__readStderr)
+        self.process.readyReadStandardError.connect(self.__readStderr)
         
         self.rx_path = QRegExp(r"Properties on '([^']+)':\s*")
         self.rx_prop = QRegExp(r"  (.*) : (.*)[\r\n]")
@@ -206,4 +206,4 @@
                      Preferences.getSystem("IOEncoding"), 
                      'replace')
             self.errors.insertPlainText(s)
-            self.errors.ensureCursorVisible()
\ No newline at end of file
+            self.errors.ensureCursorVisible()
--- a/Plugins/VcsPlugins/vcsSubversion/SvnRepoBrowserDialog.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnRepoBrowserDialog.py	Mon Aug 09 16:20:50 2010 +0200
@@ -221,7 +221,7 @@
             self.process = QProcess()
             self.process.finished.connect(self.__procFinished)
             self.process.readyReadStandardOutput.connect(self.__readStdout)
-            self.process.readyReadStandardOutput.connect(self.__readStderr)
+            self.process.readyReadStandardError.connect(self.__readStderr)
         
         args = []
         args.append('list')
--- a/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py	Mon Aug 09 16:20:50 2010 +0200
@@ -270,7 +270,7 @@
             self.process = QProcess()
             self.process.finished.connect(self.__procFinished)
             self.process.readyReadStandardOutput.connect(self.__readStdout)
-            self.process.readyReadStandardOutput.connect(self.__readStderr)
+            self.process.readyReadStandardError.connect(self.__readStderr)
         
         args = []
         args.append('status')
@@ -708,4 +708,4 @@
         for itm in self.statusList.selectedItems():
             if itm.text(self.__changelistColumn) == "":
                 clitems.append(itm)
-        return clitems
\ No newline at end of file
+        return clitems
--- a/Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.py	Mon Aug 09 16:20:50 2010 +0200
@@ -41,7 +41,7 @@
         
         self.process.finished.connect(self.__procFinished)
         self.process.readyReadStandardOutput.connect(self.__readStdout)
-        self.process.readyReadStandardOutput.connect(self.__readStderr)
+        self.process.readyReadStandardError.connect(self.__readStderr)
         
         self.rx_list = \
             QRegExp(r"""\w*\s*(\d+)\s+(\w+)\s+\d*\s*((?:\w+\s+\d+|[0-9.]+\s+\w+)\s+[0-9:]+)\s+(.+)/\s*""")
@@ -307,4 +307,4 @@
             self.intercept = False
             evt.accept()
             return
-        QDialog.keyPressEvent(self, evt)
\ No newline at end of file
+        QDialog.keyPressEvent(self, evt)
--- a/Project/ProjectFormsBrowser.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Project/ProjectFormsBrowser.py	Mon Aug 09 16:20:50 2010 +0200
@@ -688,7 +688,7 @@
         args.append(fn)
         self.compileProc.finished.connect(self.__compileUIDone)
         self.compileProc.readyReadStandardOutput.connect(self.__readStdout)
-        self.compileProc.readyReadStandardOutput.connect(self.__readStderr)
+        self.compileProc.readyReadStandardError.connect(self.__readStderr)
         
         self.noDialog = noDialog
         self.compileProc.start(uic, args)
@@ -903,4 +903,4 @@
             "compileSelectedForms"  : None, 
             "generateDialogCode"    : None, 
             "newForm"               : None, 
-        }
\ No newline at end of file
+        }
--- a/Project/ProjectInterfacesBrowser.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Project/ProjectInterfacesBrowser.py	Mon Aug 09 16:20:50 2010 +0200
@@ -477,7 +477,7 @@
         
         self.compileProc.finished.connect(self.__compileIDLDone)
         self.compileProc.readyReadStandardOutput.connect(self.__readStdout)
-        self.compileProc.readyReadStandardOutput.connect(self.__readStderr)
+        self.compileProc.readyReadStandardError.connect(self.__readStderr)
         
         self.noDialog = noDialog
         self.compileProc.start(self.omniidl, args)
@@ -571,4 +571,4 @@
         """
         Private method to open the configuration dialog.
         """
-        e5App().getObject("UserInterface").showPreferences("corbaPage")
\ No newline at end of file
+        e5App().getObject("UserInterface").showPreferences("corbaPage")
--- a/Project/ProjectResourcesBrowser.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Project/ProjectResourcesBrowser.py	Mon Aug 09 16:20:50 2010 +0200
@@ -588,7 +588,7 @@
         args.append(fn)
         self.compileProc.finished.connect(self.__compileQRCDone)
         self.compileProc.readyReadStandardOutput.connect(self.__readStdout)
-        self.compileProc.readyReadStandardOutput.connect(self.__readStderr)
+        self.compileProc.readyReadStandardError.connect(self.__readStderr)
         
         self.noDialog = noDialog
         self.compileProc.start(rcc, args)
@@ -811,4 +811,4 @@
             "compileChangedResources"   : None, 
             "compileSelectedResources"  : None, 
             "newResource"               : None, 
-        }
\ No newline at end of file
+        }
--- a/Project/ProjectTranslationsBrowser.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/Project/ProjectTranslationsBrowser.py	Mon Aug 09 16:20:50 2010 +0200
@@ -908,7 +908,7 @@
         self.pylupdateProc.setWorkingDirectory(self.project.ppath)
         self.pylupdateProc.finished.connect(self.__generateTSFileDone)
         self.pylupdateProc.readyReadStandardOutput.connect(self.__readStdoutLupdate)
-        self.pylupdateProc.readyReadStandardOutput.connect(self.__readStderrLupdate)
+        self.pylupdateProc.readyReadStandardError.connect(self.__readStderrLupdate)
         
         self.pylupdateProc.start(self.pylupdate, args)
         procStarted = self.pylupdateProc.waitForStarted()
@@ -1037,7 +1037,7 @@
         self.lreleaseProc.setWorkingDirectory(self.project.ppath)
         self.lreleaseProc.finished.connect(self.__releaseTSFileDone)
         self.lreleaseProc.readyReadStandardOutput.connect(self.__readStdoutLrelease)
-        self.lreleaseProc.readyReadStandardOutput.connect(self.__readStderrLrelease)
+        self.lreleaseProc.readyReadStandardError.connect(self.__readStderrLrelease)
         
         self.lreleaseProc.start(lrelease, args)
         procStarted = self.lreleaseProc.waitForStarted()
@@ -1092,4 +1092,4 @@
             "generateSelectedWithObsolete"  : None, 
             "releaseAll"                    : None, 
             "releaseSelected"               : None, 
-        }
\ No newline at end of file
+        }
--- a/UI/UserInterface.py	Mon Aug 09 15:59:33 2010 +0200
+++ b/UI/UserInterface.py	Mon Aug 09 16:20:50 2010 +0200
@@ -4462,7 +4462,7 @@
         proc.finished.connect(self.__toolFinished)
         if tool['redirect'] != 'no':
             proc.readyReadStandardOutput.connect(self.__processToolStdout)
-            proc.readyReadStandardOutput.connect(self.__processToolStderr)
+            proc.readyReadStandardError.connect(self.__processToolStderr)
             if tool['redirect'] in ["insert", "replaceSelection"]:
                 aw = self.viewmanager.activeWindow()
                 procData = (aw, tool['redirect'], [])
@@ -5778,4 +5778,4 @@
         if self.__startup:
             if Preferences.getGeometry("MainMaximized"):
                 self.setWindowState(Qt.WindowStates(Qt.WindowMaximized))
-            self.__startup = False
\ No newline at end of file
+            self.__startup = False

eric ide

mercurial