From 92cdfe060597dfe9a05498cb5110eb18e6b84925 Mon Sep 17 00:00:00 2001 From: Vasilito Date: Fri, 8 May 2026 07:47:05 +0100 Subject: [PATCH] fix: all cub/cubl operations now use ~/.cub/ - import saves to ~/.cub/recipes/ (primary, not CWD) - build temp dirs use ~/.cub/tmp/ (not /tmp) - AUR clone temp dirs use ~/.cub/tmp/ - cub_temp_dir() replaces create_temp_dir() - removed old create_temp_dir (dead code) --- .../system/cub/source/cub-cli/src/main.rs | 62 ++++++++++++------- 1 file changed, 39 insertions(+), 23 deletions(-) diff --git a/local/recipes/system/cub/source/cub-cli/src/main.rs b/local/recipes/system/cub/source/cub-cli/src/main.rs index ccfee9f60..4f822a6b4 100644 --- a/local/recipes/system/cub/source/cub-cli/src/main.rs +++ b/local/recipes/system/cub/source/cub-cli/src/main.rs @@ -555,7 +555,7 @@ fn build_local_dir(context: &AppContext, dir: &Path) -> Result<(), Box Result<(), Box> { } let repo_url = aur_repo_url(package); - let clone_dir = create_temp_dir("cub-dep-aur")?; + let clone_dir = cub_temp_dir("dep-aur")?; let status = Command::new("git") .arg("clone") @@ -770,7 +770,7 @@ fn fetch_bur_recipe(package: &str) -> Result<(), Box> { fn get_aur_recipe(package: &str) -> Result<(), Box> { validate_git_target(package)?; let repo_url = aur_repo_url(package); - let clone_dir = create_temp_dir("cub-aur-get")?; + let clone_dir = cub_temp_dir("aur-get")?; let status = Command::new("git") .arg("clone") @@ -842,7 +842,7 @@ fn inspect_target(context: &AppContext, target: &str) -> Result<(), Box Result<(), Box> { validate_git_target(target)?; let repo_url = aur_repo_url(target); - let clone_dir = create_temp_dir("cub-aur")?; + let clone_dir = cub_temp_dir("aur")?; let status = Command::new("git") .arg("clone") @@ -861,33 +861,54 @@ fn import_aur_target(target: &str) -> Result<(), Box> { let pkgbuild_path = clone_dir.join("PKGBUILD"); let pkgbuild = fs::read_to_string(&pkgbuild_path)?; let conversion = PkgbuildConverter::convert(&pkgbuild)?; - let output_dir = env::current_dir()?.join(&conversion.rbpkg.package.name); - fs::create_dir_all(&output_dir)?; - fs::create_dir_all(output_dir.join("patches"))?; - fs::create_dir_all(output_dir.join("import"))?; + let store = CubStore::new()?; + store.init()?; + let store_dir = store.recipes_dir().join(&conversion.rbpkg.package.name); + fs::create_dir_all(&store_dir)?; + fs::create_dir_all(store_dir.join("patches"))?; + fs::create_dir_all(store_dir.join("import"))?; - fs::write(output_dir.join("RBPKGBUILD"), conversion.rbpkg.to_toml()?)?; + fs::write(store_dir.join("RBPKGBUILD"), conversion.rbpkg.to_toml()?)?; fs::write( - output_dir.join(".RBSRCINFO"), + store_dir.join(".RBSRCINFO"), RbSrcInfo::from_rbpkgbuild(&conversion.rbpkg).to_string(), )?; - fs::write(output_dir.join("import").join("PKGBUILD"), pkgbuild)?; + fs::write(store_dir.join("import").join("PKGBUILD"), pkgbuild)?; + cub::recipe::save_recipe_to_store(&conversion.rbpkg, &store)?; let report = render_conversion_report(&conversion.report); - fs::write(output_dir.join("import").join("report.txt"), &report)?; + fs::write(store_dir.join("import").join("report.txt"), &report)?; - println!("Imported AUR package into {}", output_dir.display()); + println!("Saved to ~/.cub/: {}", store_dir.display()); println!("{report}"); - match cub::recipe::save_recipe_to_store(&conversion.rbpkg, &CubStore::new()?) { - Ok(path) => println!("Also saved to ~/.cub/: {}", path.display()), - Err(e) => eprintln!("Note: could not save to ~/.cub/: {e}"), - } - Ok(()) } +fn cub_temp_dir(prefix: &str) -> Result> { + let store = CubStore::new()?; + store.init()?; + let base = store.root_dir.join("tmp"); + fs::create_dir_all(&base)?; + let nanos = SystemTime::now() + .duration_since(UNIX_EPOCH) + .map(|d| d.as_nanos()) + .unwrap_or(0); + for attempt in 0..128 { + let candidate = base.join(format!("{prefix}-{}-{nanos}-{attempt}", std::process::id())); + if !candidate.exists() { + fs::create_dir_all(&candidate)?; + return Ok(candidate); + } + } + Err(io::Error::new( + io::ErrorKind::AlreadyExists, + format!("failed to allocate ~/.cub/tmp directory for {prefix}"), + ) + .into()) +} + fn update_all(context: &AppContext) -> Result<(), Box> { host_only_notice("update-all")?; let mut library = context.open_library()?; @@ -1423,11 +1444,6 @@ fn render_conversion_report(report: &ConversionReport) -> String { output } -fn create_temp_dir(prefix: &str) -> Result> { - let path = tempfile::Builder::new().prefix(prefix).tempdir()?.keep(); - Ok(path) -} - fn copy_dir_recursive(src: &Path, dst: &Path) -> Result<(), Box> { fs::create_dir_all(dst)?; for entry in fs::read_dir(src)? {