mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-10 15:28:34 +01:00
diff: analyse working tree when dirty (#3534)
This commit is contained in:
+15
-1
@@ -3,6 +3,7 @@ import os
|
||||
from dvc.exceptions import DvcException
|
||||
from dvc.repo import locked
|
||||
from dvc.scm.git import Git
|
||||
from dvc.scm.tree import is_working_tree
|
||||
|
||||
|
||||
@locked
|
||||
@@ -36,10 +37,23 @@ def diff(self, a_rev="HEAD", b_rev=None):
|
||||
else os.path.join(str(output), "")
|
||||
)
|
||||
|
||||
on_working_tree = is_working_tree(self.tree)
|
||||
|
||||
def _to_checksum(output):
|
||||
if on_working_tree:
|
||||
return self.cache.local.get_checksum(output.path_info)
|
||||
return output.checksum
|
||||
|
||||
def _exists(output):
|
||||
if on_working_tree:
|
||||
return output.exists
|
||||
return True
|
||||
|
||||
return {
|
||||
_to_path(output): output.checksum
|
||||
_to_path(output): _to_checksum(output)
|
||||
for stage in self.stages
|
||||
for output in stage.outs
|
||||
if _exists(output)
|
||||
}
|
||||
|
||||
working_tree = self.tree
|
||||
|
||||
+36
-6
@@ -159,21 +159,51 @@ def test_directories(tmp_dir, scm, dvc):
|
||||
|
||||
|
||||
def test_diff_no_cache(tmp_dir, scm, dvc):
|
||||
(stage,) = tmp_dir.dvc_gen(
|
||||
{"dir": {"file": "file content"}}, commit="first"
|
||||
)
|
||||
tmp_dir.dvc_gen({"dir": {"file": "file content"}}, commit="first")
|
||||
scm.tag("v1")
|
||||
|
||||
tmp_dir.dvc_gen(
|
||||
{"dir": {"file": "modified file content"}}, commit="second"
|
||||
)
|
||||
scm.tag("v2")
|
||||
|
||||
remove(first(stage.outs).cache_path)
|
||||
remove("dir")
|
||||
remove(dvc.cache.local.cache_dir)
|
||||
|
||||
# invalidate_dir_info to force cache loading
|
||||
dvc.cache.local._dir_info = {}
|
||||
|
||||
diff = dvc.diff("v1")
|
||||
diff = dvc.diff("v1", "v2")
|
||||
assert diff["added"] == []
|
||||
assert diff["deleted"] == []
|
||||
assert first(diff["modified"])["path"] == os.path.join("dir", "")
|
||||
|
||||
|
||||
def test_diff_dirty(tmp_dir, scm, dvc):
|
||||
tmp_dir.dvc_gen(
|
||||
{"file": "file_content", "dir": {"dir_file1": "dir file content"}},
|
||||
commit="initial",
|
||||
)
|
||||
|
||||
(tmp_dir / "file").unlink()
|
||||
tmp_dir.gen({"dir": {"dir_file2": "dir file 2 content"}})
|
||||
tmp_dir.dvc_gen("new_file", "new_file_content")
|
||||
|
||||
result = dvc.diff()
|
||||
|
||||
assert result == {
|
||||
"added": [
|
||||
{"hash": "86d049de17c76ac44cdcac146042ec9b", "path": "new_file"}
|
||||
],
|
||||
"deleted": [
|
||||
{"hash": "7f0b6bb0b7e951b7fd2b2a4a326297e1", "path": "file"}
|
||||
],
|
||||
"modified": [
|
||||
{
|
||||
"hash": {
|
||||
"new": "38175ad60f0e58ac94e0e2b7688afd81.dir",
|
||||
"old": "92daf39af116ca2fb245acaeb2ae65f7.dir",
|
||||
},
|
||||
"path": os.path.join("dir", ""),
|
||||
}
|
||||
],
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user