summaryrefslogtreecommitdiff
path: root/src/pkgtoolkit
diff options
context:
space:
mode:
authorNamilskyy <alive6863@gmail.com>2025-11-25 16:50:59 +0300
committerNamilskyy <alive6863@gmail.com>2025-11-25 16:50:59 +0300
commit778f713b2c4b8f8311daf2b878de91e449f69988 (patch)
tree020af9cb8ea6e78a2edca31879c94cf50942f50e /src/pkgtoolkit
parent296b5dc8473fe2e0fe39ec94b9e5109aa7857774 (diff)
Created minimal package validation here. Writed documentations comments (///)
Diffstat (limited to 'src/pkgtoolkit')
-rw-r--r--src/pkgtoolkit/pkgtools.rs85
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!();
}