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)
This commit is contained in:
2026-05-08 07:47:05 +01:00
parent c46753eaca
commit 92cdfe0605
@@ -555,7 +555,7 @@ fn build_local_dir(context: &AppContext, dir: &Path) -> Result<(), Box<dyn std::
}
}
let work_dir = create_temp_dir("cub-build")?;
let work_dir = cub_temp_dir("build")?;
let recipe_dir = work_dir.join(&rbpkg.package.name);
CookbookAdapter::write_recipe_dir(&rbpkg, &recipe_dir)?;
@@ -697,7 +697,7 @@ fn fetch_aur_to_store(package: &str) -> Result<(), Box<dyn std::error::Error>> {
}
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<dyn std::error::Error>> {
fn get_aur_recipe(package: &str) -> Result<(), Box<dyn std::error::Error>> {
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<dyn std:
fn import_aur_target(target: &str) -> Result<(), Box<dyn std::error::Error>> {
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<dyn std::error::Error>> {
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<PathBuf, Box<dyn std::error::Error>> {
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<dyn std::error::Error>> {
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<PathBuf, Box<dyn std::error::Error>> {
let path = tempfile::Builder::new().prefix(prefix).tempdir()?.keep();
Ok(path)
}
fn copy_dir_recursive(src: &Path, dst: &Path) -> Result<(), Box<dyn std::error::Error>> {
fs::create_dir_all(dst)?;
for entry in fs::read_dir(src)? {