Plugins/VcsPlugins/vcsMercurial/hg.py

changeset 3302
e92f0dd51979
parent 3290
dbb53746813f
child 3305
cf4f22a19dc6
diff -r 734353e7d679 -r e92f0dd51979 Plugins/VcsPlugins/vcsMercurial/hg.py
--- a/Plugins/VcsPlugins/vcsMercurial/hg.py	Sun Feb 23 15:24:28 2014 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/hg.py	Sun Feb 23 19:20:43 2014 +0100
@@ -25,7 +25,6 @@
 
 from .HgDialog import HgDialog
 
-import Preferences
 import Utilities
 
 
@@ -156,6 +155,14 @@
         """
         return self.__plugin
     
+    def getEncoding(self):
+        """
+        Public method to get the encoding to be used by Mercurial.
+        
+        @return encoding (string)
+        """
+        return self.__plugin.getPreferences("Encoding")
+    
     def vcsShutdown(self):
         """
         Public method used to shutdown the Mercurial interface.
@@ -204,6 +211,17 @@
         """
         return self.__client
     
+    def initCommand(self, command):
+        """
+        Public method to initialize a command arguments list.
+        
+        @param command command name (string)
+        @return list of command options (list of string)
+        """
+        args = [command]
+        self.addArguments(args, self.__plugin.getGlobalOptions())
+        return args
+    
     def vcsExists(self):
         """
         Public method used to test for the presence of the hg executable.
@@ -213,16 +231,16 @@
         """
         self.versionStr = ''
         errMsg = ""
-        ioEncoding = Preferences.getSystem("IOEncoding")
         
+        args = self.initCommand("version")
         process = QProcess()
-        process.start('hg', ['version'])
+        process.start('hg', args)
         procStarted = process.waitForStarted(5000)
         if procStarted:
             finished = process.waitForFinished(30000)
             if finished and process.exitCode() == 0:
-                output = \
-                    str(process.readAllStandardOutput(), ioEncoding, 'replace')
+                output = str(process.readAllStandardOutput(),
+                             self.getEncoding(), 'replace')
                 self.versionStr = output.splitlines()[0].split()[-1][0:-1]
                 v = list(re.match(r'.*?(\d+)\.(\d+)\.?(\d+)?(\+[0-9a-f-]+)?',
                                   self.versionStr).groups())
@@ -299,8 +317,7 @@
         if not msg:
             msg = '***'
         
-        args = []
-        args.append('init')
+        args = self.initCommand("init")
         args.append(projectDir)
         # init is not possible with the command server
         dia = HgDialog(self.tr('Creating Mercurial repository'), self)
@@ -315,8 +332,7 @@
                 status = self.hgCreateIgnoreFile(projectDir)
             
             if status:
-                args = []
-                args.append('commit')
+                args = self.vcs.initCommand("commit")
                 args.append('--addremove')
                 args.append('--message')
                 args.append(msg)
@@ -351,10 +367,7 @@
         elif vcsUrl[1] in ['|', ':']:
             vcsUrl = 'file:///{0}'.format(vcsUrl)
         
-        args = []
-        args.append('clone')
-        self.addArguments(args, self.options['global'])
-        self.addArguments(args, self.options['checkout'])
+        args = self.initCommand("clone")
         if rev:
             args.append("--rev")
             args.append(rev)
@@ -487,10 +500,7 @@
         if not msg and not amend:
             msg = '***'
         
-        args = []
-        args.append('commit')
-        self.addArguments(args, self.options['global'])
-        self.addArguments(args, self.options['commit'])
+        args = self.initCommand("commit")
         args.append("-v")
         if mq:
             args.append("--mq")
@@ -558,10 +568,7 @@
         @return flag indicating, that the update contained an add
             or delete (boolean)
         """
-        args = []
-        args.append('update')
-        self.addArguments(args, self.options['global'])
-        self.addArguments(args, self.options['update'])
+        args = self.initCommand("update")
         if "-v" not in args and "--verbose" not in args:
             args.append("-v")
         if revision is not None:
@@ -605,10 +612,7 @@
         @param isDir flag indicating name is a directory (boolean)
         @param noDialog flag indicating quiet operations
         """
-        args = []
-        args.append('add')
-        self.addArguments(args, self.options['global'])
-        self.addArguments(args, self.options['add'])
+        args = self.initCommand("add")
         args.append("-v")
         
         if isinstance(name, list):
@@ -682,10 +686,7 @@
         @param noDialog flag indicating quiet operations
         @return flag indicating successfull operation (boolean)
         """
