From 54713366f8a0e17273d84c43563708c541d4cc7f Mon Sep 17 00:00:00 2001 From: Alexander Schepanovski Date: Fri, 27 Dec 2019 17:41:55 +0700 Subject: [PATCH] ui: don't show working tree if it is clean --- dvc/repo/brancher.py | 21 +++++++++++++++------ dvc/scm/git/__init__.py | 2 +- tests/func/test_metrics.py | 21 +++++++++++++++++++-- 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/dvc/repo/brancher.py b/dvc/repo/brancher.py index acca98c2c2..83642d66fb 100644 --- a/dvc/repo/brancher.py +++ b/dvc/repo/brancher.py @@ -30,15 +30,24 @@ def brancher( # noqa: E302 return saved_tree = self.tree - revs = [] + revs = set() scm = self.scm - self.tree = WorkingTree(self.root_dir) - yield "working tree" + if scm.is_dirty(): + self.tree = WorkingTree(self.root_dir) + yield "working tree" + else: + # If the working tree is clean then we add current branch or head. + # This will be deduped with whatever is collected later. + try: + revs.add(scm.active_branch()) + except TypeError: + # A detached head + revs.add("HEAD") if all_commits: - revs = scm.list_all_commits() + revs.update(scm.list_all_commits()) else: if all_branches: branches = scm.list_branches() @@ -47,10 +56,10 @@ def brancher( # noqa: E302 tags = scm.list_tags() if branches is not None: - revs.extend(branches) + revs.update(branches) if tags is not None: - revs.extend(tags) + revs.update(tags) # NOTE: it might be a good idea to wrap this loop in try/finally block # to don't leave the tree on some unexpected branch after the diff --git a/dvc/scm/git/__init__.py b/dvc/scm/git/__init__.py index 668dc6fd57..21c14cdaf3 100644 --- a/dvc/scm/git/__init__.py +++ b/dvc/scm/git/__init__.py @@ -236,7 +236,7 @@ def is_tracked(self, path): return path in [i[0] for i in self.repo.index.entries] def is_dirty(self): - return self.repo.is_dirty() + return self.repo.is_dirty(untracked_files=True) def active_branch(self): return self.repo.active_branch.name diff --git a/tests/func/test_metrics.py b/tests/func/test_metrics.py index c92ad9b81c..1d065e0cc1 100644 --- a/tests/func/test_metrics.py +++ b/tests/func/test_metrics.py @@ -83,6 +83,25 @@ def setUp(self): self.dvc.scm.checkout("master") +def test_show_dirty(tmp_dir, scm, dvc): + tmp_dir.gen("metric", "master") + dvc.run(metrics_no_cache=["metric"], overwrite=True) + tmp_dir.scm_add(["metric", "metric.dvc"], commit="add metric") + + tmp_dir.gen("metric", "dirty") + + assert dvc.metrics.show(["metric"]) == {"": {"metric": "dirty"}} + + assert dvc.metrics.show(["metric"], all_branches=True) == { + "working tree": {"metric": "dirty"}, + "master": {"metric": "master"}, + } + + assert dvc.metrics.show(["metric"], all_tags=True) == { + "working tree": {"metric": "dirty"} + } + + class TestMetrics(TestMetricsBase): def test_show(self): ret = self.dvc.metrics.show(["metric"], all_branches=True) @@ -708,7 +727,6 @@ def _test_metrics(self, func): "master": {"metrics.json": ["master"]}, "one": {"metrics.json": ["one"]}, "two": {"metrics.json": ["two"]}, - "working tree": {"metrics.json": ["two"]}, }, ) @@ -722,7 +740,6 @@ def _test_metrics(self, func): "master": {"metrics.json": ["master"]}, "one": {"metrics.json": ["one"]}, "two": {"metrics.json": ["two"]}, - "working tree": {"metrics.json": ["two"]}, }, )