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,
/// 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)]

View file

@ -67,9 +67,9 @@ async fn run() -> anyhow::Result<()> {
match cmd {
CommandPkg::Add { ids } => pkg.add_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::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."
)?;
if cmd.install {
package::Package::load().await?.install(false).await?;
package::Package::load().await?.install().await?;
} else if cmd.list {
package::Package::load().await?.print()?;
} 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 {
package::Package::load().await?.add_many(&uses).await?;
} else if let Some(uses) = cmd.delete {

View file

@ -41,18 +41,40 @@ impl Package {
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() {
let r =
if upgrade { self.plugins[i].upgrade().await } else { self.plugins[i].install().await };
self.save().await?;
r?;
go!(self.plugins[i]);
}
for i in 0..self.flavors.len() {
let r =
if upgrade { self.flavors[i].upgrade().await } else { self.flavors[i].install().await };
self.save().await?;
r?;
go!(self.flavors[i]);
}
Ok(())
}
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(())
}