/breezy/unstable

To get this branch, use:
bzr branch https://code.breezy-vcs.org/breezy/unstable

« back to all changes in this revision

Viewing changes to breezy/tests/test_permissions.py

  • Committer: Jelmer Vernooij
  • Date: 2017-05-24 01:39:33 UTC
  • mfrom: (3815.3776.6)
  • Revision ID: jelmer@jelmer.uk-20170524013933-ir4y4tqtrsiz2ka2
New upstream snapshot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
import os
34
34
import sys
35
35
 
36
 
from bzrlib import urlutils
37
 
from bzrlib.branch import Branch
38
 
from bzrlib.controldir import ControlDir
39
 
from bzrlib.tests import TestCaseWithTransport, TestSkipped
40
 
from bzrlib.tests.test_sftp_transport import TestCaseWithSFTPServer
41
 
from bzrlib.workingtree import WorkingTree
 
36
from breezy import urlutils
 
37
from breezy.branch import Branch
 
38
from breezy.controldir import ControlDir
 
39
from breezy.tests import TestCaseWithTransport, TestSkipped
 
40
from breezy.tests.test_sftp_transport import TestCaseWithSFTPServer
 
41
from breezy.workingtree import WorkingTree
42
42
 
43
43
 
44
44
def chmod_r(base, file_mode, dir_mode):
88
88
        t.add('a', 'CAPS-ID')
89
89
        t.commit('foo')
90
90
 
91
 
        chmod_r('.bzr', 0644, 0755)
92
 
        check_mode_r(self, '.bzr', 0644, 0755)
 
91
        chmod_r('.bzr', 0o644, 0o755)
 
92
        check_mode_r(self, '.bzr', 0o644, 0o755)
93
93
 
94
94
        # although we are modifying the filesystem
95
95
        # underneath the objects, they are not locked, and thus it must
98
98
        # when a new lock is taken out.
99
99
        t = WorkingTree.open('.')
100
100
        b = t.branch
101
 
        self.assertEqualMode(0755, b.control_files._dir_mode)
102
 
        self.assertEqualMode(0644, b.control_files._file_mode)
103
 
        self.assertEqualMode(0755, b.bzrdir._get_dir_mode())
104
 
        self.assertEqualMode(0644, b.bzrdir._get_file_mode())
 
101
        self.assertEqualMode(0o755, b.control_files._dir_mode)
 
102
        self.assertEqualMode(0o644, b.control_files._file_mode)
 
103
        self.assertEqualMode(0o755, b.bzrdir._get_dir_mode())
 
104
        self.assertEqualMode(0o644, b.bzrdir._get_file_mode())
105
105
 
106
106
        # Modifying a file shouldn't break the permissions
107
107
        with open('a', 'wb') as f: f.write('foo2\n')
108
108
        t.commit('foo2')
109
109
        # The mode should be maintained after commit
110
 
        check_mode_r(self, '.bzr', 0644, 0755)
 
110
        check_mode_r(self, '.bzr', 0o644, 0o755)
111
111
 
112
112
        # Adding a new file should maintain the permissions
113
113
        with open('b', 'wb') as f: f.write('new b\n')
114
114
        t.add('b')
115
115
        t.commit('new b')
116
 
        check_mode_r(self, '.bzr', 0644, 0755)
 
116
        check_mode_r(self, '.bzr', 0o644, 0o755)
117
117
 
118
118
        # Recursively update the modes of all files
119
 
        chmod_r('.bzr', 0664, 0775)
120
 
        check_mode_r(self, '.bzr', 0664, 0775)
 
119
        chmod_r('.bzr', 0o664, 0o775)
 
120
        check_mode_r(self, '.bzr', 0o664, 0o775)
121
121
        t = WorkingTree.open('.')
122
122
        b = t.branch
123
 
        self.assertEqualMode(0775, b.control_files._dir_mode)
124
 
        self.assertEqualMode(0664, b.control_files._file_mode)
125
 
        self.assertEqualMode(0775, b.bzrdir._get_dir_mode())
126
 
        self.assertEqualMode(0664, b.bzrdir._get_file_mode())
 
123
        self.assertEqualMode(0o775, b.control_files._dir_mode)
 
124
        self.assertEqualMode(0o664, b.control_files._file_mode)
 
125
        self.assertEqualMode(0o775, b.bzrdir._get_dir_mode())
 
126
        self.assertEqualMode(0o664, b.bzrdir._get_file_mode())
127
127
 
128
128
        with open('a', 'wb') as f: f.write('foo3\n')
129
129
        t.commit('foo3')
130
 
        check_mode_r(self, '.bzr', 0664, 0775)
 
130
        check_mode_r(self, '.bzr', 0o664, 0o775)