-        args = []
-        args.append('remove')
-        self.addArguments(args, self.options['global'])
-        self.addArguments(args, self.options['remove'])
+        args = self.initCommand("remove")
         args.append("-v")
         if noDialog and '--force' not in args:
             args.append('--force')
@@ -735,10 +736,8 @@
         @return flag indicating successfull operation (boolean)
         """
         isDir = os.path.isdir(name)
-        opts = self.options['global'][:]
-        force = '--force' in opts
-        if force:
-            opts.remove('--force')
+        # TODO: get rid of this
+        force = False
         
         res = False
         if noDialog:
@@ -754,9 +753,7 @@
                 target, force = dlg.getData()
         
         if accepted:
-            args = []
-            args.append('rename')
-            self.addArguments(args, opts)
+            args = self.initCommand("rename")
             args.append("-v")
             if force:
                 args.append('--force')
@@ -921,8 +918,7 @@
         else:
             return False
         
-        args = []
-        args.append('tag')
+        args = self.initCommand("tag")
         msgPart = ""
         if tagOp in [HgTagDialog.CreateLocalTag, HgTagDialog.DeleteLocalTag]:
             args.append('--local')
@@ -959,9 +955,7 @@
         @return flag indicating, that the update contained an add
             or delete (boolean)
         """
-        args = []
-        args.append('revert')
-        self.addArguments(args, self.options['global'])
+        args = self.initCommand("revert")
         if not self.getPlugin().getPreferences("CreateBackup"):
             args.append("--no-backup")
         args.append("-v")
@@ -1027,10 +1021,8 @@
             if os.path.splitdrive(repodir)[1] == os.sep:
                 return
         
-        opts = self.options['global'][:]
-        force = '--force' in opts
-        if force:
-            del opts[opts.index('--force')]
+        # TODO: get rid of this
+        force = False
         
         if self.isExtensionActive("bookmarks"):
             bookmarksList = \
@@ -1047,9 +1039,7 @@
         else:
             return
         
-        args = []
-        args.append('merge')
-        self.addArguments(args, opts)
+        args = self.initCommand("merge")
         if force:
             args.append("--force")
         if self.getPlugin().getPreferences("InternalMerge"):
@@ -1124,8 +1114,7 @@
             if os.path.splitdrive(repodir)[1] == os.sep:
                 return 0
         
-        args = []
-        args.append('status')
+        args = self.initCommand("status")
         args.append('--all')
         args.append('--noninteractive')
         
@@ -1138,10 +1127,8 @@
             if procStarted:
                 finished = process.waitForFinished(30000)
                 if finished and process.exitCode() == 0:
-                    output = \
-                        str(process.readAllStandardOutput(),
-                            Preferences.getSystem("IOEncoding"),
-                            'replace')
+                    output = str(process.readAllStandardOutput(),
+                                 self.getEncoding(), 'replace')
         else:
             output, error = self.__client.runcommand(args)
         
@@ -1194,8 +1181,7 @@
                 if os.path.splitdrive(repodir)[1] == os.sep:
                     return names
         
-            args = []
-            args.append('status')
+            args = self.initCommand("status")
             args.append('--all')
             args.append('--noninteractive')
             
@@ -1208,10 +1194,8 @@
                 if procStarted:
                     finished = process.waitForFinished(30000)
                     if finished and process.exitCode() == 0:
-                        output = str(
-                            process.readAllStandardOutput(),
-                            Preferences.getSystem("IOEncoding"),
-                            'replace')
+                        output = str(process.readAllStandardOutput(),
+                                     self.getEncoding(), 'replace')
             else:
                 output, error = self.__client.runcommand(args)
             
