From f35cf7ea1d3ba7d2494e803acf93ecbf4ea08a6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20Rowlands=20=28=EB=B3=80=EA=B8=B0=ED=98=B8=29?= Date: Tue, 6 Apr 2021 22:10:38 +0900 Subject: [PATCH] exp run: --reset no longer implies --force (#5751) * exp run: --reset no longer implies --force * ref update still needs to be forced on checkpoint --reset --- dvc/repo/experiments/__init__.py | 1 - dvc/repo/experiments/executor/base.py | 15 ++++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/dvc/repo/experiments/__init__.py b/dvc/repo/experiments/__init__.py index 12cf2cb6d..08451ed41 100644 --- a/dvc/repo/experiments/__init__.py +++ b/dvc/repo/experiments/__init__.py @@ -324,7 +324,6 @@ class Experiments: if reset: self.reset_checkpoints() - kwargs["force"] = True if not (queue or tmp_dir): staged, _, _ = self.scm.status() diff --git a/dvc/repo/experiments/executor/base.py b/dvc/repo/experiments/executor/base.py index c8a5466dc..8146262bc 100644 --- a/dvc/repo/experiments/executor/base.py +++ b/dvc/repo/experiments/executor/base.py @@ -271,7 +271,7 @@ class BaseExecutor(ABC): # - if run without --reset, the checkpoint out will be checked out # using any hash present in dvc.lock (or removed if no entry # exists in dvc.lock) - checkpoint_reset = kwargs.pop("reset", False) + checkpoint_reset: bool = kwargs.pop("reset", False) dvc_checkout( dvc, targets=targets, @@ -283,7 +283,10 @@ class BaseExecutor(ABC): ) checkpoint_func = partial( - cls.checkpoint_callback, dvc.scm, name, repro_force + cls.checkpoint_callback, + dvc.scm, + name, + repro_force or checkpoint_reset, ) stages = dvc_reproduce( dvc, @@ -295,12 +298,18 @@ class BaseExecutor(ABC): exp_hash = cls.hash_exp(stages) try: + is_checkpoint = any(stage.is_checkpoint for stage in stages) + if is_checkpoint and checkpoint_reset: + # For reset checkpoint stages, we need to force overwriting + # existing checkpoint refs even though repro may not have + # actually been run with --force + repro_force = True cls.commit( dvc.scm, exp_hash, exp_name=name, force=repro_force, - checkpoint=any(stage.is_checkpoint for stage in stages), + checkpoint=is_checkpoint, ) except UnchangedExperimentError: pass