evobench_tools/run/
dataset_dir_env_var.rs1use std::path::{Path, PathBuf};
2
3use anyhow::{Result, bail};
4use run_git::git::GitWorkingDir;
5
6use crate::{
7 git::GitHash,
8 run::{
9 custom_parameter::CustomParameterType, key::CustomParameters,
10 versioned_dataset_dir::VersionedDatasetDir, working_directory::FetchedTags,
11 },
12};
13
14macro_rules! try_ok {
15 { $e:expr } => {
16 match $e {
17 Some(v) => v,
18 None => return Ok(None)
19 }
20 }
21}
22
23pub fn dataset_dir_for(
29 versioned_datasets_base_dir: Option<&Path>,
31 custom_parameters: &CustomParameters,
32 versioned_dataset_dir: &VersionedDatasetDir,
34 git_working_dir: &GitWorkingDir,
35 commit_id: &GitHash,
36 fetched_tags: FetchedTags,
37) -> Result<Option<PathBuf>> {
38 if fetched_tags != FetchedTags::Yes {
39 bail!("dataset_dir_for: require updated tags, but got {fetched_tags:?}")
40 }
41
42 let versioned_datasets_base_dir = try_ok!(versioned_datasets_base_dir);
43
44 let key = "DATASET";
45 let dataset_name = try_ok!(
46 custom_parameters
47 .btree_map()
48 .get(&key.parse().expect("fits requirements"))
49 );
50
51 let ty = dataset_name.r#type();
52 if ty != CustomParameterType::Dirname {
53 bail!("custom parameter {key:?} is expected to be a Dirname, but is defined as {ty:?}")
54 }
55
56 let vdirlock = versioned_dataset_dir.updated_git_graph(git_working_dir, commit_id)?;
57
58 Ok(Some(vdirlock.dataset_dir_for_commit(
59 versioned_datasets_base_dir,
60 dataset_name.as_str(),
61 )?))
62}