diff options
author | i love my dog <50598611+ms-jpq@users.noreply.github.com> | 2024-03-22 14:30:43 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-22 14:30:43 -0700 |
commit | 582726014eb9bf6c6272793c827983a450c1eeef (patch) | |
tree | f38850892f0220d4d51f1238b02f2f93060fbb64 | |
parent | a0dc8b31de8f321a195e8cc74238be378f6d209e (diff) | |
parent | 454d8adb285c1095332f40ffd3764638f5843395 (diff) |
Merge pull request #312 from ms-jpq/dev
rewrite using streams
-rw-r--r-- | .github/workflows/ci.yml | 2 | ||||
-rw-r--r-- | Cargo.lock | 305 | ||||
-rw-r--r-- | Cargo.toml | 29 | ||||
-rw-r--r-- | RELEASE_NOTES.md | 6 | ||||
-rwxr-xr-x | build.py | 2 | ||||
-rw-r--r-- | ci/templates/DEBIAN/usr/bin/.gitignore (renamed from ci/templates/DEBIAN/usr/local/bin/.gitignore) | 0 | ||||
-rw-r--r-- | src/argparse.rs | 12 | ||||
-rw-r--r-- | src/displace.rs | 62 | ||||
-rw-r--r-- | src/fs_pipe.rs | 22 | ||||
-rw-r--r-- | src/fzf.rs | 121 | ||||
-rw-r--r-- | src/input.rs | 203 | ||||
-rw-r--r-- | src/main.rs | 146 | ||||
-rw-r--r-- | src/output.rs | 42 | ||||
-rw-r--r-- | src/subprocess.rs | 120 | ||||
-rw-r--r-- | src/types.rs | 88 |
15 files changed, 422 insertions, 738 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 30c9f97..9a4e5d6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,6 +3,8 @@ name: CI on: push: + branches: + - senpai pull_request: schedule: - cron: "0 0 * * *" # daily @@ -19,9 +19,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aho-corasick" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] @@ -37,9 +37,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.11" +version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5" +checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" dependencies = [ "anstyle", "anstyle-parse", @@ -51,26 +51,26 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.2" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" [[package]] name = "anstyle-parse" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -84,19 +84,6 @@ dependencies = [ ] [[package]] -name = "async-channel" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28243a43d821d11341ab73c80bed182dc015c514b951616cf79bd4af39af0c3" -dependencies = [ - "concurrent-queue", - "event-listener", - "event-listener-strategy", - "futures-core", - "pin-project-lite", -] - -[[package]] name = "autocfg" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -119,30 +106,21 @@ dependencies = [ [[package]] name = "bitflags" -version = "1.3.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "bytes" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" [[package]] name = "cc" -version = "1.0.83" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "libc", -] +checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" [[package]] name = "cfg-if" @@ -152,9 +130,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "4.5.1" +version = "4.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c918d541ef2913577a0f9566e9ce27cb35b6df072075769e0b26cb5a554520da" +checksum = "949626d00e063efc93b6dca932419ceb5432f99769911c0b995f7e884c778813" dependencies = [ "clap_builder", "clap_derive", @@ -162,9 +140,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.1" +version = "4.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3e7391dad68afb0c2ede1bf619f579a3dc9c2ec67f089baa397123a2f3d1eb" +checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" dependencies = [ "anstream", "anstyle", @@ -175,9 +153,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.0" +version = "4.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "307bc0538d5f0f83b8248db3087aa92fe504e4691294d0c96c0eabc33f47ba47" +checksum = "90239a040c80f5e14809ca132ddc4176ab33d5e17e49691793296e3fcb34d72f" dependencies = [ "heck", "proc-macro2", @@ -198,24 +176,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" [[package]] -name = "concurrent-queue" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" -dependencies = [ - "cfg-if", -] - -[[package]] name = "difflib" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -223,9 +183,9 @@ checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" [[package]] name = "either" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" [[package]] name = "errno" @@ -238,27 +198,6 @@ dependencies = [ ] [[package]] -name = "event-listener" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b72557800024fabbaa2449dd4bf24e37b93702d457a4d4f2b0dd1f0f039f20c1" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "feedafcaa9b749175d5ac357452a9d41ea2911da598fde46ce1fe02c37751291" -dependencies = [ - "event-listener", - "pin-project-lite", -] - -[[package]] name = "futures" version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -349,9 +288,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ "cfg-if", "libc", @@ -360,21 +299,21 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "heck" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.3.2" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "home" @@ -398,35 +337,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" [[package]] -name = "lock_api" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] name = "memchr" -version = "2.6.2" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5486aed0026218e61b8a01d5fbd5a0a134649abb71a0e53b7bc088529dced86e" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" dependencies = [ "adler", ] [[package]] name = "mio" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", "wasi", @@ -445,47 +374,18 @@ dependencies = [ [[package]] name = "object" -version = "0.32.0" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ac5bbd07aea88c60a577a1ce218075ffd59208b2d7ca97adf9bfc5aeb21ebe" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" - -[[package]] -name = "parking" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets 0.48.5", -] +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "pin-project-lite" @@ -501,32 +401,23 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.33" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] [[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] name = "regex" version = "1.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -540,9 +431,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" dependencies = [ "aho-corasick", "memchr", @@ -563,11 +454,11 @@ checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustix" -version = "0.38.31" +version = "0.38.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" +checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" dependencies = [ - "bitflags 2.4.0", + "bitflags", "errno", "libc", "linux-raw-sys", @@ -580,7 +471,6 @@ version = "0.4.24" dependencies = [ "aho-corasick", "ansi_term", - "async-channel", "clap", "difflib", "futures", @@ -592,12 +482,6 @@ dependencies = [ ] [[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] name = "shlex" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -622,19 +506,13 @@ dependencies = [ ] [[package]] -name = "smallvec" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" - -[[package]] name = "socket2" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -645,9 +523,9 @@ checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" [[package]] name = "syn" -version = "2.0.29" +version = "2.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a" +checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032" dependencies = [ "proc-macro2", "quote", @@ -675,30 +553,17 @@ dependencies = [ "libc", "mio", "num_cpus", - "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", - "tokio-macros", "windows-sys 0.48.0", ] [[package]] -name = "tokio-macros" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] name = "unicode-ident" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "utf8parse" @@ -708,9 +573,9 @@ checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "uuid" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f00cc9702ca12d3c81455259621e676d0f7251cec66a21e98fe2e9a37db93b2a" +checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" dependencies = [ "getrandom", ] @@ -771,7 +636,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.4", ] [[package]] @@ -791,17 +656,17 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", + "windows_aarch64_gnullvm 0.52.4", + "windows_aarch64_msvc 0.52.4", + "windows_i686_gnu 0.52.4", + "windows_i686_msvc 0.52.4", + "windows_x86_64_gnu 0.52.4", + "windows_x86_64_gnullvm 0.52.4", + "windows_x86_64_msvc 0.52.4", ] [[package]] @@ -812,9 +677,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" +checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" [[package]] name = "windows_aarch64_msvc" @@ -824,9 +689,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" +checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" [[package]] name = "windows_i686_gnu" @@ -836,9 +701,9 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" +checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" [[package]] name = "windows_i686_msvc" @@ -848,9 +713,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" +checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" [[package]] name = "windows_x86_64_gnu" @@ -860,9 +725,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" +checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" [[package]] name = "windows_x86_64_gnullvm" @@ -872,9 +737,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" +checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" [[package]] name = "windows_x86_64_msvc" @@ -884,6 +749,6 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" +checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" @@ -7,14 +7,21 @@ version = "0.4.24" [dependencies] -aho-corasick = { version = "*" } -ansi_term = { version = "*" } -async-channel = { version = "*" } -clap = { version = "*", features = ["derive", "wrap_help"] } -difflib = { version = "*" } -futures = { version = "*" } -regex = { version = "*" } -shlex = { version = "*" } -tokio = { version = "*", features = ["full"] } -uuid = { version = "*", features = ["v4"] } -which = { version = "*" } +aho-corasick = { version = "*" } +ansi_term = { version = "*" } +clap = { version = "*", features = ["derive", "wrap_help"] } +difflib = { version = "*" } +futures = { version = "*" } +regex = { version = "*" } +shlex = { version = "*" } +tokio = { version = "*", features = [ + "fs", + "io-std", + "io-util", + "net", + "process", + "rt-multi-thread", + "signal", +] } +uuid = { version = "*", features = ["v4"] } +which = { version = "*" } diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index a18e988..4386ea7 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,9 +1,9 @@ ## Good news -v0.4.16 +v0.4.24 -- Added windows +- Fewer dependencies -- Added aarch64 +- More robust signal handling **Released by CI** @@ -94,7 +94,7 @@ def _deb(triple: str) -> None: release = _bin_path(triple) tmp = _TOP_LEVEL / "temp" / triple - sad = tmp / "usr" / "local" / "bin" / "sad" + sad = tmp / "usr" / "bin" / "sad" control = tmp / "DEBIAN" / "control" deb = (_ARTS / triple).with_suffix(".deb") diff --git a/ci/templates/DEBIAN/usr/local/bin/.gitignore b/ci/templates/DEBIAN/usr/bin/.gitignore index d6b7ef3..d6b7ef3 100644 --- a/ci/templates/DEBIAN/usr/local/bin/.gitignore +++ b/ci/templates/DEBIAN/usr/bin/.gitignore diff --git a/src/argparse.rs b/src/argparse.rs index 55f868a..ca850f2 100644 --- a/src/argparse.rs +++ b/src/argparse.rs @@ -1,5 +1,5 @@ use { - super::{subprocess::SubprocCommand, types::Fail}, + super::{subprocess::SubprocCommand, types::Die}, aho_corasick::{AhoCorasick, AhoCorasickBuilder}, clap::Parser, regex::{Regex, RegexBuilder}, @@ -155,14 +155,14 @@ fn p_auto_flags(exact: bool, pattern: &str) -> Vec<String> { flags } -fn p_aho_corasick(pattern: &str, flags: Vec<String>) -> Result<AhoCorasick, Fail> { +fn p_aho_corasick(pattern: &str, flags: Vec<String>) -> Result<AhoCorasick, Die> { let mut ac = AhoCorasickBuilder::new(); for flag in flags { match flag.as_str() { "i" => ac.ascii_case_insensitive(true), "I" => ac.ascii_case_insensitive(false), _ => { - return Err(Fail::ArgumentError(format!( + return Err(Die::ArgumentError(format!( "Invalid regex flag, see `--help` :: {flag}" ))) } @@ -171,7 +171,7 @@ fn p_aho_corasick(pattern: &str, flags: Vec<String>) -> Result<AhoCorasick, Fail Ok(ac.build([pattern])?) } -fn p_regex(pattern: &str, flags: Vec<String>) -> Result<Regex, Fail> { +fn p_regex(pattern: &str, flags: Vec<String>) -> Result<Regex, Die> { let mut re = RegexBuilder::new(pattern); for flag in flags { match flag.as_str() { @@ -186,7 +186,7 @@ fn p_regex(pattern: &str, flags: Vec<String>) -> Result<Regex, Fail> { "x" => re.ignore_whitespace(true), "X" => re.ignore_whitespace(false), _ => { - return Err(Fail::ArgumentError(format!( + return Err(Die::ArgumentError(format!( "Invalid regex flag, see `--help` :: {flag}" ))) } @@ -243,7 +243,7 @@ fn p_pager(pager: &Option<String>) -> Option<SubprocCommand> { }) } -pub fn parse_opts(mode: Mode, args: Arguments) -> Result<Options, Fail> { +pub fn parse_opts(mode: Mode, args: Arguments) -> Result<Options, Die> { let mut flagset = p_auto_flags(args.exact, &args.pattern); flagset.extend( args diff --git a/src/displace.rs b/src/displace.rs index 8816614..4c19349 100644 --- a/src/displace.rs +++ b/src/displace.rs @@ -2,13 +2,12 @@ use { super::{ argparse::{Action, Engine, Options}, fs_pipe::{slurp, spit}, - input::Payload, - types::Fail, + input::LineIn, + types::Die, udiff::{apply_patches, patches, pure_diffs, udiff}, }, ansi_term::Colour, std::{ffi::OsString, path::PathBuf, sync::Arc}, - tokio::task::spawn_blocking, }; impl Engine { @@ -20,7 +19,7 @@ impl Engine { } } -impl Payload { +impl LineIn { const fn path(&self) -> &PathBuf { match self { Self::Entire(path) | Self::Piecewise(path, _) => path, @@ -28,8 +27,8 @@ impl Payload { } } -pub async fn displace(opts: &Arc<Options>, payload: Payload) -> Result<OsString, Fail> { - let path = payload.path().clone(); +pub async fn displace(opts: &Arc<Options>, input: LineIn) -> Result<OsString, Die> { + let path = input.path().clone(); let name = opts .cwd .as_ref() @@ -39,54 +38,41 @@ pub async fn displace(opts: &Arc<Options>, payload: Payload) -> Result<OsString, .to_owned(); let slurped = slurp(&path).await?; - let before = Arc::new(slurped.content); - - let o = opts.clone(); - let o2 = opts.clone(); - let b = before.clone(); - let after = spawn_blocking(move || o.engine.replace(&b)).await?; + let before = slurped.content; + let after = opts.engine.replace(&before); if *before == after { Ok(OsString::default()) } else { - let print = match (&opts.action, payload) { - (Action::Preview, Payload::Entire(_)) => { - spawn_blocking(move || udiff(None, o2.unified, &name, &before, &after)).await? - } - (Action::Preview, Payload::Piecewise(_, ranges)) => { - spawn_blocking(move || udiff(Some(&ranges), o2.unified, &name, &before, &after)).await? + let print = match (&opts.action, input) { + (Action::Preview, LineIn::Entire(_)) => udiff(None, opts.unified, &name, &before, &after), + (Action::Preview, LineIn::Piecewise(_, ranges)) => { + udiff(Some(&ranges), opts.unified, &name, &before, &after) } - (Action::Commit, Payload::Entire(_)) => { + (Action::Commit, LineIn::Entire(_)) => { spit(&path, &slurped.meta, &after).await?; let mut out = name; out.push("\n"); out } - (Action::Commit, Payload::Piecewise(_, ranges)) => { - let after = spawn_blocking(move || { - let patches = patches(o2.unified, &before, &after); - apply_patches(patches, &ranges, &before) - }) - .await?; - + (Action::Commit, LineIn::Piecewise(_, ranges)) => { + let patches = patches(opts.unified, &before, &after); + let after = apply_patches(patches, &ranges, &before); spit(&path, &slurped.meta, &after).await?; let mut out = name; out.push("\n"); out } (Action::FzfPreview(_, _), _) => { - spawn_blocking(move || { - let ranges = pure_diffs(o2.unified, &before, &after); - let mut fzf_lines = OsString::new(); - for range in ranges { - let repr = Colour::Red.paint(format!("{range}")); - fzf_lines.push(&name); - let line = format!("\n\n\n\n{repr}\0"); - fzf_lines.push(&line); - } - fzf_lines - }) - .await? + let ranges = pure_diffs(opts.unified, &before, &after); + let mut fzf_lines = OsString::new(); + for range in ranges { + let repr = Colour::Red.paint(format!("{range}")); + fzf_lines.push(&name); + let line = format!("\n\n\n\n{repr}\0"); + fzf_lines.push(&line); + } + fzf_lines } }; Ok(print) diff --git a/src/fs_pipe.rs b/src/fs_pipe.rs index 8863e9a..5972275 100644 --- a/src/fs_pipe.rs +++ b/src/fs_pipe.rs @@ -1,5 +1,5 @@ use { - super::types::Fail, + super::types::Die, std::{borrow::ToOwned, fs::Metadata, io::ErrorKind, path::Path}, tokio::{ fs::{rename, File, OpenOptions}, @@ -13,22 +13,22 @@ pub struct Slurpee { pub content: String, } -pub async fn slurp(path: &Path) -> Result<Slurpee, Fail> { +pub async fn slurp(path: &Path) -> Result<Slurpee, Die> { let mut fd = File::open(path) .await - .map_err(|e| Fail::IO(path.to_owned(), e.kind()))?; + .map_err(|e| Die::IO(path.to_owned(), e.kind()))?; let meta = fd .metadata() .await - .map_err(|e| Fail::IO(path.to_owned(), e.kind()))?; + .map_err(|e| Die::IO(path.to_owned(), e.kind()))?; let content = if meta.is_file() { let mut s = String::default(); match fd.read_to_string(&mut s).await { Ok(_) => s, Err(err) if err.kind() == ErrorKind::InvalidData => s, - Err(err) => return Err(Fail::IO(path.to_owned(), err.kind())), + Err(err) => return Err(Die::IO(path.to_owned(), err.kind())), } } else { String::default() @@ -37,7 +37,7 @@ pub async fn slurp(path: &Path) -> Result<Slurpee, Fail> { Ok(Slurpee { meta, content }) } -pub async fn spit(canonical: &Path, meta: &Metadata, text: &str) -> Result<(), Fail> { +pub async fn spit(canonical: &Path, meta: &Metadata, text: &str) -> Result<(), Die> { let uuid = Uuid::new_v4().as_simple().to_string(); let mut file_name = canonical .file_name() @@ -52,25 +52,25 @@ pub async fn spit(canonical: &Path, meta: &Metadata, text: &str) -> Result<(), F .write(true) .open(&tmp) .await - .map_err(|e| Fail::IO(tmp.clone(), e.kind()))?; + .map_err(|e| Die::IO(tmp.clone(), e.kind()))?; fd.set_permissions(meta.permissions()) .await - .map_err(|e| Fail::IO(tmp.clone(), e.kind()))?; + .map_err(|e| Die::IO(tmp.clone(), e.kind()))?; let mut writer = BufWriter::new(fd); writer .write_all(text.as_bytes()) .await - .map_err(|e| Fail::IO(tmp.clone(), e.kind()))?; + .map_err(|e| Die::IO(tmp.clone(), e.kind()))?; writer .flush() .await - .map_err(|e| Fail::IO(tmp.clone(), e.kind()))?; + .map_err(|e| Die::IO(tmp.clone(), e.kind()))?; rename(&tmp, &canonical) |