From 778a979e2e774e1b2e91227fa2db2e56d41927c1 Mon Sep 17 00:00:00 2001 From: Namilskyy Date: Sun, 7 Dec 2025 14:29:35 +0300 Subject: Fixed logical issues --- src/main.rs | 90 ++++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 62 insertions(+), 28 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 2bdb29c..068a8fb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,10 +6,10 @@ use crate::cfg::config::Config; use crate::net::{http_package::HTTPPackage, i2p_package::I2PPackage}; use crate::pkgtoolkit::Package; -use crate::pkgtoolkit::index::IndexOperations; -use crate::pkgtoolkit::git_source::GitSource; use crate::pkgtoolkit::archive::ArchiveOperations; use crate::pkgtoolkit::build::BuildOperations; +use crate::pkgtoolkit::git_source::GitSource; +use crate::pkgtoolkit::index::IndexOperations; use clap::{Args, Parser, Subcommand}; use std::io::Write; @@ -72,7 +72,6 @@ struct RemoteInstallArgs { clean: bool, } - #[tokio::main] async fn main() -> Result<(), Box> { let cli: Cli = Cli::parse(); @@ -91,7 +90,7 @@ async fn main() -> Result<(), Box> { } Err(e) => { log::error!("Failed to validate package '{}': {}", path, e); - return Err(e.into()); + return Err(e.into()); } } return Ok(()); @@ -101,24 +100,52 @@ async fn main() -> Result<(), Box> { let path = Path::new(&pkgname); if !path.exists() { - return Err(std::io::Error::other(format!("Package archive not found: {}", pkgname)).into()); + return Err(std::io::Error::other(format!( + "Package archive not found: {}", + pkgname + )) + .into()); } if !path.is_file() { - return Err(std::io::Error::other(format!("Path is not a file: {}", pkgname)).into()); + return Err( + std::io::Error::other(format!("Path is not a file: {}", pkgname)).into(), + ); } println!("Extracting archive..."); Package::extract_archive(&pkgname)?; - let config = Config::parse().unwrap(); + let config = Config::parse().unwrap(); let cache_dir = &config.paths.cache_dir; - let install_toml_path = Path::new(cache_dir).join("INSTALL"); - + + // Find the package directory (should be name-version format) + let mut pkg_dir_name = None; + for entry in std::fs::read_dir(cache_dir)? { + let entry = entry?; + let path = entry.path(); + if path.is_dir() { + let dir_name = path.file_name().unwrap().to_string_lossy(); + if dir_name.contains('-') && dir_name != "temp_extract" { + let install_path = path.join("INSTALL"); + if install_path.exists() { + pkg_dir_name = Some(dir_name.to_string()); + break; + } + } + } + } + + let pkg_dir_name = pkg_dir_name.ok_or_else(|| { + std::io::Error::other("Package directory not found in cache") + })?; + + let install_toml_path = Path::new(cache_dir).join(format!("{}/INSTALL", pkg_dir_name)); + if !install_toml_path.exists() { - return Err(std::io::Error::other("INSTALL file not found in archive").into()); + return Err(std::io::Error::other("INSTALL file not found in package directory").into()); } - + let install_content = std::fs::read_to_string(&install_toml_path)?; let install_data: crate::pkgtoolkit::types::Install = toml::from_str(&install_content)?; @@ -129,21 +156,25 @@ async fn main() -> Result<(), Box> { println!("Package '{}' built successfully.", pkg.name); return Ok(()); } - Commands::Install { pkgname, source: _, args } => { - let config = Config::parse().unwrap(); + Commands::Install { + pkgname, + source: _, + args, + } => { + let config = Config::parse().unwrap(); if args.http { println!("Installing {} via HTTP", pkgname); let mut http_client = HTTPPackage::new(config); - http_client.fetch_index_http().await?; + http_client.fetch_index_http().await?; log::info!("Index fetched successfully."); http_client.fetch_package_http(pkgname).await?; log::info!("Package '{}' installed successfully.", pkgname); } else { println!("Installing {} via I2P", pkgname); let mut i2p_client = I2PPackage::new(config); - i2p_client.fetch_index().await?; + i2p_client.fetch_index().await?; log::info!("Index fetched successfully."); - i2p_client.fetch_package(pkgname).await?; + i2p_client.fetch_package(pkgname).await?; log::info!("Package '{}' installed successfully.", pkgname); } return Ok(()); @@ -153,15 +184,19 @@ async fn main() -> Result<(), Box> { return Ok(()); } Commands::GetSource { pkgname } => { - let config = Config::parse().unwrap(); + let config = Config::parse().unwrap(); println!("Getting source of {}", pkgname); - let source_path = GitSource::get_source_by_name(pkgname, &config)?; println!("Source code successfully downloaded to: {}", source_path); return Ok(()); } - Commands::DefaultConfig { repo, cachedir, buildir, installed_db } => { + Commands::DefaultConfig { + repo, + cachedir, + buildir, + installed_db, + } => { println!("Generating config file"); if cachedir.is_none() && repo.is_none() && buildir.is_none() { let config = Config::default().unwrap(); @@ -173,12 +208,12 @@ async fn main() -> Result<(), Box> { log::warn!("Writing the default config to /etc/mesk/mesk.toml"); let path = Path::new("/etc/mesk/mesk.toml"); - std::fs::create_dir_all(path.parent().unwrap())?; - let mut file = std::fs::File::create(path)?; + std::fs::create_dir_all(path.parent().unwrap())?; + let mut file = std::fs::File::create(path)?; file.write_all(config.as_bytes())?; println!("Config tool ending work."); } else { - let config = Config::generate(repo, cachedir, buildir, installed_db).unwrap(); + let config = Config::generate(repo, cachedir, buildir, installed_db).unwrap(); println!("---- Start of generated config ----"); println!("{:?}", config); @@ -187,19 +222,19 @@ async fn main() -> Result<(), Box> { log::warn!("Writing the default config to /etc/mesk/mesk.toml"); let path = Path::new("/etc/mesk/mesk.toml"); - std::fs::create_dir_all(path.parent().unwrap())?; - let mut file = std::fs::File::create(path)?; - file.write_all(config.as_bytes())?; + std::fs::create_dir_all(path.parent().unwrap())?; + let mut file = std::fs::File::create(path)?; + file.write_all(config.as_bytes())?; println!("Config tool ending work."); } return Ok(()); } Commands::Update => { - let config = Config::parse().unwrap(); + let config = Config::parse().unwrap(); println!("Updating index from {}", config.repo.repo_url); let mut i2p_client = I2PPackage::new(config); - i2p_client.fetch_index().await?; + i2p_client.fetch_index().await?; println!("Index updated successfully."); return Ok(()); } @@ -223,5 +258,4 @@ async fn main() -> Result<(), Box> { return Ok(()); } } - } -- cgit v1.2.3