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:
@@ -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)? {
|
||||
|
||||
Reference in New Issue
Block a user