75 supported, requirements = r |
75 supported, requirements = r |
76 |
76 |
77 if not supported: |
77 if not supported: |
78 return |
78 return |
79 |
79 |
80 streamin(repo, remote, requirements) |
80 # Save remote branchmap. We will use it later to speed up branchcache |
|
81 # creation. |
|
82 rbranchmap = None |
|
83 if remote.capable('branchmap'): |
|
84 rbranchmap = remote.branchmap() |
|
85 |
|
86 fp = remote.stream_out() |
|
87 l = fp.readline() |
|
88 try: |
|
89 resp = int(l) |
|
90 except ValueError: |
|
91 raise error.ResponseError( |
|
92 _('unexpected response from remote server:'), l) |
|
93 if resp == 1: |
|
94 raise util.Abort(_('operation forbidden by server')) |
|
95 elif resp == 2: |
|
96 raise util.Abort(_('locking the remote repository failed')) |
|
97 elif resp != 0: |
|
98 raise util.Abort(_('the server sent an unknown error code')) |
|
99 |
|
100 applyremotedata(repo, requirements, rbranchmap, fp) |
81 |
101 |
82 def allowservergeneration(ui): |
102 def allowservergeneration(ui): |
83 """Whether streaming clones are allowed from the server.""" |
103 """Whether streaming clones are allowed from the server.""" |
84 return ui.configbool('server', 'uncompressed', True, untrusted=True) |
104 return ui.configbool('server', 'uncompressed', True, untrusted=True) |
85 |
105 |
209 (util.bytecount(total_bytes), elapsed, |
229 (util.bytecount(total_bytes), elapsed, |
210 util.bytecount(total_bytes / elapsed))) |
230 util.bytecount(total_bytes / elapsed))) |
211 finally: |
231 finally: |
212 lock.release() |
232 lock.release() |
213 |
233 |
214 def streamin(repo, remote, remotereqs): |
|
215 # Save remote branchmap. We will use it later |
|
216 # to speed up branchcache creation |
|
217 rbranchmap = None |
|
218 if remote.capable("branchmap"): |
|
219 rbranchmap = remote.branchmap() |
|
220 |
|
221 fp = remote.stream_out() |
|
222 l = fp.readline() |
|
223 try: |
|
224 resp = int(l) |
|
225 except ValueError: |
|
226 raise error.ResponseError( |
|
227 _('unexpected response from remote server:'), l) |
|
228 if resp == 1: |
|
229 raise util.Abort(_('operation forbidden by server')) |
|
230 elif resp == 2: |
|
231 raise util.Abort(_('locking the remote repository failed')) |
|
232 elif resp != 0: |
|
233 raise util.Abort(_('the server sent an unknown error code')) |
|
234 |
|
235 applyremotedata(repo, remotereqs, rbranchmap, fp) |
|
236 return len(repo.heads()) + 1 |
|
237 |
|
238 def applyremotedata(repo, remotereqs, remotebranchmap, fp): |
234 def applyremotedata(repo, remotereqs, remotebranchmap, fp): |
239 """Apply stream clone data to a repository. |
235 """Apply stream clone data to a repository. |
240 |
236 |
241 "remotereqs" is a set of requirements to handle the incoming data. |
237 "remotereqs" is a set of requirements to handle the incoming data. |
242 "remotebranchmap" is the result of a branchmap lookup on the remote. It |
238 "remotebranchmap" is the result of a branchmap lookup on the remote. It |