Skip to content

Commit

Permalink
version: fix bug when .git dir is removed, show more info regarding r…
Browse files Browse the repository at this point in the history
…epo (#3508)

* version: fix error when .git dir is removed

* version: show dvc/git information

* version: remove introducing no_scm params in Repo api
  • Loading branch information
skshetry authored Mar 19, 2020
1 parent 4489f98 commit 93246f0
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 2 deletions.
16 changes: 16 additions & 0 deletions dvc/command/version.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from dvc.command.base import CmdBaseNoRepo, append_doc_link
from dvc.version import __version__
from dvc.exceptions import DvcException, NotDvcRepoError
from dvc.scm.base import SCMError
from dvc.system import System
from dvc.utils.pkg import PKG

Expand Down Expand Up @@ -62,6 +63,11 @@ def run(self):

except NotDvcRepoError:
root_directory = os.getcwd()
except SCMError:
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))
Expand Down Expand Up @@ -125,6 +131,16 @@ def get_supported_remotes():
return ", ".join(supported_remotes)


def _get_dvc_repo_info(repo):
if repo.config.get("core", {}).get("no_scm", False):
return "dvc (no_scm)"

if repo.root_dir != repo.scm.root_dir:
return "dvc (subdir), git"

return "dvc, git"


def add_parser(subparsers, parent_parser):
VERSION_HELP = "Show DVC version and system/environment information."

Expand Down
35 changes: 33 additions & 2 deletions tests/func/test_version.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
import os
import re
import shutil

import pytest

from dvc.command.version import psutil
from dvc.main import main


def test_info_in_repo(tmp_dir, dvc, caplog):
@pytest.mark.parametrize("scm_init", [True, False])
def test_info_in_repo(scm_init, tmp_dir, caplog):
tmp_dir.init(scm=scm_init, dvc=True)
# Create `.dvc/cache`, that is needed to check supported link types.
os.mkdir(dvc.cache.local.cache_dir)
os.mkdir(tmp_dir.dvc.cache.local.cache_dir)

assert main(["version"]) == 0

assert re.search(r"DVC version: \d+\.\d+\.\d+", caplog.text)
Expand All @@ -22,6 +26,32 @@ def test_info_in_repo(tmp_dir, dvc, caplog):
r"(Cache: (.*link - (not )?supported(,\s)?){3})", caplog.text
)

if scm_init:
assert "Repo: dvc, git" in caplog.text
else:
assert "Repo: dvc (no_scm)" in caplog.text


def test_info_in_subdir(tmp_dir, scm, caplog):
dvc_subdir = tmp_dir / "subdir"
dvc_subdir.mkdir()

with dvc_subdir.chdir():
dvc_subdir.init(scm=False, dvc=True)
with dvc_subdir.dvc.config.edit() as conf:
del conf["core"]["no_scm"]

assert main(["version"]) == 0

assert "Repo: dvc (subdir), git" in caplog.text


def test_info_in_broken_git_repo(tmp_dir, dvc, scm, caplog):
shutil.rmtree(dvc.scm.dir)
assert main(["version"]) == 0

assert "Repo: dvc, git (broken)" in caplog.text


@pytest.mark.skipif(psutil is None, reason="No psutil.")
def test_fs_info_in_repo(tmp_dir, dvc, caplog):
Expand All @@ -42,6 +72,7 @@ def test_info_outside_of_repo(tmp_dir, caplog):
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 "Repo:" not in caplog.text


@pytest.mark.skipif(psutil is None, reason="No psutil.")
Expand Down

0 comments on commit 93246f0

Please sign in to comment.