#cargo-toml #cargo #describe #irox #cli-tool

app cargo-describe

从 cargo-metadata 生成便于人类阅读的信息的 CLI 工具

2 个不稳定版本

0.2.0 2024 年 5 月 12 日
0.1.0 2023 年 12 月 14 日

#194Cargo 插件

MIT/Apache

50KB
537

Cargo Describe

基本上是 cargo metadata,但是输出可以被脚本使用,不需要复杂的 jq 命令。

安装

常规方法。 cargo install cargo-describe

用法

CLI tool to produce human-friendly information from cargo-metadata

Usage: cargo-describe.exe [OPTIONS]

Options:
  -m, --manifest <MANIFEST>
          Path to a non-standard 'Cargo.toml' package manifest, if not in current directory

  -o, --output-format <OUTPUT_FORMAT>
          The output format of this tool

          [default: human-text]

          Possible values:
          - human-text: Pretty human text
          - csv:        Comma separated values
          - md-table:   Markdown Table
          - plain:      No formatting, one value per line

  -f, --fields <FIELDS>
          An optional list of manifest fields to display

          [default: name version]

          Possible values:
          - name:                          Name of the package
          - version:                       Version of the package from the manifest
          - git-version:                   'Git Describe' output of the specific package
          - module-relative-path:          Path to the module's dir, relative to the root dir
          - module-absolute-path:          Absolute path on disk to the module dir
          - module-relative-manifest-path: Path to the module's Cargo.toml, relative to the root dir
          - module-absolute-manifest-path: Absolute path on disk to the module's Cargo.toml
          - all:                           Prints everything

  -p, --package <PACKAGE>
          An optional list of crate packages members to display in this workspace

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

示例

...从该仓库的根目录运行

无参数,"人类友好格式化"

$> cargo run --bin cargo-describe -- 
irox
        Version : 0.5.0
irox-carto
        Version : 0.5.0
irox-enums
        Version : 0.2.1
irox-enums_derive
        Version : 0.2.1
irox-time
        Version : 0.3.5
...snipped...

人类友好,所有字段

$> cargo run --bin cargo-describe -- -fall
irox
        Version : 0.5.0
        Git Version : irox-0.5.0-10-g23110f9
        Module Relative Path : irox
        Module Absolute Path : V:\irox\irox\
        Manifest Relative Path : irox\Cargo.toml
        Manifest Absolute Path : V:\irox\irox\Cargo.toml
irox-carto
        Version : 0.5.0
        Git Version : irox-carto-0.5.0-44-gf2d62c7
        Module Relative Path : libraries\carto
        Module Absolute Path : V:\irox\libraries\carto\
        Manifest Relative Path : libraries\carto\Cargo.toml
        Manifest Absolute Path : V:\irox\libraries\carto\Cargo.toml
irox-enums
        Version : 0.2.1
        Git Version : irox-enums-0.2.1-48-g7b1646e
        Module Relative Path : libraries\enums
        Module Absolute Path : V:\irox\libraries\enums\
        Manifest Relative Path : libraries\enums\Cargo.toml
        Manifest Absolute Path : V:\irox\libraries\enums\Cargo.toml
irox-enums_derive
        Version : 0.2.1
        Git Version : irox-enums_derive-0.2.1-49-g845a800
        Module Relative Path : libraries\enums_derive
        Module Absolute Path : V:\irox\libraries\enums_derive\
        Manifest Relative Path : libraries\enums_derive\Cargo.toml
        Manifest Absolute Path : V:\irox\libraries\enums_derive\Cargo.toml
...snipped..

纯文本输出(最适合脚本编写)

将打印指定字段的值,每行一个,按包组织。

$> cargo run --bin cargo-describe -- -o plain -f module-relative-manifest-path
irox\Cargo.toml
libraries\carto\Cargo.toml
libraries\enums\Cargo.toml
libraries\enums_derive\Cargo.toml
libraries\time\Cargo.toml
libraries\tools\Cargo.toml
libraries\units\Cargo.toml
data-formats\csv\Cargo.toml
libraries\egui_extras\Cargo.toml
data-formats\gpx\Cargo.toml
interfaces\influxdb_v1\Cargo.toml
libraries\network\Cargo.toml
libraries\types\Cargo.toml
libraries\log\Cargo.toml
data-formats\nmea0183\Cargo.toml
libraries\progress\Cargo.toml
data-formats\raymarine-sonar\Cargo.toml
data-formats\sirf\Cargo.toml
libraries\structs\Cargo.toml
libraries\structs_derive\Cargo.toml
libraries\stats\Cargo.toml
libraries\threading\Cargo.toml
interfaces\win-location-api\Cargo.toml
eieio\api\Cargo.toml
eieio\nmea0183\Cargo.toml
libraries\build-rs\Cargo.toml
tools\cargo-describe\Cargo.toml
tools\gpsd\Cargo.toml
tools\halflifes\Cargo.toml
tools\influx-cli\Cargo.toml
tools\sonar-sdf-convert\Cargo.toml

