Files
dvc/tests/func/experiments/test_stash_exp.py
T
David de la Iglesia Castro 320771551b exp: Preserve staged changes after experiments.
- Detach head after stashing workspace.
- Use reinstate_index.
2023-02-14 16:59:10 +01:00

71 lines
1.9 KiB
Python

import logging
import pytest
from funcy import first
from dvc.exceptions import ReproductionError
@pytest.mark.parametrize("tmp", [True, False])
@pytest.mark.parametrize("staged", [True, False])
def test_deleted(tmp_dir, scm, dvc, caplog, tmp, staged):
if not tmp:
pytest.xfail("TODO: https://github.com/iterative/dvc/issues/6297")
tmp_dir.scm_gen("file", "file", commit="commit file")
stage = dvc.stage.add(
cmd="cat file",
name="foo",
)
scm.add_commit(["dvc.yaml"], message="add dvc.yaml")
file = tmp_dir / "file"
file.unlink()
if staged:
scm.add(["file"])
with caplog.at_level(logging.ERROR):
with pytest.raises(ReproductionError):
dvc.experiments.run(stage.addressing, tmp_dir=tmp)
assert "failed to reproduce 'foo'" in caplog.text
assert not file.exists()
@pytest.mark.parametrize("tmp", [True, False])
@pytest.mark.parametrize("staged", [True, False])
def test_modified(tmp_dir, scm, dvc, caplog, tmp, staged):
tmp_dir.scm_gen("file", "file", commit="commit file")
stage = dvc.stage.add(
cmd="cat file",
name="foo",
)
scm.add_commit(["dvc.yaml"], message="add dvc.yaml")
(tmp_dir / "file").write_text("modified_file")
if staged:
scm.add(["file"])
results = dvc.experiments.run(stage.addressing, tmp_dir=tmp)
exp = first(results)
scm.checkout(exp, force=True)
assert (tmp_dir / "file").read_text() == "modified_file"
@pytest.mark.parametrize("tmp", [True, False])
def test_staged_new_file(tmp_dir, scm, dvc, tmp):
stage = dvc.stage.add(
cmd="cat file",
name="foo",
)
scm.add_commit(["dvc.yaml"], message="add dvc.yaml")
(tmp_dir / "file").write_text("file")
scm.add(["file"])
results = dvc.experiments.run(stage.addressing, tmp_dir=tmp)
exp = first(results)
fs = scm.get_fs(exp)
assert fs.exists("file")