Fri, 18 Apr 2014 15:07:48 +0200
Fixed the Mercurial command server client handling large data chunks on slow machines.
(grafted from 1d681235c1b45b2d9cfcf2967f5c869b0d0f2552)
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
3160
209a07d7e401
Updated copyright for 2014.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3036
diff
changeset
|
3 | # Copyright (c) 2011 - 2014 Detlev Offenbach <detlev@die-offenbachs.de> |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing an interface to the Mercurial command server. |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | """ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10 | import struct |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11 | import io |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | |
2962
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
13 | from PyQt4.QtCore import QProcess, QObject, QByteArray, QCoreApplication, \ |
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
14 | QThread |
1323
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
15 | from PyQt4.QtGui import QDialog |
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
16 | |
2816
05aab5164d64
A little optimization for the Mercurial interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2771
diff
changeset
|
17 | from .HgUtilities import prepareProcess |
05aab5164d64
A little optimization for the Mercurial interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2771
diff
changeset
|
18 | |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | import Preferences |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | class HgClient(QObject): |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23 | """ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | Class implementing the Mercurial command server interface. |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | """ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | InputFormat = ">I" |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | OutputFormat = ">cI" |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | OutputFormatSize = struct.calcsize(OutputFormat) |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | ReturnFormat = ">i" |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | |
1325
8dd723182a16
Improved the Mercurial command server client fix to be more generic.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1323
diff
changeset
|
31 | Channels = (b"I", b"L", b"o", b"e", b"r", b"d") |
8dd723182a16
Improved the Mercurial command server client fix to be more generic.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1323
diff
changeset
|
32 | |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | def __init__(self, repoPath, encoding, parent=None): |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | """ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | Constructor |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | @param repoPath root directory of the repository (string) |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | @param encoding encoding to be used by the command server (string) |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | @param parent reference to the parent object (QObject) |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | """ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | super().__init__(parent) |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | |
1261
bb9ce68a0236
Change the Mercurial client to terminate more reliably.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1260
diff
changeset
|
43 | self.__server = None |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | self.__started = False |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | self.__version = None |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | self.__encoding = Preferences.getSystem("IOEncoding") |
1242
dfb9609caf51
Continued implementing an interface to the Mercurial command server. Modified client all all dialogs done so far to provide a cancel capability..
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1241
diff
changeset
|
47 | self.__cancel = False |
1256
885706dbb69f
Refined the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1247
diff
changeset
|
48 | self.__commandRunning = False |
1261
bb9ce68a0236
Change the Mercurial client to terminate more reliably.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1260
diff
changeset
|
49 | self.__repoPath = repoPath |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | # generate command line and environment |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | self.__serverArgs = [] |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | self.__serverArgs.append("serve") |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | self.__serverArgs.append("--cmdserver") |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55 | self.__serverArgs.append("pipe") |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | self.__serverArgs.append("--config") |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | self.__serverArgs.append("ui.interactive=True") |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | if repoPath: |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | self.__serverArgs.append("--repository") |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | self.__serverArgs.append(repoPath) |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | if encoding: |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | self.__encoding = encoding |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | def startServer(self): |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | """ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | Public method to start the command server. |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69 | @return tuple of flag indicating a successful start (boolean) and |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70 | an error message (string) in case of failure |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71 | """ |
1261
bb9ce68a0236
Change the Mercurial client to terminate more reliably.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1260
diff
changeset
|
72 | self.__server = QProcess() |
bb9ce68a0236
Change the Mercurial client to terminate more reliably.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1260
diff
changeset
|
73 | self.__server.setWorkingDirectory(self.__repoPath) |
bb9ce68a0236
Change the Mercurial client to terminate more reliably.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1260
diff
changeset
|
74 | |
bb9ce68a0236
Change the Mercurial client to terminate more reliably.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1260
diff
changeset
|
75 | # connect signals |
bb9ce68a0236
Change the Mercurial client to terminate more reliably.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1260
diff
changeset
|
76 | self.__server.finished.connect(self.__serverFinished) |
bb9ce68a0236
Change the Mercurial client to terminate more reliably.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1260
diff
changeset
|
77 | |
2816
05aab5164d64
A little optimization for the Mercurial interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2771
diff
changeset
|
78 | prepareProcess(self.__server, self.__encoding) |
1261
bb9ce68a0236
Change the Mercurial client to terminate more reliably.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1260
diff
changeset
|
79 | |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80 | self.__server.start('hg', self.__serverArgs) |
2771
281c9b30dd91
Changed all QProcess.waitForStarted() calls to use a 5s timeout (except the debugger interfaces, which have a 10s timeout).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2405
diff
changeset
|
81 | serverStarted = self.__server.waitForStarted(5000) |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | if not serverStarted: |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | return False, self.trUtf8( |
3036
30c81c9e88b8
Fixed a bunch of indentation issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3008
diff
changeset
|
84 | 'The process {0} could not be started. ' |
30c81c9e88b8
Fixed a bunch of indentation issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3008
diff
changeset
|
85 | 'Ensure, that it is in the search path.' |
30c81c9e88b8
Fixed a bunch of indentation issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3008
diff
changeset
|
86 | ).format('hg') |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88 | self.__server.setReadChannel(QProcess.StandardOutput) |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89 | ok, error = self.__readHello() |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90 | self.__started = ok |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | return ok, error |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93 | def stopServer(self): |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94 | """ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95 | Public method to stop the command server. |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | """ |
1550
0550f9915d65
Fixed an issue stopping the Mercurial commandline server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1509
diff
changeset
|
97 | if self.__server is not None: |
0550f9915d65
Fixed an issue stopping the Mercurial commandline server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1509
diff
changeset
|
98 | self.__server.closeWriteChannel() |
0550f9915d65
Fixed an issue stopping the Mercurial commandline server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1509
diff
changeset
|
99 | res = self.__server.waitForFinished(5000) |
1244
ffdb35928247
Improved the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1242
diff
changeset
|
100 | if not res: |
1550
0550f9915d65
Fixed an issue stopping the Mercurial commandline server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1509
diff
changeset
|
101 | self.__server.terminate() |
0550f9915d65
Fixed an issue stopping the Mercurial commandline server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1509
diff
changeset
|
102 | res = self.__server.waitForFinished(3000) |
0550f9915d65
Fixed an issue stopping the Mercurial commandline server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1509
diff
changeset
|
103 | if not res: |
0550f9915d65
Fixed an issue stopping the Mercurial commandline server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1509
diff
changeset
|
104 | self.__server.kill() |
0550f9915d65
Fixed an issue stopping the Mercurial commandline server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1509
diff
changeset
|
105 | self.__server.waitForFinished(3000) |
0550f9915d65
Fixed an issue stopping the Mercurial commandline server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1509
diff
changeset
|
106 | |
0550f9915d65
Fixed an issue stopping the Mercurial commandline server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1509
diff
changeset
|
107 | self.__started = False |
2318
3a3ee7cc2ad6
Changed some signal handlings (disconnect).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
108 | self.__server.deleteLater() |
1550
0550f9915d65
Fixed an issue stopping the Mercurial commandline server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1509
diff
changeset
|
109 | self.__server = None |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111 | def restartServer(self): |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112 | """ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113 | Public method to restart the command server. |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
115 | @return tuple of flag indicating a successful start (boolean) and |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116 | an error message (string) in case of failure |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117 | """ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118 | self.stopServer() |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119 | return self.startServer() |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
121 | def __readHello(self): |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
122 | """ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123 | Private method to read the hello message sent by the command server. |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
125 | @return tuple of flag indicating success (boolean) and an error message |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
126 | in case of failure (string) |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
127 | """ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
128 | ch, msg = self.__readChannel() |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
129 | if not ch: |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
130 | return False, self.trUtf8("Did not receive the 'hello' message.") |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
131 | elif ch != "o": |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
132 | return False, self.trUtf8("Received data on unexpected channel.") |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
133 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
134 | msg = msg.split("\n") |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
135 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
136 | if not msg[0].startswith("capabilities: "): |
2962
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
137 | return False, self.trUtf8( |
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
138 | "Bad 'hello' message, expected 'capabilities: '" |
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
139 | " but got '{0}'.").format(msg[0]) |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
140 | self.__capabilities = msg[0][len('capabilities: '):] |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
141 | if not self.__capabilities: |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
142 | return False, self.trUtf8("'capabilities' message did not contain" |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
143 | " any capability.") |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
144 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
145 | self.__capabilities = set(self.__capabilities.split()) |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
146 | if "runcommand" not in self.__capabilities: |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
147 | return False, "'capabilities' did not contain 'runcommand'." |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
148 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
149 | if not msg[1].startswith("encoding: "): |
2962
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
150 | return False, self.trUtf8( |
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
151 | "Bad 'hello' message, expected 'encoding: '" |
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
152 | " but got '{0}'.").format(msg[1]) |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
153 | encoding = msg[1][len('encoding: '):] |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
154 | if not encoding: |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
155 | return False, self.trUtf8("'encoding' message did not contain" |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
156 | " any encoding.") |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
157 | self.__encoding = encoding |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
158 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
159 | return True, "" |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
160 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
161 | def __serverFinished(self, exitCode, exitStatus): |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
162 | """ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
163 | Private slot connected to the finished signal. |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
164 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
165 | @param exitCode exit code of the process (integer) |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
166 | @param exitStatus exit status of the process (QProcess.ExitStatus) |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
167 | """ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
168 | self.__started = False |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
169 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
170 | def __readChannel(self): |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
171 | """ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
172 | Private method to read data from the command server. |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
173 | |
1244
ffdb35928247
Improved the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1242
diff
changeset
|
174 | @return tuple of channel designator and channel data |
ffdb35928247
Improved the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1242
diff
changeset
|
175 | (string, integer or string or bytes) |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
176 | """ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
177 | if self.__server.bytesAvailable() > 0 or \ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
178 | self.__server.waitForReadyRead(10000): |
3519
d4b642e067e3
Fixed the Mercurial command server client handling large data chunks on slow machines.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3160
diff
changeset
|
179 | data = bytes(self.__server.peek(HgClient.OutputFormatSize)) |
d4b642e067e3
Fixed the Mercurial command server client handling large data chunks on slow machines.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3160
diff
changeset
|
180 | if not data or len(data) < HgClient.OutputFormatSize: |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
181 | return "", "" |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
182 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
183 | channel, length = struct.unpack(HgClient.OutputFormat, data) |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
184 | channel = channel.decode(self.__encoding) |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
185 | if channel in "IL": |
3519
d4b642e067e3
Fixed the Mercurial command server client handling large data chunks on slow machines.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3160
diff
changeset
|
186 | self.__server.read(HgClient.OutputFormatSize) |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
187 | return channel, length |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
188 | else: |
3519
d4b642e067e3
Fixed the Mercurial command server client handling large data chunks on slow machines.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3160
diff
changeset
|
189 | if self.__server.bytesAvailable() < \ |
d4b642e067e3
Fixed the Mercurial command server client handling large data chunks on slow machines.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3160
diff
changeset
|
190 | HgClient.OutputFormatSize + length: |
d4b642e067e3
Fixed the Mercurial command server client handling large data chunks on slow machines.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3160
diff
changeset
|
191 | return "", "" |
d4b642e067e3
Fixed the Mercurial command server client handling large data chunks on slow machines.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3160
diff
changeset
|
192 | self.__server.read(HgClient.OutputFormatSize) |
1244
ffdb35928247
Improved the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1242
diff
changeset
|
193 | data = self.__server.read(length) |
ffdb35928247
Improved the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1242
diff
changeset
|
194 | if channel == "r": |
ffdb35928247
Improved the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1242
diff
changeset
|
195 | return (channel, data) |
ffdb35928247
Improved the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1242
diff
changeset
|
196 | else: |
ffdb35928247
Improved the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1242
diff
changeset
|
197 | return (channel, str(data, self.__encoding, "replace")) |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
198 | else: |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
199 | return "", "" |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
200 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
201 | def __writeDataBlock(self, data): |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
202 | """ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
203 | Private slot to write some data to the command server. |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
204 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
205 | @param data data to be sent (string) |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
206 | """ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
207 | if not isinstance(data, bytes): |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
208 | data = data.encode(self.__encoding) |
2962
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
209 | self.__server.write( |
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
210 | QByteArray(struct.pack(HgClient.InputFormat, len(data)))) |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
211 | self.__server.write(QByteArray(data)) |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
212 | self.__server.waitForBytesWritten() |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
213 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
214 | def __runcommand(self, args, inputChannels, outputChannels): |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
215 | """ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
216 | Private method to run a command in the server (low level). |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
217 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
218 | @param args list of arguments for the command (list of string) |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
219 | @param inputChannels dictionary of input channels. The dictionary must |
2962
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
220 | have the keys 'I' and 'L' and each entry must be a function |
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
221 | receiving the number of bytes to write. |
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
222 | @param outputChannels dictionary of output channels. The dictionary |
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
223 | must have the keys 'o' and 'e' and each entry must be a function |
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
224 | receiving the data. |
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
225 | @return result code of the command, -1 if the command server wasn't |
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
226 | started or -10, if the command was canceled (integer) |
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
227 | @exception RuntimeError raised to indicate an unexpected command |
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
228 | channel |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
229 | """ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
230 | if not self.__started: |
1247
a6bedc641fcd
Fixed a bug in the Mercurial command server client causing it to return a wrong result code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1244
diff
changeset
|
231 | return -1 |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
232 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
233 | self.__server.write(QByteArray(b'runcommand\n')) |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
234 | self.__writeDataBlock('\0'.join(args)) |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
235 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
236 | while True: |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
237 | QCoreApplication.processEvents() |
1242
dfb9609caf51
Continued implementing an interface to the Mercurial command server. Modified client all all dialogs done so far to provide a cancel capability..
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1241
diff
changeset
|
238 | |
dfb9609caf51
Continued implementing an interface to the Mercurial command server. Modified client all all dialogs done so far to provide a cancel capability..
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1241
diff
changeset
|
239 | if self.__cancel: |
1247
a6bedc641fcd
Fixed a bug in the Mercurial command server client causing it to return a wrong result code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1244
diff
changeset
|
240 | return -10 |
1242
dfb9609caf51
Continued implementing an interface to the Mercurial command server. Modified client all all dialogs done so far to provide a cancel capability..
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1241
diff
changeset
|
241 | |
1391
5acd6ee51956
A small refinement to the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1365
diff
changeset
|
242 | if self.__server is None: |
5acd6ee51956
A small refinement to the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1365
diff
changeset
|
243 | return -1 |
5acd6ee51956
A small refinement to the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1365
diff
changeset
|
244 | |
1392
3c6c60c498a6
A small refinement to the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1391
diff
changeset
|
245 | if self.__server is None or self.__server.bytesAvailable() == 0: |
1365
8f8cad8f989e
Slight enhancement to the Mercurial command line server client to make it more CPU usage friendly.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1325
diff
changeset
|
246 | QThread.msleep(50) |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
247 | continue |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
248 | channel, data = self.__readChannel() |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
249 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
250 | # input channels |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
251 | if channel in inputChannels: |
1323
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
252 | input = inputChannels[channel](data) |
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
253 | if channel == "L": |
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
254 | # echo the input to the output if it was a prompt |
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
255 | outputChannels["o"](input) |
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
256 | self.__writeDataBlock(input) |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
257 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
258 | # output channels |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
259 | elif channel in outputChannels: |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
260 | outputChannels[channel](data) |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
261 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
262 | # result channel, command is finished |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
263 | elif channel == "r": |
1244
ffdb35928247
Improved the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1242
diff
changeset
|
264 | return struct.unpack(HgClient.ReturnFormat, data)[0] |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
265 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
266 | # unexpected but required channel |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
267 | elif channel.isupper(): |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
268 | raise RuntimeError( |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
269 | "Unexpected but required channel '{0}'.".format(channel)) |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
270 | |
3519
d4b642e067e3
Fixed the Mercurial command server client handling large data chunks on slow machines.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3160
diff
changeset
|
271 | # optional channels or no channel at all |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
272 | else: |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
273 | pass |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
274 | |
1323
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
275 | def __prompt(self, size, message): |
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
276 | """ |
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
277 | Private method to prompt the user for some input. |
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
278 | |
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
279 | @param size maximum length of the requested input (integer) |
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
280 | @param message message sent by the server (string) |
2962
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
281 | @return data entered by the user (string) |
1323
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
282 | """ |
2405
d4b5f3bd4720
Continued implementing the delayed import.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2318
diff
changeset
|
283 | from .HgClientPromptDialog import HgClientPromptDialog |
1323
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
284 | input = "" |
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
285 | dlg = HgClientPromptDialog(size, message) |
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
286 | if dlg.exec_() == QDialog.Accepted: |
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
287 | input = dlg.getInput() + '\n' |
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
288 | return input |
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
289 | |
2962
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
290 | def runcommand(self, args, prompt=None, input=None, output=None, |
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
291 | error=None): |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
292 | """ |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
293 | Public method to execute a command via the command server. |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
294 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
295 | @param args list of arguments for the command (list of string) |
1266
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
296 | @keyparam prompt function to reply to prompts by the server. It |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
297 | receives the max number of bytes to return and the contents |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
298 | of the output channel received so far. |
1266
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
299 | @keyparam input function to reply to bulk data requests by the server. |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
300 | It receives the max number of bytes to return. |
1266
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
301 | @keyparam output function receiving the data from the server (string). |
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
302 | If a prompt function is given, this parameter will be ignored. |
2962
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
303 | @keyparam error function receiving error messages from the server |
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
304 | (string) |
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
305 | @return output and errors of the command server (string). In case |
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
306 | output and/or error functions were given, the respective return |
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
307 | value will be an empty string. |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
308 | """ |
1256
885706dbb69f
Refined the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1247
diff
changeset
|
309 | self.__commandRunning = True |
1266
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
310 | outputChannels = {} |
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
311 | outputBuffer = None |
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
312 | errorBuffer = None |
1256
885706dbb69f
Refined the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1247
diff
changeset
|
313 | |
1266
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
314 | if prompt is not None or output is None: |
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
315 | outputBuffer = io.StringIO() |
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
316 | outputChannels["o"] = outputBuffer.write |
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
317 | else: |
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
318 | outputChannels["o"] = output |
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
319 | if error: |
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
320 | outputChannels["e"] = error |
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
321 | else: |
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
322 | errorBuffer = io.StringIO() |
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
323 | outputChannels["e"] = errorBuffer.write |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
324 | |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
325 | inputChannels = {} |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
326 | if prompt is not None: |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
327 | def func(size): |
1266
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
328 | reply = prompt(size, outputBuffer.getvalue()) |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
329 | return reply |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
330 | inputChannels["L"] = func |
1323
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
331 | else: |
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
332 | def myprompt(size): |
1935
df157512654c
Fixed an issue in the Mercurial client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1550
diff
changeset
|
333 | if outputBuffer is None: |
df157512654c
Fixed an issue in the Mercurial client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1550
diff
changeset
|
334 | msg = self.trUtf8("For message see output dialog.") |
df157512654c
Fixed an issue in the Mercurial client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1550
diff
changeset
|
335 | else: |
df157512654c
Fixed an issue in the Mercurial client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1550
diff
changeset
|
336 | msg = outputBuffer.getvalue() |
df157512654c
Fixed an issue in the Mercurial client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1550
diff
changeset
|
337 | reply = self.__prompt(size, msg) |
1323
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
338 | return reply |
3126121aeb4f
Added a prompt window for the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1266
diff
changeset
|
339 | inputChannels["L"] = myprompt |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
340 | if input is not None: |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
341 | inputChannels["I"] = input |
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
342 | |
1242
dfb9609caf51
Continued implementing an interface to the Mercurial command server. Modified client all all dialogs done so far to provide a cancel capability..
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1241
diff
changeset
|
343 | self.__cancel = False |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
344 | self.__runcommand(args, inputChannels, outputChannels) |
1266
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
345 | if outputBuffer: |
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
346 | out = outputBuffer.getvalue() |
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
347 | else: |
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
348 | out = "" |
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
349 | if errorBuffer: |
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
350 | err = errorBuffer.getvalue() |
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
351 | else: |
ce8a103501a5
Modified Mercurial command server client to allow for passing it output and/or error callbacks.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1261
diff
changeset
|
352 | err = "" |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
353 | |
1256
885706dbb69f
Refined the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1247
diff
changeset
|
354 | self.__commandRunning = False |
885706dbb69f
Refined the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1247
diff
changeset
|
355 | |
1240
4d5fc346bd3b
Started implementing an interface to the Mercurial command server (as of Mercurial >= 1.9).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
356 | return out, err |
1242
dfb9609caf51
Continued implementing an interface to the Mercurial command server. Modified client all all dialogs done so far to provide a cancel capability..
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1241
diff
changeset
|
357 | |
dfb9609caf51
Continued implementing an interface to the Mercurial command server. Modified client all all dialogs done so far to provide a cancel capability..
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1241
diff
changeset
|
358 | def cancel(self): |
dfb9609caf51
Continued implementing an interface to the Mercurial command server. Modified client all all dialogs done so far to provide a cancel capability..
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1241
diff
changeset
|
359 | """ |
dfb9609caf51
Continued implementing an interface to the Mercurial command server. Modified client all all dialogs done so far to provide a cancel capability..
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1241
diff
changeset
|
360 | Public method to cancel the running command. |
dfb9609caf51
Continued implementing an interface to the Mercurial command server. Modified client all all dialogs done so far to provide a cancel capability..
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1241
diff
changeset
|
361 | """ |
dfb9609caf51
Continued implementing an interface to the Mercurial command server. Modified client all all dialogs done so far to provide a cancel capability..
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1241
diff
changeset
|
362 | self.__cancel = True |
1244
ffdb35928247
Improved the Mercurial command server client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1242
diff
changeset
|
363 | self.restartServer() |
1256
885706dbb69f
Refined the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1247
diff
changeset
|
364 | |
885706dbb69f
Refined the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1247
diff
changeset
|
365 | def wasCanceled(self): |
885706dbb69f
Refined the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1247
diff
changeset
|
366 | """ |
885706dbb69f
Refined the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1247
diff
changeset
|
367 | Public method to check, if the last command was canceled. |
2962
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
368 | |
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
369 | @return flag indicating the cancel state (boolean) |
1256
885706dbb69f
Refined the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1247
diff
changeset
|
370 | """ |
885706dbb69f
Refined the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1247
diff
changeset
|
371 | return self.__cancel |
885706dbb69f
Refined the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1247
diff
changeset
|
372 | |
885706dbb69f
Refined the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1247
diff
changeset
|
373 | def isExecuting(self): |
885706dbb69f
Refined the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1247
diff
changeset
|
374 | """ |
885706dbb69f
Refined the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1247
diff
changeset
|
375 | Public method to check, if the server is executing a command. |
885706dbb69f
Refined the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1247
diff
changeset
|
376 | |
885706dbb69f
Refined the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1247
diff
changeset
|
377 | @return flag indicating the execution of a command (boolean) |
885706dbb69f
Refined the Mercurial command server interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1247
diff
changeset
|
378 | """ |
2962
d6c9d1ca2da4
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2816
diff
changeset
|
379 | return self.__commandRunning |