dvc: fix --quiet mode (#4304)

Part of the issue is a bug from #3806

Kudos to @karajan1001 for finding this bug while working on #4282
This commit is contained in:
Ruslan Kuprieiev
2020-07-30 06:04:41 +03:00
committed by GitHub
parent 2f48bb4089
commit 815444ffdc
2 changed files with 43 additions and 35 deletions
+21 -19
View File
@@ -21,7 +21,7 @@ from dvc.utils import format_link
logger = logging.getLogger("dvc")
def main(argv=None):
def main(argv=None): # noqa: C901
"""Run dvc CLI command.
Args:
@@ -37,16 +37,17 @@ def main(argv=None):
try:
args = parse_args(argv)
verbosity = args.verbose - args.quiet
if verbosity:
logger.setLevel(
{
-2: logging.CRITICAL,
-1: logging.ERROR,
1: logging.DEBUG,
2: logging.TRACE,
}[max(-2, min(verbosity, 2))]
)
level = None
if args.quiet:
level = logging.CRITICAL
elif args.verbose == 1:
level = logging.DEBUG
elif args.verbose > 1:
level = logging.TRACE
if level is not None:
logger.setLevel(level)
logger.trace(args)
cmd = args.func(args)
@@ -81,6 +82,15 @@ def main(argv=None):
except Exception: # noqa, pylint: disable=broad-except
logger.exception("unexpected error")
ret = 255
try:
if ret != 0:
logger.info(FOOTER)
if analytics.is_enabled():
analytics.collect_and_send_report(args, ret)
return ret
finally:
logger.setLevel(outerLogLevel)
@@ -92,11 +102,3 @@ def main(argv=None):
# Remove cached repos in the end of the call, these are anonymous
# so won't be reused by any other subsequent run anyway.
clean_repos()
if ret != 0:
logger.info(FOOTER)
if analytics.is_enabled():
analytics.collect_and_send_report(args, ret)
return ret
+22 -16
View File
@@ -1,28 +1,34 @@
import os
from mock import patch
from dvc.main import main
from tests.basic_env import TestDvc
class TestStatus(TestDvc):
def test_quiet(self):
self.dvc.add(self.FOO)
def test_quiet(tmp_dir, dvc, capsys):
tmp_dir.dvc_gen("foo", "foo")
ret = main(["status", "--quiet"])
self.assertEqual(ret, 0)
# clear
capsys.readouterr()
os.remove(self.FOO)
os.rename(self.BAR, self.FOO)
assert main(["status", "--quiet"]) == 0
out_err = capsys.readouterr()
assert not out_err.out
assert not out_err.err
ret = main(["status", "--quiet"])
self.assertEqual(ret, 1)
tmp_dir.gen("foo", "barr")
@patch("dvc.repo.status._cloud_status", return_value=True)
def test_implied_cloud(self, mock_status):
main(["status", "--remote", "something"])
mock_status.assert_called()
assert main(["status", "--quiet"]) == 1
out_err = capsys.readouterr()
assert not out_err.out
assert not out_err.err
def test_implied_cloud(dvc, mocker):
mock_status = mocker.patch(
"dvc.repo.status._cloud_status", return_value=True
)
main(["status", "--remote", "something"])
assert mock_status.called
def test_status_non_dvc_repo_import(tmp_dir, dvc, git_dir):