From 37fc5fa70bd5b6e37d5e6b1aad1992c06210c43a Mon Sep 17 00:00:00 2001
From: Jeff Dickey <216188+jdx@users.noreply.github.com>
Date: Sun, 13 Oct 2024 15:00:11 -0500
Subject: [PATCH] feat: improve task scheduling
---
.idea/inspectionProfiles/Project_Default.xml | 1 +
.mise.toml | 2 +-
Cargo.lock | 10 +
Cargo.toml | 2 +
docs/cli/alias.md | 2 +-
docs/cli/alias/ls.md | 2 +-
docs/cli/alias/set.md | 2 +-
docs/cli/alias/unset.md | 2 +-
docs/cli/backends.md | 2 +-
docs/cli/backends/ls.md | 2 +-
docs/cli/cache/clear.md | 2 +-
docs/cli/cache/prune.md | 2 +-
docs/cli/config.md | 2 +-
docs/cli/config/generate.md | 2 +-
docs/cli/doctor.md | 2 +-
docs/cli/env.md | 2 +-
docs/cli/exec.md | 2 +-
docs/cli/generate.md | 2 +-
docs/cli/generate/git-pre-commit.md | 2 +-
docs/cli/install.md | 2 +-
docs/cli/link.md | 2 +-
docs/cli/ls.md | 2 +-
docs/cli/plugins.md | 2 +-
docs/cli/plugins/install.md | 2 +-
docs/cli/plugins/link.md | 2 +-
docs/cli/plugins/ls-remote.md | 2 +-
docs/cli/plugins/ls.md | 2 +-
docs/cli/plugins/uninstall.md | 2 +-
docs/cli/plugins/update.md | 2 +-
docs/cli/run.md | 2 +-
docs/cli/settings/ls.md | 2 +-
docs/cli/settings/set.md | 2 +-
docs/cli/settings/unset.md | 2 +-
docs/cli/shell.md | 2 +-
docs/cli/tasks.md | 2 +-
docs/cli/tasks/run.md | 2 +-
docs/cli/uninstall.md | 2 +-
docs/cli/upgrade.md | 2 +-
docs/cli/use.md | 2 +-
docs/cli/version.md | 2 +-
docs/cli/watch.md | 2 +-
schema/mise.json | 3 +
schema/mise.json.hbs | 3 +
src/backend/asdf.rs | 1 +
src/backend/mod.rs | 54 ++++--
src/backend/pipx.rs | 12 +-
src/backend/spm.rs | 18 +-
src/backend/vfox.rs | 6 +
src/cli/args/tool_arg.rs | 8 +-
src/cli/doctor.rs | 9 +-
src/cli/hook_not_found.rs | 2 +-
src/cli/mod.rs | 11 +-
src/cli/plugins/ls.rs | 2 +-
src/cli/registry.rs | 6 +-
src/cli/run.rs | 186 ++++++++++---------
src/cli/tasks/deps.rs | 33 ++--
src/cli/upgrade.rs | 2 +-
src/cli/version.rs | 4 +-
src/cli/watch.rs | 2 +-
src/cmd.rs | 50 ++++-
src/config/env_directive.rs | 76 +++++---
src/config/mod.rs | 119 ++++++++----
src/config/settings.rs | 1 +
src/eager.rs | 20 ++
src/env.rs | 2 +
src/errors.rs | 8 +
src/exit.rs | 8 +
src/main.rs | 23 ++-
src/output.rs | 70 +++++++
src/plugins/asdf_plugin.rs | 4 +-
src/plugins/core/erlang.rs | 4 +-
src/plugins/core/go.rs | 8 +-
src/plugins/core/java.rs | 18 +-
src/plugins/core/node.rs | 10 +-
src/plugins/core/python.rs | 1 +
src/plugins/core/ruby.rs | 6 +-
src/plugins/core/zig.rs | 10 +-
src/plugins/mod.rs | 3 +-
src/regex.rs | 6 -
src/runtime_symlinks.rs | 10 +-
src/shell/nushell.rs | 5 +-
src/shims.rs | 22 +--
src/task/deps.rs | 36 ++--
src/task/mod.rs | 107 +++++++----
src/toolset/builder.rs | 3 +-
src/toolset/mod.rs | 24 +--
src/toolset/tool_request_set.rs | 3 +-
src/ui/ctrlc.rs | 68 ++++---
src/ui/ctrlc_stub.rs | 12 +-
src/ui/mod.rs | 3 +-
src/ui/progress_report.rs | 10 +-
src/ui/prompt.rs | 4 +-
src/ui/style.rs | 5 +
src/ui/time.rs | 7 +
94 files changed, 778 insertions(+), 439 deletions(-)
create mode 100644 src/eager.rs
create mode 100644 src/exit.rs
delete mode 100644 src/regex.rs
create mode 100644 src/ui/time.rs
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
index 838570d852..bfe5bbc494 100644
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -41,6 +41,7 @@
+
diff --git a/.mise.toml b/.mise.toml
index 8bc0efe267..cf18b70658 100644
--- a/.mise.toml
+++ b/.mise.toml
@@ -17,7 +17,7 @@ jq = "latest"
"cargo:cargo-edit" = "latest"
"cargo:cargo-show" = "latest"
"cargo:git-cliff" = "latest"
-"npm:markdownlint-cli" = "0.38"
+"npm:markdownlint-cli" = "latest"
"npm:prettier" = "3"
direnv = "latest"
actionlint = "latest"
diff --git a/Cargo.lock b/Cargo.lock
index 889177dd93..7b369ef7bf 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -624,6 +624,15 @@ dependencies = [
"cfg-if",
]
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2"
+dependencies = [
+ "crossbeam-utils",
+]
+
[[package]]
name = "crossbeam-deque"
version = "0.8.5"
@@ -1968,6 +1977,7 @@ dependencies = [
"confique",
"console",
"contracts",
+ "crossbeam-channel",
"ctor",
"demand",
"dotenvy",
diff --git a/Cargo.toml b/Cargo.toml
index a4a43b252e..94c4af3b2e 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -55,6 +55,7 @@ color-print = "0.3.6"
confique = { version = "0.2.5", default-features = false }
console = "0.15.8"
contracts = "0.6.3"
+crossbeam-channel = "0.5"
demand = "1.1.2"
dotenvy = "0.15.7"
duct = "0.13.7"
@@ -158,6 +159,7 @@ test-log = "0.2"
[features]
default = ["native-tls"]
+timings = []
native-tls = ["reqwest/native-tls"]
rustls = ["reqwest/rustls-tls", "self_update/rustls"]
rustls-native-roots = ["reqwest/rustls-tls-native-roots", "self_update/rustls"]
diff --git a/docs/cli/alias.md b/docs/cli/alias.md
index 099c1988de..6d4bfd622b 100644
--- a/docs/cli/alias.md
+++ b/docs/cli/alias.md
@@ -2,7 +2,7 @@
**Usage**: `mise alias [-p --plugin ] [--no-header] `
-**Aliases**: a
+**Aliases**: `a`
Manage aliases
diff --git a/docs/cli/alias/ls.md b/docs/cli/alias/ls.md
index e9170977d2..17a676c295 100644
--- a/docs/cli/alias/ls.md
+++ b/docs/cli/alias/ls.md
@@ -2,7 +2,7 @@
**Usage**: `mise alias ls [--no-header] [PLUGIN]`
-**Aliases**: list
+**Aliases**: `list`
List aliases
Shows the aliases that can be specified.
diff --git a/docs/cli/alias/set.md b/docs/cli/alias/set.md
index ecd71dab1d..9da1a04971 100644
--- a/docs/cli/alias/set.md
+++ b/docs/cli/alias/set.md
@@ -2,7 +2,7 @@
**Usage**: `mise alias set …`
-**Aliases**: add, create
+**Aliases**: `add`, `create`
Add/update an alias for a plugin
diff --git a/docs/cli/alias/unset.md b/docs/cli/alias/unset.md
index 262126c862..5ef3802100 100644
--- a/docs/cli/alias/unset.md
+++ b/docs/cli/alias/unset.md
@@ -2,7 +2,7 @@
**Usage**: `mise alias unset `
-**Aliases**: rm, remove, delete, del
+**Aliases**: `rm`, `remove`, `delete`, `del`
Clears an alias for a plugin
diff --git a/docs/cli/backends.md b/docs/cli/backends.md
index 4ddb5d648a..526b29593d 100644
--- a/docs/cli/backends.md
+++ b/docs/cli/backends.md
@@ -2,7 +2,7 @@
**Usage**: `mise backends `
-**Aliases**: b
+**Aliases**: `b`
Manage backends
diff --git a/docs/cli/backends/ls.md b/docs/cli/backends/ls.md
index 03581885fb..8e4aa461af 100644
--- a/docs/cli/backends/ls.md
+++ b/docs/cli/backends/ls.md
@@ -2,7 +2,7 @@
**Usage**: `mise backends ls`
-**Aliases**: list
+**Aliases**: `list`
List built-in backends
diff --git a/docs/cli/cache/clear.md b/docs/cli/cache/clear.md
index 7afc2e6743..703fa50584 100644
--- a/docs/cli/cache/clear.md
+++ b/docs/cli/cache/clear.md
@@ -2,7 +2,7 @@
**Usage**: `mise cache clear [PLUGIN]...`
-**Aliases**: c
+**Aliases**: `c`
Deletes all cache files in mise
diff --git a/docs/cli/cache/prune.md b/docs/cli/cache/prune.md
index 1c79fcfc12..0634ed47be 100644
--- a/docs/cli/cache/prune.md
+++ b/docs/cli/cache/prune.md
@@ -2,7 +2,7 @@
**Usage**: `mise cache prune [--dry-run] [-v --verbose...] [PLUGIN]...`
-**Aliases**: p
+**Aliases**: `p`
Removes stale mise cache files
diff --git a/docs/cli/config.md b/docs/cli/config.md
index 7d756fcdcd..79457da5c3 100644
--- a/docs/cli/config.md
+++ b/docs/cli/config.md
@@ -2,7 +2,7 @@
**Usage**: `mise config [--no-header] `
-**Aliases**: cfg
+**Aliases**: `cfg`
Manage config files
diff --git a/docs/cli/config/generate.md b/docs/cli/config/generate.md
index 5a2ab631ad..02a9c36a54 100644
--- a/docs/cli/config/generate.md
+++ b/docs/cli/config/generate.md
@@ -2,7 +2,7 @@
**Usage**: `mise config generate [-o --output