~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/smart/repository.py

  • Committer: Robert Collins
  • Date: 2007-10-17 09:39:41 UTC
  • mfrom: (2911 +trunk)
  • mto: This revision was merged to the branch mainline in revision 2933.
  • Revision ID: robertc@robertcollins.net-20071017093941-v7d1djrt2617citb
Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
"""Server-side repository related request implmentations."""
18
18
 
 
19
from cStringIO import StringIO
19
20
import os
20
21
import sys
21
22
import tempfile
23
24
 
24
25
from bzrlib import errors
25
26
from bzrlib.bzrdir import BzrDir
 
27
from bzrlib.pack import ContainerWriter
26
28
from bzrlib.smart.request import (
27
29
    FailedSmartServerResponse,
28
30
    SmartServerRequest,
242
244
            tarball.add(dirname, '.bzr') # recursive by default
243
245
        finally:
244
246
            tarball.close()
 
247
 
 
248
 
 
249
class SmartServerRepositoryStreamKnitDataForRevisions(SmartServerRepositoryRequest):
 
250
 
 
251
    def do_repository_request(self, repository, *revision_ids):
 
252
        stream = repository.get_data_stream(revision_ids)
 
253
        filelike = StringIO()
 
254
        pack = ContainerWriter(filelike.write)
 
255
        pack.begin()
 
256
        try:
 
257
            for name_tuple, bytes in stream:
 
258
                pack.add_bytes_record(bytes, [name_tuple])
 
259
        except errors.RevisionNotPresent, e:
 
260
            return FailedSmartServerResponse(('NoSuchRevision', e.revision_id))
 
261
        pack.end()
 
262
        return SuccessfulSmartServerResponse(('ok',), filelike.getvalue())
 
263