aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart-vcs/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/mozart-vcs/src')
-rw-r--r--crates/mozart-vcs/src/driver/git.rs2
-rw-r--r--crates/mozart-vcs/src/driver/hg.rs4
-rw-r--r--crates/mozart-vcs/src/driver/mod.rs27
3 files changed, 27 insertions, 6 deletions
diff --git a/crates/mozart-vcs/src/driver/git.rs b/crates/mozart-vcs/src/driver/git.rs
index 43f4ecb..090a5fa 100644
--- a/crates/mozart-vcs/src/driver/git.rs
+++ b/crates/mozart-vcs/src/driver/git.rs
@@ -27,7 +27,7 @@ impl GitDriver {
pub fn new(url: &str, config: DriverConfig) -> Self {
let is_local = Self::is_local_path(url);
let process = ProcessExecutor::new();
- let git_util = GitUtil::new(process, config.cache_dir.join("git"));
+ let git_util = GitUtil::new(process, config.cache_vcs_dir.clone());
Self {
url: url.to_string(),
repo_dir: if is_local {
diff --git a/crates/mozart-vcs/src/driver/hg.rs b/crates/mozart-vcs/src/driver/hg.rs
index 0782775..f476e6a 100644
--- a/crates/mozart-vcs/src/driver/hg.rs
+++ b/crates/mozart-vcs/src/driver/hg.rs
@@ -51,8 +51,8 @@ impl HgDriver {
impl VcsDriver for HgDriver {
async fn initialize(&mut self) -> Result<()> {
- let cache_dir = self.config.cache_dir.join("hg");
- std::fs::create_dir_all(&cache_dir)?;
+ let cache_dir = &self.config.cache_vcs_dir;
+ std::fs::create_dir_all(cache_dir)?;
let repo_dir = cache_dir.join(crate::util::git::GitUtil::sanitize_url(&self.url));
if repo_dir.join(".hg").is_dir() {
diff --git a/crates/mozart-vcs/src/driver/mod.rs b/crates/mozart-vcs/src/driver/mod.rs
index 7a132ed..cfaf11e 100644
--- a/crates/mozart-vcs/src/driver/mod.rs
+++ b/crates/mozart-vcs/src/driver/mod.rs
@@ -34,8 +34,9 @@ pub struct DistReference {
/// Configuration passed to VCS drivers.
#[derive(Debug, Clone)]
pub struct DriverConfig {
- /// Path for caching VCS mirrors.
- pub cache_dir: PathBuf,
+ /// Composer's `cache-vcs-dir`: root for VCS mirrors, one
+ /// subdirectory per sanitized repository URL.
+ pub cache_vcs_dir: PathBuf,
/// GitHub OAuth token (from `GITHUB_TOKEN` or config).
pub github_token: Option<String>,
/// GitLab OAuth token.
@@ -53,7 +54,7 @@ pub struct DriverConfig {
impl Default for DriverConfig {
fn default() -> Self {
Self {
- cache_dir: PathBuf::from(".cache/mozart/vcs"),
+ cache_vcs_dir: default_cache_vcs_dir(),
github_token: None,
gitlab_token: None,
bitbucket_oauth: None,
@@ -64,6 +65,26 @@ impl Default for DriverConfig {
}
}
+/// Resolve the default `cache-vcs-dir`, honoring Composer's env vars.
+///
+/// Priority: `COMPOSER_CACHE_VCS_DIR` → `COMPOSER_CACHE_DIR/vcs` →
+/// `XDG_CACHE_HOME/mozart/vcs` → `$HOME/.cache/mozart/vcs`.
+fn default_cache_vcs_dir() -> PathBuf {
+ if let Ok(p) = std::env::var("COMPOSER_CACHE_VCS_DIR") {
+ return PathBuf::from(p);
+ }
+ let base = if let Ok(p) = std::env::var("COMPOSER_CACHE_DIR") {
+ PathBuf::from(p)
+ } else if let Ok(xdg) = std::env::var("XDG_CACHE_HOME") {
+ PathBuf::from(xdg).join("mozart")
+ } else if let Ok(home) = std::env::var("HOME") {
+ PathBuf::from(home).join(".cache").join("mozart")
+ } else {
+ PathBuf::from("/tmp").join("mozart")
+ };
+ base.join("vcs")
+}
+
/// Type of VCS driver.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DriverType {