def commit_tree(self, tree, revision_id=None): tree.commit("This is a message", rev_id=revision_id) tempdir = osutils.mkdtemp( prefix='testbzrsvn-', suffix='.tmp', dir=self.test_dir) self.addCleanup(shutil.rmtree, tempdir) to_branch = ControlDir.create_branch_and_repo( os.path.join(tempdir, 'branch')) tree.branch.push(to_branch) return to_branch.basis_tree()
def test_new_files(self): if sys.platform == 'win32': raise TestSkipped('chmod has no effect on win32') # Though it would be nice to test that SFTP to a server # which does support chmod has the right effect # bodge around for stubsftpserver not letting use connect # more than once _t = self.get_transport() os.mkdir('local') t_local = self.make_branch_and_tree('local') b_local = t_local.branch with open('local/a', 'wb') as f: f.write(b'foo\n') t_local.add('a') t_local.commit('foo') # Delete them because we are modifying the filesystem underneath them chmod_r('local/.bzr', 0o644, 0o755) check_mode_r(self, 'local/.bzr', 0o644, 0o755) t = WorkingTree.open('local') b_local = t.branch self.assertEqualMode(0o755, b_local.control_files._dir_mode) self.assertEqualMode(0o644, b_local.control_files._file_mode) self.assertEqualMode(0o755, b_local.controldir._get_dir_mode()) self.assertEqualMode(0o644, b_local.controldir._get_file_mode()) os.mkdir('sftp') sftp_url = self.get_url('sftp') b_sftp = ControlDir.create_branch_and_repo(sftp_url) b_sftp.pull(b_local) del b_sftp chmod_r('sftp/.bzr', 0o644, 0o755) check_mode_r(self, 'sftp/.bzr', 0o644, 0o755) b_sftp = Branch.open(sftp_url) self.assertEqualMode(0o755, b_sftp.control_files._dir_mode) self.assertEqualMode(0o644, b_sftp.control_files._file_mode) self.assertEqualMode(0o755, b_sftp.controldir._get_dir_mode()) self.assertEqualMode(0o644, b_sftp.controldir._get_file_mode()) with open('local/a', 'wb') as f: f.write(b'foo2\n') t_local.commit('foo2') b_sftp.pull(b_local) # The mode should be maintained after commit check_mode_r(self, 'sftp/.bzr', 0o644, 0o755) with open('local/b', 'wb') as f: f.write(b'new b\n') t_local.add('b') t_local.commit('new b') b_sftp.pull(b_local) check_mode_r(self, 'sftp/.bzr', 0o644, 0o755) del b_sftp # Recursively update the modes of all files chmod_r('sftp/.bzr', 0o664, 0o775) check_mode_r(self, 'sftp/.bzr', 0o664, 0o775) b_sftp = Branch.open(sftp_url) self.assertEqualMode(0o775, b_sftp.control_files._dir_mode) self.assertEqualMode(0o664, b_sftp.control_files._file_mode) self.assertEqualMode(0o775, b_sftp.controldir._get_dir_mode()) self.assertEqualMode(0o664, b_sftp.controldir._get_file_mode()) with open('local/a', 'wb') as f: f.write(b'foo3\n') t_local.commit('foo3') b_sftp.pull(b_local) check_mode_r(self, 'sftp/.bzr', 0o664, 0o775) with open('local/c', 'wb') as f: f.write(b'new c\n') t_local.add('c') t_local.commit('new c') b_sftp.pull(b_local) check_mode_r(self, 'sftp/.bzr', 0o664, 0o775)