import os from mock import patch from dvc.exceptions import DvcException from dvc.main import main from dvc.stage import Stage from dvc.stage import StageFileDoesNotExistError from dvc.system import System from dvc.utils.fs import remove from tests.basic_env import TestDvc class TestRemove(TestDvc): def test(self): stages = self.dvc.add(self.FOO) self.assertEqual(len(stages), 1) stage = stages[0] self.assertTrue(stage is not None) stage_removed = self.dvc.remove(stage.path, outs_only=True) self.assertIsInstance(stage_removed, Stage) self.assertEqual(stage.path, stage_removed.path) self.assertFalse(os.path.isfile(self.FOO)) stage_removed = self.dvc.remove(stage.path) self.assertIsInstance(stage_removed, Stage) self.assertEqual(stage.path, stage_removed.path) self.assertFalse(os.path.isfile(self.FOO)) self.assertFalse(os.path.exists(stage.path)) class TestRemoveNonExistentFile(TestDvc): def test(self): with self.assertRaises(StageFileDoesNotExistError): self.dvc.remove("non_existent_dvc_file") class TestRemoveBrokenSymlink(TestDvc): def test(self): ret = main(["config", "cache.type", "symlink"]) self.assertEqual(ret, 0) ret = main(["add", self.FOO]) self.assertEqual(ret, 0) remove(self.dvc.cache.local.cache_dir) self.assertTrue(System.is_symlink(self.FOO)) ret = main(["remove", self.FOO + ".dvc"]) self.assertEqual(ret, 0) self.assertFalse(os.path.lexists(self.FOO)) class TestRemoveDirectory(TestDvc): def test(self): stages = self.dvc.add(self.DATA_DIR) self.assertEqual(len(stages), 1) stage_add = stages[0] self.assertTrue(stage_add is not None) stage_removed = self.dvc.remove(stage_add.path) self.assertEqual(stage_add.path, stage_removed.path) self.assertFalse(os.path.exists(self.DATA_DIR)) self.assertFalse(os.path.exists(stage_removed.path)) class TestCmdRemove(TestDvc): def test(self): stages = self.dvc.add(self.FOO) self.assertEqual(len(stages), 1) stage = stages[0] self.assertTrue(stage is not None) ret = main(["remove", stage.path]) self.assertEqual(ret, 0) ret = main(["remove", "non-existing-dvc-file"]) self.assertNotEqual(ret, 0) class TestRemovePurge(TestDvc): def test(self): dvcfile = self.dvc.add(self.FOO)[0].path ret = main(["remove", "--purge", "--force", dvcfile]) self.assertEqual(ret, 0) self.assertFalse(os.path.exists(self.FOO)) self.assertFalse(os.path.exists(dvcfile)) @patch("dvc.prompt.confirm", return_value=False) def test_force(self, mock_prompt): dvcfile = self.dvc.add(self.FOO)[0].path ret = main(["remove", "--purge", dvcfile]) mock_prompt.assert_called() self.assertEqual(ret, 1) self.assertRaises(DvcException)