From 911534116e4f870f87b05caf2bed38e105a205ad 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: Thu, 29 Oct 2020 18:01:34 +0900 Subject: [PATCH] experiments: fix stash ordering bug (#4805) --- dvc/repo/experiments/__init__.py | 4 +++- tests/func/experiments/test_experiments.py | 23 ++++++++++++++++++---- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/dvc/repo/experiments/__init__.py b/dvc/repo/experiments/__init__.py index 55e6c2607..b1b5d704d 100644 --- a/dvc/repo/experiments/__init__.py +++ b/dvc/repo/experiments/__init__.py @@ -163,8 +163,10 @@ class Experiments: @property def stash_reflog(self): + """Return stash reflog in Git 'stash@{...}' index order.""" if "refs/stash" in self.scm.repo.refs: - return self.scm.repo.refs["refs/stash"].log() + # gitpython reflog log() returns commits oldest to newest + return reversed(self.scm.repo.refs["refs/stash"].log()) return [] @property diff --git a/tests/func/experiments/test_experiments.py b/tests/func/experiments/test_experiments.py index 74c3d2c7b..8d57aab91 100644 --- a/tests/func/experiments/test_experiments.py +++ b/tests/func/experiments/test_experiments.py @@ -160,14 +160,29 @@ def test_get_baseline(tmp_dir, scm, dvc): ) scm.add(["dvc.yaml", "dvc.lock", "copy.py", "params.yaml", "metrics.yaml"]) scm.commit("init") - expected = scm.get_rev() - assert dvc.experiments.get_baseline(expected) is None + init_rev = scm.get_rev() + assert dvc.experiments.get_baseline(init_rev) is None results = dvc.experiments.run(stage.addressing, params=["foo=2"]) - assert dvc.experiments.get_baseline(first(results)) == expected + exp_rev = first(results) + assert dvc.experiments.get_baseline(exp_rev) == init_rev dvc.experiments.run(stage.addressing, params=["foo=3"], queue=True) - assert dvc.experiments.get_baseline("stash@{0}") == expected + assert dvc.experiments.get_baseline("stash@{0}") == init_rev + + dvc.experiments.checkout(exp_rev) + scm.add(["dvc.yaml", "dvc.lock", "copy.py", "params.yaml", "metrics.yaml"]) + scm.commit("promote exp") + promote_rev = scm.get_rev() + + results = dvc.experiments.run(stage.addressing, params=["foo=4"]) + exp_rev = first(results) + assert dvc.experiments.get_baseline(promote_rev) is None + assert dvc.experiments.get_baseline(exp_rev) == promote_rev + + dvc.experiments.run(stage.addressing, params=["foo=5"], queue=True) + assert dvc.experiments.get_baseline("stash@{0}") == promote_rev + assert dvc.experiments.get_baseline("stash@{1}") == init_rev def test_update_py_params(tmp_dir, scm, dvc):