/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/smart/repository.py

merge bzr.dev r4029

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 
19
19
import bz2
20
20
import os
 
21
import struct
21
22
import sys
 
23
import tarfile
22
24
import tempfile
23
 
import tarfile
 
25
import threading
 
26
import Queue
24
27
 
25
28
from bzrlib import (
26
29
    errors,
27
30
    osutils,
 
31
    pack,
28
32
    )
29
33
from bzrlib.bzrdir import BzrDir
30
34
from bzrlib.smart.request import (
32
36
    SmartServerRequest,
33
37
    SuccessfulSmartServerResponse,
34
38
    )
35
 
from bzrlib.repository import _strip_NULL_ghosts
 
39
from bzrlib.repository import _strip_NULL_ghosts, network_format_registry
36
40
from bzrlib import revision as _mod_revision
 
41
from bzrlib.util import bencode
 
42
from bzrlib.versionedfile import NetworkRecordStream
37
43
 
38
44
 
39
45
class SmartServerRepositoryRequest(SmartServerRequest):
336
342
        return SuccessfulSmartServerResponse(('ok',))
337
343
 
338
344
 
 
345
class SmartServerRepositorySetMakeWorkingTrees(SmartServerRepositoryRequest):
 
346
 
 
347
    def do_repository_request(self, repository, str_bool_new_value):
 
348
        if str_bool_new_value == 'True':
 
349
            new_value = True
 
350
        else:
 
351
            new_value = False
 
352
        repository.set_make_working_trees(new_value)
 
353
        return SuccessfulSmartServerResponse(('ok',))
 
354
 
 
355
 
339
356
class SmartServerRepositoryTarball(SmartServerRepositoryRequest):
340
357
    """Get the raw repository files as a tarball.
341
358
 
392
409
            tarball.add(dirname, '.bzr') # recursive by default
393
410
        finally:
394
411
            tarball.close()
 
412
 
 
413
 
 
414
class SmartServerRepositoryInsertStream(SmartServerRepositoryRequest):
 
415
 
 
416
    def do_repository_request(self, repository):
 
417
        """StreamSink.insert_stream for a remote repository."""
 
418
        repository.lock_write()
 
419
        repository.start_write_group()
 
420
        self.repository = repository
 
421
        self.stream_decoder = pack.ContainerPushParser()
 
422
        self.src_format = None
 
423
        self.queue = Queue.Queue()
 
424
        self.insert_thread = None
 
425
 
 
426
    def do_chunk(self, body_stream_chunk):
 
427
        self.stream_decoder.accept_bytes(body_stream_chunk)
 
428
        for record in self.stream_decoder.read_pending_records():
 
429
            record_names, record_bytes = record
 
430
            if self.src_format is None:
 
431
                src_format_name = record_bytes
 
432
                src_format = network_format_registry.get(src_format_name)
 
433
                self.src_format = src_format
 
434
                self.insert_thread = threading.Thread(target=self._inserter_thread)
 
435
                self.insert_thread.start()
 
436
            else:
 
437
                record_name, = record_names
 
438
                substream_type = record_name[0]
 
439
                stream = NetworkRecordStream([record_bytes])
 
440
                for record in stream.read():
 
441
                    self.queue.put((substream_type, [record]))
 
442
 
 
443
    def _inserter_thread(self):
 
444
        self.repository._get_sink().insert_stream(self.blocking_read_stream(),
 
445
                self.src_format)
 
446
 
 
447
    def blocking_read_stream(self):
 
448
        while True:
 
449
            item = self.queue.get()
 
450
            if item is StopIteration:
 
451
                return
 
452
            else:
 
453
                yield item
 
454
 
 
455
    def do_end(self):
 
456
        self.queue.put(StopIteration)
 
457
        if self.insert_thread is not None:
 
458
            self.insert_thread.join()
 
459
        self.repository.commit_write_group()
 
460
        self.repository.unlock()
 
461
        return SuccessfulSmartServerResponse(('ok', ))
 
462
 
 
463