带有过滤的 CSV

$> cargo run --bin cargo-describe -- -o csv -p irox-tools -p cargo-describe
Name,Version
irox-tools,0.4.1
cargo-describe,0.1.0

Markdown 表格(过滤后的)

使用 -o md-table 将打印一个 Markdown 格式的表格

$> cargo run --bin cargo-describe -- -o md-table -p irox-tools -p cargo-describe
| Name           | Version |
|----------------|---------|
| irox-tools     | 0.4.1   |
| cargo-describe | 0.1.0   |

渲染为

名称 版本
irox-tools 0.4.1
cargo-describe 0.1.0

带有所有字段的 Markdown 表格(过滤后的)

使用 -f all 将打印所有可用的字段

$> cargo run --bin cargo-describe -- -o md-table -p irox-tools -p cargo-describe -f all

| Name           | Version | GitVersion                      | ModuleRelativePath   | ModuleAbsolutePath            | ModuleRelativeManifestPath      | ModuleAbsoluteManifestPath              |
|----------------|---------|---------------------------------|----------------------|-------------------------------|---------------------------------|-----------------------------------------|
| irox-tools     | 0.4.1   | irox-tools-0.4.1-14-g465c708    | libraries\tools      | V:\irox\libraries\tools\      | libraries\tools\Cargo.toml      | V:\irox\libraries\tools\Cargo.toml      |
| cargo-describe | 0.1.0   | cargo-describe-0.1.0-1-g1762e52 | tools\cargo-describe | V:\irox\tools\cargo-describe\ | tools\cargo-describe\Cargo.toml | V:\irox\tools\cargo-describe\Cargo.toml |

渲染为

名称 版本 Git 版本 模块相对路径 模块绝对路径 模块相对清单路径 模块绝对清单路径
irox-tools 0.4.1 irox-tools-0.4.1-14-g465c708 libraries\tools V:\irox\libraries\tools\ libraries\tools\Cargo.toml V:\irox\libraries\tools\Cargo.toml
cargo-describe 0.1.0 cargo-describe-0.1.0-1-g1762e52 tools\cargo-describe V:\irox\tools\cargo-describe\ tools\cargo-describe\Cargo.toml V:\irox\tools\cargo-describe\Cargo.toml

字段

名称

  • -f name-f all
  • 输出:从 Cargo.toml 清单中获取的包名称
  • irox-tools 的示例: irox-tools

版本

  • -f version-f all
  • 输出:从 Cargo.toml 清单中获取的包版本
  • irox-tools 的示例: 0.4.1

Git 版本

这提供了一种与 git describe 略有不同变体的 git describe。它不是在整个仓库上操作,而是在仓库的特定包目录上操作。这就像如果 git describe 接受一个路径过滤参数,就像 git log <path>... 一样。就像 git log <package-dir> | git describe 一样工作。

  • -f git-version-f all
  • 输出:我最喜欢的 git describe 变体
    • {名称}-{版本}-{提交次数}-g{短哈希}{-}
      • name:与 -f name 相同 - 来自清单的包名
      • tag:尝试找到包含该包目录最后提交的最新 Git 标签。如果找不到提交,则将回退到 -f version 的输出 - 来自清单文件的版本
      • commit_count:HEAD 在 {tag} 之后提交的次数
      • short_hashHEAD 的 Git 短哈希
      • -dirty:如果工作树是脏的,则可选的脏后缀
  • irox-tools 的示例:irox-tools-0.4.1-14-g465c708
  • 脏 irox-tools 的示例:irox-tools-0.4.1-14-g465c708-dirty

模块相对路径

  • -f module-relative-path-f all
  • 输出:包相对于工作空间根目录的相对路径。在根清单的 members 数组中会出现什么
  • irox-tools 的示例:libraries\tools

模块绝对路径

  • -f module-absolute-path-f all
  • 输出:包在磁盘上的绝对路径。如果从工作空间根目录运行,则与 pwd/module-relative-path 相同
  • irox-tools 的示例:V:\irox\libraries\tools

模块相对清单路径

  • -f module-relative-manifest-path-f all
  • 输出: 模块相对路径 + Cargo.toml
  • irox-tools 的示例: libaries\tools\Cargo.toml

模块绝对清单路径

  • -f module-absolute-manifest-path-f all
  • 输出: 模块绝对路径 + Cargo.toml
  • irox-tools 的示例: V:\irox\libraries\tools\Cargo.toml

依赖项

~88MB
~2M SLoC