diff options
Diffstat (limited to 'src/pkgtoolkit')
| -rw-r--r-- | src/pkgtoolkit/pkgtools.rs | 85 |
1 files changed, 79 insertions, 6 deletions
diff --git a/src/pkgtoolkit/pkgtools.rs b/src/pkgtoolkit/pkgtools.rs index d124c2b..7197d9e 100644 --- a/src/pkgtoolkit/pkgtools.rs +++ b/src/pkgtoolkit/pkgtools.rs @@ -1,13 +1,86 @@ -use std::fs::File; -use tar::Archive; +use crate::cfg::config::Config; -pub struct Package { - BuildScript: String, - Name: String, - Version: String +use std::fs::{File, create_dir_all}; +use std::path::Path; +use flate2::read::GzDecoder; +use tar::Archive; + +pub enum arch { + x86_64, + aarch64, + x86, +} + +pub struct Package { + name: String, + version: String, + arch: arch, + descr: String, } impl Package { + + /// Checks if the archive contains INSTALL, SETTS and BUILD files. + /// + /// Checks if INSTALL file exists and is not empty. If it does not exist or is empty, returns an error. + /// + /// Checks if SETTS and BUILD files exist and are not empty. If they do not exist or are empty, logs a warning. + /// + /// * Returns an error if INSTALL file does not exist or is empty. + /// * Returns an error if INSTALL file is empty. + /// + // TODO: Add meta-files validation here. + pub fn check(path_to_archive: String) -> Result<bool, std::io::Error> { + let config: Config = Config::parse().unwrap(); + + create_dir_all(&config.paths.cache_dir)?; + + let file = File::open(&path_to_archive)?; + let gz = GzDecoder::new(file); + let mut archive = Archive::new(gz); + + archive.unpack(&config.paths.cache_dir)?; + + let install_path = Path::new(&config.paths.cache_dir).join("INSTALL"); + let setts_path = Path::new(&config.paths.cache_dir).join("SETTS"); + let build_path = Path::new(&config.paths.cache_dir).join("BUILD"); + + if !install_path.exists() { + return Err(std::io::Error::new( + std::io::ErrorKind::NotFound, + "INSTALL file not found in archive", + )); + } + + let install_content = std::fs::read_to_string(&install_path)?; + if install_content.trim().is_empty() { + return Err(std::io::Error::new( + std::io::ErrorKind::InvalidData, + "INSTALL file is empty", + )); + } + + if !setts_path.exists() { + log::warn!("SETTS file not found in archive. Make sure you dont need this."); + } else { + let setts_content = std::fs::read_to_string(&setts_path)?; + if setts_content.trim().is_empty() { + log::warn!("SETTS file is empty. Make sure you dont need this."); + } + } + + if !build_path.exists() { + log::warn!("BUILD file not found in archive. Make sure you dont need this."); + } else { + let build_content = std::fs::read_to_string(&build_path)?; + if build_content.trim().is_empty() { + log::warn!("BUILD file is empty. Make sure you dont need this."); + } + } + + Ok(true) +} + pub fn build() -> Result<bool, std::io::Error> { todo!(); } |
