126 |
126 |
127 def _call(self, cmd, **args): |
127 def _call(self, cmd, **args): |
128 self._callstream(cmd, **args) |
128 self._callstream(cmd, **args) |
129 return self._recv() |
129 return self._recv() |
130 |
130 |
|
131 def _callpush(self, cmd, fp, **args): |
|
132 r = self._call(cmd, **args) |
|
133 if r: |
|
134 return '', r |
|
135 while 1: |
|
136 d = fp.read(4096) |
|
137 if not d: |
|
138 break |
|
139 self._send(d) |
|
140 self._send("", flush=True) |
|
141 r = self._recv() |
|
142 if r: |
|
143 return '', r |
|
144 return self._recv(), '' |
|
145 |
131 def _decompress(self, stream): |
146 def _decompress(self, stream): |
132 return stream |
147 return stream |
133 |
148 |
134 def _recv(self): |
149 def _recv(self): |
135 l = self.pipei.readline() |
150 l = self.pipei.readline() |
153 return remotelock(self) |
168 return remotelock(self) |
154 |
169 |
155 def unlock(self): |
170 def unlock(self): |
156 self._call("unlock") |
171 self._call("unlock") |
157 |
172 |
158 def unbundle(self, cg, heads, source): |
|
159 '''Send cg (a readable file-like object representing the |
|
160 changegroup to push, typically a chunkbuffer object) to the |
|
161 remote server as a bundle. Return an integer indicating the |
|
162 result of the push (see localrepository.addchangegroup()).''' |
|
163 d = self._call("unbundle", heads=' '.join(map(hex, heads))) |
|
164 if d: |
|
165 # remote may send "unsynced changes" |
|
166 self._abort(error.RepoError(_("push refused: %s") % d)) |
|
167 |
|
168 while 1: |
|
169 d = cg.read(4096) |
|
170 if not d: |
|
171 break |
|
172 self._send(d) |
|
173 |
|
174 self._send("", flush=True) |
|
175 |
|
176 r = self._recv() |
|
177 if r: |
|
178 # remote may send "unsynced changes" |
|
179 self._abort(error.RepoError(_("push failed: %s") % r)) |
|
180 |
|
181 r = self._recv() |
|
182 try: |
|
183 return int(r) |
|
184 except: |
|
185 self._abort(error.ResponseError(_("unexpected response:"), r)) |
|
186 |
|
187 def addchangegroup(self, cg, source, url): |
173 def addchangegroup(self, cg, source, url): |
188 '''Send a changegroup to the remote server. Return an integer |
174 '''Send a changegroup to the remote server. Return an integer |
189 similar to unbundle(). DEPRECATED, since it requires locking the |
175 similar to unbundle(). DEPRECATED, since it requires locking the |
190 remote.''' |
176 remote.''' |
191 d = self._call("addchangegroup") |
177 d = self._call("addchangegroup") |