Merge pull request #1066 from efiop/master

misc pipeline improvements
This commit is contained in:
Ruslan Kuprieiev
2018-08-28 12:45:06 +03:00
committed by GitHub
4 changed files with 66 additions and 13 deletions
+19 -13
View File
@@ -20,7 +20,7 @@ class CmdPipelineShow(CmdBase):
self.project.logger.info(stages[n].cmd)
elif outs:
for out in stages[n].outs:
self.project.logger.info(out.rel_path)
self.project.logger.info(str(out))
else:
self.project.logger.info(n)
@@ -38,32 +38,38 @@ class CmdPipelineShow(CmdBase):
G = pipelines[0]
stages = networkx.get_node_attributes(G, 'stage')
nodes = set()
nodes = []
for n in G.nodes():
stage = stages[n]
if commands:
if stage.cmd is None:
continue
nodes.append(stage.cmd)
elif outs:
for out in stage.outs:
nodes.append(str(out))
else:
nodes.append(stage.relpath)
if len(nodes) == 0:
return
edges = []
for e in G.edges():
from_stage = stages[e[0]]
to_stage = stages[e[1]]
if commands:
nodes.add(from_stage.cmd)
if to_stage.cmd is None:
continue
nodes.add(to_stage.cmd)
edges.append((from_stage.cmd, to_stage.cmd))
elif outs:
for from_out in from_stage.outs:
for to_out in to_stage.outs:
nodes.add(from_out.rel_path)
nodes.add(to_out.rel_path)
edges.append((from_out.rel_path,
to_out.rel_path))
edges.append((str(from_out),
str(to_out)))
else:
nodes.add(from_stage.relpath)
nodes.add(to_stage.relpath)
edges.append((from_stage.relpath, to_stage.relpath))
nodes = list(nodes)
assert len(nodes) > 0
d = Dagascii(nodes, edges)
d.draw()
+3
View File
@@ -31,6 +31,9 @@ class DependencyBase(object):
self.project = stage.project
self.path = path
def __str__(self):
return self.path
@classmethod
def match(cls, url):
return re.match(cls.REGEX, url)
+3
View File
@@ -38,6 +38,9 @@ class DependencyLOCAL(DependencyBase):
self.path_info = {'scheme': 'local',
'path': self.path}
def __str__(self):
return self.rel_path
@property
def sep(self):
return os.sep
+41
View File
@@ -1,8 +1,49 @@
from dvc.main import main
from tests.basic_env import TestDvc
from tests.test_repro import TestRepro, TestReproChangedDeepData
class TestPipelineShowSingle(TestDvc):
def setUp(self):
super(TestPipelineShowSingle, self).setUp()
self.stage = 'foo.dvc'
ret = main(['add', self.FOO])
self.assertEqual(ret, 0)
def test(self):
ret = main(['pipeline', 'show', self.stage])
self.assertEqual(ret, 0)
def test_commands(self):
ret = main(['pipeline', 'show', self.stage, '--commands'])
self.assertEqual(ret, 0)
def test_outs(self):
ret = main(['pipeline', 'show', self.stage, '--outs'])
self.assertEqual(ret, 0)
def test_ascii(self):
ret = main(['pipeline', 'show', '--ascii', self.stage])
self.assertEqual(ret, 0)
def test_ascii_commands(self):
ret = main(['pipeline', 'show', '--ascii', self.stage, '--commands'])
self.assertEqual(ret, 0)
def test_ascii_outs(self):
ret = main(['pipeline', 'show', '--ascii', self.stage, '--outs'])
self.assertEqual(ret, 0)
def test_not_dvc_file(self):
ret = main(['pipeline', 'show', self.FOO])
self.assertNotEqual(ret, 0)
def test_non_existing(self):
ret = main(['pipeline', 'show', 'non-existing'])
self.assertNotEqual(ret, 0)
class TestPipelineShow(TestRepro):
def test(self):
ret = main(['pipeline', 'show', self.file1_stage])