feat: support configuration scripts

Signed-off-by: sisungo <[email protected]>
This commit is contained in:
2026-09-10 13:00:27 +00:00
parent 55b40267ff
commit b5e91ce8b6
11 changed files with 245 additions and 25 deletions
+18
View File
@@ -1,6 +1,7 @@
use chrono::{Local, TimeZone};
use console::{Term, style};
use indicatif::ProgressStyle;
use packie::{Packie, local::Installation, package::PkgSpec};
use rust_i18n::t;
pub fn progress_style_multidownload() -> ProgressStyle {
@@ -78,3 +79,20 @@ pub fn format_datetime(timestamp: i64) -> String {
};
datetime.to_string()
}
pub fn search_unique_package(
packie: &mut Packie,
pkgspec: &PkgSpec,
) -> Result<Installation, crate::Error> {
let mut found = packie.search_installation(&pkgspec)?;
if found.is_empty() {
return Err(crate::error!("common.package_not_found"));
}
if found.len() != 1 {
return Err(crate::Error {
message: rust_i18n::t!("common.error_pkgspec_not_unique").into(),
note: Some(rust_i18n::t!("common.note_pkgspec_not_unique").into()),
});
}
Ok(found.remove(0))
}
+5
View File
@@ -4,6 +4,7 @@ mod info;
mod initdb;
mod install;
mod print;
mod reconfigure;
mod remove;
mod repo_admin;
mod select;
@@ -53,6 +54,9 @@ enum Subcommand {
/// Select global link
Select(select::Cli),
/// Run configure scripts
Reconfigure(reconfigure::Cli),
}
fn main() {
@@ -79,6 +83,7 @@ fn main() {
Subcommand::RepoAdmin(cli) => repo_admin::main(cli),
Subcommand::Update(cli) => update::main(cli),
Subcommand::Select(cli) => select::main(cli),
Subcommand::Reconfigure(cli) => reconfigure::main(cli),
};
if let Err(err) = result {
eprintln!("{}", style(t!("main.error", error = err.message)).red());
+33
View File
@@ -0,0 +1,33 @@
use crate::common::search_unique_package;
use clap::Parser;
use packie::{
PackieBuilder,
configure::{Action, ConfigureOptions},
package::PkgSpec,
};
#[derive(Debug, Parser)]
pub struct Cli {
#[arg(short = 'I', long)]
non_interactive: bool,
pkgspec: PkgSpec,
item: Option<String>,
}
pub fn main(cli: Cli) -> Result<(), crate::Error> {
let mut packie = PackieBuilder::new().build()?;
let pkg = search_unique_package(&mut packie, &cli.pkgspec)?;
packie.run_configure(
&pkg.pkg_manifest.pkg_ident(),
cli.item,
&ConfigureOptions {
action: Action::Configure,
interactive: !cli.non_interactive,
prefix: None,
extra_args: Vec::new(),
},
)?;
Ok(())
}
+2 -12
View File
@@ -1,7 +1,4 @@
use crate::{
common::{print_list, yesno},
error,
};
use crate::common::{print_list, search_unique_package, yesno};
use anyhow::anyhow;
use clap::Parser;
use console::style;
@@ -20,14 +17,7 @@ pub fn main(cli: Cli) -> Result<(), crate::Error> {
let mut packie = PackieBuilder::new().build()?;
let mut packages = Vec::with_capacity(cli.items.len());
for pkgspec in cli.items {
let mut found = packie.search_installation(&pkgspec)?;
if found.is_empty() {
return Err(error!("remove.package_not_found"));
}
if found.len() != 1 {
return Err(error!("remove.pkgspec_not_unique"));
}
packages.push(found.remove(0));
packages.push(search_unique_package(&mut packie, &pkgspec)?);
}
println!("{}", t!("remove.prompt_to_remove"));
print_list(