Update yabridgectl for clap 4.x

This work has been sitting unfinished for ages. The original plan was to
also move it to CLAP's derive macros at the same time, but that makes
some of the path management more difficult.
This commit is contained in:
Robbert van der Helm
2023-12-10 17:10:08 +01:00
parent b9ad1731b9
commit bbec4f3163
5 changed files with 368 additions and 429 deletions
+2
View File
@@ -21,6 +21,8 @@ Versioning](https://semver.org/spec/v2.0.0.html).
### yabridgectl ### yabridgectl
- Yabridgectl's command line interface looks slightly differently again after
some dependency updates. The behavior remains the same.
- Some outdated warning messages have been updated to make yabridge's current - Some outdated warning messages have been updated to make yabridge's current
state. There are also additional warnings when detecting common installation state. There are also additional warnings when detecting common installation
issues. issues.
+239 -288
View File
@@ -3,22 +3,60 @@
version = 3 version = 3
[[package]] [[package]]
name = "anyhow" name = "anstream"
version = "1.0.57" version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
dependencies = [
"anstyle",
"anstyle-parse",
"anstyle-query",
"anstyle-wincon",
"colorchoice",
"is-terminal",
"utf8parse",
]
[[package]] [[package]]
name = "atty" name = "anstyle"
version = "0.2.14" version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd"
[[package]]
name = "anstyle-parse"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
dependencies = [ dependencies = [
"hermit-abi 0.1.19", "utf8parse",
"libc",
"winapi",
] ]
[[package]]
name = "anstyle-query"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
dependencies = [
"windows-sys",
]
[[package]]
name = "anstyle-wincon"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c677ab05e09154296dd37acecd46420c17b9713e8366facafa8fc0885167cf4c"
dependencies = [
"anstyle",
"windows-sys",
]
[[package]]
name = "anyhow"
version = "1.0.72"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854"
[[package]] [[package]]
name = "autocfg" name = "autocfg"
version = "1.1.0" version = "1.1.0"
@@ -32,10 +70,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]] [[package]]
name = "cc" name = "bitflags"
version = "1.0.73" version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
[[package]]
name = "cc"
version = "1.0.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "305fe645edc1442a0fa8b6726ba61d422798d37a52e12eaecf4b022ebbb88f01"
dependencies = [
"libc",
]
[[package]] [[package]]
name = "cfg-if" name = "cfg-if"
@@ -45,35 +92,52 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]] [[package]]
name = "clap" name = "clap"
version = "3.1.18" version = "4.3.21"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2dbdf4bdacb33466e854ce889eee8dfd5729abf7ccd7664d0a2d60cd384440b" checksum = "c27cdf28c0f604ba3f512b0c9a409f8de8513e4816705deb0498b627e7c3a3fd"
dependencies = [ dependencies = [
"atty", "clap_builder",
"bitflags", "clap_derive",
"once_cell",
]
[[package]]
name = "clap_builder"
version = "4.3.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08a9f1ab5e9f01a9b81f202e8562eb9a10de70abf9eaeac1be465c28b75aa4aa"
dependencies = [
"anstream",
"anstyle",
"clap_lex", "clap_lex",
"indexmap", "once_cell",
"lazy_static",
"strsim", "strsim",
"termcolor", "terminal_size",
"terminal_size 0.1.17", ]
"textwrap 0.15.0",
[[package]]
name = "clap_derive"
version = "4.3.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050"
dependencies = [
"heck",
"proc-macro2",
"quote",
"syn",
] ]
[[package]] [[package]]
name = "clap_lex" name = "clap_lex"
version = "0.2.0" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a37c35f1112dad5e6e0b1adaff798507497a18fceeb30cceb3bae7d1427b9213" checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
dependencies = [
"os_str_bytes",
]
[[package]] [[package]]
name = "clipboard-win" name = "clipboard-win"
version = "4.4.1" version = "4.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f3e1238132dc01f081e1cbb9dace14e5ef4c3a51ee244bd982275fb514605db" checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362"
dependencies = [ dependencies = [
"error-code", "error-code",
"str-buf", "str-buf",
@@ -81,21 +145,27 @@ dependencies = [
] ]
[[package]] [[package]]
name = "colored" name = "colorchoice"
version = "2.0.0" version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd" checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
[[package]]
name = "colored"
version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2674ec482fbc38012cf31e6c42ba0177b431a0cb6f15fe40efa5aab1bda516f6"
dependencies = [ dependencies = [
"atty", "is-terminal",
"lazy_static", "lazy_static",
"winapi", "windows-sys",
] ]
[[package]] [[package]]
name = "crossbeam-channel" name = "crossbeam-channel"
version = "0.5.4" version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53" checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"crossbeam-utils", "crossbeam-utils",
@@ -103,9 +173,9 @@ dependencies = [
[[package]] [[package]]
name = "crossbeam-deque" name = "crossbeam-deque"
version = "0.8.1" version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"crossbeam-epoch", "crossbeam-epoch",
@@ -114,35 +184,24 @@ dependencies = [
[[package]] [[package]]
name = "crossbeam-epoch" name = "crossbeam-epoch"
version = "0.9.8" version = "0.9.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c" checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
dependencies = [ dependencies = [
"autocfg", "autocfg",
"cfg-if", "cfg-if",
"crossbeam-utils", "crossbeam-utils",
"lazy_static", "memoffset 0.9.0",
"memoffset",
"scopeguard", "scopeguard",
] ]
[[package]] [[package]]
name = "crossbeam-utils" name = "crossbeam-utils"
version = "0.8.8" version = "0.8.16"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"lazy_static",
]
[[package]]
name = "dirs"
version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
dependencies = [
"dirs-sys",
] ]
[[package]] [[package]]
@@ -155,17 +214,6 @@ dependencies = [
"dirs-sys-next", "dirs-sys-next",
] ]
[[package]]
name = "dirs-sys"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
dependencies = [
"libc",
"redox_users",
"winapi",
]
[[package]] [[package]]
name = "dirs-sys-next" name = "dirs-sys-next"
version = "0.1.2" version = "0.1.2"
@@ -179,9 +227,9 @@ dependencies = [
[[package]] [[package]]
name = "either" name = "either"
version = "1.6.1" version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
[[package]] [[package]]
name = "endian-type" name = "endian-type"
@@ -189,17 +237,6 @@ version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
[[package]]
name = "errno"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
dependencies = [
"errno-dragonfly",
"libc",
"winapi",
]
[[package]] [[package]]
name = "errno" name = "errno"
version = "0.3.2" version = "0.3.2"
@@ -208,7 +245,7 @@ checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f"
dependencies = [ dependencies = [
"errno-dragonfly", "errno-dragonfly",
"libc", "libc",
"windows-sys 0.48.0", "windows-sys",
] ]
[[package]] [[package]]
@@ -233,20 +270,20 @@ dependencies = [
[[package]] [[package]]
name = "fd-lock" name = "fd-lock"
version = "3.0.5" version = "3.0.13"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "46e245f4c8ec30c6415c56cb132c07e69e74f1942f6b4a4061da748b49f486ca" checksum = "ef033ed5e9bad94e55838ca0ca906db0e043f517adda0c8b79c7a8c66c93c1b5"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"rustix 0.34.8", "rustix 0.38.8",
"windows-sys 0.30.0", "windows-sys",
] ]
[[package]] [[package]]
name = "getrandom" name = "getrandom"
version = "0.2.6" version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"libc", "libc",
@@ -255,9 +292,9 @@ dependencies = [
[[package]] [[package]]
name = "goblin" name = "goblin"
version = "0.6.0" version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "572564d6cba7d09775202c8e7eebc4d534d5ae36578ab402fb21e182a0ac9505" checksum = "0d6b4de4a8eb6c46a8c77e1d3be942cb9a8bf073c22374578e5ba4b08ed0ff68"
dependencies = [ dependencies = [
"log", "log",
"plain", "plain",
@@ -265,19 +302,10 @@ dependencies = [
] ]
[[package]] [[package]]
name = "hashbrown" name = "heck"
version = "0.11.2" version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]]
name = "hermit-abi"
version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
dependencies = [
"libc",
]
[[package]] [[package]]
name = "hermit-abi" name = "hermit-abi"
@@ -285,31 +313,26 @@ version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
[[package]]
name = "indexmap"
version = "1.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6012d540c5baa3589337a98ce73408de9b5a25ec9fc2c6fd6be8f0d39e0ca5a"
dependencies = [
"autocfg",
"hashbrown",
]
[[package]]
name = "io-lifetimes"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9448015e586b611e5d322f6703812bbca2f1e709d5773ecd38ddb4e3bb649504"
[[package]] [[package]]
name = "io-lifetimes" name = "io-lifetimes"
version = "1.0.11" version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
dependencies = [ dependencies = [
"hermit-abi 0.3.2", "hermit-abi",
"libc", "libc",
"windows-sys 0.48.0", "windows-sys",
]
[[package]]
name = "is-terminal"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
dependencies = [
"hermit-abi",
"rustix 0.38.8",
"windows-sys",
] ]
[[package]] [[package]]
@@ -341,20 +364,14 @@ checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
[[package]] [[package]]
name = "libloading" name = "libloading"
version = "0.7.3" version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"winapi", "winapi",
] ]
[[package]]
name = "linux-raw-sys"
version = "0.0.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d"
[[package]] [[package]]
name = "linux-raw-sys" name = "linux-raw-sys"
version = "0.3.8" version = "0.3.8"
@@ -362,13 +379,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
[[package]] [[package]]
name = "log" name = "linux-raw-sys"
version = "0.4.17" version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
dependencies = [
"cfg-if", [[package]]
] name = "log"
version = "0.4.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
[[package]] [[package]]
name = "memchr" name = "memchr"
@@ -385,6 +405,15 @@ dependencies = [
"autocfg", "autocfg",
] ]
[[package]]
name = "memoffset"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
dependencies = [
"autocfg",
]
[[package]] [[package]]
name = "nibble_vec" name = "nibble_vec"
version = "0.1.0" version = "0.1.0"
@@ -396,32 +425,32 @@ dependencies = [
[[package]] [[package]]
name = "nix" name = "nix"
version = "0.23.1" version = "0.23.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c"
dependencies = [ dependencies = [
"bitflags", "bitflags 1.3.2",
"cc", "cc",
"cfg-if", "cfg-if",
"libc", "libc",
"memoffset", "memoffset 0.6.5",
] ]
[[package]] [[package]]
name = "num_cpus" name = "num_cpus"
version = "1.13.1" version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
dependencies = [ dependencies = [
"hermit-abi 0.1.19", "hermit-abi",
"libc", "libc",
] ]
[[package]] [[package]]
name = "os_str_bytes" name = "once_cell"
version = "6.1.0" version = "1.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21326818e99cfe6ce1e524c2a805c189a99b5ae555a35d19f9a284b427d86afa" checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
[[package]] [[package]]
name = "plain" name = "plain"
@@ -431,9 +460,9 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.39" version = "1.0.66"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f" checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
dependencies = [ dependencies = [
"unicode-ident", "unicode-ident",
] ]
@@ -449,9 +478,9 @@ dependencies = [
[[package]] [[package]]
name = "quote" name = "quote"
version = "1.0.18" version = "1.0.32"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
] ]
@@ -468,21 +497,19 @@ dependencies = [
[[package]] [[package]]
name = "rayon" name = "rayon"
version = "1.5.3" version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
dependencies = [ dependencies = [
"autocfg",
"crossbeam-deque",
"either", "either",
"rayon-core", "rayon-core",
] ]
[[package]] [[package]]
name = "rayon-core" name = "rayon-core"
version = "1.9.3" version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
dependencies = [ dependencies = [
"crossbeam-channel", "crossbeam-channel",
"crossbeam-deque", "crossbeam-deque",
@@ -492,11 +519,11 @@ dependencies = [
[[package]] [[package]]
name = "redox_syscall" name = "redox_syscall"
version = "0.2.13" version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
dependencies = [ dependencies = [
"bitflags", "bitflags 1.3.2",
] ]
[[package]] [[package]]
@@ -519,32 +546,31 @@ dependencies = [
"winapi", "winapi",
] ]
[[package]]
name = "rustix"
version = "0.34.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2079c267b8394eb529872c3cf92e181c378b41fea36e68130357b52493701d2e"
dependencies = [
"bitflags",
"errno 0.2.8",
"io-lifetimes 0.6.1",
"libc",
"linux-raw-sys 0.0.46",
"winapi",
]
[[package]] [[package]]
name = "rustix" name = "rustix"
version = "0.37.23" version = "0.37.23"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06"
dependencies = [ dependencies = [
"bitflags", "bitflags 1.3.2",
"errno 0.3.2", "errno",
"io-lifetimes 1.0.11", "io-lifetimes",
"libc", "libc",
"linux-raw-sys 0.3.8", "linux-raw-sys 0.3.8",
"windows-sys 0.48.0", "windows-sys",
]
[[package]]
name = "rustix"
version = "0.38.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19ed4fa021d81c8392ce04db050a3da9a60299050b7ae1cf482d862b54a7218f"
dependencies = [
"bitflags 2.4.0",
"errno",
"libc",
"linux-raw-sys 0.4.5",
"windows-sys",
] ]
[[package]] [[package]]
@@ -553,7 +579,7 @@ version = "9.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db7826789c0e25614b03e5a54a0717a86f9ff6e6e5247f92b369472869320039" checksum = "db7826789c0e25614b03e5a54a0717a86f9ff6e6e5247f92b369472869320039"
dependencies = [ dependencies = [
"bitflags", "bitflags 1.3.2",
"cfg-if", "cfg-if",
"clipboard-win", "clipboard-win",
"dirs-next", "dirs-next",
@@ -588,9 +614,9 @@ dependencies = [
[[package]] [[package]]
name = "scopeguard" name = "scopeguard"
version = "1.1.0" version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]] [[package]]
name = "scroll" name = "scroll"
@@ -603,9 +629,9 @@ dependencies = [
[[package]] [[package]]
name = "scroll_derive" name = "scroll_derive"
version = "0.11.0" version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bdbda6ac5cd1321e724fa9cee216f3a61885889b896f073b8f82322789c5250e" checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -614,15 +640,15 @@ dependencies = [
[[package]] [[package]]
name = "serde" name = "serde"
version = "1.0.137" version = "1.0.183"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" checksum = "32ac8da02677876d532745a130fc9d8e6edfa81a269b107c5b00829b91d8eb3c"
[[package]] [[package]]
name = "serde_derive" name = "serde_derive"
version = "1.0.137" version = "1.0.183"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" checksum = "aafe972d60b0b9bee71a91b92fee2d4fb3c9d7e8f6b179aa99f27203d99a4816"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -642,9 +668,9 @@ dependencies = [
[[package]] [[package]]
name = "smallvec" name = "smallvec"
version = "1.8.0" version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
[[package]] [[package]]
name = "smawk" name = "smawk"
@@ -666,34 +692,15 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.96" version = "2.0.28"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf" checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"unicode-ident", "unicode-ident",
] ]
[[package]]
name = "termcolor"
version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
dependencies = [
"winapi-util",
]
[[package]]
name = "terminal_size"
version = "0.1.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
dependencies = [
"libc",
"winapi",
]
[[package]] [[package]]
name = "terminal_size" name = "terminal_size"
version = "0.2.6" version = "0.2.6"
@@ -701,16 +708,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237" checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237"
dependencies = [ dependencies = [
"rustix 0.37.23", "rustix 0.37.23",
"windows-sys 0.48.0", "windows-sys",
]
[[package]]
name = "textwrap"
version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
dependencies = [
"terminal_size 0.1.17",
] ]
[[package]] [[package]]
@@ -720,25 +718,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
dependencies = [ dependencies = [
"smawk", "smawk",
"terminal_size 0.2.6", "terminal_size",
"unicode-linebreak", "unicode-linebreak",
"unicode-width", "unicode-width",
] ]
[[package]] [[package]]
name = "thiserror" name = "thiserror"
version = "1.0.31" version = "1.0.44"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90"
dependencies = [ dependencies = [
"thiserror-impl", "thiserror-impl",
] ]
[[package]] [[package]]
name = "thiserror-impl" name = "thiserror-impl"
version = "1.0.31" version = "1.0.44"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -747,18 +745,18 @@ dependencies = [
[[package]] [[package]]
name = "toml" name = "toml"
version = "0.5.9" version = "0.5.11"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
dependencies = [ dependencies = [
"serde", "serde",
] ]
[[package]] [[package]]
name = "unicode-ident" name = "unicode-ident"
version = "1.0.0" version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee" checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
[[package]] [[package]]
name = "unicode-linebreak" name = "unicode-linebreak"
@@ -768,9 +766,9 @@ checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
[[package]] [[package]]
name = "unicode-segmentation" name = "unicode-segmentation"
version = "1.9.0" version = "1.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
[[package]] [[package]]
name = "unicode-width" name = "unicode-width"
@@ -780,36 +778,35 @@ checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
[[package]] [[package]]
name = "utf8parse" name = "utf8parse"
version = "0.2.0" version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "936e4b492acfd135421d8dca4b1aa80a7bfc26e702ef3af710e0752684df5372" checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
[[package]] [[package]]
name = "walkdir" name = "walkdir"
version = "2.3.2" version = "2.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
dependencies = [ dependencies = [
"same-file", "same-file",
"winapi",
"winapi-util", "winapi-util",
] ]
[[package]] [[package]]
name = "wasi" name = "wasi"
version = "0.10.2+wasi-snapshot-preview1" version = "0.11.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]] [[package]]
name = "which" name = "which"
version = "4.2.5" version = "4.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c4fb54e6113b6a8772ee41c3404fb0301ac79604489467e0a9ce1f3e97c24ae" checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269"
dependencies = [ dependencies = [
"either", "either",
"lazy_static",
"libc", "libc",
"once_cell",
] ]
[[package]] [[package]]
@@ -843,19 +840,6 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "windows-sys"
version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "030b7ff91626e57a05ca64a07c481973cbb2db774e4852c9c7ca342408c6a99a"
dependencies = [
"windows_aarch64_msvc 0.30.0",
"windows_i686_gnu 0.30.0",
"windows_i686_msvc 0.30.0",
"windows_x86_64_gnu 0.30.0",
"windows_x86_64_msvc 0.30.0",
]
[[package]] [[package]]
name = "windows-sys" name = "windows-sys"
version = "0.48.0" version = "0.48.0"
@@ -872,12 +856,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
dependencies = [ dependencies = [
"windows_aarch64_gnullvm", "windows_aarch64_gnullvm",
"windows_aarch64_msvc 0.48.0", "windows_aarch64_msvc",
"windows_i686_gnu 0.48.0", "windows_i686_gnu",
"windows_i686_msvc 0.48.0", "windows_i686_msvc",
"windows_x86_64_gnu 0.48.0", "windows_x86_64_gnu",
"windows_x86_64_gnullvm", "windows_x86_64_gnullvm",
"windows_x86_64_msvc 0.48.0", "windows_x86_64_msvc",
] ]
[[package]] [[package]]
@@ -886,48 +870,24 @@ version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
[[package]]
name = "windows_aarch64_msvc"
version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29277a4435d642f775f63c7d1faeb927adba532886ce0287bd985bffb16b6bca"
[[package]] [[package]]
name = "windows_aarch64_msvc" name = "windows_aarch64_msvc"
version = "0.48.0" version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
[[package]]
name = "windows_i686_gnu"
version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1145e1989da93956c68d1864f32fb97c8f561a8f89a5125f6a2b7ea75524e4b8"
[[package]] [[package]]
name = "windows_i686_gnu" name = "windows_i686_gnu"
version = "0.48.0" version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
[[package]]
name = "windows_i686_msvc"
version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4a09e3a0d4753b73019db171c1339cd4362c8c44baf1bcea336235e955954a6"
[[package]] [[package]]
name = "windows_i686_msvc" name = "windows_i686_msvc"
version = "0.48.0" version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
[[package]]
name = "windows_x86_64_gnu"
version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ca64fcb0220d58db4c119e050e7af03c69e6f4f415ef69ec1773d9aab422d5a"
[[package]] [[package]]
name = "windows_x86_64_gnu" name = "windows_x86_64_gnu"
version = "0.48.0" version = "0.48.0"
@@ -940,12 +900,6 @@ version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
[[package]]
name = "windows_x86_64_msvc"
version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08cabc9f0066848fef4bc6a1c1668e6efce38b661d2aeec75d18d8617eebb5f1"
[[package]] [[package]]
name = "windows_x86_64_msvc" name = "windows_x86_64_msvc"
version = "0.48.0" version = "0.48.0"
@@ -954,12 +908,9 @@ checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
[[package]] [[package]]
name = "xdg" name = "xdg"
version = "2.4.1" version = "2.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c4583db5cbd4c4c0303df2d15af80f0539db703fa1c68802d4cbbd2dd0f88f6" checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546"
dependencies = [
"dirs",
]
[[package]] [[package]]
name = "yabridgectl" name = "yabridgectl"
@@ -977,7 +928,7 @@ dependencies = [
"serde", "serde",
"serde_derive", "serde_derive",
"serde_jsonrc", "serde_jsonrc",
"textwrap 0.16.0", "textwrap",
"toml", "toml",
"walkdir", "walkdir",
"which", "which",
+2 -2
View File
@@ -5,13 +5,13 @@ name = "yabridgectl"
version = "5.0.5" version = "5.0.5"
authors = ["Robbert van der Helm <mail@robbertvanderhelm.nl>"] authors = ["Robbert van der Helm <mail@robbertvanderhelm.nl>"]
edition = "2021" edition = "2021"
description = "Optional utility to help set up yabridge" description = "Utility for setting up and managing yabridge"
repository = "https://github.com/robbert-vdh/yabridge" repository = "https://github.com/robbert-vdh/yabridge"
license = "GPL-3.0-or-later" license = "GPL-3.0-or-later"
[dependencies] [dependencies]
anyhow = "1.0.52" anyhow = "1.0.52"
clap = { version = "3.0.6", features = ["cargo", "env", "wrap_help"] } clap = { version = "4.3.21", features = ["cargo", "derive", "wrap_help"] }
colored = "2.0.0" colored = "2.0.0"
is_executable = "1.0.1" is_executable = "1.0.1"
goblin = { version = "0.6", default_features = false, features = ["std", "pe32", "pe64"] } goblin = { version = "0.6", default_features = false, features = ["std", "pe32", "pe64"] }
+17 -5
View File
@@ -17,6 +17,7 @@
//! Handlers for the subcommands, just to keep `main.rs` clean. //! Handlers for the subcommands, just to keep `main.rs` clean.
use anyhow::{Context, Result}; use anyhow::{Context, Result};
use clap::ValueEnum;
use colored::Colorize; use colored::Colorize;
use std::collections::{HashMap, HashSet}; use std::collections::{HashMap, HashSet};
use std::fs; use std::fs;
@@ -215,13 +216,23 @@ pub fn show_status(config: &Config) -> Result<()> {
} }
/// Options passed to `yabridgectl set`, see `main()` for the definitions of these options. /// Options passed to `yabridgectl set`, see `main()` for the definitions of these options.
pub struct SetOptions<'a> { pub struct SetOptions {
pub path: Option<PathBuf>, pub path: Option<PathBuf>,
pub path_auto: bool, pub path_auto: bool,
pub vst2_location: Option<&'a str>, pub vst2_location: Option<Vst2Location>,
pub no_verify: Option<bool>, pub no_verify: Option<bool>,
} }
/// The location bridged VST2 plugins are set up in.
#[derive(Debug, Clone, Copy, ValueEnum)]
pub enum Vst2Location {
/// Sets bridged VST2 plugins up in '~/.vst/yabridge', the default option.
Centralized,
/// Places the yabridge '.so' file alongside the plugin's '.dll' file in the plugin's directory,
/// exists only for legacy purposes.
Inline,
}
/// Change configuration settings. The actual options are defined in the clap [app](clap::App). /// Change configuration settings. The actual options are defined in the clap [app](clap::App).
pub fn set_settings(config: &mut Config, options: &SetOptions) -> Result<()> { pub fn set_settings(config: &mut Config, options: &SetOptions) -> Result<()> {
if let Some(path) = &options.path { if let Some(path) = &options.path {
@@ -233,9 +244,10 @@ pub fn set_settings(config: &mut Config, options: &SetOptions) -> Result<()> {
} }
match options.vst2_location { match options.vst2_location {
Some("centralized") => config.vst2_location = Vst2InstallationLocation::Centralized, Some(Vst2Location::Centralized) => {
Some("inline") => config.vst2_location = Vst2InstallationLocation::Inline, config.vst2_location = Vst2InstallationLocation::Centralized
Some(s) => unimplemented!("Unexpected installation method '{}'", s), }
Some(Vst2Location::Inline) => config.vst2_location = Vst2InstallationLocation::Inline,
None => (), None => (),
} }
+108 -134
View File
@@ -15,12 +15,14 @@
// along with this program. If not, see <https://www.gnu.org/licenses/>. // along with this program. If not, see <https://www.gnu.org/licenses/>.
use anyhow::Result; use anyhow::Result;
use clap::{command, Arg, Command}; use clap::builder::TypedValueParser;
use clap::{command, value_parser, Arg, Command};
use colored::Colorize; use colored::Colorize;
use std::collections::HashSet; use std::collections::HashSet;
use std::env; use std::env;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use crate::actions::Vst2Location;
use crate::config::Config; use crate::config::Config;
mod actions; mod actions;
@@ -44,15 +46,10 @@ fn main() -> Result<()> {
let mut config = Config::read()?; let mut config = Config::read()?;
// Used for validation in `yabridgectl rm <path>` // Used for parsing and validation in `yabridgectl rm <path>`
let plugin_directories: HashSet<&Path> = config let plugin_directories: HashSet<PathBuf> = config.plugin_dirs.iter().cloned().collect();
.plugin_dirs // Used for parsing and validation in `yabridgectl blacklist rm <path>`
.iter() let blacklist_entries: HashSet<PathBuf> = config.blacklist.iter().cloned().collect();
.map(|path| path.as_path())
.collect();
// Used for validation in `yabridgectl blacklist rm <path>`
let blacklist_entries: HashSet<&Path> =
config.blacklist.iter().map(|path| path.as_path()).collect();
let matches = command!() let matches = command!()
.subcommand_required(true) .subcommand_required(true)
@@ -64,8 +61,7 @@ fn main() -> Result<()> {
.arg( .arg(
Arg::new("path") Arg::new("path")
.help("Path to a directory containing Windows VST2, VST3, or CLAP plugins") .help("Path to a directory containing Windows VST2, VST3, or CLAP plugins")
.validator(validate_directory) .value_parser(parse_directory_path)
.takes_value(true)
.required(true), .required(true),
), ),
) )
@@ -76,8 +72,7 @@ fn main() -> Result<()> {
.arg( .arg(
Arg::new("path") Arg::new("path")
.help("Path to a previously added directory") .help("Path to a previously added directory")
.validator(|path| match_in_path_list(Path::new(path), &plugin_directories)) .value_parser(parse_path_from_set(plugin_directories))
.takes_value(true)
.required(true), .required(true),
), ),
) )
@@ -138,8 +133,7 @@ fn main() -> Result<()> {
then yabridgectl will look in both '/usr/lib' and \ then yabridgectl will look in both '/usr/lib' and \
'~/.local/share/yabridge' by default.", '~/.local/share/yabridge' by default.",
) )
.validator(validate_path) .value_parser(parse_directory_path)
.takes_value(true)
.conflicts_with("path_auto"), .conflicts_with("path_auto"),
) )
.arg( .arg(
@@ -156,19 +150,8 @@ fn main() -> Result<()> {
Arg::new("vst2_location") Arg::new("vst2_location")
.long("vst2-location") .long("vst2-location")
.help("Where to set up VST2 plugins") .help("Where to set up VST2 plugins")
.long_help( .long_help("Where to set up VST2 plugins.")
format!( .value_parser(value_parser!(Vst2Location)),
"Where to set up VST2 plugins. '{}' (the default) causes bridged \
VST2 plugins to be set up in `~/.vst/yabridge.` '{}' causes \
bridged VST2 plugins to be set up next to the original '.dll' \
file.",
"centralized".bright_white(),
"inline".bright_white()
)
.as_ref(),
)
.possible_values(["centralized", "inline"])
.takes_value(true),
) )
.arg( .arg(
Arg::new("no_verify") Arg::new("no_verify")
@@ -179,8 +162,7 @@ fn main() -> Result<()> {
temporarily by passing the '--no-verify' option to 'yabridgectl \ temporarily by passing the '--no-verify' option to 'yabridgectl \
sync'.", sync'.",
) )
.possible_values(["true", "false"]) .value_parser(value_parser!(bool)),
.takes_value(true),
), ),
) )
.subcommand( .subcommand(
@@ -201,8 +183,7 @@ fn main() -> Result<()> {
.arg( .arg(
Arg::new("path") Arg::new("path")
.help("Path to a file or a directory") .help("Path to a file or a directory")
.validator(validate_path) .value_parser(parse_path)
.takes_value(true)
.required(true), .required(true),
), ),
) )
@@ -213,11 +194,7 @@ fn main() -> Result<()> {
.arg( .arg(
Arg::new("path") Arg::new("path")
.help("Path to a previously added file or directory") .help("Path to a previously added file or directory")
.validator(|path| { .value_parser(parse_path_from_set(blacklist_entries))
match_in_path_list(Path::new(path), &blacklist_entries)
})
.validator(validate_path)
.takes_value(true)
.required(true), .required(true),
), ),
) )
@@ -242,31 +219,24 @@ fn main() -> Result<()> {
match matches.subcommand() { match matches.subcommand() {
Some(("add", options)) => actions::add_directory( Some(("add", options)) => actions::add_directory(
&mut config, &mut config,
options options.get_one::<PathBuf>("path").unwrap().canonicalize()?,
.value_of_t_or_exit::<PathBuf>("path")
.canonicalize()?,
), ),
Some(("rm", options)) => { Some(("rm", options)) => {
// Clap sadly doesn't have custom parsers/transforms, so we need to rerun the validator actions::remove_directory(
// to get the result &mut config,
let path = match_in_path_list( // The parser already ensures that this value exists in the plugin locations set
&options.value_of_t_or_exit::<PathBuf>("path"), options.get_one::<PathBuf>("path").unwrap(),
&plugin_directories,
) )
.unwrap()
.to_owned();
actions::remove_directory(&mut config, &path)
} }
Some(("list", _)) => actions::list_directories(&config), Some(("list", _)) => actions::list_directories(&config),
Some(("status", _)) => actions::show_status(&config), Some(("status", _)) => actions::show_status(&config),
Some(("sync", options)) => actions::do_sync( Some(("sync", options)) => actions::do_sync(
&mut config, &mut config,
&actions::SyncOptions { &actions::SyncOptions {
force: options.is_present("force"), force: options.get_flag("force"),
no_verify: options.is_present("no-verify"), no_verify: options.get_flag("no-verify"),
prune: options.is_present("prune"), prune: options.get_flag("prune"),
verbose: options.is_present("verbose"), verbose: options.get_flag("verbose"),
}, },
), ),
Some(("set", options)) => actions::set_settings( Some(("set", options)) => actions::set_settings(
@@ -275,30 +245,24 @@ fn main() -> Result<()> {
// We've already verified that the path is valid, so we should only be getting // We've already verified that the path is valid, so we should only be getting
// errors for missing arguments // errors for missing arguments
path: options path: options
.value_of_t::<PathBuf>("path") .get_one::<PathBuf>("path")
.ok()
.and_then(|path| path.canonicalize().ok()), .and_then(|path| path.canonicalize().ok()),
path_auto: options.is_present("path_auto"), path_auto: options.get_flag("path_auto"),
vst2_location: options.value_of("vst2_location"), vst2_location: options.get_one::<Vst2Location>("vst2_location").copied(),
no_verify: options.value_of("no_verify").map(|value| value == "true"), no_verify: options.get_one::<bool>("no_verify").copied(),
}, },
), ),
Some(("blacklist", blacklist)) => match blacklist.subcommand() { Some(("blacklist", blacklist)) => match blacklist.subcommand() {
Some(("add", options)) => actions::blacklist::add_path( Some(("add", options)) => actions::blacklist::add_path(
&mut config, &mut config,
options options.get_one::<PathBuf>("path").unwrap().canonicalize()?,
.value_of_t_or_exit::<PathBuf>("path")
.canonicalize()?,
), ),
Some(("rm", options)) => { Some(("rm", options)) => {
let path = match_in_path_list( actions::blacklist::remove_path(
&options.value_of_t_or_exit::<PathBuf>("path"), &mut config,
&blacklist_entries, // The parser already ensures that this value exists in the plugin locations set
options.get_one::<PathBuf>("path").unwrap(),
) )
.unwrap()
.to_owned();
actions::blacklist::remove_path(&mut config, &path)
} }
Some(("list", _)) => actions::blacklist::list_paths(&config), Some(("list", _)) => actions::blacklist::list_paths(&config),
Some(("clear", _)) => actions::blacklist::clear(&mut config), Some(("clear", _)) => actions::blacklist::clear(&mut config),
@@ -308,76 +272,86 @@ fn main() -> Result<()> {
} }
} }
/// Verify that a path exists and that is is either a directory or a symlink to a directory. /// Verify that a path exists. Used for validating arguments.
fn validate_directory(path: &str) -> Result<(), String> { fn parse_path(path: &str) -> Result<PathBuf, String> {
validate_path(path)?;
let path = Path::new(path);
if path.is_dir() {
Ok(())
} else {
Err(format!("'{}' is not a directory", path.display()))
}
}
/// Verify that a path exists, used for validating arguments.
fn validate_path(path: &str) -> Result<(), String> {
let path = Path::new(path); let path = Path::new(path);
if path.exists() { if path.exists() {
Ok(()) Ok(path.to_owned())
} else { } else {
Err(String::from("File or directory could not be found."))
}
}
/// [`parse_path()`], but for directories or symlinks to directories.
fn parse_directory_path(path: &str) -> Result<PathBuf, String> {
let path = Path::new(path);
if path.exists() {
if path.is_dir() {
Ok(path.to_owned())
} else {
Err(String::from("Path is not a directory."))
}
} else {
Err(String::from("Directory could not be found."))
}
}
/// Constructs a parser that checks if `path` is in the set of locations, and returns an absolute
/// path to the location if it is. This is similar to using `Arg::possible_values()`, except that it
/// also tries to resolve symlinks, relative paths, and other common variations. If the path is
/// relative, we will try to resolve as much of it as possible (in case the referred to file doesn't
/// exist anymore). We don't iteratively try to resolve symlinks until a candidate matches a path in
/// `candidates`, but this can match a relative path to a symlink that's in the paths list.
fn parse_path_from_set(candidates: HashSet<PathBuf>) -> impl TypedValueParser<Value = PathBuf> {
move |value: &str| -> Result<PathBuf, String> {
// This path does not need to exist, since a plugin location may no longer exist on disk
let path = Path::new(value);
let absolute_path = if path.is_absolute() {
path.to_path_buf()
} else {
// This absolute absolute_path is also needed for the `utils::normalize_path()` below
std::env::current_dir()
.expect("Couldn't get current directory")
.join(path)
};
// If the absolute path is not in the plugin locations verbatim, we'll try a couple
// different variations
if let Some(matching_path) = candidates.get(absolute_path.as_path()) {
return Ok(matching_path.to_path_buf());
}
// This will include a trailing slash if `path` was `.`. All paths entered through
// yabridgectl will be cannonicalized and won't contain a trailing slash, but we'll try both
// variants anyways just in case someone edited the config file.
let normalized_path = util::normalize_path(absolute_path.as_path());
// Is there a nicer way to strip trailing slashes with the standard library?
let normalized_path_str = normalized_path
.to_str()
.expect("Input path contains invalid characters");
let normalized_path_without_slash = if normalized_path_str.ends_with('/') {
Path::new(normalized_path_str.trim_end_matches('/'))
} else {
normalized_path.as_path()
};
// This ia bit of a hack, but it works
let normalized_path_with_slash = normalized_path.join("");
if let Some(found_path) = candidates
.get(normalized_path_without_slash)
.or_else(|| candidates.get(normalized_path_with_slash.as_path()))
{
return Ok(found_path.to_path_buf());
}
// There's sadly no way to use clap's normal error formatting for possible values here since
// parts of the API are not exposed
Err(format!( Err(format!(
"File or directory '{}' could not be found", "Not a known path.\n\n Possible options are: {}",
path.display() format!("{:?}", candidates).green()
)) ))
} }
} }
/// Find `path` in `candidates` and return it as an absolute path. If the path is relative, we will
/// try to resolve as much of it as possible (in case the referred to file doesn't exist anymore).
/// We don't iteratively try to resolve symlinks until a candidate matches a path in `candidates`,
/// but this can match a relative path to a symlink that's in the paths list.
fn match_in_path_list<'a>(path: &Path, candidates: &'a HashSet<&Path>) -> Result<&'a Path, String> {
let absolute_path = if path.is_absolute() {
path.to_owned()
} else {
// This absolute absolute_path is also needed for the `utils::normalize_path()` below
std::env::current_dir()
.expect("Couldn't get current directory")
.join(path)
};
if let Some(path) = candidates.get(absolute_path.as_path()) {
return Ok(path);
}
// This will include a trailing slash if `path` was `.`. All paths entered through yabridgectl
// will be cannonicalized and won't contain a trailing slash, but we'll try both variants
// anyways just in case someone edited the config file.
let normalized_path = util::normalize_path(absolute_path.as_path());
// Is there a nicer way to strip trailing slashes with the standard library?
let normalized_path_str = normalized_path
.to_str()
.expect("Input path contains invalid characters");
let normalized_path_without_slash = if normalized_path_str.ends_with('/') {
Path::new(normalized_path_str.trim_end_matches('/'))
} else {
normalized_path.as_path()
};
// This ia bit of a hack, but it works
let normalized_path_with_slash = normalized_path.join("");
if let Some(path) = candidates
.get(normalized_path_without_slash)
.or_else(|| candidates.get(normalized_path_with_slash.as_path()))
{
return Ok(path);
}
Err(format!(
"'{}' is not a known path.\n\n\tPossible options are: {}",
path.display(),
format!("{:?}", candidates).green()
))
}