diff: make output consistent with other diff commands (#3727)

* diff: make output consistent with other diff commands

Fixes #3435

* tests: plot: fix flaky test
This commit is contained in:
Ruslan Kuprieiev
2020-05-04 00:25:55 +03:00
committed by GitHub
parent 415a85c6be
commit 505b88afae
5 changed files with 38 additions and 10 deletions
+3 -8
View File
@@ -97,20 +97,15 @@ class CmdDiff(CmdBase):
try:
diff = self.repo.diff(self.args.a_rev, self.args.b_rev)
if not any(diff.values()):
return 0
if not self.args.show_hash:
for _, entries in diff.items():
for entry in entries:
del entry["hash"]
if self.args.show_json:
res = json.dumps(diff)
else:
res = self._format(diff)
logger.info(res)
logger.info(json.dumps(diff))
elif diff:
logger.info(self._format(diff))
except DvcException:
logger.exception("failed to get diff")
+3 -1
View File
@@ -71,7 +71,7 @@ def diff(self, a_rev="HEAD", b_rev=None):
deleted = sorted(set(old) - set(new))
modified = sorted(set(old) & set(new))
return {
ret = {
"added": [{"path": path, "hash": new[path]} for path in added],
"deleted": [{"path": path, "hash": old[path]} for path in deleted],
"modified": [
@@ -80,3 +80,5 @@ def diff(self, a_rev="HEAD", b_rev=None):
if old[path] != new[path]
],
}
return ret if any(ret.values()) else {}
+5
View File
@@ -209,3 +209,8 @@ def test_diff_dirty(tmp_dir, scm, dvc):
}
],
}
def test_no_changes(tmp_dir, scm, dvc):
tmp_dir.dvc_gen("file", "first", commit="add a file")
assert dvc.diff() == {}
+24
View File
@@ -1,5 +1,6 @@
import collections
import os
import logging
from dvc.cli import parse_args
@@ -86,3 +87,26 @@ def test_show_json_and_hash(mocker, caplog):
assert '"added": [{"path": "file", "hash": "00000000"}]' in caplog.text
assert '"deleted": []' in caplog.text
assert '"modified": []' in caplog.text
def test_no_changes(mocker, caplog):
args = parse_args(["diff", "--show-json"])
cmd = args.func(args)
mocker.patch("dvc.repo.Repo.diff", return_value={})
def info():
return [
msg
for name, level, msg in caplog.record_tuples
if name.startswith("dvc") and level == logging.INFO
]
assert 0 == cmd.run()
assert ["{}"] == info()
caplog.clear()
args = parse_args(["diff"])
cmd = args.func(args)
assert 0 == cmd.run()
assert not info()
+3 -1
View File
@@ -1,3 +1,5 @@
from collections import OrderedDict
import pytest
from dvc.repo.plot.data import _apply_path, _lists, _find_data
@@ -26,7 +28,7 @@ def test_parse_json(path, expected_result):
({}, []),
({"x": ["a", "b", "c"]}, [["a", "b", "c"]]),
(
{"x": {"y": ["a", "b"]}, "z": {"w": ["c", "d"]}},
OrderedDict([("x", {"y": ["a", "b"]}), ("z", {"w": ["c", "d"]})]),
[["a", "b"], ["c", "d"]],
),
],