diff --git a/Cargo.lock b/Cargo.lock
index ee8827c..7a5fe71 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -110,25 +110,41 @@ dependencies = [
[[package]]
name = "cargo-platform"
-version = "0.1.2"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27"
+checksum = "84982c6c0ae343635a3a4ee6dedef965513735c8b183caa7289fa6e27399ebd4"
dependencies = [
"serde",
]
[[package]]
-name = "cargo_metadata"
-version = "0.15.3"
+name = "cargo-util-schemas"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08a1ec454bc3eead8719cb56e15dbbfecdbc14e4b3a3ae4936cc6e31f5fc0d07"
+checksum = "e63d2780ac94487eb9f1fea7b0d56300abc9eb488800854ca217f102f5caccca"
+dependencies = [
+ "semver",
+ "serde",
+ "serde-untagged",
+ "serde-value",
+ "thiserror 1.0.69",
+ "toml",
+ "unicode-xid",
+ "url",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.20.0"
+source = "git+https://github.com/ranger-ross/cargo_metadata.git#a9147a68d041ebd160ae51d2495fdc6c9afd9313"
dependencies = [
"camino",
"cargo-platform",
+ "cargo-util-schemas",
"semver",
"serde",
"serde_json",
- "thiserror",
+ "thiserror 2.0.12",
]
[[package]]
@@ -170,7 +186,7 @@ dependencies = [
"atty",
"bitflags",
"clap_lex",
- "indexmap",
+ "indexmap 1.9.3",
"strsim",
"termcolor",
"terminal_size",
@@ -297,7 +313,7 @@ dependencies = [
"proc-macro2",
"quote",
"scratch",
- "syn 2.0.10",
+ "syn 2.0.101",
]
[[package]]
@@ -314,7 +330,7 @@ checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.10",
+ "syn 2.0.101",
]
[[package]]
@@ -344,12 +360,39 @@ dependencies = [
"winapi",
]
+[[package]]
+name = "displaydoc"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.101",
+]
+
[[package]]
name = "either"
version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+[[package]]
+name = "equivalent"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
+
+[[package]]
+name = "erased-serde"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7"
+dependencies = [
+ "serde",
+ "typeid",
+]
+
[[package]]
name = "errno"
version = "0.2.8"
@@ -404,9 +447,9 @@ dependencies = [
[[package]]
name = "form_urlencoded"
-version = "1.1.0"
+version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
dependencies = [
"percent-encoding",
]
@@ -462,6 +505,12 @@ version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+[[package]]
+name = "hashbrown"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5"
+
[[package]]
name = "hermit-abi"
version = "0.1.19"
@@ -528,14 +577,111 @@ dependencies = [
"cxx-build",
]
+[[package]]
+name = "icu_collections"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47"
+dependencies = [
+ "displaydoc",
+ "potential_utf",
+ "yoke",
+ "zerofrom",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_locale_core"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a"
+dependencies = [
+ "displaydoc",
+ "litemap",
+ "tinystr",
+ "writeable",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_normalizer"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979"
+dependencies = [
+ "displaydoc",
+ "icu_collections",
+ "icu_normalizer_data",
+ "icu_properties",
+ "icu_provider",
+ "smallvec",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_normalizer_data"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3"
+
+[[package]]
+name = "icu_properties"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b"
+dependencies = [
+ "displaydoc",
+ "icu_collections",
+ "icu_locale_core",
+ "icu_properties_data",
+ "icu_provider",
+ "potential_utf",
+ "zerotrie",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_properties_data"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632"
+
+[[package]]
+name = "icu_provider"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af"
+dependencies = [
+ "displaydoc",
+ "icu_locale_core",
+ "stable_deref_trait",
+ "tinystr",
+ "writeable",
+ "yoke",
+ "zerofrom",
+ "zerotrie",
+ "zerovec",
+]
+
[[package]]
name = "idna"
-version = "0.3.0"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
dependencies = [
- "unicode-bidi",
- "unicode-normalization",
+ "idna_adapter",
+ "smallvec",
+ "utf8_iter",
+]
+
+[[package]]
+name = "idna_adapter"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
+dependencies = [
+ "icu_normalizer",
+ "icu_properties",
]
[[package]]
@@ -545,7 +691,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
dependencies = [
"autocfg",
- "hashbrown",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.15.4",
]
[[package]]
@@ -649,6 +805,12 @@ version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
+[[package]]
+name = "litemap"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
+
[[package]]
name = "log"
version = "0.4.17"
@@ -738,6 +900,15 @@ version = "1.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+[[package]]
+name = "ordered-float"
+version = "2.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c"
+dependencies = [
+ "num-traits",
+]
+
[[package]]
name = "os_str_bytes"
version = "6.5.0"
@@ -761,9 +932,9 @@ checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42"
[[package]]
name = "percent-encoding"
-version = "2.2.0"
+version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
[[package]]
name = "pkg-config"
@@ -771,6 +942,15 @@ version = "0.3.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+[[package]]
+name = "potential_utf"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585"
+dependencies = [
+ "zerovec",
+]
+
[[package]]
name = "pretty_assertions"
version = "1.3.0"
@@ -785,18 +965,18 @@ dependencies = [
[[package]]
name = "proc-macro2"
-version = "1.0.53"
+version = "1.0.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba466839c78239c09faf015484e5cc04860f88242cff4d03eb038f04b4699b73"
+checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
-version = "1.0.26"
+version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
dependencies = [
"proc-macro2",
]
@@ -840,7 +1020,7 @@ checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
dependencies = [
"getrandom",
"redox_syscall",
- "thiserror",
+ "thiserror 1.0.69",
]
[[package]]
@@ -926,44 +1106,81 @@ checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1"
[[package]]
name = "semver"
-version = "1.0.17"
+version = "1.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
+checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
dependencies = [
"serde",
]
[[package]]
name = "serde"
-version = "1.0.158"
+version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9"
+checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
dependencies = [
"serde_derive",
]
+[[package]]
+name = "serde-untagged"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "299d9c19d7d466db4ab10addd5703e4c615dec2a5a16dbbafe191045e87ee66e"
+dependencies = [
+ "erased-serde",
+ "serde",
+ "typeid",
+]
+
+[[package]]
+name = "serde-value"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c"
+dependencies = [
+ "ordered-float",
+ "serde",
+]
+
[[package]]
name = "serde_derive"
-version = "1.0.158"
+version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad"
+checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.10",
+ "syn 2.0.101",
]
[[package]]
name = "serde_json"
-version = "1.0.94"
+version = "1.0.140"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea"
+checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
dependencies = [
"itoa",
+ "memchr",
"ryu",
"serde",
]
+[[package]]
+name = "serde_spanned"
+version = "0.6.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
+
[[package]]
name = "smart-default"
version = "0.6.0"
@@ -1006,15 +1223,26 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.10"
+version = "2.0.101"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5aad1363ed6d37b84299588d62d3a7d95b5a5c2d9aad5c85609fda12afaa1f40"
+checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
+[[package]]
+name = "synstructure"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.101",
+]
+
[[package]]
name = "tar"
version = "0.4.38"
@@ -1069,22 +1297,42 @@ dependencies = [
[[package]]
name = "thiserror"
-version = "1.0.40"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
+dependencies = [
+ "thiserror-impl 1.0.69",
+]
+
+[[package]]
+name = "thiserror"
+version = "2.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
dependencies = [
- "thiserror-impl",
+ "thiserror-impl 2.0.12",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.40"
+version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.10",
+ "syn 2.0.101",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "2.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.101",
]
[[package]]
@@ -1098,6 +1346,16 @@ dependencies = [
"winapi",
]
+[[package]]
+name = "tinystr"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
+dependencies = [
+ "displaydoc",
+ "zerovec",
+]
+
[[package]]
name = "tinyvec"
version = "1.6.0"
@@ -1114,10 +1372,51 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
-name = "unicode-bidi"
-version = "0.3.13"
+name = "toml"
+version = "0.8.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.22.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
+dependencies = [
+ "indexmap 2.9.0",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_write",
+ "winnow",
+]
+
+[[package]]
+name = "toml_write"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
+
+[[package]]
+name = "typeid"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c"
[[package]]
name = "unicode-ident"
@@ -1140,17 +1439,29 @@ version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+[[package]]
+name = "unicode-xid"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
+
[[package]]
name = "url"
-version = "2.3.1"
+version = "2.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
dependencies = [
"form_urlencoded",
"idna",
"percent-encoding",
]
+[[package]]
+name = "utf8_iter"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
+
[[package]]
name = "vcpkg"
version = "0.2.15"
@@ -1354,6 +1665,21 @@ version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+[[package]]
+name = "winnow"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "writeable"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
+
[[package]]
name = "xattr"
version = "0.2.3"
@@ -1368,3 +1694,81 @@ name = "yansi"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+
+[[package]]
+name = "yoke"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc"
+dependencies = [
+ "serde",
+ "stable_deref_trait",
+ "yoke-derive",
+ "zerofrom",
+]
+
+[[package]]
+name = "yoke-derive"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.101",
+ "synstructure",
+]
+
+[[package]]
+name = "zerofrom"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
+dependencies = [
+ "zerofrom-derive",
+]
+
+[[package]]
+name = "zerofrom-derive"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.101",
+ "synstructure",
+]
+
+[[package]]
+name = "zerotrie"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595"
+dependencies = [
+ "displaydoc",
+ "yoke",
+ "zerofrom",
+]
+
+[[package]]
+name = "zerovec"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428"
+dependencies = [
+ "yoke",
+ "zerofrom",
+ "zerovec-derive",
+]
+
+[[package]]
+name = "zerovec-derive"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.101",
+]
diff --git a/Cargo.toml b/Cargo.toml
index 557bee9..bb17279 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -25,7 +25,8 @@ rayon = ["dep:rayon", "remove_dir_all/parallel"] # if rayon is enabled, build rd
[dependencies]
# https://github.com/oli-obk/cargo_metadata
-cargo_metadata = { version = "0.15.2", optional = true } # get crate package name
+# TODO: Waiting for cargo_metadata 0.21.0 to be published
+cargo_metadata = { git = "https://github.com/ranger-ross/cargo_metadata.git", ref = "main", features = ["unstable"], optional = true } # get crate package name
# https://github.com/alexcrichton/cfg-if
cfg-if = { version = "1.0.0" } # if cfg(..) { ... }
diff --git a/src/cli.rs b/src/cli.rs
index 76a4ed0..ca8d281 100644
--- a/src/cli.rs
+++ b/src/cli.rs
@@ -324,9 +324,11 @@ pub(crate) fn gen_clap() -> ArgMatches {
//
// local subcommand
- let local = App::new("local").about("check local build cache (target) of a rust project");
+ let local =
+ App::new("local").about("check local build cache (target-dir,build-dir) of a rust project");
// shorter local subcommand (l)
- let local_short = App::new("l").about("check local build cache (target) of a rust project");
+ let local_short =
+ App::new("l").about("check local build cache (target-dir,build-dir) of a rust project");
//
//
@@ -543,8 +545,8 @@ OPTIONS:
SUBCOMMANDS:
clean-unref remove crates that are not referenced in a Cargo.toml from the cache
help Print this message or the help of the given subcommand(s)
- l check local build cache (target) of a rust project
- local check local build cache (target) of a rust project
+ l check local build cache (target-dir,build-dir) of a rust project
+ local check local build cache (target-dir,build-dir) of a rust project
q run a query
query run a query
r query each package registry separately
@@ -619,8 +621,8 @@ OPTIONS:
SUBCOMMANDS:
clean-unref remove crates that are not referenced in a Cargo.toml from the cache
help Print this message or the help of the given subcommand(s)
- l check local build cache (target) of a rust project
- local check local build cache (target) of a rust project
+ l check local build cache (target-dir,build-dir) of a rust project
+ local check local build cache (target-dir,build-dir) of a rust project
q run a query
query run a query
r query each package registry separately
diff --git a/src/commands/local.rs b/src/commands/local.rs
index 93603b7..2dd5d02 100644
--- a/src/commands/local.rs
+++ b/src/commands/local.rs
@@ -25,7 +25,6 @@
/// ````
use std::env;
use std::ffi::OsStr;
-use std::fmt::Write as _;
use std::fs::read_dir;
use std::path::{Path, PathBuf};
@@ -75,26 +74,36 @@ pub(crate) fn get_manifest() -> Result {
}
}
+// padding of the final formatting of the table
+const MIN_PADDING: usize = 6;
+
/// gather the sizes of subdirs of the `target` directory and prints a formatted table
/// of the data to stdout
pub(crate) fn local_subcmd() -> Result<(), Error> {
- // padding of the final formatting of the table
- const MIN_PADDING: usize = 6;
-
// find the closest manifest, traverse up if necessary
let manifest = get_manifest()?;
// get the cargo metadata for the manifest
+ // We attempt to call cargo metadata with -Zbuild-dir to get the build-dir and fallback to
+ // calling without if we fail (most likely due to not using a nightly toolchain)
+ // Once Cargo build-dir is stablized we can simplify this. See https://github.com/rust-lang/cargo/issues/14125
let metadata = MetadataCommand::new()
.manifest_path(&manifest)
.no_deps()
+ .other_options(["-Zbuild-dir"].map(str::to_string))
.exec()
- .unwrap_or_else(|error| {
- panic!(
- "Failed to parse manifest: '{}'\nError: '{:?}'",
- &manifest.display(),
- error
- )
+ .unwrap_or_else(|_| {
+ MetadataCommand::new()
+ .manifest_path(&manifest)
+ .no_deps()
+ .exec()
+ .unwrap_or_else(|error| {
+ panic!(
+ "Failed to parse manifest: '{}'\nError: '{:?}'",
+ &manifest.display(),
+ error
+ )
+ })
});
// get the project target dir from the metadata
@@ -107,28 +116,36 @@ pub(crate) fn local_subcmd() -> Result<(), Error> {
// println!("Found target dir: '{}'", target_dir.display());
- // get the size
- let dirinfo = library::cumulative_dir_size(&target_dir);
- // and the human readable size
- let size_hr = dirinfo.dir_size.format_size(DECIMAL);
-
- let mut stdout = String::new();
-
- let mut lines = Vec::new();
-
- writeln!(stdout, "Project {:?}", metadata.workspace_root.to_string()).unwrap();
+ println!("Project {:?}", metadata.workspace_root.to_string());
// If there is no target dir, we can quit
if !target_dir.exists() {
- stdout.push_str("No target dir found!");
- eprintln!("{stdout}");
+ println!("No target dir found!");
+ }
+
+ println!("\nTarget dir: {}", target_dir.display());
+ add_dir_breakdown(&target_dir);
+
+ if let Some(build_dir) = metadata.build_directory {
+ if build_dir != target_dir {
+ println!("Build dir: {}", build_dir);
+ add_dir_breakdown(&PathBuf::from(build_dir));
+ }
}
- writeln!(stdout, "Target dir: {}\n", target_dir.display()).unwrap();
- lines.push(TableLine::new(0, &"Total Size: ", &size_hr));
+ Ok(())
+}
+
+fn add_dir_breakdown(dir: &PathBuf) {
+ let mut lines = Vec::new();
+
+ let dirinfo = library::cumulative_dir_size(&dir);
+ // and the human readable size
+ let size_hr = dirinfo.dir_size.format_size(DECIMAL);
+ lines.push(TableLine::new(0, &" Total Size: ", &size_hr));
// we are going to check these directories:
- let p = &target_dir; // path
+ let p = &dir; // path
let target_dir_debug = p.join("debug");
let target_dir_rls = p.join("rls");
let target_dir_release = p.join("release");
@@ -140,7 +157,7 @@ pub(crate) fn local_subcmd() -> Result<(), Error> {
if size_debug > 0 {
lines.push(TableLine::new(
0,
- &"debug: ".to_string(),
+ &" debug: ".to_string(),
&size_debug.format_size(DECIMAL),
));
}
@@ -149,7 +166,7 @@ pub(crate) fn local_subcmd() -> Result<(), Error> {
if size_rls > 0 {
lines.push(TableLine::new(
0,
- &"rls: ".to_string(),
+ &" rls: ".to_string(),
&size_rls.format_size(DECIMAL),
));
}
@@ -158,7 +175,7 @@ pub(crate) fn local_subcmd() -> Result<(), Error> {
if size_release > 0 {
lines.push(TableLine::new(
0,
- &"release: ".to_string(),
+ &" release: ".to_string(),
&size_release.format_size(DECIMAL),
));
}
@@ -167,7 +184,7 @@ pub(crate) fn local_subcmd() -> Result<(), Error> {
if size_package > 0 {
lines.push(TableLine::new(
0,
- &"package: ".to_string(),
+ &" package: ".to_string(),
&size_package.format_size(DECIMAL),
));
}
@@ -176,7 +193,7 @@ pub(crate) fn local_subcmd() -> Result<(), Error> {
if size_doc > 0 {
lines.push(TableLine::new(
0,
- &"doc: ".to_string(),
+ &" doc: ".to_string(),
&size_doc.format_size(DECIMAL),
));
}
@@ -186,7 +203,7 @@ pub(crate) fn local_subcmd() -> Result<(), Error> {
// Get the immediate subdirs of the target/ dir, skip the known ones (rls, package, debug, release)
// and look how big the remaining stuff is
#[allow(clippy::manual_filter_map)] // meh
- let size_other: u64 = read_dir(&target_dir)
+ let size_other: u64 = read_dir(&dir)
.unwrap()
.filter_map(Result::ok)
.map(|x| x.path())
@@ -216,14 +233,12 @@ pub(crate) fn local_subcmd() -> Result<(), Error> {
if size_other > 0 {
lines.push(TableLine::new(
0,
- &"other: ".to_string(),
+ &" other: ".to_string(),
&size_other.format_size(DECIMAL),
));
}
// add the formatted table to the output
- stdout.push_str(&two_row_table(MIN_PADDING, lines, true));
- // and finally print it
- println!("{stdout}");
- Ok(())
+ let output = two_row_table(MIN_PADDING, lines, true);
+ println!("{output}");
}