Define max limit to commits per graph node

This commit is contained in:
Dmitry
2017-09-18 05:09:29 -07:00
parent 9436430040
commit bb9de4b691
5 changed files with 34 additions and 19 deletions
+7 -1
View File
@@ -15,7 +15,6 @@ from dvc.command.show_workflow import CmdShowWorkflow
from dvc.command.instance_create import CmdInstanceCreate
from dvc.command.config import CmdConfig
from dvc.command.show_pipeline import CmdShowPipeline
from dvc.config import Config
from dvc import VERSION
@@ -399,6 +398,13 @@ def parse_args(argv=None):
action='store_true',
default=False,
help='Show all commits')
workflow_parser.add_argument(
'-m',
'--max-commits',
metavar='M',
type=int,
default=4,
help='Max commits per graph vertex. 4 by default.')
workflow_parser.set_defaults(func=CmdShowWorkflow)
+3 -1
View File
@@ -15,7 +15,9 @@ class CmdShowWorkflow(CmdBase):
Logger.debug(u'Set show workflow target as {}'.format(target))
wf = self.git.get_all_commits(target, self.settings)
wf.build_graph(self.settings.parsed_args.dvc_commits, self.settings.parsed_args.all_commits)
wf.build_graph(self.settings.parsed_args.dvc_commits,
self.settings.parsed_args.all_commits,
self.settings.parsed_args.max_commits)
return 0
@property
+12 -5
View File
@@ -38,13 +38,12 @@ class Commit(object):
self._collapsed_commits.append(commit)
self._collapsed_commits += commit._collapsed_commits
@property
def text(self):
def text(self, max_commits=None):
branch_text = ''
if self._branch_tips:
branch_text = 'BRANCH TIPS: {}\n'.format(', '.join(self._branch_tips))
return self._text_metrics_line() + branch_text + self._comments_text
return self._text_metrics_line() + branch_text + self._comments_text(max_commits)
@staticmethod
def _text_comment(commit):
@@ -61,8 +60,7 @@ class Commit(object):
else:
return comment[:Commit.TEXT_LIMIT-3] + '...'
@property
def _comments_text(self):
def _comments_text(self, max_commits):
res = []
if not self.is_repro:
res.append(self._text_comment(self))
@@ -74,8 +72,17 @@ class Commit(object):
if len(res) == 0:
return self._text_comment(self)
was_collapsed = False
if max_commits:
was_collapsed = len(res) > max_commits
res = res[:max_commits]
max_len = max(map(lambda x: len(x), res))
res_extended_len = map(lambda x: x.ljust(max_len), res)
if was_collapsed:
res_extended_len.append('<<Collapsed commits>>')
return '\n'.join(res_extended_len)
def _text_metrics_line(self):
+2 -2
View File
@@ -104,7 +104,7 @@ class Workflow(object):
return []
return [self._commits[h] for h in self._edges[hash]]
def build_graph(self, show_dvc_commits, show_all_commits):
def build_graph(self, show_dvc_commits, show_all_commits, max_commits):
self.modify_workflow(show_all_commits, show_dvc_commits)
g = nx.DiGraph(name='DVC Workflow', directed=False)
@@ -114,7 +114,7 @@ class Workflow(object):
g.add_node(hash,
attr_dict={
'label': commit.text,
'label': commit.text(max_commits),
'color': self.node_color(commit)
}
)
+10 -10
View File
@@ -35,10 +35,10 @@ class TestWorkflow(TestCase):
self.assertEqual(len(wf._commits), 4)
self.assertEqual(wf._commits['1'].text, self._showed_text1)
self.assertEqual(wf._commits['2'].text, self._showed_text2)
self.assertEqual(wf._commits['3'].text, self._showed_text3)
self.assertEqual(wf._commits['4'].text, self._showed_text4)
self.assertEqual(wf._commits['1'].text(), self._showed_text1)
self.assertEqual(wf._commits['2'].text(), self._showed_text2)
self.assertEqual(wf._commits['3'].text(), self._showed_text3)
self.assertEqual(wf._commits['4'].text(), self._showed_text4)
pass
def collapse_test(self):
@@ -51,8 +51,8 @@ class TestWorkflow(TestCase):
wf.collapse_commits(CollapseDvcReproCommitsStrategy(wf))
self.assertEqual(len(wf._commits), 3)
self.assertEqual(wf._commits[self._commit1.hash].text, self._showed_text1)
self.assertEqual(wf._commits[self._commit3.hash].text, self._showed_text3_collapsed)
self.assertEqual(wf._commits[self._commit1.hash].text(), self._showed_text1)
self.assertEqual(wf._commits[self._commit3.hash].text(), self._showed_text3_collapsed)
self.assertTrue('2' not in wf._commits)
self.assertFalse('2' in wf._edges)
@@ -69,8 +69,8 @@ class TestWorkflow(TestCase):
wf.collapse_commits(CollapseDvcReproCommitsStrategy(wf))
self.assertEqual(len(wf._commits), 2)
self.assertEqual(wf._commits[self._commit1.hash].text, self._showed_text1)
self.assertEqual(wf._commits[self._commit3.hash].text, self._showed_text3)
self.assertEqual(wf._commits[self._commit1.hash].text(), self._showed_text1)
self.assertEqual(wf._commits[self._commit3.hash].text(), self._showed_text3)
self.assertTrue('2' not in wf._commits)
pass
@@ -137,8 +137,8 @@ class TestWorkflow(TestCase):
self.assertEqual(len(wf._commits), 2)
def is_collapsed_commit_presented(self, commit, collapsed_commit):
self.assertTrue('[' + collapsed_commit.hash + ']' in commit.text)
self.assertTrue(collapsed_commit._comment in commit.text)
self.assertTrue('[' + collapsed_commit.hash + ']' in commit.text())
self.assertTrue(collapsed_commit._comment in commit.text())
is_collapsed_commit_presented(self, wf._commits['3'], metric_commit3)
is_collapsed_commit_presented(self, wf._commits['3'], not_metric_commit2)