~bzr-pqm/bzr/bzr.dev

6609.2.3 by Vincent Ladeuil
Merge trunk resolving conflicts
1
# Copyright (C) 2006, 2007, 2009, 2010, 2011, 2016 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
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1534.4.9 by Robert Collins
Add a readonly decorator for transports.
16
6379.6.7 by Jelmer Vernooij
Move importing from future until after doc string, otherwise the doc string will disappear.
17
"""Implementation of Transport that adapts another transport to be readonly."""
18
6379.6.3 by Jelmer Vernooij
Use absolute_import.
19
from __future__ import absolute_import
20
3948.3.2 by Martin Pool
Remove APIs deprecated up to and including 1.6
21
from bzrlib.errors import TransportNotPossible, NoSmartMedium
5017.3.5 by Vincent Ladeuil
Move ReadonlyServer to bzrlib.tests.readonly
22
from bzrlib.transport import decorator
23
24
25
class ReadonlyTransportDecorator(decorator.TransportDecorator):
1534.4.9 by Robert Collins
Add a readonly decorator for transports.
26
    """A decorator that can convert any transport to be readonly.
1558.10.2 by Robert Collins
Refactor the FakeNFS support into a TransportDecorator.
27
28
    This is requested via the 'readonly+' prefix to get_transport().
1534.4.9 by Robert Collins
Add a readonly decorator for transports.
29
    """
30
1955.3.15 by John Arbash Meinel
Deprecate 'Transport.append' in favor of Transport.append_file or Transport.append_bytes
31
    def append_file(self, relpath, f, mode=None):
32
        """See Transport.append_file()."""
33
        raise TransportNotPossible('readonly transport')
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
34
1955.3.15 by John Arbash Meinel
Deprecate 'Transport.append' in favor of Transport.append_file or Transport.append_bytes
35
    def append_bytes(self, relpath, bytes, mode=None):
36
        """See Transport.append_bytes()."""
1534.4.9 by Robert Collins
Add a readonly decorator for transports.
37
        raise TransportNotPossible('readonly transport')
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
38
1558.10.2 by Robert Collins
Refactor the FakeNFS support into a TransportDecorator.
39
    @classmethod
40
    def _get_url_prefix(self):
41
        """Readonly transport decorators are invoked via 'readonly+'"""
42
        return 'readonly+'
1534.4.9 by Robert Collins
Add a readonly decorator for transports.
43
6606.3.1 by Vincent Ladeuil
Add rename() and open_write_stream() as explicitly not supported via the ReadonlyTransportDecorator to give better feedback when a decorated transport is misused
44
    def rename(self, rel_from, rel_to):
45
        """See Transport.rename."""
46
        raise TransportNotPossible('readonly transport')
47
1534.4.9 by Robert Collins
Add a readonly decorator for transports.
48
    def delete(self, relpath):
49
        """See Transport.delete()."""
50
        raise TransportNotPossible('readonly transport')
51
1534.4.15 by Robert Collins
Remove shutil dependency in upgrade - create a delete_tree method for transports.
52
    def delete_tree(self, relpath):
53
        """See Transport.delete_tree()."""
54
        raise TransportNotPossible('readonly transport')
55
1955.3.6 by John Arbash Meinel
Lots of deprecation warnings, but no errors
56
    def put_file(self, relpath, f, mode=None):
57
        """See Transport.put_file()."""
58
        raise TransportNotPossible('readonly transport')
59
60
    def put_bytes(self, relpath, bytes, mode=None):
61
        """See Transport.put_bytes()."""
1534.4.9 by Robert Collins
Add a readonly decorator for transports.
62
        raise TransportNotPossible('readonly transport')
63
64
    def mkdir(self, relpath, mode=None):
65
        """See Transport.mkdir()."""
66
        raise TransportNotPossible('readonly transport')
67
6606.3.1 by Vincent Ladeuil
Add rename() and open_write_stream() as explicitly not supported via the ReadonlyTransportDecorator to give better feedback when a decorated transport is misused
68
    def open_write_stream(self, relpath, mode=None):
69
        """See Transport.open_write_stream()."""
70
        raise TransportNotPossible('readonly transport')
71
1534.4.9 by Robert Collins
Add a readonly decorator for transports.
72
    def is_readonly(self):
73
        """See Transport.is_readonly."""
74
        return True
75
1534.4.15 by Robert Collins
Remove shutil dependency in upgrade - create a delete_tree method for transports.
76
    def rmdir(self, relpath):
77
        """See Transport.rmdir."""
78
        raise TransportNotPossible('readonly transport')
79
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
80
    def lock_write(self, relpath):
81
        """See Transport.lock_write."""
82
        raise TransportNotPossible('readonly transport')
1534.4.9 by Robert Collins
Add a readonly decorator for transports.
83
2018.5.95 by Andrew Bennetts
Add a Transport.is_readonly remote call, let {Branch,Repository}.lock_write remote call return UnlockableTransport, and miscellaneous test fixes.
84
    def get_smart_client(self):
6606.3.1 by Vincent Ladeuil
Add rename() and open_write_stream() as explicitly not supported via the ReadonlyTransportDecorator to give better feedback when a decorated transport is misused
85
        raise NoSmartMedium(self)
2018.5.95 by Andrew Bennetts
Add a Transport.is_readonly remote call, let {Branch,Repository}.lock_write remote call return UnlockableTransport, and miscellaneous test fixes.
86
87
    def get_smart_medium(self):
88
        raise NoSmartMedium(self)
89
90
1534.4.9 by Robert Collins
Add a readonly decorator for transports.
91
def get_test_permutations():
92
    """Return the permutations to be used in testing."""
5017.3.5 by Vincent Ladeuil
Move ReadonlyServer to bzrlib.tests.readonly
93
    from bzrlib.tests import test_server
6606.3.1 by Vincent Ladeuil
Add rename() and open_write_stream() as explicitly not supported via the ReadonlyTransportDecorator to give better feedback when a decorated transport is misused
94
    return [(ReadonlyTransportDecorator, test_server.ReadonlyServer)]