mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-09 23:10:24 +01:00
Define max limit to commits per graph node
This commit is contained in:
+7
-1
@@ -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)
|
||||
|
||||
|
||||
@@ -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
@@ -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):
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user