feat(cli): add --list to pack cmd

This commit is contained in:
lpnh 2024-05-31 17:33:10 -03:00
parent 5f21998665
commit 21231c749b
3 changed files with 32 additions and 0 deletions

View file

@ -91,6 +91,9 @@ pub(super) struct CommandPack {
/// Install all packages.
#[arg(short = 'i', long)]
pub(super) install: bool,
/// List all installed packages.
#[arg(short = 'l', long)]
pub(super) list: bool,
/// Upgrade all packages.
#[arg(short = 'u', long)]
pub(super) upgrade: bool,

View file

@ -36,6 +36,9 @@ async fn main() -> anyhow::Result<()> {
if cmd.install {
package::Package::install_from_config("plugin", false).await?;
package::Package::install_from_config("flavor", false).await?;
} else if cmd.list {
package::Package::list_from_config("plugin").await?;
package::Package::list_from_config("flavor").await?;
} else if cmd.upgrade {
package::Package::install_from_config("plugin", true).await?;
package::Package::install_from_config("flavor", true).await?;

View file

@ -66,6 +66,32 @@ impl Package {
fs::write(path, doc.to_string()).await.context("Failed to write package.toml")
}
pub(crate) async fn list_from_config(section: &str) -> Result<()> {
let path = Xdg::config_dir().join("package.toml");
let Ok(s) = fs::read_to_string(&path).await else {
return Ok(());
};
let doc = s.parse::<DocumentMut>().context("Failed to parse package.toml")?;
let Some(deps) = doc.get(section).and_then(|d| d.get("deps")) else {
return Ok(());
};
let deps = deps.as_array().context("`deps` must be an array")?;
println!("{section}:");
for v in deps {
if let Some(dep_name) =
v.as_inline_table().and_then(|t| t.get("use")).and_then(|v| v.as_str())
{
println!("\t{dep_name}");
}
}
Ok(())
}
fn ensure_config(s: &str) -> Result<DocumentMut> {
let mut doc = s.parse::<DocumentMut>().context("Failed to parse package.toml")?;