def test_symlinks(self): if has_symlinks() is False: return os.mkdir('branch') ControlDir.create_standalone_workingtree('branch') os.symlink(os.path.realpath('no-die-please'), 'branch/die-please') os.mkdir('no-die-please') self.assertPathExists('branch/die-please') os.mkdir('no-die-please/child') clean_tree('branch', unknown=True, no_prompt=True) self.assertPathExists('no-die-please') self.assertPathExists('no-die-please/child')
def test_iter_deletable(self): """Files are selected for deletion appropriately""" os.mkdir('branch') tree = ControlDir.create_standalone_workingtree('branch') transport = tree.bzrdir.root_transport transport.put_bytes('.bzrignore', '*~\n*.pyc\n.bzrignore\n') transport.put_bytes('file.BASE', 'contents') tree.lock_write() try: self.assertEqual(len(list(iter_deletables(tree, unknown=True))), 1) transport.put_bytes('file', 'contents') transport.put_bytes('file~', 'contents') transport.put_bytes('file.pyc', 'contents') dels = sorted([r for a,r in iter_deletables(tree, unknown=True)]) self.assertEqual(['file', 'file.BASE'], dels) dels = [r for a,r in iter_deletables(tree, detritus=True)] self.assertEqual(sorted(['file~', 'file.BASE']), dels) dels = [r for a,r in iter_deletables(tree, ignored=True)] self.assertEqual(sorted(['file~', 'file.pyc', '.bzrignore']), dels) dels = [r for a,r in iter_deletables(tree, unknown=False)] self.assertEqual([], dels) finally: tree.unlock()
def setup_tree(self): wt = ControlDir.create_standalone_workingtree('.') wt.commit("base A", allow_pointless=True, rev_id='A') wt.commit("base B", allow_pointless=True, rev_id='B') wt.commit("base C", allow_pointless=True, rev_id='C') return wt
def test_iter_deletable(self): """Files are selected for deletion appropriately""" os.mkdir('branch') tree = ControlDir.create_standalone_workingtree('branch') transport = tree.bzrdir.root_transport transport.put_bytes('.bzrignore', '*~\n*.pyc\n.bzrignore\n') transport.put_bytes('file.BASE', 'contents') tree.lock_write() try: self.assertEqual(len(list(iter_deletables(tree, unknown=True))), 1) transport.put_bytes('file', 'contents') transport.put_bytes('file~', 'contents') transport.put_bytes('file.pyc', 'contents') dels = sorted([r for a, r in iter_deletables(tree, unknown=True)]) self.assertEqual(['file', 'file.BASE'], dels) dels = [r for a, r in iter_deletables(tree, detritus=True)] self.assertEqual(sorted(['file~', 'file.BASE']), dels) dels = [r for a, r in iter_deletables(tree, ignored=True)] self.assertEqual(sorted(['file~', 'file.pyc', '.bzrignore']), dels) dels = [r for a, r in iter_deletables(tree, unknown=False)] self.assertEqual([], dels) finally: tree.unlock()
def prepare_simple_history(self): """Prepare and return a working tree with one commit of one file""" # Commit with modified file should say so wt = ControlDir.create_standalone_workingtree('.') self.build_tree(['hello.txt', 'extra.txt']) wt.add(['hello.txt']) wt.commit(message='added') return wt
def test_verbose_commit_with_unknown(self): """Unknown files should not be listed by default in verbose output""" # Is that really the best policy? wt = ControlDir.create_standalone_workingtree('.') self.build_tree(['hello.txt', 'extra.txt']) wt.add(['hello.txt']) out,err = self.run_bzr('commit -m added') self.assertEqual('', out) self.assertContainsRe(err, '^Committing to: .*\n' 'added hello\.txt\n' 'Committed revision 1\.\n$')
def make_parent_and_local_branches(self): # Create a 'parent' branch as the base self.parent_tree = ControlDir.create_standalone_workingtree("parent") self.build_tree_contents([("parent/file", "parent")]) self.parent_tree.add("file") self.parent_tree.commit("first commit", rev_id="parent") # Branch 'local' from parent and do a change local_bzrdir = self.parent_tree.bzrdir.sprout("local") self.local_tree = local_bzrdir.open_workingtree() self.build_tree_contents([("local/file", "local")]) self.local_tree.commit("second commit", rev_id="local")
def make_parent_and_local_branches(self): # Create a 'parent' branch as the base self.parent_tree = ControlDir.create_standalone_workingtree('parent') self.build_tree_contents([('parent/file', 'parent')]) self.parent_tree.add('file') self.parent_tree.commit('first commit', rev_id='parent') # Branch 'local' from parent and do a change local_bzrdir = self.parent_tree.bzrdir.sprout('local') self.local_tree = local_bzrdir.open_workingtree() self.build_tree_contents([('local/file', 'local')]) self.local_tree.commit('second commit', rev_id='local')
def test_verbose_commit_with_unknown(self): """Unknown files should not be listed by default in verbose output""" # Is that really the best policy? wt = ControlDir.create_standalone_workingtree('.') self.build_tree(['hello.txt', 'extra.txt']) wt.add(['hello.txt']) out, err = self.run_bzr('commit -m added') self.assertEqual('', out) self.assertContainsRe( err, '^Committing to: .*\n' 'added hello\.txt\n' 'Committed revision 1\.\n$')
def test_resign_directory(self): """Test --directory option""" wt = ControlDir.create_standalone_workingtree('a') wt.commit("base A", allow_pointless=True, rev_id='A') wt.commit("base B", allow_pointless=True, rev_id='B') wt.commit("base C", allow_pointless=True, rev_id='C') repo = wt.branch.repository self.monkey_patch_gpg() self.run_bzr('re-sign --directory=a -r revid:A') self.assertEqualSignature(repo, 'A') self.run_bzr('re-sign -d a B') self.assertEqualSignature(repo, 'B')
def setUp(self): super(TestSend, self).setUp() grandparent_tree = ControlDir.create_standalone_workingtree("grandparent") self.build_tree_contents([("grandparent/file1", "grandparent")]) grandparent_tree.add("file1") grandparent_tree.commit("initial commit", rev_id="rev1") parent_bzrdir = grandparent_tree.bzrdir.sprout("parent") parent_tree = parent_bzrdir.open_workingtree() parent_tree.commit("next commit", rev_id="rev2") branch_tree = parent_tree.bzrdir.sprout("branch").open_workingtree() self.build_tree_contents([("branch/file1", "branch")]) branch_tree.commit("last commit", rev_id="rev3")
def setUp(self): super(TestSend, self).setUp() grandparent_tree = ControlDir.create_standalone_workingtree( 'grandparent') self.build_tree_contents([('grandparent/file1', 'grandparent')]) grandparent_tree.add('file1') grandparent_tree.commit('initial commit', rev_id='rev1') parent_bzrdir = grandparent_tree.bzrdir.sprout('parent') parent_tree = parent_bzrdir.open_workingtree() parent_tree.commit('next commit', rev_id='rev2') branch_tree = parent_tree.bzrdir.sprout('branch').open_workingtree() self.build_tree_contents([('branch/file1', 'branch')]) branch_tree.commit('last commit', rev_id='rev3')
class TestCleanTree(TestCaseInTempDir): def test_symlinks(self): if has_symlinks() is False: return os.mkdir('branch') ControlDir.create_standalone_workingtree('branch') os.symlink(os.path.realpath('no-die-please'), 'branch/die-please') os.mkdir('no-die-please') self.assertPathExists('branch/die-please') os.mkdir('no-die-please/child') clean_tree('branch', unknown=True, no_prompt=True) self.assertPathExists('no-die-please') self.assertPathExists('no-die-please/child') def test_iter_deletable(self): """Files are selected for deletion appropriately""" os.mkdir('branch') tree = ControlDir.create_standalone_workingtree('branch') transport = tree.bzrdir.root_transport transport.put_bytes('.bzrignore', '*~\n*.pyc\n.bzrignore\n') transport.put_bytes('file.BASE', 'contents') tree.lock_write() try: self.assertEqual(len(list(iter_deletables(tree, unknown=True))), 1) transport.put_bytes('file', 'contents') transport.put_bytes('file~', 'contents') transport.put_bytes('file.pyc', 'contents') dels = sorted([r for a, r in iter_deletables(tree, unknown=True)]) self.assertEqual(['file', 'file.BASE'], dels) dels = [r for a, r in iter_deletables(tree, detritus=True)] self.assertEqual(sorted(['file~', 'file.BASE']), dels) dels = [r for a, r in iter_deletables(tree, ignored=True)] self.assertEqual(sorted(['file~', 'file.pyc', '.bzrignore']), dels) dels = [r for a, r in iter_deletables(tree, unknown=False)] self.assertEqual([], dels) finally: tree.unlock() def test_delete_items_warnings(self): """Ensure delete_items issues warnings on EACCES. (bug #430785) """ def _dummy_unlink(path): """unlink() files other than files named '0foo'. """ if path.endswith('0foo'): # Simulate 'permission denied' error. # This should show up as a warning for the # user. e = OSError() e.errno = errno.EACCES raise e def _dummy_rmtree(path, ignore_errors=False, onerror=None): """Call user supplied error handler onerror. """ # Indicate failure in removing 'path' if path is subdir0 # We later check to ensure that this is indicated # to the user as a warning. We raise OSError to construct # proper excinfo that needs to be passed to onerror try: raise OSError except OSError, e: e.errno = errno.EACCES excinfo = sys.exc_info() function = os.remove if 'subdir0' not in path: # onerror should show warning only for os.remove # error. For any other failures the error should # be shown to the user. function = os.listdir onerror(function=function, path=path, excinfo=excinfo) self.overrideAttr(os, 'unlink', _dummy_unlink) self.overrideAttr(shutil, 'rmtree', _dummy_rmtree) stdout = tests.StringIOWrapper() stderr = tests.StringIOWrapper() ui.ui_factory = tests.TestUIFactory(stdout=stdout, stderr=stderr) ControlDir.create_standalone_workingtree('.') self.build_tree(['0foo', '1bar', '2baz', 'subdir0/']) clean_tree('.', unknown=True, no_prompt=True) self.assertContainsRe(stderr.getvalue(), 'bzr: warning: unable to remove.*0foo') self.assertContainsRe(stderr.getvalue(), 'bzr: warning: unable to remove.*subdir0') # Ensure that error other than EACCES during os.remove are # not turned into warnings. self.build_tree(['subdir1/']) self.assertRaises(OSError, clean_tree, '.', unknown=True, no_prompt=True)