dvc: remove lock

As discussed with @dmpetrov, we don't really see a good usage scenario
for this and thus removing it from dvc.

Signed-off-by: Ruslan Kuprieiev <[email protected]>
This commit is contained in:
Ruslan Kuprieiev
2018-01-13 01:54:20 +02:00
parent 1b0a2e1746
commit 6a6c11ffdb
9 changed files with 4 additions and 118 deletions
-23
View File
@@ -12,7 +12,6 @@ from dvc.command.remove import CmdRemove
from dvc.command.run import CmdRun
from dvc.command.repro import CmdRepro
from dvc.command.data_sync import CmdDataPush, CmdDataPull, CmdDataStatus
from dvc.command.lock import CmdLock
from dvc.command.gc import CmdGC
from dvc.command.add import CmdAdd
from dvc.command.show_workflow import CmdShowWorkflow
@@ -100,11 +99,6 @@ def parse_args(argv=None):
action='append',
default=[],
help='Declare output regular file (sync to Git) for reproducible cmd.')
run_parser.add_argument('-l',
'--lock',
action='store_true',
default=False,
help='Lock data item - disable reproduction.')
run_parser.add_argument('-f',
'--file',
help='Specify name of the state file')
@@ -197,23 +191,6 @@ def parse_args(argv=None):
help='Input files/directories')
import_parser.set_defaults(func=CmdAdd)
# Lock
lock_parser = subparsers.add_parser(
'lock',
parents=[parent_parser],
help='Lock')
lock_parser.add_argument('-u',
'--unlock',
action='store_true',
default=False,
help='Unlock stage - enable reproduction.')
lock_parser.add_argument(
'files',
nargs='*',
default=[Stage.STAGE_FILE],
help='Stages to lock or unlock.')
lock_parser.set_defaults(func=CmdLock)
# Garbage collector
gc_parser = subparsers.add_parser(
'gc',
-27
View File
@@ -1,27 +0,0 @@
from dvc.command.common.base import CmdBase
from dvc.stage import Stage
class CmdLock(CmdBase):
def run(self):
lock = not self.args.unlock
cmd = 'lock' if lock else 'unlock'
ret = 0
for file in self.args.files:
try:
stage = Stage.load(self.project, file)
if stage.locked and lock:
self.project.logger.warn('Stage {} is already locked'.format(file))
elif not stage.locked and not lock:
self.project.logger.warn('Stage {} is already unlocked'.format(file))
else:
stage.locked = lock
self.project.logger.debug('Saving stage file {}'.format(file))
stage.dump()
self.project.logger.info('Stage {} was {}ed'.format(file, cmd))
except Exception as ex:
ret = 1
self.project.logger.error('Unable to {} {}: {}'.format(cmd, file, ex))
return ret
-1
View File
@@ -15,7 +15,6 @@ class CmdRun(CmdBase):
outs=self.args.outs,
outs_no_cache=self.args.outs_no_cache,
deps=self.args.deps,
locked=self.args.lock,
fname=fname,
cwd=self.args.cwd,
no_exec=self.args.no_exec)
+2 -5
View File
@@ -125,8 +125,7 @@ class Project(object):
cmd=None,
cwd=cwd,
outs=outputs,
deps=[],
locked=True)
deps=[])
stage.save()
stage.dump()
return stage
@@ -152,7 +151,6 @@ class Project(object):
deps=[],
outs=[],
outs_no_cache=[],
locked=False,
fname=Stage.STAGE_FILE,
cwd=os.curdir,
no_exec=False):
@@ -167,8 +165,7 @@ class Project(object):
cmd=cmd,
cwd=cwd,
outs=outputs,
deps=deps,
locked=locked)
deps=deps)
if not no_exec:
stage.run()
stage.dump()
+2 -7
View File
@@ -250,16 +250,14 @@ class Stage(object):
PARAM_CMD = 'cmd'
PARAM_DEPS = 'deps'
PARAM_OUTS = 'outs'
PARAM_LOCKED = 'locked'
def __init__(self, project, path=None, cmd=None, cwd=None, deps=[], outs=[], locked=False):
def __init__(self, project, path=None, cmd=None, cwd=None, deps=[], outs=[]):
self.project = project
self.path = path
self.cmd = cmd
self.cwd = cwd
self.outs = outs
self.deps = deps
self.locked = locked
@property
def relpath(self):
@@ -315,15 +313,13 @@ class Stage(object):
cmd = d[Stage.PARAM_CMD]
deps = Dependency.loadd_from(project, d[Stage.PARAM_DEPS], cwd=cwd)
outs = Output.loadd_from(project, d[Stage.PARAM_OUTS], cwd=cwd)
locked = d[Stage.PARAM_LOCKED]
return Stage(project=project,
path=path,
cmd=cmd,
cwd=cwd,
deps=deps,
outs=outs,
locked=locked)
outs=outs)
@staticmethod
def load(project, fname):
@@ -338,7 +334,6 @@ class Stage(object):
Stage.PARAM_CMD: self.cmd,
Stage.PARAM_DEPS: deps,
Stage.PARAM_OUTS: outs,
Stage.PARAM_LOCKED: self.locked
}
def dump(self, fname=None):
-1
View File
@@ -23,7 +23,6 @@ class TestAdd(TestDvc):
self.assertTrue(os.path.isfile(stage.path))
self.assertEqual(len(stage.outs), 1)
self.assertEqual(len(stage.deps), 0)
self.assertTrue(stage.locked)
self.assertEqual(stage.cmd, None)
self.assertEqual(stage.outs[0].md5, md5)
-17
View File
@@ -7,7 +7,6 @@ from dvc.command.data_sync import CmdDataPull, CmdDataPush, CmdDataStatus
from dvc.command.repro import CmdRepro
from dvc.command.add import CmdAdd
from dvc.command.remove import CmdRemove
from dvc.command.lock import CmdLock
from dvc.command.gc import CmdGC
from dvc.command.config import CmdConfig
from dvc.command.show_pipeline import CmdShowPipeline
@@ -49,7 +48,6 @@ class TestRun(TestDvc):
'--outs', out2,
'-O', out_no_cache1,
'--outs-no-cache', out_no_cache2,
'-l', '--lock',
'-f', fname,
'--file', fname,
'-c', cwd,
@@ -125,21 +123,6 @@ class TestAdd(TestDvc):
self.assertEqual(args.targets, [target1, target2])
class TestLock(TestDvc):
def test(self):
target1 = '1'
target2 = '2'
args = parse_args(['lock',
target1,
target2,
'-u', '--unlock'])
self.assertIsInstance(args.func(args), CmdLock)
self.assertEqual(args.files, [target1, target2])
self.assertEqual(args.unlock, True)
class TestGC(TestDvc):
def test(self):
args = parse_args(['gc'])
-33
View File
@@ -1,33 +0,0 @@
from dvc.main import main
from dvc.stage import Stage
from tests.test_repro import TestRepro
class TestCmdLock(TestRepro):
def test_lock(self):
ret = main(['lock',
self.file1_stage])
stage = Stage.load(self.dvc, self.file1_stage)
self.assertEqual(ret, 0)
self.assertTrue(stage.locked)
def test_unlock(self):
ret = main(['lock',
'-u',
self.file1_stage])
stage = Stage.load(self.dvc, self.file1_stage)
self.assertEqual(ret, 0)
self.assertFalse(stage.locked)
def test_twice(self):
self.test_lock()
self.test_lock()
self.test_unlock()
self.test_unlock()
def test_non_existing(self):
ret = main(['lock',
'non-existing-file'])
self.assertNotEqual(ret, 0)
-4
View File
@@ -15,7 +15,6 @@ class TestRun(TestDvc):
deps = [self.FOO, self.CODE]
outs = [os.path.join(self.dvc.root_dir, 'out')]
outs_no_cache = []
locked = False
fname = os.path.join(self.dvc.root_dir, 'out.dvc')
cwd = os.curdir
@@ -24,7 +23,6 @@ class TestRun(TestDvc):
deps=deps,
outs=outs,
outs_no_cache=outs_no_cache,
locked=locked,
fname=fname,
cwd=cwd)
@@ -35,7 +33,6 @@ class TestRun(TestDvc):
self.assertEqual(len(stage.outs), len(outs + outs_no_cache))
self.assertEqual(stage.outs[0].path, outs[0])
self.assertEqual(stage.outs[0].md5, file_md5(self.FOO)[0])
self.assertEqual(stage.locked, locked)
self.assertTrue(stage.path, fname)
@@ -45,7 +42,6 @@ class TestRunEmpty(TestDvc):
deps=[],
outs=[],
outs_no_cache=[],
locked=False,
fname='empty.dvc',
cwd=os.curdir)