~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_permissions.py

first cut at merge from integration.

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
 
24
24
In the future, when we have Repository/Branch/Checkout information, the
25
25
permissions should be inherited individually, rather than all be the same.
26
 
 
27
 
TODO: jam 20051215 There are no tests for ftp yet, because we have no ftp server
28
 
TODO: jam 20051215 Currently the default behavior for 'bzr branch' is just 
29
 
                   defined by the local umask. This isn't terrible, is it
30
 
                   the truly desired behavior?
31
26
"""
32
27
 
 
28
# TODO: jam 20051215 There are no tests for ftp yet, because we have no ftp server
 
29
# TODO: jam 20051215 Currently the default behavior for 'bzr branch' is just 
 
30
#                    defined by the local umask. This isn't terrible, is it
 
31
#                    the truly desired behavior?
 
32
 
33
33
import os
34
34
import sys
35
35
import stat
 
36
from StringIO import StringIO
36
37
 
37
38
from bzrlib.branch import Branch
38
 
from bzrlib.tests import TestCaseInTempDir, TestSkipped
 
39
from bzrlib.lockable_files import LockableFiles
 
40
from bzrlib.tests import TestCaseWithTransport, TestSkipped
39
41
from bzrlib.tests.test_sftp_transport import TestCaseWithSFTPServer
40
42
from bzrlib.transport import get_transport
41
43
from bzrlib.workingtree import WorkingTree
81
83
                     'mode mismatch %o != %o' % (mode, mode_test))
82
84
 
83
85
 
84
 
class TestPermissions(TestCaseInTempDir):
 
86
class TestPermissions(TestCaseWithTransport):
85
87
 
86
88
    def test_new_files(self):
87
89
        if sys.platform == 'win32':
100
102
 
101
103
        b = Branch.open('.')
102
104
        t = b.working_tree()
103
 
        assertEqualMode(self, 0755, b._dir_mode)
104
 
        assertEqualMode(self, 0644, b._file_mode)
 
105
        assertEqualMode(self, 0755, b.control_files._dir_mode)
 
106
        assertEqualMode(self, 0644, b.control_files._file_mode)
105
107
 
106
108
        # Modifying a file shouldn't break the permissions
107
109
        open('a', 'wb').write('foo2\n')
121
123
        check_mode_r(self, '.bzr', 0664, 0775)
122
124
        b = Branch.open('.')
123
125
        t = b.working_tree()
124
 
        assertEqualMode(self, 0775, b._dir_mode)
125
 
        assertEqualMode(self, 0664, b._file_mode)
 
126
        assertEqualMode(self, 0775, b.control_files._dir_mode)
 
127
        assertEqualMode(self, 0664, b.control_files._file_mode)
126
128
 
127
129
        open('a', 'wb').write('foo3\n')
128
130
        t.commit('foo3')
140
142
        check_mode_r(self, '.bzr', 0664, 02775)
141
143
        b = Branch.open('.')
142
144
        t = b.working_tree()
143
 
        assertEqualMode(self, 02775, b._dir_mode)
144
 
        assertEqualMode(self, 0664, b._file_mode)
 
145
        assertEqualMode(self, 02775, b.control_files._dir_mode)
 
146
        assertEqualMode(self, 0664, b.control_files._file_mode)
145
147
 
146
148
        open('a', 'wb').write('foo4\n')
147
149
        t.commit('foo4')
155
157
    def test_disable_set_mode(self):
156
158
        # TODO: jam 20051215 Ultimately, this test should probably test that
157
159
        #                    extra chmod calls aren't being made
158
 
        import bzrlib.branch
159
160
        try:
160
 
            t = WorkingTree.create_standalone('.')
161
 
            b = t.branch
162
 
            self.assertNotEqual(None, b._dir_mode)
163
 
            self.assertNotEqual(None, b._file_mode)
164
 
 
165
 
            bzrlib.branch.BzrBranch._set_dir_mode = False
166
 
            b = Branch.open(u'.')
167
 
            self.assertEqual(None, b._dir_mode)
168
 
            self.assertNotEqual(None, b._file_mode)
169
 
 
170
 
            bzrlib.branch.BzrBranch._set_file_mode = False
171
 
            b = Branch.open(u'.')
172
 
            self.assertEqual(None, b._dir_mode)
173
 
            self.assertEqual(None, b._file_mode)
174
 
 
175
 
            bzrlib.branch.BzrBranch._set_dir_mode = True
176
 
            b = Branch.open(u'.')
177
 
            self.assertNotEqual(None, b._dir_mode)
178
 
            self.assertEqual(None, b._file_mode)
179
 
 
180
 
            bzrlib.branch.BzrBranch._set_file_mode = True
181
 
            b = Branch.open(u'.')
182
 
            self.assertNotEqual(None, b._dir_mode)
183
 
            self.assertNotEqual(None, b._file_mode)
 
161
            transport = get_transport(self.get_url())
 
162
            transport.put('my-lock', StringIO(''))
 
163
            lockable = LockableFiles(transport, 'my-lock')
 
164
            self.assertNotEqual(None, lockable._dir_mode)
 
165
            self.assertNotEqual(None, lockable._file_mode)
 
166
 
 
167
            LockableFiles._set_dir_mode = False
 
168
            transport = get_transport('.')
 
169
            lockable = LockableFiles(transport, 'my-lock')
 
170
            self.assertEqual(None, lockable._dir_mode)
 
171
            self.assertNotEqual(None, lockable._file_mode)
 
172
 
 
173
            LockableFiles._set_file_mode = False
 
174
            transport = get_transport('.')
 
175
            lockable = LockableFiles(transport, 'my-lock')
 
176
            self.assertEqual(None, lockable._dir_mode)
 
177
            self.assertEqual(None, lockable._file_mode)
 
178
 
 
179
            LockableFiles._set_dir_mode = True
 
180
            transport = get_transport('.')
 
181
            lockable = LockableFiles(transport, 'my-lock')
 
182
            self.assertNotEqual(None, lockable._dir_mode)
 
183
            self.assertEqual(None, lockable._file_mode)
 
184
 
 
185
            LockableFiles._set_file_mode = True
 
186
            transport = get_transport('.')
 
187
            lockable = LockableFiles(transport, 'my-lock')
 
188
            self.assertNotEqual(None, lockable._dir_mode)
 
189
            self.assertNotEqual(None, lockable._file_mode)
184
190
        finally:
185
 
            bzrlib.branch.BzrBranch._set_dir_mode = True
186
 
            bzrlib.branch.BzrBranch._set_file_mode = True
 
191
            LockableFiles._set_dir_mode = True
 
192
            LockableFiles._set_file_mode = True
187
193
 
188
194
    def test_new_branch(self):
189
195
        if sys.platform == 'win32':
190
196
            raise TestSkipped('chmod has no effect on win32')
191
 
 
 
197
        #FIXME RBC 20060105 should test branch and repository 
 
198
        # permissions ? 
 
199
        # also, these are BzrBranch format specific things..
192
200
        os.mkdir('a')
193
201
        mode = stat.S_IMODE(os.stat('a').st_mode)
194
202
        t = WorkingTree.create_standalone('.')
195
203
        b = t.branch
196
 
        assertEqualMode(self, mode, b._dir_mode)
197
 
        assertEqualMode(self, mode & ~07111, b._file_mode)
 
204
        assertEqualMode(self, mode, b.control_files._dir_mode)
 
205
        assertEqualMode(self, mode & ~07111, b.control_files._file_mode)
198
206
 
199
207
        os.mkdir('b')
200
208
        os.chmod('b', 02777)
201
209
        b = Branch.create('b')
202
 
        assertEqualMode(self, 02777, b._dir_mode)
203
 
        assertEqualMode(self, 00666, b._file_mode)
 
210
        assertEqualMode(self, 02777, b.control_files._dir_mode)
 
211
        assertEqualMode(self, 00666, b.control_files._file_mode)
204
212
        check_mode_r(self, 'b/.bzr', 00666, 02777)
205
213
 
206
214
        os.mkdir('c')
207
215
        os.chmod('c', 02750)
208
216
        b = Branch.create('c')
209
 
        assertEqualMode(self, 02750, b._dir_mode)
210
 
        assertEqualMode(self, 00640, b._file_mode)
 
217
        assertEqualMode(self, 02750, b.control_files._dir_mode)
 
218
        assertEqualMode(self, 00640, b.control_files._file_mode)
211
219
        check_mode_r(self, 'c/.bzr', 00640, 02750)
212
220
 
213
221
        os.mkdir('d')
214
222
        os.chmod('d', 0700)
215
223
        b = Branch.create('d')
216
 
        assertEqualMode(self, 0700, b._dir_mode)
217
 
        assertEqualMode(self, 0600, b._file_mode)
 
224
        assertEqualMode(self, 0700, b.control_files._dir_mode)
 
225
        assertEqualMode(self, 0600, b.control_files._file_mode)
218
226
        check_mode_r(self, 'd/.bzr', 00600, 0700)
219
227
 
220
228
 
247
255
 
248
256
        b_local = Branch.open(u'local')
249
257
        t_local = b_local.working_tree()
250
 
        assertEqualMode(self, 0755, b_local._dir_mode)
251
 
        assertEqualMode(self, 0644, b_local._file_mode)
 
258
        assertEqualMode(self, 0755, b_local.control_files._dir_mode)
 
259
        assertEqualMode(self, 0644, b_local.control_files._file_mode)
252
260
 
253
261
        os.mkdir('sftp')
254
262
        sftp_url = self.get_remote_url('sftp')
260
268
        check_mode_r(self, 'sftp/.bzr', 0644, 0755)
261
269
 
262
270
        b_sftp = Branch.open(sftp_url)
263
 
        assertEqualMode(self, 0755, b_sftp._dir_mode)
264
 
        assertEqualMode(self, 0644, b_sftp._file_mode)
 
271
        assertEqualMode(self, 0755, b_sftp.control_files._dir_mode)
 
272
        assertEqualMode(self, 0644, b_sftp.control_files._file_mode)
265
273
 
266
274
        open('local/a', 'wb').write('foo2\n')
267
275
        t_local.commit('foo2')
281
289
        check_mode_r(self, 'sftp/.bzr', 0664, 0775)
282
290
 
283
291
        b_sftp = Branch.open(sftp_url)
284
 
        assertEqualMode(self, 0775, b_sftp._dir_mode)
285
 
        assertEqualMode(self, 0664, b_sftp._file_mode)
 
292
        assertEqualMode(self, 0775, b_sftp.control_files._dir_mode)
 
293
        assertEqualMode(self, 0664, b_sftp.control_files._file_mode)
286
294
 
287
295
        open('local/a', 'wb').write('foo3\n')
288
296
        t_local.commit('foo3')