diff --git a/dvc/dagascii.py b/dvc/dagascii.py index 240bdc37b..a686392f8 100644 --- a/dvc/dagascii.py +++ b/dvc/dagascii.py @@ -31,13 +31,22 @@ def find_pager(): if not sys.stdout.isatty(): return pydoc.plainpager - if os.system("({}) 2>{}".format(DEFAULT_PAGER, os.devnull)) == 0: - pager_cmd = os.getenv(DVC_PAGER, DEFAULT_PAGER_FORMATTED) + env_pager = os.getenv(DVC_PAGER) + if env_pager: - def less_pager(text): - return pydoc.tempfilepager(pydoc.plain(text), pager_cmd) + def user_pager(text): + return pydoc.tempfilepager(pydoc.plain(text), env_pager) - return less_pager + return user_pager + else: + if os.system("({}) 2>{}".format(DEFAULT_PAGER, os.devnull)) == 0: + + def less_pager(text): + return pydoc.tempfilepager( + pydoc.plain(text), DEFAULT_PAGER_FORMATTED + ) + + return less_pager logger.warning( "Unable to find `less` in the PATH. Check out " diff --git a/tests/unit/test_dagascii.py b/tests/unit/test_dagascii.py new file mode 100644 index 000000000..dec837006 --- /dev/null +++ b/tests/unit/test_dagascii.py @@ -0,0 +1,28 @@ +import mock +import os + +from dvc import dagascii +from dvc.env import DVC_PAGER + + +def test_less_pager_returned_when_less_found(): + with mock.patch.object(os, "system") as m: + m.return_value = 0 + pager = dagascii.find_pager() + + assert pager.__name__ == "less_pager" + + +def test_plainpager_returned_when_less_missing(): + with mock.patch.object(os, "system") as m: + m.return_value = 1 # any non-zero value + pager = dagascii.find_pager() + + assert pager.__name__ == "plainpager" + + +def test_tempfilepager_returned_when_var_defined(): + os.environ[DVC_PAGER] = dagascii.DEFAULT_PAGER + pager = dagascii.find_pager() + + assert pager.__name__ == "user_pager"