feat: support configuration scripts
Signed-off-by: sisungo <[email protected]>
This commit is contained in:
@@ -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))
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user