mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-02 07:18:25 +01:00
@@ -501,6 +501,12 @@ def parse_args(argv=None):
|
||||
action='store_true',
|
||||
default=False,
|
||||
help='Remove DVC file and all its outputs.')
|
||||
remove_parser.add_argument(
|
||||
'-f',
|
||||
'--force',
|
||||
action='store_true',
|
||||
default=False,
|
||||
help='Force purge.')
|
||||
remove_parser.add_argument(
|
||||
'targets',
|
||||
nargs='+',
|
||||
|
||||
+23
-1
@@ -4,10 +4,32 @@ from dvc.logger import Logger
|
||||
|
||||
|
||||
class CmdRemove(CmdBase):
|
||||
def _is_outs_only(self, target):
|
||||
if not self.args.purge:
|
||||
return True
|
||||
|
||||
if self.args.force:
|
||||
return False
|
||||
|
||||
msg = (
|
||||
u'Are you sure you want to remove {} with its outputs?'
|
||||
.format(target)
|
||||
)
|
||||
|
||||
confirmed = self.project.prompt.prompt(msg)
|
||||
|
||||
if confirmed:
|
||||
return False
|
||||
|
||||
raise DvcException(
|
||||
u'Cannot purge without a confirmation from the user.'
|
||||
u" Use '-f' to force."
|
||||
)
|
||||
|
||||
def run(self):
|
||||
outs_only = not self.args.purge
|
||||
for target in self.args.targets:
|
||||
try:
|
||||
outs_only = self._is_outs_only(target)
|
||||
self.project.remove(target, outs_only=outs_only)
|
||||
except DvcException as ex:
|
||||
Logger.error('Failed to remove {}'.format(target), ex)
|
||||
|
||||
@@ -2,9 +2,11 @@ import os
|
||||
|
||||
from dvc.main import main
|
||||
from dvc.stage import Stage, StageFileDoesNotExistError
|
||||
from dvc.exceptions import DvcException
|
||||
from dvc.command.remove import CmdRemove
|
||||
|
||||
from tests.basic_env import TestDvc
|
||||
from mock import patch
|
||||
|
||||
|
||||
class TestRemove(TestDvc):
|
||||
@@ -57,3 +59,23 @@ class TestCmdRemove(TestDvc):
|
||||
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.Prompt.prompt')
|
||||
def test_force(self, mock_prompt):
|
||||
mock_prompt.return_value = False
|
||||
|
||||
dvcfile = self.dvc.add(self.FOO)[0].path
|
||||
ret = main(['remove', '--purge', dvcfile])
|
||||
|
||||
mock_prompt.assert_called()
|
||||
self.assertEqual(ret, 1)
|
||||
self.assertRaises(DvcException)
|
||||
|
||||
Reference in New Issue
Block a user