feat: allow upgrading only specific packages (#2841)

This commit is contained in:
三咲雅 misaki masa 2025-06-05 19:46:49 +08:00 committed by GitHub
parent 20446544ef
commit 145349b0e6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 41 additions and 14 deletions

View file

@ -76,7 +76,12 @@ pub(super) enum CommandPkg {
/// List all packages. /// List all packages.
List, List,
/// Upgrade all packages. /// Upgrade all packages.
Upgrade, #[command(arg_required_else_help = true)]
Upgrade {
/// The packages to delete.
#[arg(index = 1, num_args = 1..)]
ids: Vec<String>,
},
} }
#[derive(clap::Args)] #[derive(clap::Args)]

View file

@ -67,9 +67,9 @@ async fn run() -> anyhow::Result<()> {
match cmd { match cmd {
CommandPkg::Add { ids } => pkg.add_many(&ids).await?, CommandPkg::Add { ids } => pkg.add_many(&ids).await?,
CommandPkg::Delete { ids } => pkg.delete_many(&ids).await?, CommandPkg::Delete { ids } => pkg.delete_many(&ids).await?,
CommandPkg::Install => pkg.install(false).await?, CommandPkg::Install => pkg.install().await?,
CommandPkg::List => pkg.print()?, CommandPkg::List => pkg.print()?,
CommandPkg::Upgrade => pkg.install(true).await?, CommandPkg::Upgrade { ids } => pkg.upgrade_many(&ids).await?,
} }
} }
@ -79,11 +79,11 @@ async fn run() -> anyhow::Result<()> {
"WARNING: `ya pack` is deprecated, use the new `ya pkg` instead. See https://github.com/sxyazi/yazi/pull/2770 for more details." "WARNING: `ya pack` is deprecated, use the new `ya pkg` instead. See https://github.com/sxyazi/yazi/pull/2770 for more details."
)?; )?;
if cmd.install { if cmd.install {
package::Package::load().await?.install(false).await?; package::Package::load().await?.install().await?;
} else if cmd.list { } else if cmd.list {
package::Package::load().await?.print()?; package::Package::load().await?.print()?;
} else if cmd.upgrade { } else if cmd.upgrade {
package::Package::load().await?.install(true).await?; package::Package::load().await?.upgrade_many(&[]).await?;
} else if let Some(uses) = cmd.add { } else if let Some(uses) = cmd.add {
package::Package::load().await?.add_many(&uses).await?; package::Package::load().await?.add_many(&uses).await?;
} else if let Some(uses) = cmd.delete { } else if let Some(uses) = cmd.delete {

View file

@ -41,18 +41,40 @@ impl Package {
Ok(()) Ok(())
} }
pub(crate) async fn install(&mut self, upgrade: bool) -> Result<()> { pub(crate) async fn install(&mut self) -> Result<()> {
macro_rules! go {
($dep:expr) => {
let r = $dep.install().await;
self.save().await?;
r?;
};
}
for i in 0..self.plugins.len() { for i in 0..self.plugins.len() {
let r = go!(self.plugins[i]);
if upgrade { self.plugins[i].upgrade().await } else { self.plugins[i].install().await };
self.save().await?;
r?;
} }
for i in 0..self.flavors.len() { for i in 0..self.flavors.len() {
let r = go!(self.flavors[i]);
if upgrade { self.flavors[i].upgrade().await } else { self.flavors[i].install().await }; }
self.save().await?; Ok(())
r?; }
pub(crate) async fn upgrade_many(&mut self, uses: &[String]) -> Result<()> {
macro_rules! go {
($dep:expr) => {
if uses.contains(&$dep.r#use) {
let r = $dep.upgrade().await;
self.save().await?;
r?;
}
};
}
for i in 0..self.plugins.len() {
go!(self.plugins[i]);
}
for i in 0..self.flavors.len() {
go!(self.flavors[i]);
} }
Ok(()) Ok(())
} }