mirror of
https://github.com/pezkuwichain/revive-differential-tests.git
synced 2026-04-22 23:07:58 +00:00
0513a4befb
This commit updates how logging is done in the differential testing harness to use `tracing` instead of using the `log` crate. This allows us to be able to better associate logs with the cases being executed which makes it easier to debug and understand what the harness is doing.
72 lines
2.0 KiB
Rust
72 lines
2.0 KiB
Rust
//! Helper for caching the solc binaries.
|
|
|
|
use std::{
|
|
collections::HashSet,
|
|
fs::{File, create_dir_all},
|
|
io::{BufWriter, Write},
|
|
os::unix::fs::PermissionsExt,
|
|
path::{Path, PathBuf},
|
|
sync::{LazyLock, Mutex},
|
|
};
|
|
|
|
use crate::download::GHDownloader;
|
|
|
|
pub const SOLC_CACHE_DIRECTORY: &str = "solc";
|
|
pub(crate) static SOLC_CACHER: LazyLock<Mutex<HashSet<PathBuf>>> = LazyLock::new(Default::default);
|
|
|
|
pub(crate) fn get_or_download(
|
|
working_directory: &Path,
|
|
downloader: &GHDownloader,
|
|
) -> anyhow::Result<PathBuf> {
|
|
let target_directory = working_directory
|
|
.join(SOLC_CACHE_DIRECTORY)
|
|
.join(downloader.version.to_string());
|
|
let target_file = target_directory.join(downloader.target);
|
|
|
|
let mut cache = SOLC_CACHER.lock().unwrap();
|
|
if cache.contains(&target_file) {
|
|
tracing::debug!("using cached solc: {}", target_file.display());
|
|
return Ok(target_file);
|
|
}
|
|
|
|
create_dir_all(target_directory)?;
|
|
download_to_file(&target_file, downloader)?;
|
|
cache.insert(target_file.clone());
|
|
|
|
Ok(target_file)
|
|
}
|
|
|
|
fn download_to_file(path: &Path, downloader: &GHDownloader) -> anyhow::Result<()> {
|
|
tracing::info!("caching file: {}", path.display());
|
|
|
|
let Ok(file) = File::create_new(path) else {
|
|
tracing::debug!("cache file already exists: {}", path.display());
|
|
return Ok(());
|
|
};
|
|
|
|
#[cfg(unix)]
|
|
{
|
|
let mut permissions = file.metadata()?.permissions();
|
|
permissions.set_mode(permissions.mode() | 0o111);
|
|
file.set_permissions(permissions)?;
|
|
}
|
|
|
|
let mut file = BufWriter::new(file);
|
|
file.write_all(&downloader.download()?)?;
|
|
file.flush()?;
|
|
drop(file);
|
|
|
|
#[cfg(target_os = "macos")]
|
|
std::process::Command::new("xattr")
|
|
.arg("-d")
|
|
.arg("com.apple.quarantine")
|
|
.arg(path)
|
|
.stderr(std::process::Stdio::null())
|
|
.stdout(std::process::Stdio::null())
|
|
.stdout(std::process::Stdio::null())
|
|
.spawn()?
|
|
.wait()?;
|
|
|
|
Ok(())
|
|
}
|