~bzr-pqm/bzr/bzr.dev

1534.4.9 by Robert Collins
Add a readonly decorator for transports.
1
# Copyright (C) 2006 Canonical Ltd
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
2
#
1534.4.9 by Robert Collins
Add a readonly decorator for transports.
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
7
#
1534.4.9 by Robert Collins
Add a readonly decorator for transports.
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
12
#
1534.4.9 by Robert Collins
Add a readonly decorator for transports.
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
"""Implementation of Transport that adapts another transport to be readonly."""
18
19
from bzrlib.errors import TransportNotPossible
1558.10.2 by Robert Collins
Refactor the FakeNFS support into a TransportDecorator.
20
from bzrlib.transport.decorator import TransportDecorator, DecoratorServer
21
22
23
class ReadonlyTransportDecorator(TransportDecorator):
1534.4.9 by Robert Collins
Add a readonly decorator for transports.
24
    """A decorator that can convert any transport to be readonly.
1558.10.2 by Robert Collins
Refactor the FakeNFS support into a TransportDecorator.
25
26
    This is requested via the 'readonly+' prefix to get_transport().
1534.4.9 by Robert Collins
Add a readonly decorator for transports.
27
    """
28
29
    def append(self, relpath, f):
30
        """See Transport.append()."""
31
        raise TransportNotPossible('readonly transport')
1558.10.2 by Robert Collins
Refactor the FakeNFS support into a TransportDecorator.
32
    
33
    @classmethod
34
    def _get_url_prefix(self):
35
        """Readonly transport decorators are invoked via 'readonly+'"""
36
        return 'readonly+'
1534.4.9 by Robert Collins
Add a readonly decorator for transports.
37
38
    def delete(self, relpath):
39
        """See Transport.delete()."""
40
        raise TransportNotPossible('readonly transport')
41
1534.4.15 by Robert Collins
Remove shutil dependency in upgrade - create a delete_tree method for transports.
42
    def delete_tree(self, relpath):
43
        """See Transport.delete_tree()."""
44
        raise TransportNotPossible('readonly transport')
45
1534.4.9 by Robert Collins
Add a readonly decorator for transports.
46
    def put(self, relpath, f, mode=None):
47
        """See Transport.put()."""
48
        raise TransportNotPossible('readonly transport')
49
50
    def mkdir(self, relpath, mode=None):
51
        """See Transport.mkdir()."""
52
        raise TransportNotPossible('readonly transport')
53
54
    def is_readonly(self):
55
        """See Transport.is_readonly."""
56
        return True
57
1534.4.15 by Robert Collins
Remove shutil dependency in upgrade - create a delete_tree method for transports.
58
    def rmdir(self, relpath):
59
        """See Transport.rmdir."""
60
        raise TransportNotPossible('readonly transport')
61
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
62
    def lock_write(self, relpath):
63
        """See Transport.lock_write."""
64
        raise TransportNotPossible('readonly transport')
1534.4.9 by Robert Collins
Add a readonly decorator for transports.
65
66
1558.10.2 by Robert Collins
Refactor the FakeNFS support into a TransportDecorator.
67
class ReadonlyServer(DecoratorServer):
1534.4.9 by Robert Collins
Add a readonly decorator for transports.
68
    """Server for the ReadonlyTransportDecorator for testing with."""
69
1558.10.2 by Robert Collins
Refactor the FakeNFS support into a TransportDecorator.
70
    def get_decorator_class(self):
71
        return ReadonlyTransportDecorator
1534.4.9 by Robert Collins
Add a readonly decorator for transports.
72
73
74
def get_test_permutations():
75
    """Return the permutations to be used in testing."""
76
    return [(ReadonlyTransportDecorator, ReadonlyServer),
77
            ]