ui: migrate checkout to ui.write (#6028)

This commit is contained in:
Saugat Pachhai
2021-05-18 13:55:11 +02:00
committed by GitHub
parent 9a5b7251b3
commit 789faa4f11
4 changed files with 31 additions and 44 deletions
+4 -13
View File
@@ -1,5 +1,4 @@
import argparse
import logging
import operator
import colorama
@@ -7,8 +6,7 @@ import colorama
from dvc.command import completion
from dvc.command.base import CmdBase, append_doc_link
from dvc.exceptions import CheckoutError
logger = logging.getLogger(__name__)
from dvc.ui import ui
def log_changes(stats):
@@ -24,16 +22,9 @@ def log_changes(stats):
if not entries:
continue
nc = colorama.Fore.RESET
for entry in entries:
logger.info(
"{color}{state}{nc}{spacing}{entry}".format(
color=color,
state=state[0].upper(),
nc=colorama.Fore.RESET,
spacing="\t",
entry=entry,
)
)
ui.write(f"{color}{state[0].upper()}{nc}", entry, sep="\t")
class CmdCheckout(CmdBase):
@@ -58,7 +49,7 @@ class CmdCheckout(CmdBase):
msg = get_summary(
sorted(stats.items(), key=operator.itemgetter(0))
)
logger.info(msg or default_message)
ui.write(msg or default_message)
else:
log_changes(stats)
+11 -16
View File
@@ -26,6 +26,7 @@ from dvc.utils import relpath
from dvc.utils.fs import remove, walk_files
from dvc.utils.serialize import dump_yaml, load_yaml
from tests.basic_env import TestDvc, TestDvcGit
from tests.func.parsing.test_errors import escape_ansi
from tests.func.test_repro import TestRepro
logger = logging.getLogger("dvc")
@@ -676,7 +677,7 @@ def test_stats_on_removed_file_from_tracked_dir(tmp_dir, dvc, scm):
def test_stats_on_show_changes_does_not_show_summary(
tmp_dir, dvc, scm, caplog
tmp_dir, dvc, scm, capsys
):
tmp_dir.dvc_gen(
{"dir": {"subdir": {"file": "file"}}, "other": "other"},
@@ -684,29 +685,23 @@ def test_stats_on_show_changes_does_not_show_summary(
)
scm.checkout("HEAD~")
with caplog.at_level(logging.INFO, logger="dvc"):
caplog.clear()
assert main(["checkout"]) == 0
for out in ["D\tdir" + os.sep, "D\tother"]:
assert out in caplog.text
assert "modified" not in caplog.text
assert "deleted" not in caplog.text
assert "added" not in caplog.text
assert main(["checkout"]) == 0
out, _ = capsys.readouterr()
assert escape_ansi(out).splitlines() == [f"D\tdir{os.sep}", "D\tother"]
def test_stats_does_not_show_changes_by_default(tmp_dir, dvc, scm, caplog):
def test_stats_does_not_show_changes_by_default(tmp_dir, dvc, scm, capsys):
tmp_dir.dvc_gen(
{"dir": {"subdir": {"file": "file"}}, "other": "other"},
commit="initial",
)
scm.checkout("HEAD~")
with caplog.at_level(logging.INFO, logger="dvc"):
caplog.clear()
assert main(["checkout", "--summary"]) == 0
assert "2 files deleted" in caplog.text
assert "dir" not in caplog.text
assert "other" not in caplog.text
assert main(["checkout", "--summary"]) == 0
out, _ = capsys.readouterr()
assert "2 files deleted" == out.rstrip()
@pytest.mark.parametrize("link", ["hardlink", "symlink", "copy"])
+9 -6
View File
@@ -18,6 +18,7 @@ from dvc.remote.base import (
from dvc.stage.exceptions import StageNotFound
from dvc.utils.fs import move, remove
from dvc.utils.serialize import dump_yaml, load_yaml
from tests.func.parsing.test_errors import escape_ansi
all_clouds = [
pytest.lazy_fixture(cloud)
@@ -484,16 +485,18 @@ def test_fetch_stats(tmp_dir, dvc, fs, msg, caplog, local_remote):
assert msg in caplog.text
def test_pull_stats(tmp_dir, dvc, caplog, local_remote):
def test_pull_stats(tmp_dir, dvc, capsys, caplog, local_remote):
tmp_dir.dvc_gen({"foo": "foo", "bar": "bar"})
dvc.push()
clean(["foo", "bar"], dvc)
(tmp_dir / "bar").write_text("foobar")
caplog.clear()
with caplog.at_level(level=logging.INFO, logger="dvc"):
main(["pull", "--force"])
assert "M\tbar" in caplog.text
assert "A\tfoo" in caplog.text
assert main(["pull", "--force"]) == 0
out, _ = capsys.readouterr()
out = escape_ansi(out)
assert "M\tbar" in out
assert "A\tfoo" in out
assert "2 files fetched" in caplog.text
assert "1 file added" in caplog.text
assert "1 file modified" in caplog.text
+7 -9
View File
@@ -1,7 +1,6 @@
import logging
from dvc.cli import parse_args
from dvc.command.checkout import CmdCheckout, log_changes
from tests.func.parsing.test_errors import escape_ansi
def test_checkout(tmp_dir, dvc, mocker):
@@ -23,7 +22,7 @@ def test_checkout(tmp_dir, dvc, mocker):
)
def test_log_changes(caplog):
def test_log_changes(capsys):
stats = {
"added": ["file1", "dir1/"],
"deleted": ["dir2/"],
@@ -33,12 +32,11 @@ def test_log_changes(caplog):
from itertools import zip_longest
def _assert_output(stats, expected_outs):
with caplog.at_level(logging.INFO, logger="dvc"):
caplog.clear()
log_changes(stats)
actual_output = caplog.text.splitlines()
for out, line in zip_longest(expected_outs, actual_output):
assert out in line
log_changes(stats)
out, _ = capsys.readouterr()
actual_output = escape_ansi(out).splitlines()
for out, line in zip_longest(expected_outs, actual_output):
assert out in line
_assert_output(stats, ["M\tfile2", "A\tfile1", "A\tdir1/", "D\tdir2/"])