/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/packrepository.py

  • Committer: Andrew Bennetts
  • Date: 2008-10-29 10:42:48 UTC
  • mto: This revision was merged to the branch mainline in revision 3814.
  • Revision ID: andrew.bennetts@canonical.com-20081029104248-cm1i6byb3ht8x2hh
Add tests for autopack RPC.

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
 
26
26
from bzrlib.smart.repository import (
27
27
    SmartServerRepositoryRequest,
28
 
    SmartServerRepositoryReadLocked,
29
28
    )
30
29
 
31
30
 
32
31
# XXX: define a base class that checks that 'repository' is a pack repo.
33
32
 
34
 
class SmartServerPackRepositoryAutopack(SmartServerRepositoryRequest):
35
 
 
36
 
    def do_repository_request(self, repository):
 
33
class SmartServerPackRepoRequest(SmartServerRepositoryRequest):
 
34
 
 
35
    def do_repository_request(self, repository, *args):
 
36
        pack_collection = getattr(repository, '_pack_collection', None)
 
37
        if pack_collection is None:
 
38
            return FailedSmartServerResponse(('NotPackRepository',))
 
39
        return self.do_pack_repo_request(repository, *args)
 
40
 
 
41
 
 
42
class SmartServerPackRepositoryAutopack(SmartServerPackRepoRequest):
 
43
 
 
44
    def do_pack_repo_request(self, repository):
37
45
        repository.lock_write()
38
46
        try:
39
47
            repository._pack_collection.autopack()
42
50
        return SuccessfulSmartServerResponse(('ok',))
43
51
 
44
52
 
45
 
class SmartServerPackRepositoryCheckReferences(SmartServerRepositoryReadLocked):
 
53
class SmartServerPackRepositoryCheckReferences(SmartServerPackRepoRequest):
46
54
 
47
 
    def do_readlocked_repository_request(self, repository, *external_refs):
48
 
        external_refs = set(
49
 
            tuple(external_ref) for external_ref in external_refs)
 
55
    def do_pack_repo_request(self, repository, *external_refs):
 
56
        repository.lock_read()
50
57
        try:
51
 
            repository._pack_collection._check_references_present(
52
 
                external_refs)
53
 
        except errors.RevisionNotPresent, e:
54
 
            return FailedSmartServerResponse(
55
 
                ('RevisionNotPresent', e.revision_id, e.file_id))
 
58
            external_refs = set(
 
59
                tuple(external_ref) for external_ref in external_refs)
 
60
            try:
 
61
                repository._pack_collection._check_references_present(
 
62
                    external_refs)
 
63
            except errors.RevisionNotPresent, e:
 
64
                return FailedSmartServerResponse(
 
65
                    ('RevisionNotPresent', e.revision_id, e.file_id))
 
66
        finally:
 
67
            repository.unlock()
56
68
        return SuccessfulSmartServerResponse(('ok',))
57
69