From 365713e31730387f67ddb2adbe80ef7f80ba9421 Mon Sep 17 00:00:00 2001 From: Sahil Bhosale Date: Thu, 25 Jun 2020 19:54:39 +0530 Subject: [PATCH 1/9] Version: Redesign output format #3499 Redesigned the output format for the command: dvc version --- dvc/command/version.py | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/dvc/command/version.py b/dvc/command/version.py index 02d38e81fb..79a8834d48 100644 --- a/dvc/command/version.py +++ b/dvc/command/version.py @@ -29,11 +29,9 @@ def run(self): info = [ f"DVC version: {__version__}", - f"Python version: {platform.python_version()}", - f"Platform: {platform.platform()}", - f"Binary: {is_binary()}", - f"Package: {PKG}", - f"Supported remotes: {self.get_supported_remotes()}", + "--------------------------------- \n", + f"Build Info: Python {platform.python_version()} on {platform.platform()} installed via {PKG}", + f"Supports: {self.get_supported_remotes()}", ] try: @@ -46,13 +44,11 @@ def run(self): # `dvc config cache.shared group`. if os.path.exists(repo.cache.local.cache_dir): info.append( - "Cache: {}".format(self.get_linktype_support_info(repo)) + "Cache types: " + self.get_linktype_support_info(repo) ) if psutil: fs_type = self.get_fs_type(repo.cache.local.cache_dir) - info.append( - f"Filesystem type (cache directory): {fs_type}" - ) + info.append(f"Directory cache: {fs_type}") else: logger.warning( "Unable to detect supported link types, as cache " @@ -72,7 +68,7 @@ def run(self): if psutil: fs_root = self.get_fs_type(os.path.abspath(root_directory)) - info.append(f"Filesystem type (workspace): {fs_root}") + info.append(f"Workspace with {fs_root}") logger.info("\n".join(info)) return 0 @@ -80,7 +76,7 @@ def run(self): @staticmethod def get_fs_type(path): partition = { - pathlib.Path(part.mountpoint): (part.fstype, part.device) + pathlib.Path(part.mountpoint): (part.fstype + " on " + part.device) for part in psutil.disk_partitions(all=True) } @@ -115,10 +111,12 @@ def get_linktype_support_info(repo): os.unlink(dst) except DvcException: status = "not supported" - cache.append(f"{name} - {status}") + + if status == "supported": + cache.append(f"{name}") os.remove(src) - return ", ".join(cache) + return "/".join(cache) @staticmethod def get_supported_remotes(): @@ -129,7 +127,12 @@ def get_supported_remotes(): if not tree_cls.get_missing_deps(): supported_remotes.append(tree_cls.scheme) - return ", ".join(supported_remotes) + if supported_remotes.__len__() == 9: + return "All remotes" + elif supported_remotes.__len__() == 1: + return supported_remotes + else: + return ", ".join(supported_remotes) def _get_dvc_repo_info(repo): @@ -139,7 +142,7 @@ def _get_dvc_repo_info(repo): if repo.root_dir != repo.scm.root_dir: return "dvc (subdir), git" - return "dvc, git" + return "dvc + git" def add_parser(subparsers, parent_parser): From d68ddb21d4960d7bc57a4efd0be668436adacabc Mon Sep 17 00:00:00 2001 From: Sahil Bhosale Date: Fri, 26 Jun 2020 22:26:25 +0530 Subject: [PATCH 2/9] version: reformat output format #3499 Done some suggested fixes in code for the dvc command output format issue. --- dvc/command/version.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dvc/command/version.py b/dvc/command/version.py index 79a8834d48..d0905e87b3 100644 --- a/dvc/command/version.py +++ b/dvc/command/version.py @@ -10,7 +10,6 @@ from dvc.exceptions import DvcException, NotDvcRepoError from dvc.scm.base import SCMError from dvc.system import System -from dvc.utils import is_binary, relpath from dvc.utils.pkg import PKG from dvc.version import __version__ @@ -30,7 +29,8 @@ def run(self): info = [ f"DVC version: {__version__}", "--------------------------------- \n", - f"Build Info: Python {platform.python_version()} on {platform.platform()} installed via {PKG}", + f"Build Info: Python {platform.python_version()} on " + f"{platform.platform()} installed via {PKG}", f"Supports: {self.get_supported_remotes()}", ] @@ -113,7 +113,7 @@ def get_linktype_support_info(repo): status = "not supported" if status == "supported": - cache.append(f"{name}") + cache.append(name) os.remove(src) return "/".join(cache) @@ -127,9 +127,9 @@ def get_supported_remotes(): if not tree_cls.get_missing_deps(): supported_remotes.append(tree_cls.scheme) - if supported_remotes.__len__() == 9: + if len(supported_remotes) == len(TREES): return "All remotes" - elif supported_remotes.__len__() == 1: + elif len(supported_remotes) == 1: return supported_remotes else: return ", ".join(supported_remotes) From 96add40eb9aa0d50f6e83dba7733b592397014da Mon Sep 17 00:00:00 2001 From: Sahil Bhosale Date: Sat, 27 Jun 2020 08:44:27 +0530 Subject: [PATCH 3/9] version: redesign output format #3499 --- dvc/command/version.py | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/dvc/command/version.py b/dvc/command/version.py index 02d38e81fb..eedc90a1cd 100644 --- a/dvc/command/version.py +++ b/dvc/command/version.py @@ -10,7 +10,7 @@ from dvc.exceptions import DvcException, NotDvcRepoError from dvc.scm.base import SCMError from dvc.system import System -from dvc.utils import is_binary, relpath +from dvc.utils.__init__ import relpath from dvc.utils.pkg import PKG from dvc.version import __version__ @@ -29,11 +29,10 @@ def run(self): info = [ f"DVC version: {__version__}", - f"Python version: {platform.python_version()}", - f"Platform: {platform.platform()}", - f"Binary: {is_binary()}", - f"Package: {PKG}", - f"Supported remotes: {self.get_supported_remotes()}", + "--------------------------------- \n", + f"Build Info: Python {platform.python_version()} on " + f"{platform.platform()} installed via {PKG}", + f"Supports: {self.get_supported_remotes()}", ] try: @@ -46,13 +45,11 @@ def run(self): # `dvc config cache.shared group`. if os.path.exists(repo.cache.local.cache_dir): info.append( - "Cache: {}".format(self.get_linktype_support_info(repo)) + "Cache types: " + self.get_linktype_support_info(repo) ) if psutil: fs_type = self.get_fs_type(repo.cache.local.cache_dir) - info.append( - f"Filesystem type (cache directory): {fs_type}" - ) + info.append(f"Directory cache: {fs_type}") else: logger.warning( "Unable to detect supported link types, as cache " @@ -72,7 +69,7 @@ def run(self): if psutil: fs_root = self.get_fs_type(os.path.abspath(root_directory)) - info.append(f"Filesystem type (workspace): {fs_root}") + info.append(f"Workspace with {fs_root}") logger.info("\n".join(info)) return 0 @@ -80,7 +77,7 @@ def run(self): @staticmethod def get_fs_type(path): partition = { - pathlib.Path(part.mountpoint): (part.fstype, part.device) + pathlib.Path(part.mountpoint): (part.fstype + " on " + part.device) for part in psutil.disk_partitions(all=True) } @@ -115,10 +112,12 @@ def get_linktype_support_info(repo): os.unlink(dst) except DvcException: status = "not supported" - cache.append(f"{name} - {status}") + + if status == "supported": + cache.append(name) os.remove(src) - return ", ".join(cache) + return "/".join(cache) @staticmethod def get_supported_remotes(): @@ -129,7 +128,12 @@ def get_supported_remotes(): if not tree_cls.get_missing_deps(): supported_remotes.append(tree_cls.scheme) - return ", ".join(supported_remotes) + if len(supported_remotes) == len(TREES): + return "All remotes" + elif len(supported_remotes) == 1: + return supported_remotes + else: + return ", ".join(supported_remotes) def _get_dvc_repo_info(repo): @@ -139,7 +143,7 @@ def _get_dvc_repo_info(repo): if repo.root_dir != repo.scm.root_dir: return "dvc (subdir), git" - return "dvc, git" + return "dvc + git" def add_parser(subparsers, parent_parser): From 7f66772f63c7f800316f4a469f76822adbe05aba Mon Sep 17 00:00:00 2001 From: Sahil Bhosale Date: Sun, 28 Jun 2020 13:04:10 +0530 Subject: [PATCH 4/9] version: redesign output format for dvc command #3499 --- dvc/command/version.py | 2 +- tests/func/test_version.py | 29 ++++++++++++----------------- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/dvc/command/version.py b/dvc/command/version.py index eedc90a1cd..fb3a9b02c0 100644 --- a/dvc/command/version.py +++ b/dvc/command/version.py @@ -10,7 +10,7 @@ from dvc.exceptions import DvcException, NotDvcRepoError from dvc.scm.base import SCMError from dvc.system import System -from dvc.utils.__init__ import relpath +from dvc.utils import relpath from dvc.utils.pkg import PKG from dvc.version import __version__ diff --git a/tests/func/test_version.py b/tests/func/test_version.py index 9c31b3f84c..5fd3d6f9c7 100644 --- a/tests/func/test_version.py +++ b/tests/func/test_version.py @@ -17,17 +17,14 @@ def test_info_in_repo(scm_init, tmp_dir, caplog): assert main(["version"]) == 0 assert re.search(r"DVC version: \d+\.\d+\.\d+", caplog.text) - assert re.search(r"Python version: \d\.\d\.\d", caplog.text) - assert re.search(r"Platform: .*", caplog.text) - assert re.search(r"Binary: (True|False)", caplog.text) - assert re.search(r"Package: .*", caplog.text) - assert re.search(r"Supported remotes: .*", caplog.text) assert re.search( - r"(Cache: (.*link - (not )?supported(,\s)?){3})", caplog.text + r"Build Info: Python \d\.\d\.\d on .* installed via .*", caplog.text ) + assert re.search(r"Supports: .*", caplog.text) + assert re.search(r"Cache types: .*", caplog.text) if scm_init: - assert "Repo: dvc, git" in caplog.text + assert "Repo: dvc + git" in caplog.text else: assert "Repo: dvc (no_scm)" in caplog.text @@ -58,20 +55,19 @@ def test_fs_info_in_repo(tmp_dir, dvc, caplog): os.mkdir(dvc.cache.local.cache_dir) assert main(["version"]) == 0 - assert "Filesystem type (cache directory): " in caplog.text - assert "Filesystem type (workspace): " in caplog.text + assert re.search(r"Directory cache: .* on .*", caplog.text) + assert re.search(r"Workspace with .* on .*", caplog.text) def test_info_outside_of_repo(tmp_dir, caplog): assert main(["version"]) == 0 assert re.search(r"DVC version: \d+\.\d+\.\d+", caplog.text) - assert re.search(r"Python version: \d\.\d\.\d", caplog.text) - assert re.search(r"Platform: .*", caplog.text) - assert re.search(r"Binary: (True|False)", caplog.text) - assert re.search(r"Package: .*", caplog.text) - assert re.search(r"Supported remotes: .*", caplog.text) - assert not re.search(r"(Cache: (.*link - (not )?(,\s)?){3})", caplog.text) + assert re.search( + r"Build Info: Python \d\.\d\.\d on .* installed via .*", caplog.text + ) + assert re.search(r"Supports: .*", caplog.text) + assert not re.search(r"Cache types: .*", caplog.text) assert "Repo:" not in caplog.text @@ -79,5 +75,4 @@ def test_info_outside_of_repo(tmp_dir, caplog): def test_fs_info_outside_of_repo(tmp_dir, caplog): assert main(["version"]) == 0 - assert "Filesystem type (cache directory): " not in caplog.text - assert "Filesystem type (workspace): " in caplog.text + assert re.search(r"Workspace with .* on .*", caplog.text) From 6064659c27754feb55046cfffcfb09288b94bfba Mon Sep 17 00:00:00 2001 From: Sahil Bhosale Date: Sat, 11 Jul 2020 13:02:47 +0530 Subject: [PATCH 5/9] version: redesign output format #3499 --- dvc/command/version.py | 23 ++++++++++++----------- tests/func/test_version.py | 14 +++++--------- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/dvc/command/version.py b/dvc/command/version.py index fb3a9b02c0..86030788b0 100644 --- a/dvc/command/version.py +++ b/dvc/command/version.py @@ -28,10 +28,10 @@ def run(self): from dvc.repo import Repo info = [ - f"DVC version: {__version__}", + f"DVC version: {__version__} ({PKG})", "--------------------------------- \n", - f"Build Info: Python {platform.python_version()} on " - f"{platform.platform()} installed via {PKG}", + f"Platform: Python {platform.python_version()} on " + f"{platform.platform()}", f"Supports: {self.get_supported_remotes()}", ] @@ -49,7 +49,7 @@ def run(self): ) if psutil: fs_type = self.get_fs_type(repo.cache.local.cache_dir) - info.append(f"Directory cache: {fs_type}") + info.append(f"Cache with {fs_type}") else: logger.warning( "Unable to detect supported link types, as cache " @@ -65,11 +65,11 @@ def run(self): root_directory = os.getcwd() info.append("Repo: dvc, git (broken)") else: - info.append("Repo: {}".format(_get_dvc_repo_info(repo))) + if psutil: + fs_root = self.get_fs_type(os.path.abspath(root_directory)) + info.append(f"Workspace with {fs_root}") - if psutil: - fs_root = self.get_fs_type(os.path.abspath(root_directory)) - info.append(f"Workspace with {fs_root}") + info.append("Repo: {}".format(_get_dvc_repo_info(repo))) logger.info("\n".join(info)) return 0 @@ -130,10 +130,11 @@ def get_supported_remotes(): if len(supported_remotes) == len(TREES): return "All remotes" - elif len(supported_remotes) == 1: + + if len(supported_remotes) == 1: return supported_remotes - else: - return ", ".join(supported_remotes) + + return ", ".join(supported_remotes) def _get_dvc_repo_info(repo): diff --git a/tests/func/test_version.py b/tests/func/test_version.py index 5fd3d6f9c7..d4b229eb37 100644 --- a/tests/func/test_version.py +++ b/tests/func/test_version.py @@ -16,10 +16,8 @@ def test_info_in_repo(scm_init, tmp_dir, caplog): assert main(["version"]) == 0 - assert re.search(r"DVC version: \d+\.\d+\.\d+", caplog.text) - assert re.search( - r"Build Info: Python \d\.\d\.\d on .* installed via .*", caplog.text - ) + assert re.search(r"DVC version: \d+\.\d+\.\d+ (.*)", caplog.text) + assert re.search(r"Platform: Python \d\.\d\.\d on .*", caplog.text) assert re.search(r"Supports: .*", caplog.text) assert re.search(r"Cache types: .*", caplog.text) @@ -55,17 +53,15 @@ def test_fs_info_in_repo(tmp_dir, dvc, caplog): os.mkdir(dvc.cache.local.cache_dir) assert main(["version"]) == 0 - assert re.search(r"Directory cache: .* on .*", caplog.text) + assert re.search(r"Cache with .* on .*", caplog.text) assert re.search(r"Workspace with .* on .*", caplog.text) def test_info_outside_of_repo(tmp_dir, caplog): assert main(["version"]) == 0 - assert re.search(r"DVC version: \d+\.\d+\.\d+", caplog.text) - assert re.search( - r"Build Info: Python \d\.\d\.\d on .* installed via .*", caplog.text - ) + assert re.search(r"DVC version: \d+\.\d+\.\d+ (.*)", caplog.text) + assert re.search(r"Platform: Python \d\.\d\.\d on .*", caplog.text) assert re.search(r"Supports: .*", caplog.text) assert not re.search(r"Cache types: .*", caplog.text) assert "Repo:" not in caplog.text From 412f39d5fcc3cc1cb3c349d76ec0d81eb64c0fc6 Mon Sep 17 00:00:00 2001 From: Sahil Bhosale Date: Sat, 11 Jul 2020 13:23:20 +0530 Subject: [PATCH 6/9] version: redesign output format #3499 --- tests/func/test_version.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/func/test_version.py b/tests/func/test_version.py index d4b229eb37..7b2c0163cb 100644 --- a/tests/func/test_version.py +++ b/tests/func/test_version.py @@ -16,7 +16,7 @@ def test_info_in_repo(scm_init, tmp_dir, caplog): assert main(["version"]) == 0 - assert re.search(r"DVC version: \d+\.\d+\.\d+ (.*)", caplog.text) + assert re.search(r"DVC version: \d+\.\d+\.\d+\+.*", caplog.text) assert re.search(r"Platform: Python \d\.\d\.\d on .*", caplog.text) assert re.search(r"Supports: .*", caplog.text) assert re.search(r"Cache types: .*", caplog.text) @@ -60,7 +60,7 @@ def test_fs_info_in_repo(tmp_dir, dvc, caplog): def test_info_outside_of_repo(tmp_dir, caplog): assert main(["version"]) == 0 - assert re.search(r"DVC version: \d+\.\d+\.\d+ (.*)", caplog.text) + assert re.search(r"DVC version: \d+\.\d+\.\d+\+.*", caplog.text) assert re.search(r"Platform: Python \d\.\d\.\d on .*", caplog.text) assert re.search(r"Supports: .*", caplog.text) assert not re.search(r"Cache types: .*", caplog.text) @@ -70,5 +70,3 @@ def test_info_outside_of_repo(tmp_dir, caplog): @pytest.mark.skipif(psutil is None, reason="No psutil.") def test_fs_info_outside_of_repo(tmp_dir, caplog): assert main(["version"]) == 0 - - assert re.search(r"Workspace with .* on .*", caplog.text) From 4e5552259e68b433873b610cdc0bc1011f4ae3a9 Mon Sep 17 00:00:00 2001 From: Sahil Bhosale Date: Thu, 23 Jul 2020 07:09:56 +0530 Subject: [PATCH 7/9] Redesign output format for the dvc version command #3499 --- dvc/command/version.py | 18 +++++++++++++----- tests/func/test_version.py | 6 +++--- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/dvc/command/version.py b/dvc/command/version.py index 86030788b0..2676f8c565 100644 --- a/dvc/command/version.py +++ b/dvc/command/version.py @@ -27,8 +27,14 @@ class CmdVersion(CmdBaseNoRepo): def run(self): from dvc.repo import Repo + package = PKG + if PKG is None: + package = "" + else: + package = f"({PKG})" + info = [ - f"DVC version: {__version__} ({PKG})", + f"DVC version: {__version__} {package}", "--------------------------------- \n", f"Platform: Python {platform.python_version()} on " f"{platform.platform()}", @@ -45,11 +51,13 @@ def run(self): # `dvc config cache.shared group`. if os.path.exists(repo.cache.local.cache_dir): info.append( - "Cache types: " + self.get_linktype_support_info(repo) + "Cache types: {}".format( + self.get_linktype_support_info(repo) + ) ) if psutil: fs_type = self.get_fs_type(repo.cache.local.cache_dir) - info.append(f"Cache with {fs_type}") + info.append(f"Cache directory: {fs_type}") else: logger.warning( "Unable to detect supported link types, as cache " @@ -67,7 +75,7 @@ def run(self): else: if psutil: fs_root = self.get_fs_type(os.path.abspath(root_directory)) - info.append(f"Workspace with {fs_root}") + info.append(f"Workspace directory: {fs_root}") info.append("Repo: {}".format(_get_dvc_repo_info(repo))) @@ -144,7 +152,7 @@ def _get_dvc_repo_info(repo): if repo.root_dir != repo.scm.root_dir: return "dvc (subdir), git" - return "dvc + git" + return "dvc, git" def add_parser(subparsers, parent_parser): diff --git a/tests/func/test_version.py b/tests/func/test_version.py index 7b2c0163cb..c55955db40 100644 --- a/tests/func/test_version.py +++ b/tests/func/test_version.py @@ -22,7 +22,7 @@ def test_info_in_repo(scm_init, tmp_dir, caplog): assert re.search(r"Cache types: .*", caplog.text) if scm_init: - assert "Repo: dvc + git" in caplog.text + assert "Repo: dvc, git" in caplog.text else: assert "Repo: dvc (no_scm)" in caplog.text @@ -53,8 +53,8 @@ def test_fs_info_in_repo(tmp_dir, dvc, caplog): os.mkdir(dvc.cache.local.cache_dir) assert main(["version"]) == 0 - assert re.search(r"Cache with .* on .*", caplog.text) - assert re.search(r"Workspace with .* on .*", caplog.text) + assert re.search(r"Cache directory: .* on .*", caplog.text) + assert re.search(r"Workspace directory: .* on .*", caplog.text) def test_info_outside_of_repo(tmp_dir, caplog): From 753efe7f78e81df2419381b54cd5d1fd50f2a785 Mon Sep 17 00:00:00 2001 From: Sahil Bhosale Date: Thu, 23 Jul 2020 07:20:48 +0530 Subject: [PATCH 8/9] Redesign output format for the dvc version command #3499 --- dvc/command/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dvc/command/version.py b/dvc/command/version.py index 2676f8c565..8b6052a14e 100644 --- a/dvc/command/version.py +++ b/dvc/command/version.py @@ -125,7 +125,7 @@ def get_linktype_support_info(repo): cache.append(name) os.remove(src) - return "/".join(cache) + return ", ".join(cache) @staticmethod def get_supported_remotes(): From 999c9e188801f971b75f51ca84f5bad533cb462c Mon Sep 17 00:00:00 2001 From: Ruslan Kuprieiev Date: Tue, 28 Jul 2020 17:24:59 +0300 Subject: [PATCH 9/9] Update dvc/command/version.py Co-authored-by: Saugat Pachhai --- dvc/command/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dvc/command/version.py b/dvc/command/version.py index 8b6052a14e..cd600022f7 100644 --- a/dvc/command/version.py +++ b/dvc/command/version.py @@ -35,7 +35,7 @@ def run(self): info = [ f"DVC version: {__version__} {package}", - "--------------------------------- \n", + "---------------------------------", f"Platform: Python {platform.python_version()} on " f"{platform.platform()}", f"Supports: {self.get_supported_remotes()}",