mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-02 07:18:25 +01:00
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:
+3
-8
@@ -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
@@ -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 {}
|
||||
|
||||
@@ -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() == {}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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"]],
|
||||
),
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user