summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authori love my dog <50598611+ms-jpq@users.noreply.github.com>2024-03-22 14:30:43 -0700
committerGitHub <noreply@github.com>2024-03-22 14:30:43 -0700
commit582726014eb9bf6c6272793c827983a450c1eeef (patch)
treef38850892f0220d4d51f1238b02f2f93060fbb64
parenta0dc8b31de8f321a195e8cc74238be378f6d209e (diff)
parent454d8adb285c1095332f40ffd3764638f5843395 (diff)
Merge pull request #312 from ms-jpq/dev
rewrite using streams
-rw-r--r--.github/workflows/ci.yml2
-rw-r--r--Cargo.lock305
-rw-r--r--Cargo.toml29
-rw-r--r--RELEASE_NOTES.md6
-rwxr-xr-xbuild.py2
-rw-r--r--ci/templates/DEBIAN/usr/bin/.gitignore (renamed from ci/templates/DEBIAN/usr/local/bin/.gitignore)0
-rw-r--r--src/argparse.rs12
-rw-r--r--src/displace.rs62
-rw-r--r--src/fs_pipe.rs22
-rw-r--r--src/fzf.rs121
-rw-r--r--src/input.rs203
-rw-r--r--src/main.rs146
-rw-r--r--src/output.rs42
-rw-r--r--src/subprocess.rs120
-rw-r--r--src/types.rs88
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
diff --git a/Cargo.lock b/Cargo.lock
index 494ae6e..2324546 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -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"
diff --git a/Cargo.toml b/Cargo.toml
index b015ddf..705a697 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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**
diff --git a/build.py b/build.py
index 4085681..bef2a5a 100755
--- a/build.py
+++ b/build.py
@@ -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)