@@ -1355,8 +1339,7 @@
         @param ppath local path to get the repository infos (string)
         @return string with ready formated info for display (string)
         """
-        args = []
-        args.append('parents')
+        args = self.initCommand("parents")
         args.append('--template')
         args.append('{rev}:{node|short}@@@{tags}@@@{author|xmlescape}@@@'
                     '{date|isodate}@@@{branches}@@@{bookmarks}\n')
@@ -1370,9 +1353,8 @@
             if procStarted:
                 finished = process.waitForFinished(30000)
                 if finished and process.exitCode() == 0:
-                    output = str(
-                        process.readAllStandardOutput(),
-                        Preferences.getSystem("IOEncoding"), 'replace')
+                    output = str(process.readAllStandardOutput(),
+                                 self.getEncoding(), 'replace')
         else:
             output, error = self.__client.runcommand(args)
         
@@ -1418,8 +1400,7 @@
             infoStr = ""
         
         url = ""
-        args = []
-        args.append('showconfig')
+        args = self.initCommand("showconfig")
         args.append('paths.default')
         
         output = ""
@@ -1430,9 +1411,8 @@
             if procStarted:
                 finished = process.waitForFinished(30000)
                 if finished and process.exitCode() == 0:
-                    output = str(
-                        process.readAllStandardOutput(),
-                        Preferences.getSystem("IOEncoding"), 'replace')
+                    output = str(process.readAllStandardOutput(),
+                                 self.getEncoding(), 'replace')
         else:
             output, error = self.__client.runcommand(args)
         
@@ -1451,7 +1431,16 @@
             """{2}"""
             """</table></p>\n"""
         ).format(self.versionStr, url, infoStr)
-
+    
+    def vcsSupportCommandOptions(self):
+        """
+        Public method to signal the support of user settable command options.
+        
+        @return flag indicating the support  of user settable command options
+            (boolean)
+        """
+        return False
+    
     ###########################################################################
     ## Private Mercurial specific methods are below.
     ###########################################################################
@@ -1514,9 +1503,7 @@
         if dlg.exec_() == QDialog.Accepted:
             target, force = dlg.getData()
             
-            args = []
-            args.append('copy')
-            self.addArguments(args, self.options['global'])
+            args = self.initCommand("copy")
             args.append("-v")
             args.append(name)
             args.append(target)
@@ -1553,8 +1540,7 @@
             tag name and flag indicating a local tag (list of tuple of string
             and boolean), if withType is True
         """
-        args = []
-        args.append('tags')
+        args = self.initCommand("tags")
         args.append('--verbose')
         
         output = ""
@@ -1566,10 +1552,8 @@
             if procStarted:
                 finished = process.waitForFinished(30000)
                 if finished and process.exitCode() == 0:
-                    output = \
-                        str(process.readAllStandardOutput(),
-                            Preferences.getSystem("IOEncoding"),
-                            'replace')
+                    output = str(process.readAllStandardOutput(),
+                                 self.getEncoding(), 'replace')
         else:
             output, error = self.__client.runcommand(args)
         
@@ -1605,8 +1589,7 @@
         @param repodir directory name of the repository (string)
         @return list of branches (list of string)
         """
-        args = []
-        args.append('branches')
+        args = self.initCommand("branches")
         args.append('--closed')
         
         output = ""
@@ -1618,10 +1601,8 @@
             if procStarted:
                 finished = process.waitForFinished(30000)
                 if finished and process.exitCode() == 0:
-                    output = \
-                        str(process.readAllStandardOutput(),
-                            Preferences.getSystem("IOEncoding"),
-                            'replace')
+                    output = str(process.readAllStandardOutput(),
+                                 self.getEncoding(), 'replace')
         else:
             output, error = self.__client.runcommand(args)
         
@@ -1745,8 +1726,7 @@
         @keyparam rev revision to retrieve (string)
         @return contents of the file (string) and an error message (string)
         """
-        args = []
-        args.append("cat")
+        args = self.initCommand("cat")
         if rev:
             args.append("--rev")
             args.append(rev)
@@ -1771,13 +1751,11 @@
                 finished = process.waitForFinished(30000)
                 if finished:
                     if process.exitCode() == 0:
-                        output = str(
-                            process.readAllStandardOutput(),
-                            Preferences.getSystem("IOEncoding"), 'replace')
+                        output = str(process.readAllStandardOutput(),
+                                     self.getEncoding(), 'replace')
                     else:
-                        error = str(
-                            process.readAllStandardError(),
-                            Preferences.getSystem("IOEncoding"), 'replace')
+                        error = str(process.readAllStandardError(),
+                                    self.getEncoding(), 'replace')
                 else:
                     error = self.tr(
                         "The hg process did not finish within 30s.")
@@ -1941,9 +1919,7 @@
             command = "pull"
             title = self.tr('Pulling from a remote Mercurial repository')
         
