From 6695e6c26908038a98b224de7088c7d5df9a7d8f Mon Sep 17 00:00:00 2001 From: "Brandon T. Willard" Date: Tue, 4 Jun 2024 13:45:47 -0500 Subject: [PATCH] Fix use of results.env --- asv/commands/profiling.py | 17 ++++++++++++----- asv/results.py | 2 +- test/test_profile.py | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/asv/commands/profiling.py b/asv/commands/profiling.py index fc32dc8cf..c413101db 100644 --- a/asv/commands/profiling.py +++ b/asv/commands/profiling.py @@ -140,15 +140,22 @@ def run(cls, conf, benchmark, revision=None, gui=None, output=None, conf.results_dir, machine_name): if hash_equal(commit_hash, result.commit_hash): if result.has_profile(benchmark): - env_matched = any(result.env.name == env.name - for env in environments) + # Only take the first one + env_matched = next( + ( + env + for env in environments + if result.env_name == env.name + ), + None, + ) if env_matched: - if result.env.name not in checked_out: + if result.env_name not in checked_out: # We need to checkout the correct commit so that # the line numbers in the profile data match up with # what's in the source tree. - result.env.checkout_project(repo, commit_hash) - checked_out.add(result.env.name) + env_matched.checkout_project(repo, commit_hash) + checked_out.add(result.env_name) profile_data = result.get_profile(benchmark) break diff --git a/asv/results.py b/asv/results.py index 579127070..c309d3f56 100644 --- a/asv/results.py +++ b/asv/results.py @@ -573,7 +573,7 @@ def has_profile(self, benchmark_name): """ Does the given benchmark data have profiling information? """ - return benchmark_name in self._profiles + return self._profiles.get(benchmark_name) def save(self, result_dir): """ diff --git a/test/test_profile.py b/test/test_profile.py index ecaab0b0d..fb7f6af41 100644 --- a/test/test_profile.py +++ b/test/test_profile.py @@ -1,5 +1,7 @@ import re +from asv import util + from . import tools @@ -17,3 +19,33 @@ def test_profile_python_same(capsys, basic_conf): # Check that it did not clone or install assert "Cloning" not in text assert "Installing" not in text + + +def test_profile_python_commit(capsys, basic_conf): + + tmpdir, local, conf, machine_file = basic_conf + + # Create initial results with no profile results + tools.run_asv_with_conf(conf, 'run', "--quick", "--bench=time_secondary.track_value", + f'{util.git_default_branch()}^!', _machine_file=machine_file) + text, err = capsys.readouterr() + + assert "Installing" in text + + # Query the previous empty results results; there should be no issues here + tools.run_asv_with_conf(conf, 'profile', "time_secondary.track_value", + f'{util.git_default_branch()}', _machine_file=machine_file) + text, err = capsys.readouterr() + + assert "Profile data does not already exist" in text + + tools.run_asv_with_conf(conf, 'run', "--quick", "--profile", + "--bench=time_secondary.track_value", + f'{util.git_default_branch()}^!', _machine_file=machine_file) + + # Profile results should be present now + tools.run_asv_with_conf(conf, 'profile', "time_secondary.track_value", + f'{util.git_default_branch()}', _machine_file=machine_file) + text, err = capsys.readouterr() + + assert "Profile data does not already exist" not in text