131
131
 
132
132
        with open('c', 'wb') as f: f.write('new c\n')
133
133
        t.add('c')
134
134
        t.commit('new c')
135
 
        check_mode_r(self, '.bzr', 0664, 0775)
 
135
        check_mode_r(self, '.bzr', 0o664, 0o775)
136
136
 
137
137
    def test_new_files_group_sticky_bit(self):
138
138
        if sys.platform == 'win32':
148
148
 
149
149
        # Test the group sticky bit
150
150
        # Recursively update the modes of all files
151
 
        chmod_r('.bzr', 0664, 02775)
152
 
        check_mode_r(self, '.bzr', 0664, 02775)
 
151
        chmod_r('.bzr', 0o664, 0o2775)
 
152
        check_mode_r(self, '.bzr', 0o664, 0o2775)
153
153
        t = WorkingTree.open('.')
154
154
        b = t.branch
155
 
        self.assertEqualMode(02775, b.control_files._dir_mode)
156
 
        self.assertEqualMode(0664, b.control_files._file_mode)
157
 
        self.assertEqualMode(02775, b.bzrdir._get_dir_mode())
158
 
        self.assertEqualMode(0664, b.bzrdir._get_file_mode())
 
155
        self.assertEqualMode(0o2775, b.control_files._dir_mode)
 
156
        self.assertEqualMode(0o664, b.control_files._file_mode)
 
157
        self.assertEqualMode(0o2775, b.bzrdir._get_dir_mode())
 
158
        self.assertEqualMode(0o664, b.bzrdir._get_file_mode())
159
159
 
160
160
        with open('a', 'wb') as f: f.write('foo4\n')
161
161
        t.commit('foo4')
162
 
        check_mode_r(self, '.bzr', 0664, 02775)
 
162
        check_mode_r(self, '.bzr', 0o664, 0o2775)
163
163
 
164
164
        with open('d', 'wb') as f: f.write('new d\n')
165
165
        t.add('d')
166
166
        t.commit('new d')
167
 
        check_mode_r(self, '.bzr', 0664, 02775)
 
167
        check_mode_r(self, '.bzr', 0o664, 0o2775)
168
168
 
169
169
 
170
170
class TestSftpPermissions(TestCaseWithSFTPServer):
187
187
        t_local.commit('foo')
188
188
 
189
189
        # Delete them because we are modifying the filesystem underneath them
190
 
        chmod_r('local/.bzr', 0644, 0755)
191
 
        check_mode_r(self, 'local/.bzr', 0644, 0755)
 
190
        chmod_r('local/.bzr', 0o644, 0o755)
 
191
        check_mode_r(self, 'local/.bzr', 0o644, 0o755)
192
192
 
193
193
        t = WorkingTree.open('local')
194
194
        b_local = t.branch
195
 
        self.assertEqualMode(0755, b_local.control_files._dir_mode)
196
 
        self.assertEqualMode(0644, b_local.control_files._file_mode)
197
 
        self.assertEqualMode(0755, b_local.bzrdir._get_dir_mode())
198
 
        self.assertEqualMode(0644, b_local.bzrdir._get_file_mode())
 
195
        self.assertEqualMode(0o755, b_local.control_files._dir_mode)
 
196
        self.assertEqualMode(0o644, b_local.control_files._file_mode)
 
197
        self.assertEqualMode(0o755, b_local.bzrdir._get_dir_mode())
 
198
        self.assertEqualMode(0o644, b_local.bzrdir._get_file_mode())
199
199
 
200
200
        os.mkdir('sftp')
201
201
        sftp_url = self.get_url('sftp')
203
203
 
204
204
        b_sftp.pull(b_local)
205
205
        del b_sftp
206
 
        chmod_r('sftp/.bzr', 0644, 0755)
207
 
        check_mode_r(self, 'sftp/.bzr', 0644, 0755)
 
206
        chmod_r('sftp/.bzr', 0o644, 0o755)
 
207
        check_mode_r(self, 'sftp/.bzr', 0o644, 0o755)
208
208
 
209
209
        b_sftp = Branch.open(sftp_url)
210
 
        self.assertEqualMode(0755, b_sftp.control_files._dir_mode)
211
 
        self.assertEqualMode(0644, b_sftp.control_files._file_mode)
212
 
        self.assertEqualMode(0755, b_sftp.bzrdir._get_dir_mode())
213
 
        self.assertEqualMode(0644, b_sftp.bzrdir._get_file_mode())
 
210
        self.assertEqualMode(0o755, b_sftp.control_files._dir_mode)
 
211
        self.assertEqualMode(0o644, b_sftp.control_files._file_mode)
 
