~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/remote.py

Get BranchConfig working somewhat on RemoteBranches (Robert Collins, Vincent Ladeuil).

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
# TODO: At some point, handle upgrades by just passing the whole request
18
18
# across to run on the server.
19
19
 
 
20
from cStringIO import StringIO
20
21
from urlparse import urlparse
21
22
 
22
23
from bzrlib import branch, errors, repository
209
210
        return response[0] == 'yes'
210
211
 
211
212
 
 
213
class RemoteBranchLockableFiles(object):
 
214
    """A 'LockableFiles' implementation that talks to a smart server.
 
215
    
 
216
    This is not a public interface class.
 
217
    """
 
218
 
 
219
    def __init__(self, bzrdir, _client):
 
220
        self.bzrdir = bzrdir
 
221
        self._client = _client
 
222
 
 
223
    def get(self, path):
 
224
        """'get' a remote path as per the LockableFiles interface.
 
225
 
 
226
        :param path: the file to 'get'. If this is 'branch.conf', we do not
 
227
             just retrieve a file, instead we ask the smart server to generate
 
228
             a configuration for us - which is retrieved as an INI file.
 
229
        """
 
230
        assert path == 'branch.conf'
 
231
        path = self.bzrdir._path_for_remote_call(self._client)
 
232
        response = self._client.call2('Branch.get_config_file', path)
 
233
        assert response[0][0] == 'ok', 'unexpected response code %s' % (response[0],)
 
234
        return StringIO(response[1].read_body_bytes())
 
235
 
 
236
 
212
237
class RemoteBranchFormat(branch.BranchFormat):
213
238
 
214
239
    def open(self, a_bzrdir):
242
267
        self.repository = remote_repository
243
268
        if real_branch is not None:
244
269
            self._real_branch = real_branch
 
270
        # Fill out expected attributes of branch for bzrlib api users.
245
271
        self._format = RemoteBranchFormat()
246
272
        self.base = self.bzrdir.root_transport.base
 
273
        self.control_files = RemoteBranchLockableFiles(self.bzrdir, self._client)
247
274
 
248
275
    def lock_read(self):
249
276
        return self._real_branch.lock_read()