Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 15 additions & 6 deletions dvc/repo/brancher.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion dvc/scm/git/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
21 changes: 19 additions & 2 deletions tests/func/test_metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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"]},
},
)

Expand All @@ -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"]},
},
)

Expand Down