212
        self.assertEqualMode(0o755, b_sftp.bzrdir._get_dir_mode())
 
213
        self.assertEqualMode(0o644, b_sftp.bzrdir._get_file_mode())
214
214
 
215
215
        with open('local/a', 'wb') as f: f.write('foo2\n')
216
216
        t_local.commit('foo2')
217
217
        b_sftp.pull(b_local)
218
218
        # The mode should be maintained after commit
219
 
        check_mode_r(self, 'sftp/.bzr', 0644, 0755)
 
219
        check_mode_r(self, 'sftp/.bzr', 0o644, 0o755)
220
220
 
221
221
        with open('local/b', 'wb') as f: f.write('new b\n')
222
222
        t_local.add('b')
223
223
        t_local.commit('new b')
224
224
        b_sftp.pull(b_local)
225
 
        check_mode_r(self, 'sftp/.bzr', 0644, 0755)
 
225
        check_mode_r(self, 'sftp/.bzr', 0o644, 0o755)
226
226
 
227
227
        del b_sftp
228
228
        # Recursively update the modes of all files
229
 
        chmod_r('sftp/.bzr', 0664, 0775)
230
 
        check_mode_r(self, 'sftp/.bzr', 0664, 0775)
 
229
        chmod_r('sftp/.bzr', 0o664, 0o775)
 
230
        check_mode_r(self, 'sftp/.bzr', 0o664, 0o775)
231
231
 
232
232
        b_sftp = Branch.open(sftp_url)
233
 
        self.assertEqualMode(0775, b_sftp.control_files._dir_mode)
234
 
        self.assertEqualMode(0664, b_sftp.control_files._file_mode)
235
 
        self.assertEqualMode(0775, b_sftp.bzrdir._get_dir_mode())
236
 
        self.assertEqualMode(0664, b_sftp.bzrdir._get_file_mode())
 
233
        self.assertEqualMode(0o775, b_sftp.control_files._dir_mode)
 
234
        self.assertEqualMode(0o664, b_sftp.control_files._file_mode)
 
235
        self.assertEqualMode(0o775, b_sftp.bzrdir._get_dir_mode())
 
236
        self.assertEqualMode(0o664, b_sftp.bzrdir._get_file_mode())
237
237
 
238
238
        with open('local/a', 'wb') as f: f.write('foo3\n')
239
239
        t_local.commit('foo3')
240
240
        b_sftp.pull(b_local)
241
 
        check_mode_r(self, 'sftp/.bzr', 0664, 0775)
 
241
        check_mode_r(self, 'sftp/.bzr', 0o664, 0o775)
242
242
 
243
243
        with open('local/c', 'wb') as f: f.write('new c\n')
244
244
        t_local.add('c')
245
245
        t_local.commit('new c')
246
246
        b_sftp.pull(b_local)
247
 
        check_mode_r(self, 'sftp/.bzr', 0664, 0775)
 
247
        check_mode_r(self, 'sftp/.bzr', 0o664, 0o775)
248
248
 
249
249
    def test_sftp_server_modes(self):
250
250
        if sys.platform == 'win32':
251
251
            raise TestSkipped('chmod has no effect on win32')
252
252
 
253
 
        umask = 0022
 
253
        umask = 0o022
254
254
        original_umask = os.umask(umask)
255
255
 
256
256
        try:
257
257
            t = self.get_transport()
258
258
            # Direct access should be masked by umask
259
 
            t._sftp_open_exclusive('a', mode=0666).write('foo\n')
260
 
            self.assertTransportMode(t, 'a', 0666 &~umask)
 
259
            t._sftp_open_exclusive('a', mode=0o666).write('foo\n')
 
260
            self.assertTransportMode(t, 'a', 0o666 &~umask)
261
261
 
262
262
            # but Transport overrides umask
263
 
            t.put_bytes('b', 'txt', mode=0666)
264
 
            self.assertTransportMode(t, 'b', 0666)
265
 
 
266
 
            t._get_sftp().mkdir('c', mode=0777)
267
 
            self.assertTransportMode(t, 'c', 0777 &~umask)
268
 
 
269
 
            t.mkdir('d', mode=0777)
270
 
            self.assertTransportMode(t, 'd', 0777)
 
263
            t.put_bytes('b', 'txt', mode=0o666)
 
264
            self.assertTransportMode(t, 'b', 0o666)
 
265
 
 
266
            t._get_sftp().mkdir('c', mode=0o777)
 
267
            self.assertTransportMode(t, 'c', 0o777 &~umask)
 
268
 
 
269
            t.mkdir('d', mode=0o777)
 
270
            self.assertTransportMode(t, 'd', 0o777)
271
271
        finally:
272
272
            os.umask(original_umask)