Files
dvc/tests/func/experiments/test_gc.py
T
Peter Rowlands (변기호) 176a23e291 experiments: store experiments in refs/exps instead of heads (#4910)
* experiments: commit to refs/exps/... instead of branch heads

* update exp show

* restore checkpoint_resume kwarg

* refactor new() to use experiments stash

* experiments: use refspecs to populate and collect executors

* experiments: use new stash and merge on exp checkout

* experiments: fix executor chdir

* experiments: update run and show

* skip checkout after reproduce

* checkpoints: use experiments refspecs

* check if workspace was stashed before applying

* exp show: unify checkpoint/standalone experiment collection

* git: move iter_refs to backend

* update for scm changes

* experiments: replace exp checkout in favor of exp apply

* git: handle rev_parse errors in resolve_commit

* update refs containing and baseline check

* fix sigint handling for checkpoints

* update checkpoint exists behavior

* fix checkpoint baseline behavior

* update tests

* experiments: update gc

* update show tests

* fix type checking errors

* update diff

* scm: add diff, describe

* experiments: generate human readable names

* exp run/resume: allow user specified exp name with -n/--name

* update tests

* experiments: add `exp branch` for promoting experiment to full branch

* fix test

* fix missing file

* experiments: explicitly close scm instances before cleaning up tmp dir
2020-12-02 21:20:57 +09:00

121 lines
4.0 KiB
Python

import pytest
from funcy import first
from tests.func.test_repro_multistage import COPY_SCRIPT
@pytest.mark.parametrize("queued, expected", [(True, 0), (False, 1)])
def test_workspace(tmp_dir, scm, dvc, queued, expected):
tmp_dir.gen("copy.py", COPY_SCRIPT)
tmp_dir.gen("params.yaml", "foo: 1")
stage = dvc.run(
cmd="python copy.py params.yaml metrics.yaml",
metrics_no_cache=["metrics.yaml"],
params=["foo"],
name="foo",
)
scm.add(["dvc.yaml", "dvc.lock", "copy.py", "params.yaml", "metrics.yaml"])
scm.commit("v1")
dvc.experiments.run(stage.addressing, params=["foo=2"])
dvc.experiments.run(stage.addressing, params=["foo=3"], queue=True)
removed = dvc.experiments.gc(workspace=True, queued=queued)
assert removed == expected
@pytest.mark.parametrize("queued, expected", [(True, 0), (False, 2)])
def test_all_commits(tmp_dir, scm, dvc, queued, expected):
tmp_dir.gen("copy.py", COPY_SCRIPT)
tmp_dir.gen("params.yaml", "foo: 1")
stage = dvc.run(
cmd="python copy.py params.yaml metrics.yaml",
metrics_no_cache=["metrics.yaml"],
params=["foo"],
name="foo",
)
scm.add(["dvc.yaml", "dvc.lock", "copy.py", "params.yaml", "metrics.yaml"])
scm.commit("v1")
results = dvc.experiments.run(stage.addressing, params=["foo=2"])
exp_rev = first(results)
dvc.experiments.run(stage.addressing, params=["foo=3"], queue=True)
dvc.experiments.apply(exp_rev)
scm.add(["dvc.yaml", "dvc.lock", "copy.py", "params.yaml", "metrics.yaml"])
scm.commit("v2")
dvc.experiments.run(stage.addressing, params=["foo=4"])
dvc.experiments.run(stage.addressing, params=["foo=5"], queue=True)
removed = dvc.experiments.gc(all_commits=True, queued=queued)
assert removed == expected
@pytest.mark.parametrize("queued, expected", [(True, 2), (False, 3)])
def test_all_branches(tmp_dir, scm, dvc, queued, expected):
tmp_dir.gen("copy.py", COPY_SCRIPT)
tmp_dir.gen("params.yaml", "foo: 1")
stage = dvc.run(
cmd="python copy.py params.yaml metrics.yaml",
metrics_no_cache=["metrics.yaml"],
params=["foo"],
name="foo",
)
scm.add(["dvc.yaml", "dvc.lock", "copy.py", "params.yaml", "metrics.yaml"])
scm.commit("v1")
results = dvc.experiments.run(stage.addressing, params=["foo=2"])
exp_rev = first(results)
dvc.experiments.run(stage.addressing, params=["foo=3"], queue=True)
dvc.experiments.apply(exp_rev)
scm.add(["dvc.yaml", "dvc.lock", "copy.py", "params.yaml", "metrics.yaml"])
scm.commit("v2")
scm.branch("branch")
results = dvc.experiments.run(stage.addressing, params=["foo=4"])
dvc.experiments.run(stage.addressing, params=["foo=5"], queue=True)
exp_rev = first(results)
dvc.experiments.apply(exp_rev)
scm.add(["dvc.yaml", "dvc.lock", "copy.py", "params.yaml", "metrics.yaml"])
scm.commit("v3")
removed = dvc.experiments.gc(all_branches=True, queued=queued)
assert removed == expected
@pytest.mark.parametrize("queued, expected", [(True, 2), (False, 3)])
def test_all_tags(tmp_dir, scm, dvc, queued, expected):
tmp_dir.gen("copy.py", COPY_SCRIPT)
tmp_dir.gen("params.yaml", "foo: 1")
stage = dvc.run(
cmd="python copy.py params.yaml metrics.yaml",
metrics_no_cache=["metrics.yaml"],
params=["foo"],
name="foo",
)
scm.add(["dvc.yaml", "dvc.lock", "copy.py", "params.yaml", "metrics.yaml"])
scm.commit("v1")
results = dvc.experiments.run(stage.addressing, params=["foo=2"])
exp_rev = first(results)
dvc.experiments.run(stage.addressing, params=["foo=3"], queue=True)
dvc.experiments.apply(exp_rev)
scm.add(["dvc.yaml", "dvc.lock", "copy.py", "params.yaml", "metrics.yaml"])
scm.commit("v2")
scm.tag("tag-v2")
dvc.experiments.run(stage.addressing, params=["foo=4"])
dvc.experiments.run(stage.addressing, params=["foo=5"], queue=True)
removed = dvc.experiments.gc(all_tags=True, queued=queued)
assert removed == expected