-        args = []
-        args.append(command)
-        self.addArguments(args, self.options['global'])
+        args = self.initCommand(command)
         args.append('-v')
         if self.getPlugin().getPreferences("PullUpdate"):
             args.append('--update')
@@ -1977,9 +1953,7 @@
         @keyparam force flag indicating a forced push (boolean)
         @keyparam newBranch flag indicating to push a new branch (boolean)
         """
-        args = []
-        args.append('push')
-        self.addArguments(args, self.options['global'])
+        args = self.initCommand("push")
         args.append('-v')
         if force:
             args.append('-f')
@@ -2014,8 +1988,7 @@
         
         info = []
         
-        args = []
-        args.append(mode)
+        args = self.initCommand(mode)
         args.append('--template')
         args.append('{rev}:{node|short}@@@{tags}@@@{author|xmlescape}@@@'
                     '{date|isodate}@@@{branches}@@@{parents}@@@{bookmarks}\n')
@@ -2036,9 +2009,8 @@
             if procStarted:
                 finished = process.waitForFinished(30000)
                 if finished and process.exitCode() == 0:
-                    output = str(
-                        process.readAllStandardOutput(),
-                        Preferences.getSystem("IOEncoding"), 'replace')
+                    output = str(process.readAllStandardOutput(),
+                                 self.getEncoding(), 'replace')
         else:
             output, error = self.__client.runcommand(args)
         
@@ -2105,9 +2077,7 @@
         
         @param name file/directory name to be resolved (string)
         """
-        args = []
-        args.append('resolve')
-        self.addArguments(args, self.options['global'])
+        args = self.initCommand("resolve")
         args.append("--mark")
         
         if isinstance(name, list):
@@ -2152,8 +2122,7 @@
             sorted(self.hgGetBranchesList(repodir)),
             0, True)
         if ok and name:
