equal
deleted
inserted
replaced
11 |
11 |
12 from .i18n import _ |
12 from .i18n import _ |
13 from . import ( |
13 from . import ( |
14 error, |
14 error, |
15 pycompat, |
15 pycompat, |
|
16 repository, |
16 util, |
17 util, |
17 wireproto, |
18 wireproto, |
18 ) |
19 ) |
19 |
20 |
20 def _serverquote(s): |
21 def _serverquote(s): |
112 return self._main.close() |
113 return self._main.close() |
113 |
114 |
114 def flush(self): |
115 def flush(self): |
115 return self._main.flush() |
116 return self._main.flush() |
116 |
117 |
117 class sshpeer(wireproto.wirepeer): |
118 class sshpeer(wireproto.wirepeer, repository.legacypeer): |
118 def __init__(self, ui, path, create=False): |
119 def __init__(self, ui, path, create=False): |
119 self._url = path |
120 self._url = path |
120 self.ui = ui |
121 self._ui = ui |
121 self._pipeo = self._pipei = self._pipee = None |
122 self._pipeo = self._pipei = self._pipee = None |
122 |
123 |
123 u = util.url(path, parsequery=False, parsefragment=False) |
124 u = util.url(path, parsequery=False, parsefragment=False) |
124 if u.scheme != 'ssh' or not u.host or u.path is None: |
125 if u.scheme != 'ssh' or not u.host or u.path is None: |
125 self._abort(error.RepoError(_("couldn't parse location %s") % path)) |
126 self._abort(error.RepoError(_("couldn't parse location %s") % path)) |
148 if res != 0: |
149 if res != 0: |
149 self._abort(error.RepoError(_("could not create remote repo"))) |
150 self._abort(error.RepoError(_("could not create remote repo"))) |
150 |
151 |
151 self._validaterepo(sshcmd, args, remotecmd) |
152 self._validaterepo(sshcmd, args, remotecmd) |
152 |
153 |
|
154 # TODO remove this alias once peerrepository inheritance is removed. |
|
155 self._capabilities = self.capabilities |
|
156 |
|
157 # Begin of _basepeer interface. |
|
158 |
|
159 @util.propertycache |
|
160 def ui(self): |
|
161 return self._ui |
|
162 |
153 def url(self): |
163 def url(self): |
154 return self._url |
164 return self._url |
|
165 |
|
166 def local(self): |
|
167 return None |
|
168 |
|
169 def peer(self): |
|
170 return self |
|
171 |
|
172 def canpush(self): |
|
173 return True |
|
174 |
|
175 def close(self): |
|
176 pass |
|
177 |
|
178 # End of _basepeer interface. |
|
179 |
|
180 # Begin of _basewirecommands interface. |
|
181 |
|
182 def capabilities(self): |
|
183 return self._caps |
|
184 |
|
185 # End of _basewirecommands interface. |
155 |
186 |
156 def _validaterepo(self, sshcmd, args, remotecmd): |
187 def _validaterepo(self, sshcmd, args, remotecmd): |
157 # cleanup up previous run |
188 # cleanup up previous run |
158 self._cleanup() |
189 self._cleanup() |
159 |
190 |
197 self._caps = set() |
228 self._caps = set() |
198 for l in reversed(lines): |
229 for l in reversed(lines): |
199 if l.startswith("capabilities:"): |
230 if l.startswith("capabilities:"): |
200 self._caps.update(l[:-1].split(":")[1].split()) |
231 self._caps.update(l[:-1].split(":")[1].split()) |
201 break |
232 break |
202 |
|
203 def _capabilities(self): |
|
204 return self._caps |
|
205 |
233 |
206 def _readerr(self): |
234 def _readerr(self): |
207 _forwardoutput(self.ui, self._pipee) |
235 _forwardoutput(self.ui, self._pipee) |
208 |
236 |
209 def _abort(self, exception): |
237 def _abort(self, exception): |