forked from matteo/sysroot-cleaner
Compare commits
5 commits
Author | SHA1 | Date | |
---|---|---|---|
|
f2fc705fa0 | ||
|
c9e39e284c | ||
|
6825d63aaa | ||
|
266a00d983 | ||
|
8983863ffa |
201
Cargo.lock
generated
201
Cargo.lock
generated
|
@ -26,6 +26,12 @@ dependencies = [
|
|||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "allocator-api2"
|
||||
version = "0.2.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
|
||||
|
||||
[[package]]
|
||||
name = "anstream"
|
||||
version = "0.6.18"
|
||||
|
@ -78,15 +84,15 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "anyhow"
|
||||
version = "1.0.95"
|
||||
version = "1.0.98"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04"
|
||||
checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
|
||||
|
||||
[[package]]
|
||||
name = "async-trait"
|
||||
version = "0.1.86"
|
||||
version = "0.1.88"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d"
|
||||
checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -116,15 +122,15 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "2.8.0"
|
||||
version = "2.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36"
|
||||
checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
|
||||
|
||||
[[package]]
|
||||
name = "bstr"
|
||||
version = "1.11.3"
|
||||
version = "1.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0"
|
||||
checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
"serde",
|
||||
|
@ -132,9 +138,15 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "bytes"
|
||||
version = "1.10.0"
|
||||
version = "1.10.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9"
|
||||
checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
|
||||
|
||||
[[package]]
|
||||
name = "bytesize"
|
||||
version = "2.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a3c8f83209414aacf0eeae3cf730b18d6981697fba62f200fcfb92b9f082acba"
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
|
@ -150,9 +162,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
|
|||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "4.5.30"
|
||||
version = "4.5.37"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "92b7b18d71fad5313a1e320fa9897994228ce274b60faa4d694fe0ea89cd9e6d"
|
||||
checksum = "eccb054f56cbd38340b380d4a8e69ef1f02f1af43db2f0cc817a4774d80ae071"
|
||||
dependencies = [
|
||||
"clap_builder",
|
||||
"clap_derive",
|
||||
|
@ -160,9 +172,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "clap_builder"
|
||||
version = "4.5.30"
|
||||
version = "4.5.37"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a35db2071778a7344791a4fb4f95308b5673d219dee3ae348b86642574ecc90c"
|
||||
checksum = "efd9466fac8543255d3b1fcad4762c5e116ffe808c8a3043d4263cd4fd4862a2"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"anstyle",
|
||||
|
@ -172,9 +184,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "clap_derive"
|
||||
version = "4.5.28"
|
||||
version = "4.5.32"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed"
|
||||
checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7"
|
||||
dependencies = [
|
||||
"heck",
|
||||
"proc-macro2",
|
||||
|
@ -231,14 +243,14 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "env_logger"
|
||||
version = "0.11.6"
|
||||
version = "0.11.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0"
|
||||
checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"anstyle",
|
||||
"env_filter",
|
||||
"humantime",
|
||||
"jiff",
|
||||
"log",
|
||||
]
|
||||
|
||||
|
@ -254,6 +266,12 @@ version = "0.5.7"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
|
||||
|
||||
[[package]]
|
||||
name = "foldhash"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
|
||||
|
||||
[[package]]
|
||||
name = "gimli"
|
||||
version = "0.31.1"
|
||||
|
@ -262,9 +280,9 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
|
|||
|
||||
[[package]]
|
||||
name = "globset"
|
||||
version = "0.4.15"
|
||||
version = "0.4.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19"
|
||||
checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"bstr",
|
||||
|
@ -286,9 +304,14 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.15.2"
|
||||
version = "0.15.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
|
||||
checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3"
|
||||
dependencies = [
|
||||
"allocator-api2",
|
||||
"equivalent",
|
||||
"foldhash",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "heck"
|
||||
|
@ -296,12 +319,6 @@ version = "0.5.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
||||
|
||||
[[package]]
|
||||
name = "humantime"
|
||||
version = "2.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
|
||||
|
||||
[[package]]
|
||||
name = "ignore"
|
||||
version = "0.4.23"
|
||||
|
@ -320,9 +337,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "2.7.1"
|
||||
version = "2.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652"
|
||||
checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e"
|
||||
dependencies = [
|
||||
"equivalent",
|
||||
"hashbrown",
|
||||
|
@ -330,9 +347,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "indoc"
|
||||
version = "2.0.5"
|
||||
version = "2.0.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5"
|
||||
checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd"
|
||||
|
||||
[[package]]
|
||||
name = "is_terminal_polyfill"
|
||||
|
@ -341,10 +358,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.169"
|
||||
name = "jiff"
|
||||
version = "0.2.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a"
|
||||
checksum = "d07d8d955d798e7a4d6f9c58cd1f1916e790b42b092758a9ef6e16fef9f1b3fd"
|
||||
dependencies = [
|
||||
"jiff-static",
|
||||
"log",
|
||||
"portable-atomic",
|
||||
"portable-atomic-util",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "jiff-static"
|
||||
version = "0.2.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f244cfe006d98d26f859c7abd1318d85327e1882dc9cef80f62daeeb0adcf300"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.172"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
|
||||
|
||||
[[package]]
|
||||
name = "lock_api"
|
||||
|
@ -358,9 +399,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "log"
|
||||
version = "0.4.25"
|
||||
version = "0.4.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f"
|
||||
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
|
@ -379,9 +420,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "miniz_oxide"
|
||||
version = "0.8.4"
|
||||
version = "0.8.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b3b1c9bd4fe1f0f8b387f6eb9eb3b4a1aa26185e5750efb9140301703f62cd1b"
|
||||
checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a"
|
||||
dependencies = [
|
||||
"adler2",
|
||||
]
|
||||
|
@ -399,9 +440,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "nix"
|
||||
version = "0.29.0"
|
||||
version = "0.30.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
|
||||
checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"cfg-if",
|
||||
|
@ -420,9 +461,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "once_cell"
|
||||
version = "1.20.3"
|
||||
version = "1.21.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e"
|
||||
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot"
|
||||
|
@ -449,12 +490,14 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "petgraph"
|
||||
version = "0.7.1"
|
||||
version = "0.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772"
|
||||
checksum = "7a98c6720655620a521dcc722d0ad66cd8afd5d86e34a89ef691c50b7b24de06"
|
||||
dependencies = [
|
||||
"fixedbitset",
|
||||
"hashbrown",
|
||||
"indexmap",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -470,28 +513,43 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.93"
|
||||
name = "portable-atomic"
|
||||
version = "1.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99"
|
||||
checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e"
|
||||
|
||||
[[package]]
|
||||
name = "portable-atomic-util"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507"
|
||||
dependencies = [
|
||||
"portable-atomic",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.95"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.38"
|
||||
version = "1.0.40"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc"
|
||||
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.5.8"
|
||||
version = "0.5.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834"
|
||||
checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
]
|
||||
|
@ -557,9 +615,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "scroll_derive"
|
||||
version = "0.12.0"
|
||||
version = "0.12.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932"
|
||||
checksum = "1783eabc414609e28a5ba76aee5ddd52199f7107a0b24c2e9746a1ecc34a683d"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -568,18 +626,18 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.217"
|
||||
version = "1.0.219"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70"
|
||||
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
|
||||
dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.217"
|
||||
version = "1.0.219"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0"
|
||||
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -588,24 +646,24 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "signal-hook-registry"
|
||||
version = "1.4.2"
|
||||
version = "1.4.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
|
||||
checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "smallvec"
|
||||
version = "1.14.0"
|
||||
version = "1.15.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd"
|
||||
checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9"
|
||||
|
||||
[[package]]
|
||||
name = "socket2"
|
||||
version = "0.5.8"
|
||||
version = "0.5.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8"
|
||||
checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys 0.52.0",
|
||||
|
@ -619,9 +677,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
|
|||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.98"
|
||||
version = "2.0.101"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1"
|
||||
checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -634,6 +692,7 @@ version = "0.1.0"
|
|||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
"bytesize",
|
||||
"clap",
|
||||
"env_logger",
|
||||
"goblin",
|
||||
|
@ -649,9 +708,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "tokio"
|
||||
version = "1.43.0"
|
||||
version = "1.44.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e"
|
||||
checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48"
|
||||
dependencies = [
|
||||
"backtrace",
|
||||
"bytes",
|
||||
|
@ -678,9 +737,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.17"
|
||||
version = "1.0.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe"
|
||||
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
|
||||
|
||||
[[package]]
|
||||
name = "utf8parse"
|
||||
|
|
|
@ -19,7 +19,8 @@ indoc = { version = "2.0" }
|
|||
goblin = { version = "0.9" }
|
||||
log = { version = "0.4" }
|
||||
memmap2 = { version = "0.9" }
|
||||
nix = { version = "0.29", features = ["fs"] }
|
||||
petgraph = { version = "0.7" }
|
||||
nix = { version = "0.30", features = ["fs"] }
|
||||
petgraph = { version = "0.8" }
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
walkdir = { version = "2" }
|
||||
bytesize = { version = "2.0" }
|
33
src/args.rs
33
src/args.rs
|
@ -3,7 +3,29 @@
|
|||
|
||||
use std::path::PathBuf;
|
||||
|
||||
use clap::Parser;
|
||||
use clap::{builder::{PathBufValueParser, TypedValueParser}, Parser};
|
||||
|
||||
#[derive(Clone, Default)]
|
||||
struct AbsolutePathBufValueParser;
|
||||
|
||||
impl TypedValueParser for AbsolutePathBufValueParser {
|
||||
type Value = PathBuf;
|
||||
|
||||
fn parse_ref(
|
||||
&self,
|
||||
cmd: &clap::Command,
|
||||
arg: Option<&clap::Arg>,
|
||||
value: &std::ffi::OsStr,
|
||||
) -> Result<Self::Value, clap::Error> {
|
||||
let pathbuf_parser = PathBufValueParser::new();
|
||||
let v = pathbuf_parser.parse_ref(cmd, arg, value)?;
|
||||
|
||||
v.canonicalize().map_err(|e| clap::Error::raw(
|
||||
clap::error::ErrorKind::Io,
|
||||
e,
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
/// A tool to clean up sysroots for Linux embedded devices to save storage space.
|
||||
#[derive(Parser, Debug)]
|
||||
|
@ -19,13 +41,15 @@ pub struct Args {
|
|||
pub split_to: Option<PathBuf>,
|
||||
|
||||
/// An allowlist of files to keep, in .gitignore format.
|
||||
/// Can be passed multiple times.
|
||||
/// Note: this will take precedence over all other removal decisions.
|
||||
#[arg(long)]
|
||||
pub allowlist: Option<PathBuf>,
|
||||
#[arg(long, value_parser = AbsolutePathBufValueParser::default())]
|
||||
pub allowlist: Vec<PathBuf>,
|
||||
|
||||
/// A blocklist of files to remove, in .gitignore format.
|
||||
/// Can be passed multiple times.
|
||||
#[arg(long)]
|
||||
pub blocklist: Option<PathBuf>,
|
||||
pub blocklist: Vec<PathBuf>,
|
||||
|
||||
/// An optional path to save the file graph of the DSO cleaner
|
||||
/// in GraphViz format. Useful for debugging.
|
||||
|
@ -35,3 +59,4 @@ pub struct Args {
|
|||
/// The location of the sysroot to clean up
|
||||
pub sysroot_location: PathBuf,
|
||||
}
|
||||
|
||||
|
|
|
@ -10,10 +10,11 @@ use crate::{
|
|||
};
|
||||
use anyhow::{Error, Result};
|
||||
use async_trait::async_trait;
|
||||
use bytesize::ByteSize;
|
||||
use dso::DsoCleaner;
|
||||
use list::ListCleaner;
|
||||
use nix::libc::EXDEV;
|
||||
use std::{collections::HashMap, io, path::Path};
|
||||
use std::{collections::HashMap, fmt, io, ops::AddAssign, path::Path};
|
||||
use tokio::{sync::mpsc, task::JoinSet};
|
||||
use walkdir::{DirEntry, WalkDir};
|
||||
|
||||
|
@ -26,8 +27,22 @@ pub trait Cleaner {
|
|||
) -> Result<()>;
|
||||
}
|
||||
|
||||
struct FileSize(u64);
|
||||
|
||||
impl fmt::Display for FileSize {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(f, "{}", ByteSize(self.0))
|
||||
}
|
||||
}
|
||||
|
||||
impl AddAssign for FileSize {
|
||||
fn add_assign(&mut self, rhs: Self) {
|
||||
self.0.add_assign(rhs.0);
|
||||
}
|
||||
}
|
||||
|
||||
type Cleaners = Vec<Box<dyn Cleaner + Send>>;
|
||||
type RemovalFn = Box<dyn Fn(&Path) -> io::Result<()>>;
|
||||
type RemovalFn = Box<dyn Fn(&Path) -> io::Result<FileSize>>;
|
||||
|
||||
pub struct Runner {
|
||||
cleaners: Cleaners,
|
||||
|
@ -41,11 +56,11 @@ impl Runner {
|
|||
let removal_fn = Self::new_removal_fn(&args);
|
||||
let mut cleaners: Cleaners = vec![];
|
||||
|
||||
if let Some(wl) = args.allowlist {
|
||||
for wl in args.allowlist {
|
||||
cleaners.push(Box::new(ListCleaner::new(list::ListType::Allow, wl)));
|
||||
}
|
||||
|
||||
if let Some(bl) = args.blocklist {
|
||||
for bl in args.blocklist {
|
||||
cleaners.push(Box::new(ListCleaner::new(list::ListType::Block, bl)));
|
||||
}
|
||||
|
||||
|
@ -129,6 +144,8 @@ impl Runner {
|
|||
|
||||
async fn final_decision(removal_fn: RemovalFn, mut output_rx: mpsc::Receiver<Decision>) {
|
||||
let mut final_decisions = HashMap::new();
|
||||
let mut total_removed_size = FileSize(0);
|
||||
|
||||
while let Some(input_decision) = output_rx.recv().await {
|
||||
if input_decision.action == Action::Undecided {
|
||||
continue;
|
||||
|
@ -147,57 +164,80 @@ impl Runner {
|
|||
|
||||
for (file, action) in final_decisions {
|
||||
if action == Action::Remove {
|
||||
if let Err(err) = (removal_fn)(&file) {
|
||||
log::error!("{}: {}", file.display(), err);
|
||||
}
|
||||
let removed_size = match (removal_fn)(&file) {
|
||||
Ok(size) => size,
|
||||
Err(err) => {
|
||||
log::error!("{}: {}", file.display(), err);
|
||||
FileSize(0)
|
||||
}
|
||||
};
|
||||
total_removed_size += removed_size;
|
||||
}
|
||||
}
|
||||
log::info!("Total space removed: {}", total_removed_size);
|
||||
}
|
||||
|
||||
fn new_removal_fn(args: &Args) -> RemovalFn {
|
||||
if let Some(dest) = args.split_to.clone() {
|
||||
if args.dry_run {
|
||||
Box::new(move |path| {
|
||||
let size = Self::get_file_size(path)?;
|
||||
log::info!(
|
||||
"(dry-run) would move {} to {}",
|
||||
"(dry-run) would move {} to {} ({})",
|
||||
path.display(),
|
||||
dest.display()
|
||||
dest.display(),
|
||||
size
|
||||
);
|
||||
Ok(())
|
||||
Ok(size)
|
||||
})
|
||||
} else {
|
||||
Box::new(move |path| {
|
||||
log::info!("moving {} to {}", path.display(), dest.display());
|
||||
Self::move_preserve(&path, &dest)
|
||||
let size = Self::get_file_size(path)?;
|
||||
log::info!("moving {} to {} ({})", path.display(), dest.display(), size);
|
||||
Self::move_preserve(path, &dest)?;
|
||||
Ok(size)
|
||||
})
|
||||
}
|
||||
} else if args.dry_run {
|
||||
Box::new(|path| {
|
||||
let ty = if path.is_symlink() {
|
||||
"symlink"
|
||||
} else {
|
||||
"regular file"
|
||||
};
|
||||
let size = Self::get_file_size(path)?;
|
||||
log::info!("(dry-run) would remove {} {} ({})", ty, path.display(), size);
|
||||
Ok(size)
|
||||
})
|
||||
} else {
|
||||
if args.dry_run {
|
||||
Box::new(|path| {
|
||||
let ty = if path.is_symlink() {
|
||||
"symlink"
|
||||
} else {
|
||||
"regular file"
|
||||
};
|
||||
log::info!("(dry-run) would remove {} {}", ty, path.display());
|
||||
Ok(())
|
||||
})
|
||||
} else {
|
||||
Box::new(move |path| {
|
||||
log::info!("removing {}", path.display());
|
||||
std::fs::remove_file(&path)
|
||||
})
|
||||
}
|
||||
Box::new(move |path| {
|
||||
let size = Self::get_file_size(path)?;
|
||||
log::info!("removing {} ({})", path.display(), size);
|
||||
std::fs::remove_file(path)?;
|
||||
Ok(size)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
fn get_file_size(file: &Path) -> io::Result<FileSize> {
|
||||
let lstat = nix::sys::stat::lstat(file);
|
||||
let size = match lstat {
|
||||
Err(err) => {
|
||||
log::error!("failed to get metadata from: {}, {}", file.display(), err);
|
||||
FileSize(0)
|
||||
},
|
||||
Ok(lstat) => FileSize(lstat.st_size as u64)
|
||||
};
|
||||
Ok(size)
|
||||
}
|
||||
|
||||
fn move_preserve(src: &Path, dest: &Path) -> io::Result<()> {
|
||||
assert!(src.is_relative());
|
||||
let abs_dest = dest.join(src);
|
||||
if let Some(parent) = abs_dest.parent() {
|
||||
std::fs::create_dir_all(parent)?;
|
||||
}
|
||||
match std::fs::rename(&src, &abs_dest) {
|
||||
match std::fs::rename(src, &abs_dest) {
|
||||
Err(err) if err.raw_os_error() == Some(EXDEV) => {
|
||||
log::trace!(
|
||||
"different filesystems, falling back to copying {} to {}",
|
||||
|
|
|
@ -62,7 +62,7 @@ impl Cleaner for DsoCleaner {
|
|||
// that also its dependencies will not be kept.
|
||||
if decision.action != Action::Remove {
|
||||
state.process_path(&decision.path).unwrap_or_else(|e| {
|
||||
log::warn!(
|
||||
log::error!(
|
||||
"{}: {} (this might produce wrong results!)",
|
||||
decision.path.display(),
|
||||
e
|
||||
|
@ -92,12 +92,12 @@ impl Cleaner for DsoCleaner {
|
|||
}
|
||||
|
||||
if let Some(dot) = &self.output_dot {
|
||||
state.debug_print_graph(&dot)?;
|
||||
state.debug_print_graph(dot)?;
|
||||
}
|
||||
|
||||
let mut dfs = Dfs::empty(&state.graph);
|
||||
dfs.stack = inodes_to_keep.into_iter().collect();
|
||||
while let Some(_) = dfs.next(&state.graph) {}
|
||||
while dfs.next(&state.graph).is_some() {}
|
||||
|
||||
for (inode, paths) in state.paths_map.into_iter() {
|
||||
let action = if !dfs.discovered.contains(&inode) {
|
||||
|
@ -219,7 +219,7 @@ impl State {
|
|||
continue 'next_lib;
|
||||
}
|
||||
|
||||
anyhow::bail!("{}: unable to find library {}", path.display(), library);
|
||||
log::warn!("{}: unable to find library {}, ignoring (this might produce wrong results)!", path.display(), library);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
@ -267,10 +267,8 @@ impl State {
|
|||
&|_, _| { String::new() },
|
||||
&|_, n| {
|
||||
let paths = self.paths_map.get(&n.id()).unwrap();
|
||||
let first_path = paths.iter().next().expect(&format!(
|
||||
"dso: you have a path map with an empty entry for inode {}",
|
||||
n.id()
|
||||
));
|
||||
let first_path = paths.iter().next().unwrap_or_else(|| panic!("dso: you have a path map with an empty entry for inode {}",
|
||||
n.id()));
|
||||
format!(
|
||||
"label = \"({}, {})\"",
|
||||
n.weight(),
|
||||
|
|
Loading…
Reference in a new issue