Show More
@@ -115,14 +115,25 b' class sshrepository(remoterepository):' | |||
|
115 | 115 | return self.pipei |
|
116 | 116 | |
|
117 | 117 | def call(self, cmd, **args): |
|
118 |
|
|
|
119 | l = r.readline() | |
|
118 | self.do_cmd(cmd, **args) | |
|
119 | return self._recv() | |
|
120 | ||
|
121 | def _recv(self): | |
|
122 | l = self.pipei.readline() | |
|
120 | 123 | self.readerr() |
|
121 | 124 | try: |
|
122 | 125 | l = int(l) |
|
123 | 126 | except: |
|
124 | 127 | self.raise_(util.UnexpectedOutput(_("unexpected response:"), l)) |
|
125 |
return |
|
|
128 | return self.pipei.read(l) | |
|
129 | ||
|
130 | def _send(self, data, flush=False): | |
|
131 | self.pipeo.write("%d\n" % len(data)) | |
|
132 | if data: | |
|
133 | self.pipeo.write(data) | |
|
134 | if flush: | |
|
135 | self.pipeo.flush() | |
|
136 | self.readerr() | |
|
126 | 137 | |
|
127 | 138 | def lock(self): |
|
128 | 139 | self.call("lock") |
@@ -183,25 +194,22 b' class sshrepository(remoterepository):' | |||
|
183 | 194 | |
|
184 | 195 | while 1: |
|
185 | 196 | d = cg.read(4096) |
|
186 |
if not d: |
|
|
187 | self.pipeo.write(str(len(d)) + '\n') | |
|
188 |
self. |
|
|
189 | self.readerr() | |
|
197 | if not d: | |
|
198 | break | |
|
199 | self._send(d) | |
|
190 | 200 | |
|
191 | self.pipeo.write('0\n') | |
|
192 | self.pipeo.flush() | |
|
201 | self._send("", flush=True) | |
|
193 | 202 | |
|
194 |
self. |
|
|
195 | l = int(self.pipei.readline()) | |
|
196 | r = self.pipei.read(l) | |
|
203 | r = self._recv() | |
|
197 | 204 | if r: |
|
198 | 205 | # remote may send "unsynced changes" |
|
199 | 206 | self.raise_(hg.RepoError(_("push failed: %s") % r)) |
|
200 | 207 | |
|
201 |
self. |
|
|
202 | l = int(self.pipei.readline()) | |
|
203 | r = self.pipei.read(l) | |
|
208 | r = self._recv() | |
|
209 | try: | |
|
204 | 210 | return int(r) |
|
211 | except: | |
|
212 | self.raise_(util.UnexpectedOutput(_("unexpected response:"), r)) | |
|
205 | 213 | |
|
206 | 214 | def addchangegroup(self, cg, source, url): |
|
207 | 215 | d = self.call("addchangegroup") |
@@ -209,18 +217,21 b' class sshrepository(remoterepository):' | |||
|
209 | 217 | self.raise_(repo.RepoError(_("push refused: %s") % d)) |
|
210 | 218 | while 1: |
|
211 | 219 | d = cg.read(4096) |
|
212 |
if not d: |
|
|
220 | if not d: | |
|
221 | break | |
|
213 | 222 | self.pipeo.write(d) |
|
214 | 223 | self.readerr() |
|
215 | 224 | |
|
216 | 225 | self.pipeo.flush() |
|
217 | 226 | |
|
218 | 227 | self.readerr() |
|
219 |
|
|
|
220 | r = self.pipei.read(l) | |
|
228 | r = self._recv() | |
|
221 | 229 | if not r: |
|
222 | 230 | return 1 |
|
231 | try: | |
|
223 | 232 | return int(r) |
|
233 | except: | |
|
234 | self.raise_(util.UnexpectedOutput(_("unexpected response:"), r)) | |
|
224 | 235 | |
|
225 | 236 | def stream_out(self): |
|
226 | 237 | return self.do_cmd('stream_out') |
@@ -27,6 +27,11 b' r = os.system(sys.argv[2])' | |||
|
27 | 27 | sys.exit(bool(r)) |
|
28 | 28 | EOF |
|
29 | 29 | |
|
30 | cat <<EOF > badhook | |
|
31 | import sys | |
|
32 | sys.stdout.write("KABOOM") | |
|
33 | EOF | |
|
34 | ||
|
30 | 35 | echo "# creating 'remote'" |
|
31 | 36 | hg init remote |
|
32 | 37 | cd remote |
@@ -91,13 +96,16 b' hg cat -r tip foo' | |||
|
91 | 96 | |
|
92 | 97 | echo z > z |
|
93 | 98 | hg ci -A -m z -d '1000001 0' z |
|
99 | # a bad, evil hook that prints to stdout | |
|
100 | echo 'changegroup.stdout = python ../badhook' >> .hg/hgrc | |
|
94 | 101 | |
|
95 | 102 | cd ../local |
|
96 | 103 | echo r > r |
|
97 | 104 | hg ci -A -m z -d '1000002 0' r |
|
98 | 105 | |
|
99 | echo "# push should succeed" | |
|
106 | echo "# push should succeed even though it has an unexpected response" | |
|
100 | 107 | hg push |
|
108 | hg -R ../remote heads | |
|
101 | 109 | |
|
102 | 110 | cd .. |
|
103 | 111 | cat dummylog |
@@ -70,7 +70,7 b' crosschecking files in changesets and ma' | |||
|
70 | 70 | checking files |
|
71 | 71 | 2 files, 2 changesets, 3 total revisions |
|
72 | 72 | bleah |
|
73 | # push should succeed | |
|
73 | # push should succeed even though it has an unexpected response | |
|
74 | 74 | pushing to ssh://user@dummy/remote |
|
75 | 75 | searching for changes |
|
76 | 76 | note: unsynced remote changes! |
@@ -78,6 +78,21 b' remote: adding changesets' | |||
|
78 | 78 | remote: adding manifests |
|
79 | 79 | remote: adding file changes |
|
80 | 80 | remote: added 1 changesets with 1 changes to 1 files |
|
81 | abort: unexpected response: | |
|
82 | 'KABOOM1\n' | |
|
83 | changeset: 3:ac7448082955 | |
|
84 | tag: tip | |
|
85 | parent: 1:572896fe480d | |
|
86 | user: test | |
|
87 | date: Mon Jan 12 13:46:42 1970 +0000 | |
|
88 | summary: z | |
|
89 | ||
|
90 | changeset: 2:187c6caa0d1e | |
|
91 | parent: 0:e34318c26897 | |
|
92 | user: test | |
|
93 | date: Mon Jan 12 13:46:41 1970 +0000 | |
|
94 | summary: z | |
|
95 | ||
|
81 | 96 | Got arguments 1:user@dummy 2:hg -R nonexistent serve --stdio |
|
82 | 97 | Got arguments 1:user@dummy 2:hg -R remote serve --stdio |
|
83 | 98 | Got arguments 1:user@dummy 2:hg -R remote serve --stdio |
General Comments 0
You need to be logged in to leave comments.
Login now