diff --git a/dvc/cli.py b/dvc/cli.py index 42d502176..a86ee86f8 100644 --- a/dvc/cli.py +++ b/dvc/cli.py @@ -11,14 +11,16 @@ from dvc.command.data_sync import CmdDataSync, CmdDataPush, CmdDataPull, CmdData from dvc.command.lock import CmdLock from dvc.command.gc import CmdGC from dvc.command.import_file import CmdImportFile +from dvc.command.show_workflow import CmdShowWorkflow from dvc.command.target import CmdTarget from dvc.command.instance_create import CmdInstanceCreate from dvc.command.config import CmdConfig -from dvc.command.show import CmdShow +from dvc.command.show_pipeline import CmdShowPipeline from dvc.command.test import CmdTest from dvc.config import Config from dvc import VERSION + def parse_args(argv=None): # Common args parent_parser = argparse.ArgumentParser(add_help=False) @@ -398,17 +400,29 @@ def parse_args(argv=None): show_parser = subparsers.add_parser( 'show', parents=[parent_parser], - help='Create a dependency graph for data') - show_parser.add_argument( + help='Show graphs') + show_subparsers = show_parser.add_subparsers( + dest='cmd', + help='Use `dvc show CMD` --help for command-specific help') + pipeline_parser = show_subparsers.add_parser( + 'pipeline', + parents=[parent_parser], + help='Show pipeline image') + pipeline_parser.add_argument( 'target', nargs='*', - help='Target data') - show_parser.add_argument('-w', - '--workflow', - action='store_true', - default=False, - help='Show workflow') - show_parser.set_defaults(func=CmdShow) + help='Target data directory') + pipeline_parser.set_defaults(func=CmdShowPipeline) + + workflow_parser = show_subparsers.add_parser( + 'workflow', + parents=[parent_parser], + help='Show workflow image') + workflow_parser.add_argument( + 'target', + nargs='?', + help='Target metric data file') + workflow_parser.set_defaults(func=CmdShowWorkflow) if isinstance(argv, str): argv = argv.split() diff --git a/dvc/command/show_pipeline.py b/dvc/command/show_pipeline.py index 5bc5ac70b..8184e66cc 100644 --- a/dvc/command/show_pipeline.py +++ b/dvc/command/show_pipeline.py @@ -2,15 +2,13 @@ import os import networkx as nx from dvc.command.traverse import Traverse -from dvc.command.init import CmdInit - from dvc.logger import Logger from dvc.state_file import StateFile -class CmdShow(Traverse): +class CmdShowPipeline(Traverse): def __init__(self, settings): - super(CmdShow, self).__init__(settings, "collect", do_not_start_from_root=False) + super(CmdShowPipeline, self).__init__(settings, "collect", do_not_start_from_root=False) self.g = nx.DiGraph() self.subs = [] @@ -48,35 +46,10 @@ class CmdShow(Traverse): return 0 def run(self): - if self.parsed_args.workflow: - # Workflow - target = self.settings.parsed_args.target - if not target: - target = self.settings.config.target_file - - if not os.path.exists(target): - Logger.warn(u'Target is not defined: use empty target') - target = '' - else: - target = open(target).read() - Logger.debug(u'Set show workflow target as {}'.format(target)) - - if type(target) is list: - if len(target) != 1: - msg = 'Only one target is expected for show workflow command. Target: {}' - Logger.error(msg.format(target)) - return 1 - - target = target[0] - - wf = self.git.get_all_commits(target, self.settings) - wf.build_graph() - return - saved_targets = self.settings.parsed_args.target self.settings.parsed_args.target = [self.settings.config.data_dir] - ret = super(CmdShow, self).run() + ret = super(CmdShowPipeline, self).run() self.settings.parsed_args.target = saved_targets diff --git a/dvc/command/show_workflow.py b/dvc/command/show_workflow.py new file mode 100644 index 000000000..83ed1d163 --- /dev/null +++ b/dvc/command/show_workflow.py @@ -0,0 +1,33 @@ +import os + +from dvc.command.base import CmdBase +from dvc.logger import Logger + + +class CmdShowWorkflow(CmdBase): + def __init__(self, settings): + super(CmdShowWorkflow, self).__init__(settings) + + def run(self): + target = self.settings.parsed_args.target + if not target: + target = self.settings.config.target_file + + if not os.path.exists(target): + Logger.warn(u'Target is not defined: use empty target') + target = '' + else: + target = open(target).read() + Logger.debug(u'Set show workflow target as {}'.format(target)) + + wf = self.git.get_all_commits(target, self.settings) + wf.build_graph() + return 0 + + @property + def no_git_actions(self): + return True + + @staticmethod + def not_committed_changes_warning(): + pass