eric6/Plugins/VcsPlugins/vcsMercurial/HgDiffGenerator.py

Sat, 10 Oct 2020 12:20:51 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 10 Oct 2020 12:20:51 +0200
changeset 7771
787a6b3f8c9f
parent 7370
5fb53279f2df
child 7775
4a1db75550bd
permissions
-rw-r--r--

Optimized the use of Waiting Cursors by using a specialized context manager class.

4130
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
7360
9190402e4505 Updated copyright for 2020.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7257
diff changeset
3 # Copyright (c) 2015 - 2020 Detlev Offenbach <detlev@die-offenbachs.de>
4130
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a class to generate the output of the hg diff command.
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import os
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11
7370
5fb53279f2df Mercurial: removed some old code dealing with using the hg commandline executable instead of the command server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
12 from PyQt5.QtCore import pyqtSignal, QObject
4130
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
7771
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
14 from E5Gui.E5OverrideCursor import E5OverrideCursor
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
15
4130
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 class HgDiffGenerator(QObject):
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 """
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 Class implementing the generation of output of the hg diff command.
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 @signal finished() emitted when all processes have finished
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 """
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 finished = pyqtSignal()
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 def __init__(self, vcs, parent=None):
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 """
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 Constructor
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 @param vcs reference to the vcs object
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 @param parent parent widget (QWidget)
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 """
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 super(HgDiffGenerator, self).__init__(parent)
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 self.vcs = vcs
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 self.__hgClient = self.vcs.getClient()
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 def stopProcess(self):
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 """
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 Public slot to stop the diff process.
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 """
7370
5fb53279f2df Mercurial: removed some old code dealing with using the hg commandline executable instead of the command server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
42 if self.__hgClient.isExecuting():
5fb53279f2df Mercurial: removed some old code dealing with using the hg commandline executable instead of the command server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
43 self.__hgClient.cancel()
4130
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 def __getVersionArg(self, version):
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 """
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 Private method to get a hg revision argument for the given revision.
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 @param version revision (integer or string)
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 @return version argument (string)
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 """
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 if version == "WORKING":
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 return None
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 else:
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 return str(version)
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 def start(self, fn, versions=None, bundle=None, qdiff=False):
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 """
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 Public slot to start the hg diff command.
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 @param fn filename to be diffed (string)
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 @keyparam versions list of versions to be diffed (list of up to
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 2 strings or None)
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 @keyparam bundle name of a bundle file (string)
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 @keyparam qdiff flag indicating qdiff command shall be used (boolean)
4212
530b953eb623 Corrected some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4130
diff changeset
66 @return flag indicating a successful start of the diff command
530b953eb623 Corrected some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4130
diff changeset
67 (boolean)
4130
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 """
7771
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
69 with E5OverrideCursor():
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
70 if qdiff:
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
71 args = self.vcs.initCommand("qdiff")
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
72 else:
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
73 args = self.vcs.initCommand("diff")
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
74
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
75 if self.vcs.hasSubrepositories():
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
76 args.append("--subrepos")
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
77
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
78 if bundle:
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
79 args.append('--repository')
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
80 args.append(bundle)
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
81 elif self.vcs.bundleFile and os.path.exists(self.vcs.bundleFile):
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
82 args.append('--repository')
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
83 args.append(self.vcs.bundleFile)
4130
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84
7771
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
85 if versions is not None:
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
86 rev1 = self.__getVersionArg(versions[0])
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
87 rev2 = None
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
88 if len(versions) == 2:
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
89 rev2 = self.__getVersionArg(versions[1])
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
90
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
91 if rev1 is not None or rev2 is not None:
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
92 args.append('-r')
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
93 if rev1 is not None and rev2 is not None:
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
94 args.append('{0}:{1}'.format(rev1, rev2))
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
95 elif rev2 is None:
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
96 args.append(rev1)
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
97 elif rev1 is None:
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
98 args.append(':{0}'.format(rev2))
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
99
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
100 if isinstance(fn, list):
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
101 dname, fnames = self.vcs.splitPathList(fn)
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
102 self.vcs.addArguments(args, fn)
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
103 else:
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
104 dname, fname = self.vcs.splitPath(fn)
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
105 args.append(fn)
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
106
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
107 self.__oldFile = ""
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
108 self.__oldFileLine = -1
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
109 self.__fileSeparators = []
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
110 self.__output = []
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
111 self.__errors = []
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
112
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
113 out, err = self.__hgClient.runcommand(args)
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
114
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
115 if err:
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
116 self.__errors = err.splitlines(True)
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
117
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
118 if out:
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
119 for line in out.splitlines(True):
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
120 self.__processOutputLine(line)
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
121 if self.__hgClient.wasCanceled():
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7370
diff changeset
122 break
7370
5fb53279f2df Mercurial: removed some old code dealing with using the hg commandline executable instead of the command server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
123
5fb53279f2df Mercurial: removed some old code dealing with using the hg commandline executable instead of the command server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
124 self.__finish()
4130
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 return True
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 def __finish(self):
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 """
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 Private slot called when the process finished or the user pressed
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 the button.
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 """
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 self.finished.emit()
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 def getResult(self):
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 """
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 Public method to return the result data.
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 @return tuple of lists of string containing lines of the diff, the
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 list of errors and a list of tuples of filenames and the line
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 into the diff output.
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 """
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 return (self.__output, self.__errors, self.__fileSeparators)
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 def __extractFileName(self, line):
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 """
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 Private method to extract the file name out of a file separator line.
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 @param line line to be processed (string)
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 @return extracted file name (string)
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 """
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 f = line.split(None, 1)[1]
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 f = f.rsplit(None, 6)[0]
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 if f == "/dev/null":
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 f = "__NULL__"
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 else:
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 f = f.split("/", 1)[1]
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 return f
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 def __processFileLine(self, line):
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 """
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 Private slot to process a line giving the old/new file.
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 @param line line to be processed (string)
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 """
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 if line.startswith('---'):
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 self.__oldFileLine = len(self.__output)
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 self.__oldFile = self.__extractFileName(line)
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 else:
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 newFile = self.__extractFileName(line)
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 if self.__oldFile == "__NULL__":
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 self.__fileSeparators.append(
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 (newFile, newFile, self.__oldFileLine))
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 else:
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 self.__fileSeparators.append(
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 (self.__oldFile, newFile, self.__oldFileLine))
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 def __processOutputLine(self, line):
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 """
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 Private method to process the lines of output.
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 @param line output line to be processed (string)
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 """
7257
c4d0cac9b5c9 Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7229
diff changeset
184 if (
c4d0cac9b5c9 Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7229
diff changeset
185 line.startswith("--- ") or
c4d0cac9b5c9 Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7229
diff changeset
186 line.startswith("+++ ")
c4d0cac9b5c9 Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7229
diff changeset
187 ):
4130
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 self.__processFileLine(line)
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189
c5af9f10a061 Moved logic to generate a Mercurial diff to a separate module in order to reuse it.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 self.__output.append(line)

eric ide

mercurial