From df8fd5f20e4287563be98f46a9f925f93401b695 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Thu, 9 Nov 2023 13:10:33 +0100 Subject: [PATCH] added package search feature searches package names, descritions and urls for the given query (uses plaintext search for now) --- README.md | 17 ++++++++++++++++- src/cmds/mod.rs | 2 ++ src/cmds/search.rs | 16 ++++++++++++++++ src/main.rs | 2 +- 4 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 src/cmds/search.rs diff --git a/README.md b/README.md index e927533..7bbd4e8 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,22 @@ cabin help list > -h, --help Print help ### Search -Unimplemented +```sh +cabin search +``` +Search through package names, descriptions and urls and lists package names,versions and rels. + +```sh +cabin help search +``` +> Searches the database for a package with the name or containing the name +> Usage: cabin search [OPTIONS] +> Arguments: +> search query +> Options: +> -d, --db package database path +> -h, --help Print help + ### Build To build a given package in the repo, diff --git a/src/cmds/mod.rs b/src/cmds/mod.rs index 249c9c5..d5a3d75 100644 --- a/src/cmds/mod.rs +++ b/src/cmds/mod.rs @@ -3,8 +3,10 @@ mod list; mod info; mod build; mod tree; +mod search; pub use scan::scan; pub use list::list; pub use info::info; pub use build::{build, build_all, build_multi}; pub use tree::tree; +pub use search::search; diff --git a/src/cmds/search.rs b/src/cmds/search.rs new file mode 100644 index 0000000..52f8df7 --- /dev/null +++ b/src/cmds/search.rs @@ -0,0 +1,16 @@ +use std::path::PathBuf; +use crate::types::Database; + +/// searches trough packages +/// checks package name, description and url +/// prints the package name, version and rel +pub fn search(query: String, db: Option) { + let db = Database::from_file(db.unwrap_or(PathBuf::from("db.yml"))) + .expect("Unable to open database"); + + for (_, pkg) in db.packages.iter() { + if pkg.name.contains(&query) || pkg.description.contains(&query) || pkg.url.contains(&query){ + println!("{}-{}-r{}", pkg.name, pkg.version, pkg.rel); + } + } +} diff --git a/src/main.rs b/src/main.rs index 3c419ae..8a97d33 100644 --- a/src/main.rs +++ b/src/main.rs @@ -134,6 +134,6 @@ fn main() { }, Commands::Tree { package, db, only_local } => cmds::tree(package, db, only_local), Commands::BuildAll { arch, db, verbose } => cmds::build_all(db, arch, verbose), - _ => panic!("Unimplemented") + Commands::Search { query, db } => cmds::search(query, db) } } -- 2.38.5