From e3e193f7e1592a19f0fea6a91c9fe0f9c57cc955 Mon Sep 17 00:00:00 2001 From: steven-omaha <35634100+steven-omaha@users.noreply.github.com> Date: Mon, 27 Feb 2023 19:54:52 +0100 Subject: [PATCH] disable 'as dependency' if backend does not support it --- TODO.md | 1 - crates/pacdef_core/src/backend/actual/arch.rs | 2 ++ crates/pacdef_core/src/backend/actual/debian.rs | 2 ++ crates/pacdef_core/src/backend/actual/python.rs | 2 ++ crates/pacdef_core/src/backend/actual/rust.rs | 3 +++ crates/pacdef_core/src/backend/backend_trait.rs | 2 ++ crates/pacdef_core/src/backend/macros.rs | 4 ++++ crates/pacdef_core/src/review/mod.rs | 13 ++++++++++--- 8 files changed, 25 insertions(+), 4 deletions(-) diff --git a/TODO.md b/TODO.md index 2071fee..4db956f 100644 --- a/TODO.md +++ b/TODO.md @@ -1,4 +1,3 @@ # To Do - tutorial -- disable "as dependency" where it is not supported (python, rust) diff --git a/crates/pacdef_core/src/backend/actual/arch.rs b/crates/pacdef_core/src/backend/actual/arch.rs index 0f84649..efc8cae 100644 --- a/crates/pacdef_core/src/backend/actual/arch.rs +++ b/crates/pacdef_core/src/backend/actual/arch.rs @@ -23,6 +23,8 @@ const SWITCHES_INSTALL: Switches = &["--sync"]; const SWITCHES_MAKE_DEPENDENCY: Switches = &["--database", "--asdeps"]; const SWITCHES_REMOVE: Switches = &["--remove", "--recursive"]; +const SUPPORTS_AS_DEPENDENCY: bool = true; + impl Backend for Arch { impl_backend_constants!(); diff --git a/crates/pacdef_core/src/backend/actual/debian.rs b/crates/pacdef_core/src/backend/actual/debian.rs index 824a501..19c45cc 100644 --- a/crates/pacdef_core/src/backend/actual/debian.rs +++ b/crates/pacdef_core/src/backend/actual/debian.rs @@ -22,6 +22,8 @@ const SWITCHES_INSTALL: Switches = &["install"]; const SWITCHES_MAKE_DEPENDENCY: Switches = &[]; // not needed const SWITCHES_REMOVE: Switches = &["remove"]; +const SUPPORTS_AS_DEPENDENCY: bool = true; + impl Backend for Debian { impl_backend_constants!(); diff --git a/crates/pacdef_core/src/backend/actual/python.rs b/crates/pacdef_core/src/backend/actual/python.rs index e1f2824..aa45b15 100644 --- a/crates/pacdef_core/src/backend/actual/python.rs +++ b/crates/pacdef_core/src/backend/actual/python.rs @@ -22,6 +22,8 @@ const SWITCHES_INSTALL: Switches = &["install"]; const SWITCHES_MAKE_DEPENDENCY: Switches = &[]; // not needed const SWITCHES_REMOVE: Switches = &["uninstall"]; +const SUPPORTS_AS_DEPENDENCY: bool = false; + impl Backend for Python { impl_backend_constants!(); diff --git a/crates/pacdef_core/src/backend/actual/rust.rs b/crates/pacdef_core/src/backend/actual/rust.rs index 1b99105..6c77940 100644 --- a/crates/pacdef_core/src/backend/actual/rust.rs +++ b/crates/pacdef_core/src/backend/actual/rust.rs @@ -16,11 +16,14 @@ pub struct Rust { const BINARY: Text = "cargo"; const SECTION: Text = "rust"; + const SWITCHES_INSTALL: Switches = &["install"]; const SWITCHES_INFO: Switches = &["search", "--limit", "1"]; const SWITCHES_MAKE_DEPENDENCY: Switches = &[]; const SWITCHES_REMOVE: Switches = &["uninstall"]; +const SUPPORTS_AS_DEPENDENCY: bool = false; + impl Backend for Rust { impl_backend_constants!(); diff --git a/crates/pacdef_core/src/backend/backend_trait.rs b/crates/pacdef_core/src/backend/backend_trait.rs index 07c1c6a..6d8a3d6 100644 --- a/crates/pacdef_core/src/backend/backend_trait.rs +++ b/crates/pacdef_core/src/backend/backend_trait.rs @@ -120,6 +120,8 @@ pub trait Backend: Debug { } fn as_any_mut(&mut self) -> &mut dyn Any; + + fn supports_as_dependency(&self) -> bool; } fn get_group_packages_map( diff --git a/crates/pacdef_core/src/backend/macros.rs b/crates/pacdef_core/src/backend/macros.rs index b5fca05..9c3a00b 100644 --- a/crates/pacdef_core/src/backend/macros.rs +++ b/crates/pacdef_core/src/backend/macros.rs @@ -53,5 +53,9 @@ macro_rules! impl_backend_constants { fn as_any_mut(&mut self) -> &mut dyn std::any::Any { self } + + fn supports_as_dependency(&self) -> bool { + SUPPORTS_AS_DEPENDENCY + } }; } diff --git a/crates/pacdef_core/src/review/mod.rs b/crates/pacdef_core/src/review/mod.rs index c15c05f..2223a01 100644 --- a/crates/pacdef_core/src/review/mod.rs +++ b/crates/pacdef_core/src/review/mod.rs @@ -76,8 +76,9 @@ fn get_action_for_package( backend: &dyn Backend, ) -> Result { loop { - match ask_user_action_for_package()? { + match ask_user_action_for_package(backend.supports_as_dependency())? { ReviewIntention::AsDependency => { + assert!(!backend.supports_as_dependency()); reviews.push(ReviewAction::AsDependency(package)); break; } @@ -102,9 +103,15 @@ fn get_action_for_package( Ok(ContinueWithReview::Yes) } -fn ask_user_action_for_package() -> Result { - print!("assign to (g)roup, (d)elete, (s)kip, (i)nfo, (a)s dependency, (q)uit? "); +fn ask_user_action_for_package(supports_as_dependency: bool) -> Result { + print!("assign to (g)roup, (d)elete, (s)kip, (i)nfo, "); + + if supports_as_dependency { + print!("(a)s dependency, "); + } + print!("(q)uit? "); stdout().lock().flush()?; + match read_single_char_from_terminal()? { 'a' => Ok(ReviewIntention::AsDependency), 'd' => Ok(ReviewIntention::Delete),