-            args = []
-            args.append('branch')
+            args = self.initCommand("branch")
             args.append(name.strip().replace(" ", "_"))
             
             dia = HgDialog(
@@ -2178,8 +2147,7 @@
             if os.path.splitdrive(repodir)[1] == os.sep:
                 return
         
-        args = []
-        args.append("branch")
+        args = self.initCommand("branch")
         
         dia = HgDialog(self.tr('Showing current branch'), self)
         res = dia.startProcess(args, repodir, False)
@@ -2274,8 +2242,7 @@
             if os.path.splitdrive(repodir)[1] == os.sep:
                 return
         
-        args = []
-        args.append('verify')
+        args = self.initCommand("verify")
         
         dia = HgDialog(
             self.tr('Verifying the integrity of the Mercurial repository'),
@@ -2299,8 +2266,7 @@
             if os.path.splitdrive(repodir)[1] == os.sep:
                 return
         
-        args = []
-        args.append('showconfig')
+        args = self.initCommand("showconfig")
         args.append("--untrusted")
         
         dia = HgDialog(
@@ -2325,8 +2291,7 @@
             if os.path.splitdrive(repodir)[1] == os.sep:
                 return
         
-        args = []
-        args.append('paths')
+        args = self.initCommand("paths")
         
         dia = HgDialog(
             self.tr('Showing aliases for remote repositories'),
@@ -2350,8 +2315,7 @@
             if os.path.splitdrive(repodir)[1] == os.sep:
                 return
         
-        args = []
-        args.append('recover')
+        args = self.initCommand("recover")
         
         dia = HgDialog(
             self.tr('Recovering from interrupted transaction'),
@@ -2375,8 +2339,7 @@
             if os.path.splitdrive(repodir)[1] == os.sep:
                 return
         
-        args = []
-        args.append('identify')
+        args = self.initCommand("identify")
         
         dia = HgDialog(self.tr('Identifying project directory'), self)
         res = dia.startProcess(args, repodir, False)
@@ -2497,8 +2460,7 @@
             fname = Utilities.toNativeSeparators(fname)
             self.__lastChangeGroupPath = os.path.dirname(fname)
             
-            args = []
-            args.append('bundle')
+            args = self.initCommand("bundle")
             if all:
                 args.append("--all")
             for rev in revs:
@@ -2577,8 +2539,7 @@
         if file:
             self.__lastChangeGroupPath = os.path.dirname(file)
             
-            args = []
-            args.append('identify')
+            args = self.initCommand("identify")
             args.append(file)
             
             dia = HgDialog(self.tr('Identifying changegroup file'), self)
@@ -2618,8 +2579,7 @@
                 self.tr("""Shall the working directory be updated?"""),
                 yesDefault=True)
             
-            args = []
-            args.append('unbundle')
+            args = self.initCommand("unbundle")
             if update:
                 args.append("--update")
                 args.append("--verbose")
@@ -2674,8 +2634,7 @@
             else:
                 return
         
-        args = []
-        args.append("bisect")
+        args = self.initCommand("bisect")
         args.append("--{0}".format(subcommand))
         if rev:
             args.append(rev)
@@ -2695,9 +2654,7 @@
         @param name file/directory name to be removed (string or list of
             strings))
         """
-        args = []
-        args.append('forget')
-        self.addArguments(args, self.options['global'])
+        args = self.initCommand("forget")
         args.append('-v')
         
         if isinstance(name, list):
@@ -2760,8 +2717,7 @@
                     self.tr("""No revision given. Aborting..."""))
                 return
             
-            args = []
-            args.append('backout')
+            args = self.initCommand("backout")
             args.append('-v')
             if merge:
                 args.append('--merge')
@@ -2849,8 +2805,7 @@
             patchFile, noCommit, message, date, user, stripCount, force = \
                 dlg.getParameters()
             
-            args = []
-            args.append("import")
+            args = self.initCommand("import")
             args.append("--verbose")
             if noCommit:
                 args.append("--no-commit")
@@ -2903,8 +2858,7 @@
             filePattern, revisions, switchParent, allText, noDates, git = \
                 dlg.getParameters()
             
-            args = []
-            args.append("export")
+            args = self.initCommand("export")
             args.append("--output")
             args.append(filePattern)
             args.append("--verbose")
@@ -2952,8 +2906,7 @@
         if data:
             revs, phase, force = data
             
-            args = []
-            args.append("phase")
+            args = self.initCommand("phase")
             if phase == "p":
                 args.append("--public")
             elif phase == "d":
@@ -3000,8 +2953,7 @@
             revs, (userData, currentUser, userName), \
                 (dateData, currentDate, dateStr), log, dryrun = dlg.getData()
             
-            args = []
-            args.append("graft")
+            args = self.initCommand("graft")
             args.append("--verbose")
             if userData:
                 if currentUser:
@@ -3043,8 +2995,7 @@
             if os.path.splitdrive(repodir)[1] == os.sep:
                 return
         
-        args = []
-        args.append("graft")
+        args = self.initCommand("graft")
         args.append("--continue")
         args.append("--verbose")
         
@@ -3072,8 +3023,7 @@
         if dlg.exec_() == QDialog.Accepted:
             archive, type_, prefix, subrepos = dlg.getData()
             
-            args = []
-            args.append("archive")
+            args = self.initCommand("archive")
             if type_:
                 args.append("--type")
                 args.append(type_)
@@ -3243,8 +3193,7 @@
         Private method to check, if the default and default-push URLs
         have been configured.
         """
-        args = []
-        args.append('showconfig')
+        args = self.initCommand("showconfig")
         args.append('paths')
         
         output = ""
@@ -3256,9 +3205,8 @@
             if procStarted:
                 finished = process.waitForFinished(30000)
                 if finished and process.exitCode() == 0:
-                    output = str(
-                        process.readAllStandardOutput(),
-                        Preferences.getSystem("IOEncoding"), 'replace')
+                    output = str(process.readAllStandardOutput(),
+                                 self.getEncoding(), 'replace')
         else:
             output, error = self.__client.runcommand(args)
         
@@ -3344,8 +3292,7 @@
         activeExtensions = sorted(self.__activeExtensions)
         self.__activeExtensions = []
         
-        args = []
-        args.append('showconfig')
+        args = self.initCommand("showconfig")
         args.append('extensions')
         
         output = ""
@@ -3357,9 +3304,8 @@
             if procStarted:
                 finished = process.waitForFinished(30000)
                 if finished and process.exitCode() == 0:
-                    output = str(
-                        process.readAllStandardOutput(),
-                        Preferences.getSystem("IOEncoding"), 'replace')
+                    output = str(process.readAllStandardOutput(),
+                                 self.getEncoding(), 'replace')
         else:
             output, error = self.__client.runcommand(args)
         

eric ide

mercurial