mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-02 07:18:25 +01:00
exp: save: Handle staged changes.
Staged changes were causing a merge error. Warn and unstage instead of erroring, to match exp run behavior.
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
from typing import TYPE_CHECKING, Optional
|
from typing import TYPE_CHECKING, List, Optional
|
||||||
|
|
||||||
from funcy import first
|
from funcy import first
|
||||||
|
|
||||||
@@ -23,6 +23,14 @@ def save(
|
|||||||
queue = repo.experiments.workspace_queue
|
queue = repo.experiments.workspace_queue
|
||||||
logger.debug("Saving workspace in %s", os.getcwd())
|
logger.debug("Saving workspace in %s", os.getcwd())
|
||||||
|
|
||||||
|
staged, _, _ = repo.scm.status(untracked_files="no")
|
||||||
|
if staged:
|
||||||
|
logger.warning(
|
||||||
|
"Your workspace contains staged Git changes which will be "
|
||||||
|
"unstaged before saving this experiment."
|
||||||
|
)
|
||||||
|
repo.scm.reset()
|
||||||
|
|
||||||
entry = repo.experiments.new(queue=queue, name=name, force=force)
|
entry = repo.experiments.new(queue=queue, name=name, force=force)
|
||||||
executor = queue.init_executor(repo.experiments, entry)
|
executor = queue.init_executor(repo.experiments, entry)
|
||||||
save_result = executor.save(executor.info, force=force)
|
save_result = executor.save(executor.info, force=force)
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ def test_exp_save_overwrite_experiment(tmp_dir, dvc, scm, exp_stage):
|
|||||||
dvc.experiments.save(name="dummy", force=True)
|
dvc.experiments.save(name="dummy", force=True)
|
||||||
|
|
||||||
|
|
||||||
def test_exp_save_multiple(tmp_dir, dvc, scm, exp_stage):
|
def test_exp_save_multiple(tmp_dir, dvc, scm):
|
||||||
baseline = scm.get_rev()
|
baseline = scm.get_rev()
|
||||||
for i in range(2):
|
for i in range(2):
|
||||||
name = f"exp-{i}"
|
name = f"exp-{i}"
|
||||||
@@ -76,3 +76,13 @@ def test_exp_save_after_commit(tmp_dir, dvc, scm, exp_stage):
|
|||||||
all_exps = dvc.experiments.ls(all_commits=True)
|
all_exps = dvc.experiments.ls(all_commits=True)
|
||||||
assert all_exps[baseline] == ["exp-1"]
|
assert all_exps[baseline] == ["exp-1"]
|
||||||
assert all_exps[new_baseline] == ["exp-2"]
|
assert all_exps[new_baseline] == ["exp-2"]
|
||||||
|
|
||||||
|
|
||||||
|
def test_exp_save_with_staged_changes(tmp_dir, dvc, scm):
|
||||||
|
tmp_dir.gen({"new_file": "new_file"})
|
||||||
|
scm.add("new_file")
|
||||||
|
|
||||||
|
dvc.experiments.save(name="exp")
|
||||||
|
|
||||||
|
_, _, unstaged = scm.status()
|
||||||
|
assert "new_file" in unstaged
|
||||||
Reference in New Issue
Block a user