diff --git a/dvc/command/metrics.py b/dvc/command/metrics.py index e12210688..6da22b7c8 100644 --- a/dvc/command/metrics.py +++ b/dvc/command/metrics.py @@ -5,15 +5,16 @@ from dvc.exceptions import DvcException from dvc.command.base import CmdBase, fix_subparsers +def show_metrics(metrics, all_branches=False, all_tags=False): + for branch, val in metrics.items(): + if all_branches or all_tags: + logger.info("{}:".format(branch)) + + for fname, metric in val.items(): + logger.info("\t{}: {}".format(fname, metric)) + + class CmdMetricsShow(CmdBase): - def _show(self, metrics): - for branch, val in metrics.items(): - if self.args.all_branches or self.args.all_tags: - logger.info("{}:".format(branch)) - - for fname, metric in val.items(): - logger.info("\t{}: {}".format(fname, metric)) - def run(self): typ = self.args.type xpath = self.args.xpath @@ -27,7 +28,7 @@ class CmdMetricsShow(CmdBase): recursive=self.args.recursive, ) - self._show(metrics) + show_metrics(metrics, self.args.all_branches, self.args.all_tags) except DvcException: logger.error("failed to show metrics") return 1 diff --git a/dvc/command/repro.py b/dvc/command/repro.py index b9203ffad..20ed4a5b6 100644 --- a/dvc/command/repro.py +++ b/dvc/command/repro.py @@ -4,6 +4,7 @@ import os import dvc.logger as logger from dvc.command.base import CmdBase +from dvc.command.metrics import show_metrics from dvc.command.status import CmdDataStatus from dvc.exceptions import DvcException @@ -40,7 +41,8 @@ class CmdRepro(CmdBase): logger.info(CmdDataStatus.UP_TO_DATE_MSG) if self.args.metrics: - self.repo.metrics.show() + metrics = self.repo.metrics.show() + show_metrics(metrics) except DvcException: logger.error() ret = 1 diff --git a/tests/test_repro.py b/tests/test_repro.py index cd5109737..18551c5e3 100644 --- a/tests/test_repro.py +++ b/tests/test_repro.py @@ -1,3 +1,4 @@ +from dvc.logger import logger from dvc.utils.compat import str import os @@ -32,8 +33,10 @@ from tests.basic_env import TestDvc from tests.test_data_cloud import _should_test_aws, TEST_AWS_REPO_BUCKET from tests.test_data_cloud import _should_test_gcp, TEST_GCP_REPO_BUCKET from tests.test_data_cloud import _should_test_ssh, _should_test_hdfs +from tests.utils import reset_logger_standard_output from tests.utils.httpd import StaticFileServer from mock import patch +from tests.utils.logger import MockLoggerHandlers class TestRepro(TestDvc): @@ -1375,3 +1378,37 @@ class TestReproAlreadyCached(TestRepro): self.assertEqual(ret, 0) self.assertEqual(mock_download.call_count, 1) self.assertEqual(mock_checkout.call_count, 0) + + +class TestShouldDisplayMetricsOnReproWithMetricsOption(TestDvc): + def test(self): + metrics_file = "metrics_file" + metrics_value = 0.123489015 + ret = main( + [ + "run", + "-m", + metrics_file, + "echo {} >> {}".format(metrics_value, metrics_file), + ] + ) + self.assertEqual(0, ret) + + with MockLoggerHandlers(logger): + reset_logger_standard_output() + ret = main( + [ + "repro", + "--force", + "--metrics", + metrics_file + Stage.STAGE_FILE_SUFFIX, + ] + ) + self.assertEqual(0, ret) + + expected_metrics_display = "{}: {}".format( + metrics_file, metrics_value + ) + self.assertIn( + expected_metrics_display, logger.handlers[0].stream.getvalue() + )