aboutsummaryrefslogtreecommitdiff
path: root/mingling_cli/src/pkg_mgr.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-08-07 15:48:37 +0800
committer魏曹先生 <1992414357@qq.com>2026-08-09 02:56:28 +0800
commitc2de5313748e7d5f8ad7efee9ffecb513994443a (patch)
treec449707d80a435ba14684c3b0387ea971da66ea7 /mingling_cli/src/pkg_mgr.rs
parentb5251db3f8bfb1a9b8ba946570baabce813c6ba8 (diff)
feat(pkg_mgr): add uninstall command and improve install
Implement `mling uninstall` to remove installed packages by name or name@version, with shell completion support. Rework install to build release binaries, copy them plus completion scripts to a per-version directory under the user data dir.
Diffstat (limited to 'mingling_cli/src/pkg_mgr.rs')
-rw-r--r--mingling_cli/src/pkg_mgr.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/mingling_cli/src/pkg_mgr.rs b/mingling_cli/src/pkg_mgr.rs
index b77c3b3..7aea59d 100644
--- a/mingling_cli/src/pkg_mgr.rs
+++ b/mingling_cli/src/pkg_mgr.rs
@@ -1,2 +1,40 @@
pub mod cmd_install;
+pub mod cmd_uninstall;
+use std::path::PathBuf;
+
+use mingling::{
+ Program,
+ macros::{buffer, pack_err, program_setup, r_println, renderer},
+};
+
+use crate::ThisProgram;
+
+pack_err!(ErrorRootPackageNotFound);
+pack_err!(ErrorNoDataDirectory);
+
+/// The `.mingling` packages directory under the user's data directory.
+#[derive(Debug, Default, Clone)]
+pub struct ResPackagesDir {
+ pub path: PathBuf,
+}
+
+#[program_setup]
+pub fn package_manager_setup(program: &mut Program<ThisProgram>) {
+ let path = dirs::data_dir()
+ .map(|data_dir| data_dir.join(".mingling"))
+ .unwrap_or_default();
+ program.with_resource(ResPackagesDir { path });
+}
+
+#[renderer(buffer)]
+pub fn render_error_root_package_not_found(_: ErrorRootPackageNotFound) {
+ r_println!("error: failed to determine the root package");
+ r_println!("");
+ r_println!("Run `mling install` / `mling uninstall` inside a Cargo workspace");
+}
+
+#[renderer(buffer)]
+pub fn render_error_no_data_directory(_: ErrorNoDataDirectory) {
+ r_println!("error: failed to determine the data directory");
+}