Skip to content

Commit

Permalink
Auto-initialize DVC repo (#539)
Browse files Browse the repository at this point in the history
* initialize dvc

* add tests

* drop dvc repo

* drop .dvciginore
  • Loading branch information
dberenbaum committed Apr 24, 2023
1 parent 0ec6860 commit 0f59e9f
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 5 deletions.
1 change: 1 addition & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ install_requires=
dvc-studio-client>=0.7.0,<1
funcy
ruamel.yaml
scmrepo
[options.extras_require]
image =
numpy
Expand Down
8 changes: 6 additions & 2 deletions src/dvclive/dvc.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,16 @@ def make_checkpoint():
def get_dvc_repo():
from dvc.exceptions import NotDvcRepoError
from dvc.repo import Repo
from dvc.scm import SCMError
from dvc.scm import Git, SCMError
from scmrepo.exceptions import SCMError as GitSCMError

try:
return Repo()
except (NotDvcRepoError, SCMError):
return None
try:
return Repo.init(Git().root_dir)
except GitSCMError:
return None


def make_dvcyaml(live):
Expand Down
12 changes: 10 additions & 2 deletions src/dvclive/live.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,8 +124,16 @@ def _init_dvc(self):
if self._dvc_repo is None:
if self._save_dvc_exp:
logger.warning(
"Can't save experiment without a DVC Repo."
"\nYou can create a DVC Repo by calling `dvc init`."
"Can't save experiment without a Git Repo."
"\nCreate a Git repo (`git init`) and commit (`git commit`)."
)
self._save_dvc_exp = False
return
if self._dvc_repo.scm.no_commits:
if self._save_dvc_exp:
logger.warning(
"Can't save experiment to an empty Git Repo."
"\nAdd a commit (`git commit`) to save experiments."
)
self._save_dvc_exp = False
return
Expand Down
1 change: 1 addition & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ def mocked_dvc_repo(tmp_dir, mocker):
_dvc_repo.index.stages = []
_dvc_repo.scm.get_rev.return_value = "f" * 40
_dvc_repo.scm.get_ref.return_value = None
_dvc_repo.scm.no_commits = False
_dvc_repo.experiments.save.return_value = "e" * 40
_dvc_repo.root_dir = tmp_dir
mocker.patch("dvclive.live.get_dvc_repo", return_value=_dvc_repo)
Expand Down
11 changes: 10 additions & 1 deletion tests/test_dvc.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,17 @@
def test_get_dvc_repo(tmp_dir):
assert get_dvc_repo() is None
Git.init(tmp_dir)
Repo.init(tmp_dir)
assert isinstance(get_dvc_repo(), Repo)


def test_get_dvc_repo_subdir(tmp_dir):
Git.init(tmp_dir)
subdir = tmp_dir / "sub"
subdir.mkdir()
os.chdir(subdir)
assert get_dvc_repo().root_dir == str(tmp_dir)


def test_make_dvcyaml_empty(tmp_dir):
live = Live()
make_dvcyaml(live)
Expand Down Expand Up @@ -154,6 +161,7 @@ def test_exp_save_run_on_dvc_repro(tmp_dir, mocker):
dvc_repo.index.stages = [dvc_stage, dvc_file]
dvc_repo.scm.get_rev.return_value = "current_rev"
dvc_repo.scm.get_ref.return_value = None
dvc_repo.scm.no_commits = False
with mocker.patch("dvclive.live.get_dvc_repo", return_value=dvc_repo):
live = Live(save_dvc_exp=True)
assert live._save_dvc_exp
Expand Down Expand Up @@ -193,6 +201,7 @@ def test_exp_save_with_dvc_files(tmp_dir, mocker):
dvc_repo.index.stages = [dvc_file]
dvc_repo.scm.get_rev.return_value = "current_rev"
dvc_repo.scm.get_ref.return_value = None
dvc_repo.scm.no_commits = False

with mocker.patch("dvclive.live.get_dvc_repo", return_value=dvc_repo):
live = Live(save_dvc_exp=True)
Expand Down
1 change: 1 addition & 0 deletions tests/test_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,7 @@ def test_vscode_dvclive_only_signal_file(tmp_dir, dvc_root, mocker):
dvc_repo.index.stages = []
dvc_repo.scm.get_rev.return_value = "current_rev"
dvc_repo.scm.get_ref.return_value = None
dvc_repo.scm.no_commits = False
with mocker.patch("dvclive.live.get_dvc_repo", return_value=dvc_repo), mocker.patch(
"dvclive.live.os.getpid", return_value=test_pid
):
Expand Down

0 comments on commit 0f59e9f

Please sign in to comment.