79
79
test.assertTransportMode(t, p, file_mode)
82
def assertEqualMode(test, mode, mode_test):
83
test.assertEqual(mode, mode_test,
84
'mode mismatch %o != %o' % (mode, mode_test))
87
82
class TestPermissions(TestCaseWithTransport):
89
84
def test_new_files(self):
90
85
if sys.platform == 'win32':
91
86
raise TestSkipped('chmod has no effect on win32')
93
t = WorkingTree.create_standalone('.')
88
t = self.make_branch_and_tree('.')
95
90
open('a', 'wb').write('foo\n')
106
101
# when a new lock is taken out.
107
102
t = WorkingTree('.')
109
assertEqualMode(self, 0755, b.control_files._dir_mode)
110
assertEqualMode(self, 0644, b.control_files._file_mode)
104
self.assertEqualMode(0755, b.control_files._dir_mode)
105
self.assertEqualMode(0644, b.control_files._file_mode)
112
107
# Modifying a file shouldn't break the permissions
113
108
open('a', 'wb').write('foo2\n')
126
121
check_mode_r(self, '.bzr', 0664, 0775)
127
122
t = WorkingTree('.')
129
assertEqualMode(self, 0775, b.control_files._dir_mode)
130
assertEqualMode(self, 0664, b.control_files._file_mode)
124
self.assertEqualMode(0775, b.control_files._dir_mode)
125
self.assertEqualMode(0664, b.control_files._file_mode)
132
127
open('a', 'wb').write('foo3\n')
144
139
check_mode_r(self, '.bzr', 0664, 02775)
145
140
t = WorkingTree('.')
147
assertEqualMode(self, 02775, b.control_files._dir_mode)
148
assertEqualMode(self, 0664, b.control_files._file_mode)
142
self.assertEqualMode(02775, b.control_files._dir_mode)
143
self.assertEqualMode(0664, b.control_files._file_mode)
150
145
open('a', 'wb').write('foo4\n')
193
188
LockableFiles._set_dir_mode = True
194
189
LockableFiles._set_file_mode = True
196
def test_new_branch(self):
197
if sys.platform == 'win32':
198
raise TestSkipped('chmod has no effect on win32')
199
#FIXME RBC 20060105 should test branch and repository
201
# also, these are BzrBranch format specific things..
203
mode = stat.S_IMODE(os.stat('a').st_mode)
204
t = WorkingTree.create_standalone('.')
206
assertEqualMode(self, mode, b.control_files._dir_mode)
207
assertEqualMode(self, mode & ~07111, b.control_files._file_mode)
211
b = BzrDir.create('b').create_branch()
212
assertEqualMode(self, 02777, b.control_files._dir_mode)
213
assertEqualMode(self, 00666, b.control_files._file_mode)
214
check_mode_r(self, 'b/.bzr', 00666, 02777)
218
b = BzrDir.create('c').create_branch()
219
assertEqualMode(self, 02750, b.control_files._dir_mode)
220
assertEqualMode(self, 00640, b.control_files._file_mode)
221
check_mode_r(self, 'c/.bzr', 00640, 02750)
225
b = BzrDir.create('d').create_branch()
226
assertEqualMode(self, 0700, b.control_files._dir_mode)
227
assertEqualMode(self, 0600, b.control_files._file_mode)
228
check_mode_r(self, 'd/.bzr', 00600, 0700)
231
192
class TestSftpPermissions(TestCaseWithSFTPServer):
236
197
# Though it would be nice to test that SFTP to a server
237
198
# which does support chmod has the right effect
239
from bzrlib.transport.sftp import SFTPTransport
241
# We don't actually use it directly, we just want to
242
# keep the connection open, since StubSFTPServer only
243
# allows 1 connection
244
_transport = SFTPTransport(self._sftp_url)
200
# bodge around for stubsftpserver not letting use connect
202
_t = get_transport(self.get_url())
246
204
os.mkdir('local')
247
t_local = WorkingTree.create_standalone('local')
205
t_local = self.make_branch_and_tree('local')
248
206
b_local = t_local.branch
249
207
open('local/a', 'wb').write('foo\n')
257
215
t = WorkingTree('local')
259
assertEqualMode(self, 0755, b_local.control_files._dir_mode)
260
assertEqualMode(self, 0644, b_local.control_files._file_mode)
217
self.assertEqualMode(0755, b_local.control_files._dir_mode)
218
self.assertEqualMode(0644, b_local.control_files._file_mode)
263
sftp_url = self.get_remote_url('sftp')
221
sftp_url = self.get_url('sftp')
264
222
b_sftp = BzrDir.create_branch_and_repo(sftp_url)
266
224
b_sftp.pull(b_local)
269
227
check_mode_r(self, 'sftp/.bzr', 0644, 0755)
271
229
b_sftp = Branch.open(sftp_url)
272
assertEqualMode(self, 0755, b_sftp.control_files._dir_mode)
273
assertEqualMode(self, 0644, b_sftp.control_files._file_mode)
230
self.assertEqualMode(0755, b_sftp.control_files._dir_mode)
231
self.assertEqualMode(0644, b_sftp.control_files._file_mode)
275
233
open('local/a', 'wb').write('foo2\n')
276
234
t_local.commit('foo2')
290
248
check_mode_r(self, 'sftp/.bzr', 0664, 0775)
292
250
b_sftp = Branch.open(sftp_url)
293
assertEqualMode(self, 0775, b_sftp.control_files._dir_mode)
294
assertEqualMode(self, 0664, b_sftp.control_files._file_mode)
251
self.assertEqualMode(0775, b_sftp.control_files._dir_mode)
252
self.assertEqualMode(0664, b_sftp.control_files._file_mode)
296
254
open('local/a', 'wb').write('foo3\n')
297
255
t_local.commit('foo3')
312
270
original_umask = os.umask(umask)
315
from bzrlib.transport.sftp import SFTPTransport
316
t = SFTPTransport(self._sftp_url)
273
t = get_transport(self.get_url())
317
274
# Direct access should be masked by umask
318
275
t._sftp_open_exclusive('a', mode=0666).write('foo\n')
319
276
self.assertTransportMode(t, 'a', 0666 &~umask)