#cargo-install #list #cargo #update #install #crates

bin+lib cargo-list

列出并更新已安装的crate

48 个版本 (24 个重大更新)

0.25.3 2024 年 8 月 22 日
0.25.1 2024 年 7 月 30 日
0.24.1 2024 年 3 月 11 日
0.20.4 2023 年 12 月 30 日
0.7.0 2023 年 5 月 24 日

131Cargo 插件

Download history 8/week @ 2024-04-29 16/week @ 2024-05-20 22/week @ 2024-06-03 16/week @ 2024-06-10 13/week @ 2024-06-17 10/week @ 2024-06-24 8/week @ 2024-07-01 4/week @ 2024-07-08 3/week @ 2024-07-15 5/week @ 2024-07-22 165/week @ 2024-07-29 9/week @ 2024-08-05 132/week @ 2024-08-12

每月 311 次下载

MITCC-PDDC 许可证

34KB
681

用法

命令行界面

$ cargo list -h
List and update installed crates

Usage: cargo list [OPTIONS] [PATTERN]...

Arguments:
  [PATTERN]...  List/update crates matching given pattern(s)

Options:
  -f <FORMAT>      Output format [default: md] [possible values: json,
                   json-pretty, md, rust, rust-pretty]
  -k <KIND>        Kind(s) [default: external] [possible values: local, git,
                   external]
  -a               All kinds
  -o, --outdated   Hide up-to-date crates
  -I               Ignore version requirements
  -R               Consider a crate to be outdated if compiled with a Rust
                   version different than the active toolchain
  -u, --update     Update outdated crates
  -n, --dry-run    Dry run
  -c <PATH>        Cargo install metadata file [default: ~/.cargo/.crates2.json]
  -r, --readme     Print readme
  -h, --help       Print help
  -V, --version    Print version
$ cargo list -V
cargo-list 0.25.3

列出已安装的外部crate

cargo list

列出包含 cargo 的已安装外部crate

cargo list cargo

列出以 cargo 开头的外部crate

cargo list ^cargo

列出以 list 结尾的外部crate

cargo list 'list$'

列出匹配 cargo-list 的外部crate

cargo list '^cargo-list$'

列出过时的外部crate

cargo list -o

更新过时的外部crate

cargo list -ou

列出更新过时的外部crate的 cargo install 命令

cargo list -oun

列出忽略版本要求的过时外部crate

cargo list -oI

列出包含旧 Rust 编译的过时外部crate

cargo list -oR

更新忽略版本要求并包含旧 Rust 编译的过时外部crate

cargo list -oIRu

列出通过 git 安装的crate

cargo list -k git

列出本地已安装的crate

cargo list -k local

列出本地、git 和外部已安装的crate

cargo list -k local -k git -k external

或更短

cargo list -a

列出通过 git 安装的过时crate

cargo list -k git -o

列出本地过时已安装的crate

cargo list -k local -o

列出本地、git 和外部过时已安装的crate

cargo list -k local -k git -k external -o

或更短

cargo list -ao

将已安装的外部crate导出到 JSON

cargo list -f json

将已安装的外部crate导出到格式化的 JSON

cargo list -f json-pretty

将已安装的外部crate导出到 Rust

cargo list -f rust

将已安装的外部crate导出到格式化的 Rust

cargo list -f rust-pretty

将过时已安装的外部crate导出到 JSON

cargo list -f json -o

将过时已安装的外部crate导出到格式化的 JSON

cargo list -f json-pretty -o

将过时已安装的外部crate导出到 Rust

cargo list -f rust -o

将过时已安装的外部crate导出到格式化的 Rust

cargo list -f rust-pretty -o

use cargo_list::Crates;
use expanduser::expanduser;
use rayon::prelude::*;
use std::collections::BTreeMap;

let path = expanduser("~/.cargo/.crates2.json").unwrap();

match Crates::from(&path) {
    Ok(installed) => {
        if installed.is_empty() {
            println!("No crates installed!");
        } else {
            let all = installed.crates();
            let outdated = all
                .par_iter()
                .filter_map(|(&name, &c)| c.outdated.then_some((name, c)))
                .collect::<BTreeMap<_, _>>();

            if outdated.is_empty() {
                // List all crates in CSV
                println!("Name,Installed");
                for (name, c) in &all {
                    println!("{name},{}", c.installed);
                }
            } else {
                // List outdated crates in CSV
                println!("Name,Installed,Available");
                for (name, c) in &outdated {
                    println!("{name},{},{}", c.installed, c.available);
                }

                // Print the `cargo install` commands for outdated crates
                // for command in outdated
                //     .iter()
                //     .map(|(_name, c)| c.update_command().join(" "))
                // {
                //     println!("{command}");
                // }

                // Update outdated crates
                // outdated.iter().for_each(|(_name, c)| c.update());
            }
        }
    }
    Err(e) => {
        eprintln!("Error: {e}");
    }
}

如果您只想包含部分crate,而不是使用Crates::from(&path),请使用Crates::from_include(&path, &patterns),其中patterns&str regex模式的切片。

变更日志

请阅读CHANGELOG.md(仓库链接)。

依赖

~11–29MB
~422K SLoC