Compare commits

...

21 Commits

3
Cargo.lock generated

@ -188,12 +188,13 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "leanify-many"
version = "1.0.0"
version = "1.1.1"
dependencies = [
"cfg-if",
"futures",
"lazy_static",
"num_cpus",
"pin-project",
"recolored",
"rustc_version",
"termprogress",

@ -1,29 +1,56 @@
[package]
name = "leanify-many"
version = "1.0.0"
version = "1.1.1"
description = "spawn leanify subprocesses"
authors = ["Avril <flanchan@cumallover.me>"]
edition = "2018"
license = "GPL-3.0-or-later"
repository = "https://git.flanchan.moe/flanchan/leanify-many"
homepage = "https://git.flanchan.moe/flanchan/leanify-many"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[profile.release]
opt-level = 3
lto = "fat"
codegen-units = 1
[features]
default = ["splash", "progress", "colour"]
default = ["splash", "progress", "colour", "collect_err"]
# Enable progress bar
progress = ["termprogress", "pin-project"]
progress = ["termprogress"]
# Enable threaded scheduler
#
# Note: This is probably not desireable, since you'll want processors to be used by the child processes instead of the spawner here
threads = ["tokio/rt-threaded"]
# Show program info when passing --help
splash = []
# Enable output colouring
colour = ["recolored"]
# For americans
color = ["colour"]
# Check arguments passed to children with `--passthough` by default
checked_pass = []
# Collect `stderr` output instead of inheriting from parent `stderr`
#
# Note: Disabling this can cause weird deadlock bugs sometimes
collect_err = []
[dependencies]
lazy_static = "1.4"
tokio = {version = "0.2", features= ["rt-core", "rt-util", "macros", "fs", "io-driver", "io-util", "io-std", "process", "sync", "stream"]}
futures = "0.3"
termprogress = {version="0.3", optional=true}
cfg-if = "0.1.10"
recolored = { version = "1.9.3", optional = true }
num_cpus = "1.13.0"
cfg-if = "0.1"
recolored = { version = "1.9", optional = true }
num_cpus = "1.13"
pin-project = {version = "0.4", optional = true}
[build-dependencies]
rustc_version = "0.2"

@ -83,13 +83,14 @@ If you want to pass something 'as is' to the subprocesses, do not enable the `ch
## Optional features
There are a few compile-time features that can be enabled/disabled for additional functionality.
| Name | Description | Default |
|----------------|--------------------------------------------------------|---------|
| `splash` | Show program information when printing help | On |
| `colour` | Enable colouring of certain outputs, like warnings | On |
| `progress` | Enable progress bar | On |
| `threads` | Enable threaded scheduler | Off |
| `checked_pass` | Check the arguments sent to leanify with `passthrough` | Off |
| Name | Description | Default |
|----------------|----------------------------------------------------------------|---------|
| `splash` | Show program information when printing help | On |
| `colour` | Enable colouring of certain outputs, like warnings | On |
| `progress` | Enable progress bar | On |
| `collect_err` | Collect children's `stderr` instead of printing it immediately | On |
| `threads` | Enable threaded scheduler | Off |
| `checked_pass` | Check the arguments sent to leanify with `passthrough` | Off |
When building with Rust nightly, some other optimisations and features will be present.
@ -107,9 +108,11 @@ When printing with colour:
# Additional
I included a Gentoo ebuild for [leanify] in [other]
I included a Gentoo ebuild for [leanify] in [contrib]
[other]: ./other/Leanify-0.4.3.ebuild
[contrib]: ./contrib/Leanify
And also an ebuild for `leanify-many` in [contrib](./contrib/leanify-many)
# License

@ -1,3 +1,3 @@
Add `collect_stderr` feature, to not immediately print stderr, but collect it like stdout.
Why is there a lockup sometimes when compiled without `progress` and `collect_err`?
Add `--install` mode with feature flag to enable using it

@ -0,0 +1,2 @@
DIST v0.4.3.tar.gz 466750 BLAKE2B 21e31690995927b842af4892a8e1e84401edc80190cd98648c9517784a0c97b5abc8b1f5d2c887d0515dd67f9c759439391397fa0ef5858b468d66a14bc0c309 SHA512 347dadfabaf8929e067285676ee293adc3bd852c55f87260db17bb303062ef1b668cb6fc2985b03bec2e86e3d7c989c99a2c98d679104dca7b1494f0e5bece68
EBUILD Leanify-0.4.3.ebuild 466 BLAKE2B 24fa523b02b387d787bf8f861ee1bc609a77e34c524fe5ec9522bf616276d66afdad83bed50872abdb054f02525fd90f502d5c60a881e02cd3d24cd6550d2184 SHA512 66d2be480e172d218cf02108fe9ca3b744bd2c177813d4d0c33e4bb35f18f3bd6b9277357c4ce6677726226d514eb581fd1456fee98bd731daa7b3b1cb29c171

@ -0,0 +1,63 @@
DIST arc-swap-0.4.7.crate 48625 BLAKE2B 922c640ccc1665ea07968ca22f0b44003d6211b47cafb00c23707b85eed9bd3c689c0a2ed46ec74125a1ee9881f3f9044dd6254b7912a331125e0e51cb31f079 SHA512 7d3f8ebaf16353b1534770ccf2424d4efc0a5c96e19fb15c167e6dc15586abe5a992105a4b534f3bc245478a6159c0e099d6f6c2e260d4f53b861b6d317e3a92
DIST atty-0.2.14.crate 5470 BLAKE2B 2db856a9e898a430258f059aeaf7c844a153293e8856d90ac81f7d91a888c89198768ad5cb09303c23241fe85c560a55148fa56a303651a82b0edb895616bfab SHA512 d7b6c4b9a0f898d91ddbc41a5ee45bbf45d1d269508c8cc87ee3e3990500e41e0ec387afb1f3bc7db55bedac396dd86c6509f4bf9e5148d809c3802edcc5e1d9
DIST bitflags-1.2.1.crate 16745 BLAKE2B 0fa6d3ce44aad7616d5cd02aad8c1d0b0fed4022650eb43067c4a72e6fc88da05442674fa51826e4858a47c9de233e1ba2229820af094197cd11bb416ceffb2b SHA512 ad89b3798845e23737a620bba581c2ff1ff3e15bac12555c765e201d2c0b90ecea0cdbc5b5b1a3fa9858c385e8e041f8226f5acfae5bbbe9925643fff2bf3f0b
DIST bytes-0.5.6.crate 46291 BLAKE2B 6d33ab47d04f2e469db2add31db118f95cad53002be7969738923d62a4fe3605ccbe9fbcae6d8741310c543625e80d9adac7d9e9fed01b71cb3943ddd015d920 SHA512 a1caa1f58754f4d2e54b8df8d0ca0083ee5282f5e4d3bb5b1735022933dd2e66fb3f39c7a82216bf7a7e29591695c2e10c8b7144c83ac598e34193f2425a32cc
DIST cfg-if-0.1.10.crate 7933 BLAKE2B 063a96ed176f34f788666b40adc483d147fc011dee941ab60569ddd0e57502b5dd06ed71090f4e14ce005d06e240500a286f74652615e9d068fba649610d8cf8 SHA512 9d22616bfb4a75770a828a0a3cddac6787297a5fdc53eb17e25811cc94de717f2de8bd66d53c5d65ba1c83d8892aefee5ae758cf56a1ef0a0c3120f70b244339
DIST fnv-1.0.7.crate 11266 BLAKE2B 81da85889c91b6567e0f555e37dd915f1bd919719d1ca10c31a6861d7aec29a49ae9c1e8bc500791bf9d6b8dbb318c096d04872c5872a4b1f7d45fbd8e12842d SHA512 2195a4b34a78e2dd9838caf0ee556bf87cbb4a8ef5505aac663b614eb59dcfc0c40f432463ede41ecca57bfe7711f72673d39a85fe03d426f1324097d5628334
DIST fuchsia-zircon-0.3.3.crate 22565 BLAKE2B a4dac3457036efab8f79fe5d5b4545e4091e994d3dc63188f71fafbcc28bf98ef359dcd20add30ac1d990ab2e66159723302fb66697349c65fab0aa58d54535e SHA512 a43ee59452d49742111e506d6bdd8b8399a3a646e08648e25292864d7f71460c1dd1f2d77b8efa8ed09ac21fa4ff0442a2709f16d8833a3849bde0c388d83a93
DIST fuchsia-zircon-sys-0.3.3.crate 7191 BLAKE2B 530bb5d475ac828843af248c6bbd24ca3b5dd8118c8884ccc6d7261818cff1c79038077114ffa04bc73a078177527824c4d9d20a9b022e4057afee3330258cff SHA512 978b7e8795a5877a68409ed3a1d7b4246263f8e7e7ce9ba8a022643be98f58f329cc1c234717df80a509db849da4394f39e90a8e2a6f56f8fa8dd3c07e7d4386
DIST futures-0.3.5.crate 40344 BLAKE2B dd8a5ebd2a451f68c3faffa75dcdf3534982ad978f65c5a0d4d22941d478edfa92ec984510530b25fea682746ee2f95110a3426465921d50f5c0817870ecc6cc SHA512 f3668ddb8d940f4115e9f0c6dfb1e19eb9461462b3ec2a37c77021fa7d285d802b70185062a1ea589925079432ab1e356c11d25c2a2cb0198f4a3a80fef5c444
DIST futures-channel-0.3.5.crate 29053 BLAKE2B e951124135520dd3306faed9355bebeca1ac2e2448ae1e8664751c026384d830d1aca8332690cc84c81be07c84e97c3321758dfc1f76147bf857d19a3043c225 SHA512 5d192fa5cbe1f175c578ba3f8c0bb0bff4461d2699babbd6a4ba22757abcc52b6edb854643da2521d7acd3f78269f3eec9328c2c19d5c984a8e02f071e249a67
DIST futures-core-0.3.5.crate 13541 BLAKE2B 5eaee458fffdc57105e33c17e7d2b8eab82d05195a8333a42266241fbd1f772afcd0bc82adacb1799dd84dd60ee6e37e5130f29f945781d6130e4ded98bf6dd6 SHA512 5af82472f569d1d118f6f8c900dc8d1df58f1bcaee43273f12bc6e0c72a57141c797e5513f9a9d6cf969c7e4472b36bac0ce74435de10a76cc444d896cd779ab
DIST futures-executor-0.3.5.crate 16499 BLAKE2B 6d9f65713db27ed2ef1a64509c1b580eb5bc68fae02514832b69157c5ecf1337ae9e87fae81ce402266bc57351ab192af60359ae8d739d25202a7471570d0e85 SHA512 8877f1f01f0f81558d0d2ffd40a5eaae9df1f7d710ba11bacdd4a2d9e1e90fb1efa7758f8675545e72850e53bc5a1fd226e6614fdf23a84fcfd388c4fd9e789b
DIST futures-io-0.3.5.crate 8981 BLAKE2B e7d39b914ad50088b14a82d82658adf59af7df2732894bc595aac73173b33c0dd4139612c07c8ffa5edabbde8445d039f36050e34fe470ace5bbb0e299ed9597 SHA512 9573140f9ccee3e58d181d557f09314e13cc16814df06d6d99c2d95733512a2f046cbe3aee5654a9e461e4d76b2ca61f3d1d6b9040a06cbd12efd3754d3b774f
DIST futures-macro-0.3.5.crate 9673 BLAKE2B 5ceee18ca00098ae9b44f909c0f96b1eb08978a3bcaa460c00683ac3c49727c94983faaa4618f747600e52ec4b8f43acb78fd261cad62d79d35b36b9fbfd20f2 SHA512 413acd01d2e8e849c9425646f0c7eca95972139b61d233bc615791ea4cbd0eac908c949e15587de7ac7c260837cc312b8b3d428011df23bd2e7c36875d4ade0d
DIST futures-sink-0.3.5.crate 7612 BLAKE2B 8068fb497194702c1dd2cb8612d4bbf5ccc36e3a8fef84870635b887cec0cc83fc1aee9b752c31c8e582a0863a6b1921c00a7007e4784c64b291658910dba222 SHA512 82f8d6004054ee8d799fea751cb4f0bb6d8f7b364d85780d16adc8fe0959d96cfaf49f4cd89d50818e1c9c24d0df17c8d563fe4a2e0ae5d534bb301fa90b17cf
DIST futures-task-0.3.5.crate 11030 BLAKE2B 272de7f0a923bab04071b705b3b39683022538a756ccc22a8582f048c83155d6da12ab804e70cd32767c318b94f0f71ea0e7aa6d1f77491aabfc6ebae08f710e SHA512 9affcfe1c64ff66cef77615d39c2e69e40480aa7fb0d1a0b136edeb9533b336e3e1156bc0bb14120a812f0f8d3d3266c556d9f0e4eec147fdcc175b3183dba52
DIST futures-util-0.3.5.crate 132197 BLAKE2B 07cf5f757cd9bc663266b18025efe200fc911c6d829bca139db4c5dcddce5f5e5dbe62968c6c7b328a63a5f23d0a232087e162f926716029ff52c24923bb7c53 SHA512 f71bd29e113fc8aa3795904b3130dd6f09076e6a19e52e34702973b6428a1834d300fdd3c48259e7f27fc1252dcefc80a4b104962fe7e6e4e536322d0aa9c5a2
DIST hermit-abi-0.1.15.crate 9597 BLAKE2B 012fdcd6ed09e4bfc9256d524648b0e7f65e9bc8dc6351d04249c492a0b5e836c529791f79fd144b9f09ae55462c034b9a3fbcff5b2abb40a7c78f7f8d78f64a SHA512 f81f6a87e0a182b5e49a2edf60f47243b7cbb116df5aa6a3354f1e230d4030bb5697ad4eb9abb6203ff66c1cfac1fc35b7d7e76dedc276767124ea4f41f97535
DIST iovec-0.1.4.crate 8720 BLAKE2B aa1b4cd98ebe47901c0959cf1d8eb2586a803d0453e2a8bdd5c63442b32886dbcb37650aa218c748fd45c9fe3a7fdf20569eae5b19716487b139caae1526da4c SHA512 e23fcaac239807daea20ddcf2cdd4fb858ba1aa970ce6248f70f0fba5bff7ebdb27247c0997ac0ff2791178f86ff9657e473d8f64b86c644763e5b3474edd158
DIST kernel32-sys-0.2.2.crate 24537 BLAKE2B dfc4a1e31d3ec9e2ac62b890839919fb7fed1444070c1dcd75bb75acfb53556d6cf2eddf5a6639e7852a3df2a0cc715c5ce1d3fc898ef16a1687020d98f715bc SHA512 682bc7c629aefd035966a2873518fd60719121cca7d63d89d6c97ff5306f24d8b5055a3c91b4eedaec22b1d5dd3fb8b48ff7341a05bbd72d86e06c422dab473b
DIST lazy_static-1.4.0.crate 10443 BLAKE2B 25b2e61bbac48f0dcbc79c81d7bf01f2403d8269ecb6be3ea6147bd00f7a588df15a91f44dfc18ada19b21faa71de4637c7d493a8628cbecd0e547d74e616a23 SHA512 e124c0521ec7c950f3c4a066821918da7a9c6e711115d98009ae7c351928fdddead852e7596fea5937a9c30e4e4ce8eee7099b20248b5d6e3b2494b6a6d88cb8
DIST leanify-many-1.0.0.crate 24077 BLAKE2B 3cf44b6e16207a98a1722822be4b0e5584f20b6d644022455d04a1af4a305fd2fc07f1bab176f6d19ceea571902fcc6d333b1a78ad0266e0279fc5fbb276aade SHA512 15cc0bc47251f561cd28e006858bee92ab0c0a0f1fe4df47c33becf52825ffee8fe56978c182449be6053c8dd76af7d78253d2e2070ef7190cfbb604eaa97f21
DIST leanify-many-1.0.1.crate 25061 BLAKE2B d2391b18bace7709c051d96b144af876d973070b7068f95c4ffde37eedb7d11c7803c1fb2a086439e8bcd064e4292adf681c9904b4692a317596e7dc61c12081 SHA512 77b0e2c45d5948d5f12edeb066ce597261c14f7eb211dd3744316a51a3c8c556f1e421929f35548b04d278a714f5f79db4c8c6e9bf21fb35927ddeaa4484fb85
DIST leanify-many-1.1.0.crate 38061 BLAKE2B fee91224d05aa45b2ac0df4170ef89915778a1e26be9320974c6c19ca676875bd9093118797906f2f79109cedfadb8c6bb83c81c36c440afcf610e4882db3018 SHA512 afa51203f50d36e3d747984cc1aeef752282aaf675bddd8260f6882cb502c11ba8a9089d1d671e42a45562f9bd05b32051a72ca0723b26baf47036a3ca5b65f7
DIST libc-0.2.74.crate 503397 BLAKE2B b38c932a29de204e9cdbae39fcdbd1a054256e8c0f37227ba71bffbc133d80bb68d34f4011fc83db7300254c381fe0855e1df19db2dd75234a5ee029f1ea9e63 SHA512 6aa984cd325bfa37736d3afe4518093468927607daf7b12bd8a5a396d2ec3740876504ab4a2a622c5e7caa9872f31263a42ce53f10c15f61f9e45891eaf41df1
DIST log-0.4.11.crate 36276 BLAKE2B 728647c829e96cb4fc795682facceebec887508e1ca14f13c0e7984db8ac39b3045885d1daa2f335de3e8f25c5cf1b519a1e7c8c6f4160a716bb8e39d085009f SHA512 e216fcb3c9635d8c4b67b05c1ada1e5de4e99dce89ab4c8f8033ddce6ac488605d8af09f93c42d25ebf8844feea22c93b71682e77a368ee01c686a15133fdeec
DIST memchr-2.3.3.crate 22566 BLAKE2B f952070b98ef30f0d2780a6efbeb36d295710734f678517d913a8002cafebbd3cfc38975fc4546d306efc11bc815764d14320af3b7a2360bd46fc2ab3db9efa5 SHA512 922e05da920d0d94226857788878ee5e31518cd80d95ae57e1d7ecd233942c37d01565525db2f1dfdfd5b3b1f81b2c73eee058cbfd745cb4e1519518318df248
DIST mio-0.6.22.crate 102782 BLAKE2B 8a088fb24797f4b16b6da28fee56a1c8bf1346959905c3501e3d78d16d169125c03495d9e21dc9da4fb6735a48af38b2883544d1c9ea2486d48542fde6ad47eb SHA512 b500b0271779942512c1d02756ee4caf4e00488f6929a06a7be8a46cc44318edaeb80abfaf6367d7201978a3529a6b5424679e07b719ee8194f0dc37aaf56ca5
DIST mio-named-pipes-0.1.7.crate 15140 BLAKE2B 5e19ee9baaac61efa0c683f46acec94dbb5a932a6012370976e444d265f71b7dc168c9de838389c5fd492c5bdb15dbc1f8e8956640b11fe5b4e3e09a5b7f12ea SHA512 bd78651d89c292c792c108ab5d199da436ad62097c0fa1563523b8fd5a3c7dc0a7a948df38a4ad05a8e97d7f30652de6ef15d9f0be9157653de11c790ed25c90
DIST mio-uds-0.6.8.crate 11496 BLAKE2B e52d131f292c7c09fa116ec5c760d50e8389c27fd7b79a4418f0222ae124fba0e5943b5494866e9db75407ab9f6b1a9c7aa7fdf2c4d601e8c785dacd8166f6da SHA512 b6c752ae9f25c37fc7e23e06a8843089c5291d60e53a6e9093eed1d8baf64c9e0ff14bb2ea1c0c8815b00026b28fefab2aa34104bdbce7e99549786d0f507a73
DIST miow-0.2.1.crate 21133 BLAKE2B a60f04feb5bd98eaafe6123f7579ffb0287b0a3d1de0dbe1b504141d76dfbc247891eb6dd87753ce5d6e2ae0406387ccc8684a91980c5ef1ad6610c29ec9e3bc SHA512 b2639b1976274b7a01ec3ff7fd019087775e3bc5365101b24db480bf9c9b66e8a1aa34405d44db6c2be753265a5124054eb37870b84cae2c63fb6b36bd5c6d72
DIST miow-0.3.5.crate 23796 BLAKE2B ead9b1483f93617a623df2c0d6d9be60eecf76c74f357ddd7bf6e097f93344aa4bcfc3368739f72dadabc2d36f725ee75522ba5202a5a7443b925b51213a1699 SHA512 32343bb12b70323f8771816c6be2a42d9b3a92757f65b606ab2e98f762ff0bf85cc30c7ba8e39d5519a8a12aaf22061f52ba537c290169d38f11ee96b41e4b95
DIST net2-0.2.34.crate 20620 BLAKE2B aee9aac0deb14a13c5f90793f1e439c94362403cb329e24607c1970c117bc379049da1b173d1bf827f0e3db38740a2d2e696981daf88c1b2302d81564be5433a SHA512 136ba95ad540545165fc2e34fdb5aab7da8f6b20e7682302ad5796b86cbf3d80b5364679c82caa19151b277f9d18de053968fda779ffff8ac88024940772709b
DIST num_cpus-1.13.0.crate 14704 BLAKE2B e7a26e597ad5e45309393a9500b031ba64a77831320cbb96d7861139a2f7a453b7ba06a3255439b43ac1e2e36269b0a350d514020d3cd82c2513b57934b3ebbc SHA512 e75ec298fa682be84bf4efb6cf40126da9233ef25f07e887c2fa7421ee78790204564e6406c8219466651f47421e27f69eca690bb9cdfc982b644d78cc10de3f
DIST once_cell-1.4.0.crate 24625 BLAKE2B 6cfb6ffa2326fb53c4381d4b6a462928f96ad4133c653335c34265a1475c4f50067fcd2a6d9bb0660aab4406401edf02776ceff8d2b43c9d6b443998d2e3cdb7 SHA512 8debf21169653719820c4892ebceda67fedcc3c86e958aec42ade0d38247e12265a0152846f9284c37faa183e452ddf666b117e7ec5c066893cd33ec407dfaa6
DIST pin-project-0.4.23.crate 53805 BLAKE2B 502e61eec2f9d52e5e373e371ce97a76f778d6b0c27648d43b2ab24fef9353f44b5a98fe8756111e0f4f0b586fe4223e1cc99e285db7bc84a1629bbdff0f3b61 SHA512 7a79ead03d238a8b140acaa9c034041be1799de2e49396bf6bbeff8bc2c94dacfc376d5134832c6d97aa45dce5140109e3556a6109210e77d3d292fd96cf7aed
DIST pin-project-internal-0.4.23.crate 29624 BLAKE2B 112e34302d8bc4a61d3a14b249a08d10b8f9abf24ea6c13cdf48fdf75b6f218caccb8c6dc542fea79fd7a9280c0d4a2e78228e4b71bee6ec73f61062e9eacef7 SHA512 be57012b018c173a36a8d1fc1157169c6117b461a4c3fd3f62dfb7fc1fb86a4de9e63581762ef01d7bd3278eae39346ef6ceb131aa114ef228a739a2bebdc2b7
DIST pin-project-lite-0.1.7.crate 23017 BLAKE2B 74fb5314d01232c24564095d8d34009189a0edb26d36a42a9f3abc35bcb669a96f6d45e078c7fd438f600e6c756acbc52e260ba509572ea5cfb59d8e9f63a15b SHA512 8987148688b3cf9b6d9928cd6bebe8e547412b87b11c23fa00236b8c5fc74dfbf200f03d219f0ed317ac0488cd2323fb09e576dbc17f1ade4e5e700bf077eddc
DIST pin-utils-0.1.0.crate 7580 BLAKE2B 457e1287202f16d1873b24bf4f1de1828300128c4ba3131758e64f9784d36d47365f22d85493c3a85d854f0d8dbb4c6cef3a0f5b064014dc03943e58b7ba9178 SHA512 828422b8440cc82ac6b0743e0112fa7540d437aed457564999092b1462cd7672cd6b1f0201b67075431aeedd3d9c5127468a3dd028744109944f7f023c82fd70
DIST proc-macro-hack-0.5.18.crate 14619 BLAKE2B aa2752f69e3c41d45ea3e06b197a49f6bd9a4ee063c50368adae24827d2f37d0bdd67c0ee51c4872a077827f33a7df775eb2be4d5d2ce9d1315d5627fb81b8fd SHA512 9d13326d9dff684fba0f4785663a6199541bd97d22875f60ceb6117025229377ab1a4c1145b68a24372e6b6103603d6db421d5dfb1b58f580135e1ef077ff798
DIST proc-macro-nested-0.1.6.crate 6498 BLAKE2B 6225a30c1668ac20c3c9ded7633458ab7079bd126aae538762547b112012050e9aae22389e2a18cc14696212a092a9985bc72538d4ca4d37ca0faf34a68c3833 SHA512 ed89e9bfc30e8d7a9be742a02e8f269bcedcf511d9e1487866f198b4410a2802ab576171b844ed15fa2848689247afcd208016555442dc24fef7609400e9c38f
DIST proc-macro2-1.0.19.crate 36390 BLAKE2B d21272e6bbe7bc5953ca388181a3875e6a3426e48ba3eb8808ec51fd2139093b60260998509b81ab1d67dceb4f9a0a255c234912d41739a7420537615ad3a4f0 SHA512 046f65ee0eefc1bfa39a405f46a7aa5ba83a11af057f150700412bc79a7a76d713f020377f38171086da58ee15e3db784c3e198cd18cc852add405e5e27eaeea
DIST quote-1.0.7.crate 25170 BLAKE2B 9597c94ac365bb6e9d632738a88ece2da7818cb9f3fa0e755324e693eb513c76347032737025375a486319caad13c22ae13bcb257703eacdf2fdc755cbac0de2 SHA512 b7cb576c07419854f71072a88e4216f50d78196703d3d8a1068dfd0f2ccb1e417c3a865ec3be613b46e74e46654f64378f527800701f74d50352cb766a885953
DIST recolored-1.9.3.crate 21691 BLAKE2B 16d02552dbad61a72070be62f8ac18273a1ebb101e26059badad0e3af870695da2546e702fa053eef0049ea0e348f65ecbfa2713f7ea9813e434eea117fad170 SHA512 ace9878c69997086967ef7706e1a5dc3e845380a026a400a7e93143bc2b875c6cd1a8aaafa4ebc7e85e0c1a5600f708cd8861a14b8890f8e7dddaa95979cdc75
DIST redox_syscall-0.1.57.crate 17087 BLAKE2B 88e3ffcfd752e757f8fadfd4edca367f9185f09e609c329bb36f179183cf103dc182aae701c14afb717d2b4c3d72ba307b49fc671cc97aa7c9d03df1a7a1835f SHA512 c6e187087060084b7173ed0d9d0e982e4259d4f76522112268c02ff20751382e3bc8e119da6153170f5c54bd5b9cb028910f2f85c1c842099205dccd44659184
DIST rustc_version-0.2.3.crate 10210 BLAKE2B 1f707d1c66d907c9b1d2ef6d0bc6bc9c89990a7b922a6dfc2041865940ff3854c4d0e1daf558279fd5871af5818d4000457a32c949104f46538312fbf730443b SHA512 01fa7a758dcaa4f15c18628a0d5ee5adde5ade96a8b7dde0908e39e27b290d1e9adb20d44e2adcd379341d2d4a0c34a80dc12553a3bb4efa4758988f28989779
DIST semver-0.9.0.crate 17344 BLAKE2B ae782bc78f29e45577de8574ee58959c70b54bb0b6f45a5a7b09cc4d358d9a0a80bbefc6e0f2a330e2b55adfbbe5c1f64f4ec9bb94c4adf7bb3e4fc9c142db6c SHA512 03a2ea563456f812c301721c3572370fe4934a22db60079da0dd6ffa33fa789e5e2436ef09e62fc35e0b742b06fabc290992c74eed80419a353c9de9449928dc
DIST semver-parser-0.7.0.crate 10268 BLAKE2B e46b7cf9d292f8fc54561fca4df8534dc96f6be920a5c869c405ddb31b9d1a18eab0799207113cf4910a52cc0df5017ab1bc1883a7c3787ebf2d60f09ac0ab4f SHA512 17320468ec6b9862d595f358d70c09ac6e09db7885fe0ead7a1e596f79350a6306e8bfde5bbd6512008a7c5454da1c7ae55fe1e3bc1c1ff02ac9df54c0a6121f
DIST signal-hook-registry-1.2.1.crate 14735 BLAKE2B f49dc2ab4801ad1794bcb538eb2eab7c8698be7e004ac9b01987a870ad5f0e0696d9f1f2e5ec5f6153953121d6f2a1140a2ddda3d35ab67f31b4a3e0733701aa SHA512 91a5a22bd89f8c04cdb78809d6610ca39e1111a356e797206c42f7305d57f43a8f1e6d5ac60ca9e5f86299372e86ff692baeabc6d9913c56ee92d260ee1ae477
DIST slab-0.4.2.crate 10136 BLAKE2B e30cad459bbbb69c4b56a573c47f4188714e0da298d87015c35a86c9315dc2d4308f27d7758846069b0cf94c93f10c44b0f8895427cdf1c93ae20adbb21b5977 SHA512 f9fd70d0cc5180393cebbe87fe984de0c103db1c2c2648fb7a0ee22cdabf37a7338fd511538f00e9a5564365cce2879afe19bf77c435870197bd6cafef5d6661
DIST socket2-0.3.12.crate 29253 BLAKE2B 0b5c48c90b45ddc6e98e2a9437f239e681acd1431684ad47a9386d437d3aa2fccbb7190ed601a6f3dae65715f1056a211004a071b0f6e71be8761165e18e2660 SHA512 b39014c4c48d0aead812d9310651f459654314163e9f7d059801ee6e56ee116eacb912738b1dd58b5b979997c7334811161257e9b7a024299a2422808445d6ad
DIST syn-1.0.38.crate 206263 BLAKE2B bb9a4f111f95190b9d1e61f5bdcac5e940112d5c6958a5d0edd852869e07f4de8c47cc4e069e0899c3a973e6aa2e858133d20eac897c1f5adbe80ff2748d2f31 SHA512 67e1d94e0efbf305d9bc2c5f42c57a17896f98a888ff7565912f7234cb2bd6f699b630c8687546d28569baa87442acff070eb0059314f5380b183469784aab12
DIST terminal_size-0.1.13.crate 8094 BLAKE2B b46de1f0dfdd6f4dd44c21a5cd7936cd9fef67d96be44775c29f3850e39b94f200c719bd0c0c31727725f1741ee9640a83c1f3083a45ed665db7f03e50793826 SHA512 75efac1092c6919efc7d427e3cf7d4c36a4d12b3d5c38ee35f94ddf2fb0efcc16fb92e608382905475d5de3078e9c64a29ec77816572797fdfb53a6708eaf266
DIST termprogress-0.3.4.crate 19618 BLAKE2B a1cfc7b7021573e95d6861d1bd05eed4a8f2465235b798ebe05f7b55469cbfd36c78413d0a8ecf0ba66d20e441a43f3217ffe55caa96fd2706694913a84598c6 SHA512 6f039b7c18047e5b7aa8aec67093d0b5612eab17f96dd5df0a53624a8e9a1f1df003e087fe569afd64ece701a13cb2f8f2a8dd9ac815f8d7fcf83455b321005c
DIST tokio-0.2.22.crate 400639 BLAKE2B ec18c498086c486cace708f9f2014dba24b1a8dca7f7fd9c57edea741cd94aa962a9bf05b9f964000c82ae69a7ed4b4b5f31005c2962a5776bce681c79d85a47 SHA512 e81ffd9dc23d83a3383c944b65636a36f578ea9d5257769017228eb3c413e0991fbec90e69a43b84e8349c4628e519947136a627152a4ef92cece9eb5d64dd24
DIST tokio-macros-0.2.5.crate 5831 BLAKE2B 19083cc879dc025521154373f22c2f449164826cf985dc75182e81cf1fa60f59e74f19d81c064e60a4e1c65cf1a9d9e6042f2f745d384839d0ee858c7bdd1046 SHA512 8051f44d02b93fd76eb902bf5cacafe8215f1027f94f7265abb1fc25bfb8c4d6a2874ef906627a80238af8094a9b23ed9f84eec96b028859044210807ced6541
DIST unicode-xid-0.2.1.crate 14392 BLAKE2B 7f8f91b9c4df55f2137b754208d4f2997a290acfc9393ee2dcda8195eda25cb342e56ad123f56bb298d93db5248a749c18a982423c9a0e85ce93f7a1eb55d289 SHA512 91e862137e837baea82829431cfed36634fdb05339f00c756eb5a4b429ef0bb871f5133d11adf9a023fa22168c8a0cf194ff3669779f04f219d48fc4fac339d2
DIST winapi-0.2.8.crate 455145 BLAKE2B 50f3c2a0cf4eeedd6891b11392e520c1cca139a71f8f736eabaf43aa7e4b1b5d57697918978220459572d373940edf971eb8302f292cbff832283e905076319a SHA512 115e6f027cdd4a56f77ca24f4ab249d2a6cac1e1f955c826a9b6ee05db4861790a533f5e674aebbb540370fff52ed41618c2cd7c906e73200e92df213109cebe
DIST winapi-0.3.9.crate 1200382 BLAKE2B cb5799749ccd935ea2d7068d953cecf19f543d9db7dc16ad4584bb7005373ada34937a3ced7225544d8bc765da599911c7a3190efefb3a25b7c1bb7123b4f673 SHA512 ff8b7b78065f3d8999ec03c725a0460ebc059771bf071c7a3df3f0ecd733edf3b0a2450024d4e24e1aedddaecd9038ce1376c0d8bbf45132068cf45cf4a53a97
DIST winapi-build-0.1.1.crate 669 BLAKE2B 6c8d8e0f81574c086f06fb3f234b0e6759d293d1d254857c3d491e4d43279e5c2f57f2fcfdc9d5d7b083280f4cc2a75a6ee9bc1541ec6ce8f8d904ded0567faf SHA512 8b0a239e205a5368892f41c870a8a7ea16e3468c364b03382bef7fa3a2e7159b09c07661e95b1227578f6d72c14879daa4444b28c51ae20ef15d985d59ca5a77
DIST winapi-i686-pc-windows-gnu-0.4.0.crate 2918815 BLAKE2B 4d357e4d30f9552972170d65b9a5358b69c46a3e772fe05efc22f3d4ffc1caeeaad7aacdc7abd503a7ad0545f8bd7d22bf351dcb6df76f812fa4d45c34d65df0 SHA512 a672ccefd0730a8166fef1d4e39f9034d9ae426a3f5e28d1f4169fa5c5790767693f281d890e7804773b34acdb0ae1febac33cde8c50c0044a5a6152c7209ec2
DIST winapi-x86_64-pc-windows-gnu-0.4.0.crate 2947998 BLAKE2B 2ad1ea8b5fa07d544e910ccba043ae925269b76b26c9da356305b34b86741dd8b9aff0b9ffe3d562db4fcd7d7c46a11ce9e3168b782b1d89ae6881742b7ede82 SHA512 4a654af6a5d649dc87e00497245096b35a2894ae66f155cb62389902c3b93ddcc5cf7d0d8b9dd97b291d2d80bc686af2298e80abef6ac69883f4a54e79712513
DIST ws2_32-sys-0.2.1.crate 4697 BLAKE2B 52a7a3f57bcd73156730ada4d78fe12a54a498c9064e0928e09de13a95bd9237f884538e5f9368b47a7ac3c425f0f798c26bad85f20bed4ea26c2fa16c779b97 SHA512 18356861fc595efe7d0180afb8ce7649da35a4f9ba456271d2068679ab258a861af32a2e016e241fbfbf5f6ef0eb33127b26eabfc11428af39506538faa4821f

@ -0,0 +1,92 @@
# Copyright 2017-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# Auto-Generated by cargo-ebuild 0.3.1
EAPI=7
CRATES="
arc-swap-0.4.7
atty-0.2.14
bitflags-1.2.1
bytes-0.5.6
cfg-if-0.1.10
fnv-1.0.7
fuchsia-zircon-0.3.3
fuchsia-zircon-sys-0.3.3
futures-0.3.5
futures-channel-0.3.5
futures-core-0.3.5
futures-executor-0.3.5
futures-io-0.3.5
futures-macro-0.3.5
futures-sink-0.3.5
futures-task-0.3.5
futures-util-0.3.5
hermit-abi-0.1.15
iovec-0.1.4
kernel32-sys-0.2.2
lazy_static-1.4.0
libc-0.2.74
log-0.4.11
memchr-2.3.3
mio-0.6.22
mio-named-pipes-0.1.7
mio-uds-0.6.8
miow-0.2.1
miow-0.3.5
net2-0.2.34
num_cpus-1.13.0
once_cell-1.4.0
pin-project-0.4.23
pin-project-internal-0.4.23
pin-project-lite-0.1.7
pin-utils-0.1.0
proc-macro-hack-0.5.18
proc-macro-nested-0.1.6
proc-macro2-1.0.19
quote-1.0.7
recolored-1.9.3
redox_syscall-0.1.57
rustc_version-0.2.3
semver-0.9.0
semver-parser-0.7.0
signal-hook-registry-1.2.1
slab-0.4.2
socket2-0.3.12
syn-1.0.38
terminal_size-0.1.13
termprogress-0.3.4
tokio-0.2.22
tokio-macros-0.2.5
unicode-xid-0.2.1
winapi-0.2.8
winapi-0.3.9
winapi-build-0.1.1
winapi-i686-pc-windows-gnu-0.4.0
winapi-x86_64-pc-windows-gnu-0.4.0
ws2_32-sys-0.2.1
"
inherit cargo
DESCRIPTION="spawn leanify subprocesses"
# Double check the homepage as the cargo_metadata crate
# does not provide this value so instead repository is used
HOMEPAGE="homepage field in Cargo.toml inaccessible to cargo metadata"
SRC_URI="$(cargo_crate_uris ${CRATES} leanify-many-1.0.0)"
RESTRICT="mirror"
# License set may be more restrictive as OR is not respected
# use cargo-license for a more accurate license picture
LICENSE="GPL-3+"
SLOT="0"
KEYWORDS="~amd64"
IUSE="+splash +progress +colour threads checked_pass"
DEPEND=""
RDEPEND=""
src_compile() {
cargo_src_compile --no-default-features $(usex splash "--features splash" "") $(usex progress "--features progress" "") $(usex colour "--features colour" "") $(usex threads "--features threads" "") $(usex checked_pass "--features checked_pass" "")
}

@ -0,0 +1,92 @@
# Copyright 2017-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# Auto-Generated by cargo-ebuild 0.3.1
EAPI=7
CRATES="
arc-swap-0.4.7
atty-0.2.14
bitflags-1.2.1
bytes-0.5.6
cfg-if-0.1.10
fnv-1.0.7
fuchsia-zircon-0.3.3
fuchsia-zircon-sys-0.3.3
futures-0.3.5
futures-channel-0.3.5
futures-core-0.3.5
futures-executor-0.3.5
futures-io-0.3.5
futures-macro-0.3.5
futures-sink-0.3.5
futures-task-0.3.5
futures-util-0.3.5
hermit-abi-0.1.15
iovec-0.1.4
kernel32-sys-0.2.2
lazy_static-1.4.0
libc-0.2.74
log-0.4.11
memchr-2.3.3
mio-0.6.22
mio-named-pipes-0.1.7
mio-uds-0.6.8
miow-0.2.1
miow-0.3.5
net2-0.2.34
num_cpus-1.13.0
once_cell-1.4.0
pin-project-0.4.23
pin-project-internal-0.4.23
pin-project-lite-0.1.7
pin-utils-0.1.0
proc-macro-hack-0.5.18
proc-macro-nested-0.1.6
proc-macro2-1.0.19
quote-1.0.7
recolored-1.9.3
redox_syscall-0.1.57
rustc_version-0.2.3
semver-0.9.0
semver-parser-0.7.0
signal-hook-registry-1.2.1
slab-0.4.2
socket2-0.3.12
syn-1.0.38
terminal_size-0.1.13
termprogress-0.3.4
tokio-0.2.22
tokio-macros-0.2.5
unicode-xid-0.2.1
winapi-0.2.8
winapi-0.3.9
winapi-build-0.1.1
winapi-i686-pc-windows-gnu-0.4.0
winapi-x86_64-pc-windows-gnu-0.4.0
ws2_32-sys-0.2.1
"
inherit cargo
DESCRIPTION="spawn leanify subprocesses"
# Double check the homepage as the cargo_metadata crate
# does not provide this value so instead repository is used
HOMEPAGE="homepage field in Cargo.toml inaccessible to cargo metadata"
SRC_URI="$(cargo_crate_uris ${CRATES} leanify-many-1.0.1)"
RESTRICT="mirror"
# License set may be more restrictive as OR is not respected
# use cargo-license for a more accurate license picture
LICENSE="GPL-3+"
SLOT="0"
KEYWORDS="~amd64"
IUSE="+splash +progress +colour threads checked_pass"
DEPEND=""
RDEPEND=""
src_compile() {
cargo_src_compile --no-default-features $(usex splash "--features splash" "") $(usex progress "--features progress" "") $(usex colour "--features colour" "") $(usex threads "--features threads" "") $(usex checked_pass "--features checked_pass" "")
}

@ -0,0 +1,91 @@
# Copyright 2017-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# Auto-Generated by cargo-ebuild 0.3.1
EAPI=7
CRATES="
arc-swap-0.4.7
atty-0.2.14
bitflags-1.2.1
bytes-0.5.6
cfg-if-0.1.10
fnv-1.0.7
fuchsia-zircon-0.3.3
fuchsia-zircon-sys-0.3.3
futures-0.3.5
futures-channel-0.3.5
futures-core-0.3.5
futures-executor-0.3.5
futures-io-0.3.5
futures-macro-0.3.5
futures-sink-0.3.5
futures-task-0.3.5
futures-util-0.3.5
hermit-abi-0.1.15
iovec-0.1.4
kernel32-sys-0.2.2
lazy_static-1.4.0
libc-0.2.74
log-0.4.11
memchr-2.3.3
mio-0.6.22
mio-named-pipes-0.1.7
mio-uds-0.6.8
miow-0.2.1
miow-0.3.5
net2-0.2.34
num_cpus-1.13.0
once_cell-1.4.0
pin-project-0.4.23
pin-project-internal-0.4.23
pin-project-lite-0.1.7
pin-utils-0.1.0
proc-macro-hack-0.5.18
proc-macro-nested-0.1.6
proc-macro2-1.0.19
quote-1.0.7
recolored-1.9.3
redox_syscall-0.1.57
rustc_version-0.2.3
semver-0.9.0
semver-parser-0.7.0
signal-hook-registry-1.2.1
slab-0.4.2
socket2-0.3.12
syn-1.0.38
terminal_size-0.1.13
termprogress-0.3.4
tokio-0.2.22
tokio-macros-0.2.5
unicode-xid-0.2.1
winapi-0.2.8
winapi-0.3.9
winapi-build-0.1.1
winapi-i686-pc-windows-gnu-0.4.0
winapi-x86_64-pc-windows-gnu-0.4.0
ws2_32-sys-0.2.1
"
inherit cargo
DESCRIPTION="spawn leanify subprocesses"
# Double check the homepage as the cargo_metadata crate
# does not provide this value so instead repository is used
HOMEPAGE="https://git.flanchan.moe/flanchan/leanify-many"
SRC_URI="$(cargo_crate_uris ${CRATES} leanify-many-1.1.0)"
RESTRICT="mirror"
# License set may be more restrictive as OR is not respected
# use cargo-license for a more accurate license picture
LICENSE="GPL-3+"
SLOT="0"
KEYWORDS="~amd64"
IUSE="+splash +progress +colour threads checked_pass +collect_err"
DEPEND=""
RDEPEND=""
src_compile() {
cargo_src_compile --no-default-features $(usex splash "--features splash" "") $(usex progress "--features progress" "") $(usex colour "--features colour" "") $(usex threads "--features threads" "") $(usex checked_pass "--features checked_pass" "") $(usex collect_err "--features collect_err" "")
}

@ -0,0 +1,91 @@
# Copyright 2017-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# Auto-Generated by cargo-ebuild 0.3.1
EAPI=7
CRATES="
arc-swap-0.4.7
atty-0.2.14
bitflags-1.2.1
bytes-0.5.6
cfg-if-0.1.10
fnv-1.0.7
fuchsia-zircon-0.3.3
fuchsia-zircon-sys-0.3.3
futures-0.3.5
futures-channel-0.3.5
futures-core-0.3.5
futures-executor-0.3.5
futures-io-0.3.5
futures-macro-0.3.5
futures-sink-0.3.5
futures-task-0.3.5
futures-util-0.3.5
hermit-abi-0.1.15
iovec-0.1.4
kernel32-sys-0.2.2
lazy_static-1.4.0
libc-0.2.74
log-0.4.11
memchr-2.3.3
mio-0.6.22
mio-named-pipes-0.1.7
mio-uds-0.6.8
miow-0.2.1
miow-0.3.5
net2-0.2.34
num_cpus-1.13.0
once_cell-1.4.0
pin-project-0.4.23
pin-project-internal-0.4.23
pin-project-lite-0.1.7
pin-utils-0.1.0
proc-macro-hack-0.5.18
proc-macro-nested-0.1.6
proc-macro2-1.0.19
quote-1.0.7
recolored-1.9.3
redox_syscall-0.1.57
rustc_version-0.2.3
semver-0.9.0
semver-parser-0.7.0
signal-hook-registry-1.2.1
slab-0.4.2
socket2-0.3.12
syn-1.0.38
terminal_size-0.1.13
termprogress-0.3.4
tokio-0.2.22
tokio-macros-0.2.5
unicode-xid-0.2.1
winapi-0.2.8
winapi-0.3.9
winapi-build-0.1.1
winapi-i686-pc-windows-gnu-0.4.0
winapi-x86_64-pc-windows-gnu-0.4.0
ws2_32-sys-0.2.1
"
inherit cargo
DESCRIPTION="spawn leanify subprocesses"
# Double check the homepage as the cargo_metadata crate
# does not provide this value so instead repository is used
HOMEPAGE="https://git.flanchan.moe/flanchan/leanify-many"
SRC_URI="$(cargo_crate_uris ${CRATES} leanify-many-1.1.1)"
RESTRICT="mirror"
# License set may be more restrictive as OR is not respected
# use cargo-license for a more accurate license picture
LICENSE="GPL-3+"
SLOT="0"
KEYWORDS="~amd64"
IUSE="+splash +progress +color threads checked_pass +collect_err"
DEPEND=""
RDEPEND=""
src_compile() {
cargo_src_compile --no-default-features $(usex splash "--features splash" "") $(usex progress "--features progress" "") $(usex color "--features colour" "") $(usex threads "--features threads" "") $(usex checked_pass "--features checked_pass" "") $(usex collect_err "--features collect_err" "")
}

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="person">
<email>flanchan@cumallover.me</email>
<name>Avril</name>
</maintainer>
<use>
<flag name="splash">Show splash-screen</flag>
<flag name="color">Enable coloured output</flag>
<flag name="progress">Enable progress bar</flag>
<flag name="threads">Enable threaded scheduler (this is not ususally desireable)</flag>
<flag name="checked_pass">Check the arguments passed with `--passthrough` to leanify. By default they are passed as is</flag>
<flag name="collect_err">Collect the output of children's stderr instead of printing immediately (turning this off can cause weird bugs)</flag>
</use>
</pkgmetadata>

@ -162,6 +162,7 @@ fn comp_flags()
check!(on "splash", "Show splash-screen");
check!(on "colour", "Enable coloured output");
check!(on "progress", "Enable progress bar");
check!(on "collect_err", "Collect the output of children's stderr instead of printing immediately");
check!(off "threads", "Enable threaded scheduler (usually not needed)");
check!(off "checked_pass", "Check the arguments passed with `--passthrough` to leanify. By default they are passed as is");
}
@ -370,6 +371,7 @@ where I: IntoIterator<Item=T>,
},
"-r" => {
cfg.recursive = None;
continue;
},
"-" => {
reading= false;

@ -28,7 +28,8 @@ mod fixed_stack;
mod process;
mod work;
#[cfg(feature="progress")] mod maybe_single;
//mod timeout;
mod maybe_single;
#[cfg(feature="progress")] mod task_list;
#[cfg(feature="progress")] mod progress;

@ -63,7 +63,7 @@ where U: IntoIterator<Item=V>,
args: process_args
} = process.as_ref();
cfg_if!{
if #[cfg(feature="progress")] {
if #[cfg(any(feature="progress",feature="collect_err"))] {
let stderr = std::process::Stdio::piped();
} else {
let stderr = std::process::Stdio::inherit();
@ -84,7 +84,7 @@ where U: IntoIterator<Item=V>,
};
let stdout = child.stdout.take().unwrap();
#[cfg(feature="progress")] let stderr_sender = {
#[cfg(any(feature="collect_err", feature="progress"))] let stderr_sender = {
let stderr = child.stderr.take().unwrap();
let mut output = output_to.clone();
tokio::spawn(async move {
@ -111,7 +111,7 @@ where U: IntoIterator<Item=V>,
Ok(exit) => {
if exit.success() {
cfg_if!{
if #[cfg(feature="progress")] {
if #[cfg(any(feature="collect_err",feature="progress"))] {
let (o1, o2) = futures::future::join(
sender,
stderr_sender

@ -1,4 +1,5 @@
use super::*;
use pin_project::pin_project;
use std::{
iter::FromIterator as _,
borrow::{
@ -93,23 +94,19 @@ fn create_command(kind: CommandKind) -> (Command, oneshot::Receiver<()>)
///
/// # Panics
/// Awaiting on this multiple times will cause it to panic
#[pin_project]
#[derive(Debug)]
pub struct CommandWaiter(Option<oneshot::Receiver<()>>);
pub struct CommandWaiter(#[pin] Option<oneshot::Receiver<()>>);
impl Future for CommandWaiter
{
type Output = Result<(), Error>;
fn poll(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll<Self::Output>
fn poll(self: Pin<&mut Self>, cx: &mut Context) -> Poll<Self::Output>
{
if let Some(value) = self.0.take() {
let future = async move {
value.await.map_err(|_| Error::WorkerDropped)
};
tokio::pin!(future);
future.poll(cx)
} else {
Poll::Ready(Err(Error::WorkerDropped))
match self.project().0.as_pin_mut() {
Some(x) => x.poll(cx).map_err(|_| Error::WorkerDropped),
None => Poll::Ready(Err(Error::WorkerDropped)),
}
}
}
@ -120,24 +117,20 @@ impl Future for CommandWaiter
///
/// # Panics
/// Awaiting on this multiple times will cause it to panic
#[pin_project]
#[derive(Debug)]
pub struct TaskWaiter(Option<oneshot::Receiver<usize>>,CommandWaiter);
pub struct TaskWaiter(#[pin] Option<oneshot::Receiver<usize>>,CommandWaiter);
impl Future for TaskWaiter
{
type Output = Result<usize, Error>;
fn poll(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll<Self::Output>
fn poll(self: Pin<&mut Self>, cx: &mut Context) -> Poll<Self::Output>
{
let value = self.0.take().unwrap();
let one = &mut self.1;
let future = async {
let val = value.await.map_err(|_| Error::WorkerDropped)?;
one.await.map_err(|_| Error::WorkerDropped)?;
Ok(val)
};
tokio::pin!(future);
future.poll(cx)
match self.project().0.as_pin_mut() {
Some(x) => x.poll(cx).map_err(|_| Error::WorkerDropped),
None => Poll::Ready(Err(Error::WorkerDropped)),
}
}
}

@ -0,0 +1,46 @@
#[macro_export] macro_rules! timeout {
($fut:expr, $dur:expr) => {
{
let dur = $dur;
tokio::select! {
output = $fut => {
Ok(output)
}
_ = tokio::time::delay_for(dur) => {
Err($crate::timeout::TimeoutError::from(dur))
}
}
}
}
}
/// Returned from timeout macro
#[derive(Debug)]
pub struct TimeoutError(tokio::time::Duration);
impl std::error::Error for TimeoutError{}
impl std::fmt::Display for TimeoutError
{
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result
{
write!(f, "timeout of {} ms reached", self.0.as_millis())
}
}
impl From<tokio::time::Duration> for TimeoutError
{
fn from(from: tokio::time::Duration) -> Self
{
TimeoutError(from)
}
}
impl TimeoutError
{
/// Get the timeout that this error lapsed on
#[inline] pub fn timeout(&self) -> &tokio::time::Duration
{
&self.0
}
}

@ -41,9 +41,18 @@ type ProgressSender = progress::ProgressSender;
#[cfg(not(feature="progress"))]
type ProgressSender = ();
#[cfg(feature="collect_err")]
struct Error
{
pub internal: process::Error,
pub stack: fixed_stack::FixedStack<(bool, String)>,
}
#[cfg(not(feature="collect_err"))]
type Error = process::Error;
#[allow(unused_mut)]
#[allow(unused_variables)]
async fn do_work(process: impl AsRef<Process>, file: impl AsRef<OsStr>, mut prog: ProgressSender) -> Result<fixed_stack::IntoIter<String>, process::Error>
async fn do_work(process: impl AsRef<Process>, file: impl AsRef<OsStr>, mut prog: ProgressSender) -> Result<fixed_stack::IntoIter<(bool, String)>, Error>
{
let file = file.as_ref();
@ -56,19 +65,25 @@ async fn do_work(process: impl AsRef<Process>, file: impl AsRef<OsStr>, mut prog
tokio::spawn(async move {
let mut stack = fixed_stack::FixedStack::new(100);
while let Some((err, value)) = rx.recv().await {
if err {
cfg_if!{
if #[cfg(feature="progress")] {
let value = format!("[{}] {:?}: {}", colour::style(colour!(Color::BrightYellow), "!"), file, colour::style(colour!(Color::Yellow),value));
if let Err(_) = prog.eprintln(&value[..]).await {
eprintln!("\n{}", value);
cfg_if! {
if #[cfg(feature="collect_err")] {
stack.push((err, value));
} else {
if err {
cfg_if!{
if #[cfg(feature="progress")] {
let value = format!("[{}] {:?}: {}", colour::style(colour!(Color::BrightYellow), "!"), file, colour::style(colour!(Color::Yellow),value));
if let Err(_) = prog.eprintln(&value[..]).await {
eprintln!("\n{}", value);
}
} else {
eprintln!("[{}] {:?}: {}", colour::style(colour!(Color::BrightYellow), "!"), file, colour::style(colour!(Color::Yellow),value));
}
}
} else {
eprintln!("[{}] {:?}: {}", colour::style(colour!(Color::BrightYellow), "!"), file, colour::style(colour!(Color::Yellow),value));
stack.push((false, value));
}
}
} else {
stack.push(value);
}
}
stack
@ -78,7 +93,18 @@ async fn do_work(process: impl AsRef<Process>, file: impl AsRef<OsStr>, mut prog
//let _ = opt_await.await;
match process::contained_spawn(process, std::iter::once(file), tx).await {
Ok(_) => Ok(collector.await.expect("Child panic").into_iter()),
Err(error) => Err(error),
Err(error) => {
cfg_if! {
if #[cfg(feature="collect_err")] {
Err(Error{
internal: error,
stack: collector.await.expect("Child panic"),
})
} else {
Err(error)
}
}
},
}
}
@ -88,7 +114,7 @@ where I: IntoIterator<Item=T>,
T: AsRef<OsStr> + Send + Sync + 'static + Clone,
U: Into<PathBuf>
{
let (tx,mut rx) = mpsc::channel::<(T, fixed_stack::IntoIter<String>, usize)>(children.as_ref().map(|&x| usize::from(x)).unwrap_or(16));
let (tx,mut rx) = mpsc::channel::<(T, fixed_stack::IntoIter<(bool, String)>, usize)>(children.as_ref().map(|&x| usize::from(x)).unwrap_or(16));
let semaphore = children.map(|children| Arc::new(Semaphore::new(children.into())));
let process = Arc::new(Process::new(process, flags.leanify_flags.clone()));
@ -109,16 +135,24 @@ where I: IntoIterator<Item=T>,
cfg_if!{
if #[cfg(feature="progress")] {
let mut builder =progress.builder();
for line in values.into_iter()
for (err, line) in values.into_iter()
{
let line = format!(" -> ({}) {:?}: {}", i, file.as_ref(), line);
builder.println(line);
if err {
builder.eprintln(format!("[{}] {:?}: {}", colour::style(colour!(Color::BrightYellow), "!"), file.as_ref(), colour::style(colour!(Color::Yellow),line)));
} else {
let line = format!(" -> ({}) {:?}: {}", i, file.as_ref(), line);
builder.println(line);
}
}
let _ = builder.send().await;
} else {
for line in values.into_iter()
for (err, line) in values.into_iter()
{
println!(" -> ({}) {:?}: {}", i, file.as_ref(), line);
if err {
eprintln!("[{}] {:?}: {}", colour::style(colour!(Color::BrightYellow), "!"), file.as_ref(), colour::style(colour!(Color::Yellow),line));
} else {
println!(" -> ({}) {:?}: {}", i, file.as_ref(), line);
}
}
}
}
@ -152,7 +186,7 @@ where I: IntoIterator<Item=T>,
} else {
#[cfg(nightly)] type NoReturn = !;
#[cfg(not(nightly))] type NoReturn = ();
(Option::<NoReturn>::None, do_work(process.as_ref(), &filename, ()).await)
(Option::<NoReturn>::None, do_work(&process, &filename, ()).await)
}
}
};
@ -160,6 +194,13 @@ where I: IntoIterator<Item=T>,
match worker.1 {
Ok(strings) => tx.send((filename, strings, i)).await.map_err(|_| "Child panic").unwrap(),
Err(error) => {
#[cfg(feature="collect_err")] let error = {
let Error{internal, stack} = error;
tx.send((filename.clone(), stack.into_iter(), i)).await.map_err(|_| "Child panic").unwrap();
internal
};
#[cfg(not(feature="progress"))] eprintln!("[{}] {:?}: {}", colour::style(colour!(Color::Yellow),"!"), filename.as_ref(), colour::style(colour!(Color::Yellow), error));
#[cfg(feature="progress")] let _ = progress.eprintln(format!("[{}] ({}) {:?}: {}", colour::style(colour!(Color::Yellow),"!"),i, filename.as_ref(), colour::style(colour!(Color::Yellow), error))).await
.or_else(|e| {
@ -200,7 +241,7 @@ where I: IntoIterator<Item=T>,
{
#[cfg(feature="progress")] progress.eprintln(format!("[e] Child panic {:?}", failed)).await?.await?;
#[cfg(not(feature="progress"))] eprintln!("[e] Child panic {:?}", failed);
}
}
drop(tx);
display.await?;

Loading…
Cancel
Save