pipeline: process edges and nodes separately

Signed-off-by: Ruslan Kuprieiev <[email protected]>
This commit is contained in:
Ruslan Kuprieiev
2018-08-28 11:36:06 +03:00
parent 825da210cf
commit 55b3c47bbf
2 changed files with 57 additions and 10 deletions
+16 -10
View File
@@ -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(str(from_out))
nodes.add(str(to_out))
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()
+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])