Dedicated cache directory per ruff version (#8333)

This commit is contained in:
Micha Reiser 2023-10-30 18:08:30 +09:00 committed by GitHub
parent 951c59c6ad
commit 8cc97f70b4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 7 additions and 11 deletions

1
Cargo.lock generated
View file

@ -2081,7 +2081,6 @@ dependencies = [
"insta-cmd", "insta-cmd",
"is-macro", "is-macro",
"itertools 0.11.0", "itertools 0.11.0",
"itoa",
"log", "log",
"mimalloc", "mimalloc",
"notify", "notify",

View file

@ -44,7 +44,6 @@ glob = { workspace = true }
ignore = { workspace = true } ignore = { workspace = true }
is-macro = { workspace = true } is-macro = { workspace = true }
itertools = { workspace = true } itertools = { workspace = true }
itoa = { version = "1.0.6" }
log = { workspace = true } log = { workspace = true }
notify = { version = "6.1.1" } notify = { version = "6.1.1" }
path-absolutize = { workspace = true, features = ["once_cell_cache"] } path-absolutize = { workspace = true, features = ["once_cell_cache"] }

View file

@ -1,4 +1,3 @@
use std::collections::HashMap;
use std::fmt::Debug; use std::fmt::Debug;
use std::fs::{self, File}; use std::fs::{self, File};
use std::hash::Hasher; use std::hash::Hasher;
@ -20,7 +19,7 @@ use serde::{Deserialize, Serialize};
use ruff_cache::{CacheKey, CacheKeyHasher}; use ruff_cache::{CacheKey, CacheKeyHasher};
use ruff_diagnostics::{DiagnosticKind, Fix}; use ruff_diagnostics::{DiagnosticKind, Fix};
use ruff_linter::message::Message; use ruff_linter::message::Message;
use ruff_linter::warn_user; use ruff_linter::{warn_user, VERSION};
use ruff_macros::CacheKey; use ruff_macros::CacheKey;
use ruff_notebook::NotebookIndex; use ruff_notebook::NotebookIndex;
use ruff_python_ast::imports::ImportMap; use ruff_python_ast::imports::ImportMap;
@ -102,9 +101,8 @@ impl Cache {
pub(crate) fn open(package_root: PathBuf, settings: &Settings) -> Self { pub(crate) fn open(package_root: PathBuf, settings: &Settings) -> Self {
debug_assert!(package_root.is_absolute(), "package root not canonicalized"); debug_assert!(package_root.is_absolute(), "package root not canonicalized");
let mut buf = itoa::Buffer::new(); let key = format!("{}", cache_key(&package_root, settings));
let key = Path::new(buf.format(cache_key(&package_root, settings))); let path = PathBuf::from_iter([&settings.cache_dir, Path::new(VERSION), Path::new(&key)]);
let path = PathBuf::from_iter([&settings.cache_dir, Path::new("content"), key]);
let file = match File::open(&path) { let file = match File::open(&path) {
Ok(file) => file, Ok(file) => file,
@ -142,7 +140,7 @@ impl Cache {
fn empty(path: PathBuf, package_root: PathBuf) -> Self { fn empty(path: PathBuf, package_root: PathBuf) -> Self {
let package = PackageCache { let package = PackageCache {
package_root, package_root,
files: HashMap::new(), files: FxHashMap::default(),
}; };
Cache::new(path, package) Cache::new(path, package)
} }
@ -294,7 +292,7 @@ struct PackageCache {
/// single file "packages", e.g. scripts. /// single file "packages", e.g. scripts.
package_root: PathBuf, package_root: PathBuf,
/// Mapping of source file path to it's cached data. /// Mapping of source file path to it's cached data.
files: HashMap<RelativePathBuf, FileCache>, files: FxHashMap<RelativePathBuf, FileCache>,
} }
/// On disk representation of the cache per source file. /// On disk representation of the cache per source file.
@ -350,16 +348,16 @@ struct FileCacheData {
/// version. /// version.
fn cache_key(package_root: &Path, settings: &Settings) -> u64 { fn cache_key(package_root: &Path, settings: &Settings) -> u64 {
let mut hasher = CacheKeyHasher::new(); let mut hasher = CacheKeyHasher::new();
env!("CARGO_PKG_VERSION").cache_key(&mut hasher);
package_root.cache_key(&mut hasher); package_root.cache_key(&mut hasher);
settings.cache_key(&mut hasher); settings.cache_key(&mut hasher);
hasher.finish() hasher.finish()
} }
/// Initialize the cache at the specified `Path`. /// Initialize the cache at the specified `Path`.
pub(crate) fn init(path: &Path) -> Result<()> { pub(crate) fn init(path: &Path) -> Result<()> {
// Create the cache directories. // Create the cache directories.
fs::create_dir_all(path.join("content"))?; fs::create_dir_all(path.join(VERSION))?;
// Add the CACHEDIR.TAG. // Add the CACHEDIR.TAG.
if !cachedir::is_tagged(path)? { if !cachedir::is_tagged(path)? {