Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/sshrepo.py @ 11592:26e0782b8380
protocol: unify client unbundle support
- introduce _callpush helper
- factor out differences in result handling into helpers
- unify
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Wed, 14 Jul 2010 17:12:18 -0500 |
parents | 0d9cb3f3b0a1 |
children | 47ca289a3a08 |
comparison
equal
deleted
inserted
replaced
11591:0d9cb3f3b0a1 | 11592:26e0782b8380 |
---|---|
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") |