diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml index 9b7f44feba..c581e4a274 100644 --- a/.github/workflows/nightly-build.yml +++ b/.github/workflows/nightly-build.yml @@ -161,7 +161,7 @@ jobs: # REF: https://github.com/marketplace/actions/gh-release # Create a release only in nushell/nightly repo - name: Publish Archive - uses: softprops/action-gh-release@v2.0.6 + uses: softprops/action-gh-release@v2.0.8 if: ${{ startsWith(github.repository, 'nushell/nightly') }} with: prerelease: true diff --git a/.github/workflows/release-pkg.nu b/.github/workflows/release-pkg.nu index da2779f6d1..562f42b4a4 100755 --- a/.github/workflows/release-pkg.nu +++ b/.github/workflows/release-pkg.nu @@ -161,8 +161,12 @@ if $os in ['macos-latest'] or $USE_UBUNTU { let releaseStem = $'($bin)-($version)-($target)' print $'(char nl)Download less related stuffs...'; hr-line + # todo: less-v661 is out but is released as a zip file. maybe we should switch to that and extract it? aria2c https://github.com/jftuga/less-Windows/releases/download/less-v608/less.exe -o less.exe - aria2c https://raw.githubusercontent.com/jftuga/less-Windows/master/LICENSE -o LICENSE-for-less.txt + # the below was renamed because it was failing to download for darren. it should work but it wasn't + # todo: maybe we should get rid of this aria2c dependency and just use http get? + #aria2c https://raw.githubusercontent.com/jftuga/less-Windows/master/LICENSE -o LICENSE-for-less.txt + aria2c https://github.com/jftuga/less-Windows/blob/master/LICENSE -o LICENSE-for-less.txt # Create Windows msi release package if (get-env _EXTRA_) == 'msi' { diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 34cad24fbf..53f22cec66 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -91,7 +91,7 @@ jobs: # REF: https://github.com/marketplace/actions/gh-release - name: Publish Archive - uses: softprops/action-gh-release@v2.0.6 + uses: softprops/action-gh-release@v2.0.8 if: ${{ startsWith(github.ref, 'refs/tags/') }} with: draft: true diff --git a/.github/workflows/typos.yml b/.github/workflows/typos.yml index c7c153983d..98ace3be57 100644 --- a/.github/workflows/typos.yml +++ b/.github/workflows/typos.yml @@ -10,4 +10,4 @@ jobs: uses: actions/checkout@v4.1.7 - name: Check spelling - uses: crate-ci/typos@v1.23.2 + uses: crate-ci/typos@v1.23.5 diff --git a/Cargo.lock b/Cargo.lock index 4ccf7f7435..22c6218ffb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -128,9 +128,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" dependencies = [ "anstyle", "anstyle-parse", @@ -143,33 +143,33 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" dependencies = [ "anstyle", "windows-sys 0.52.0", @@ -236,9 +236,9 @@ dependencies = [ [[package]] name = "assert_cmd" -version = "2.0.14" +version = "2.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed72493ac66d5804837f480ab3766c72bdfab91a65e565fc54fa9e42db0073a8" +checksum = "bc65048dd435533bb1baf2ed9956b9a278fbfdcf90301b39ee117f06c0199d37" dependencies = [ "anstyle", "bstr", @@ -297,6 +297,12 @@ version = "0.15.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ae037714f313c1353189ead58ef9eec30a8e8dc101b2622d461418fd59e28a9" +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "autocfg" version = "1.3.0" @@ -495,9 +501,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.9.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" dependencies = [ "memchr", "regex-automata", @@ -551,9 +557,9 @@ checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" [[package]] name = "bytemuck" -version = "1.16.1" +version = "1.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" +checksum = "102087e286b4677862ea56cf8fc58bb2cdfa8725c40ffb80fe3a008eb7f2fc83" dependencies = [ "bytemuck_derive", ] @@ -577,9 +583,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.1" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" [[package]] name = "bytesize" @@ -621,9 +627,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.6" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" +checksum = "26a5c3fd7bfa1ce3897a3a3501d362b2d87b7f2583ebcb4a949ec25911025cbc" dependencies = [ "jobserver", "libc", @@ -769,9 +775,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.10" +version = "4.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6b81fb3c84f5563d509c59b5a48d935f689e993afa90fe39047f05adef9142" +checksum = "0fbb260a053428790f3de475e304ff84cdbc4face759ea7a3e64c1edd938a7fc" dependencies = [ "clap_builder", "clap_derive", @@ -779,9 +785,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.10" +version = "4.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca6706fd5224857d9ac5eb9355f6683563cc0541c7cd9d014043b57cbec78ac" +checksum = "64b17d7ea74e9f833c7dbf2cbe4fb12ff26783eda4782a8975b72f895c9b4d99" dependencies = [ "anstream", "anstyle", @@ -792,9 +798,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.8" +version = "4.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085" +checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" dependencies = [ "heck", "proc-macro2", @@ -804,9 +810,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" [[package]] name = "clipboard-win" @@ -828,9 +834,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" [[package]] name = "colorz" @@ -1133,9 +1139,9 @@ dependencies = [ [[package]] name = "curl-sys" -version = "0.4.73+curl-8.8.0" +version = "0.4.74+curl-8.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "450ab250ecf17227c39afb9a2dd9261dc0035cb80f2612472fc0c4aac2dcb84d" +checksum = "8af10b986114528fcdc4b63b6f5f021b7057618411046a4de2ba0f0149a097bf" dependencies = [ "cc", "libc", @@ -1303,9 +1309,9 @@ dependencies = [ [[package]] name = "dunce" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" @@ -1367,9 +1373,9 @@ dependencies = [ [[package]] name = "env_filter" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6dc8c8ff84895b051f07a0e65f975cf225131742531338752abfb324e4449ff" +checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" dependencies = [ "log", "regex", @@ -1387,9 +1393,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06676b12debf7bba6903559720abca942d3a66b8acb88815fd2c7c6537e9ade1" +checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" dependencies = [ "anstream", "anstyle", @@ -1520,9 +1526,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920" dependencies = [ "crc32fast", "miniz_oxide", @@ -1796,15 +1802,15 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.26" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" dependencies = [ + "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "futures-util", "http", "indexmap", "slab", @@ -1915,9 +1921,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.12" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" dependencies = [ "bytes", "fnv", @@ -1926,12 +1932,24 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.6" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", "pin-project-lite", ] @@ -1967,13 +1985,12 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.30" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" dependencies = [ "bytes", "futures-channel", - "futures-core", "futures-util", "h2", "http", @@ -1982,10 +1999,23 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", + "smallvec", + "tokio", +] + +[[package]] +name = "hyper-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", "tokio", - "tower-service", - "tracing", - "want", ] [[package]] @@ -2032,9 +2062,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0" dependencies = [ "equivalent", "hashbrown 0.14.5", @@ -2155,9 +2185,9 @@ dependencies = [ [[package]] name = "is_terminal_polyfill" -version = "1.70.0" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itertools" @@ -2486,9 +2516,9 @@ checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "lru" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" +checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" dependencies = [ "hashbrown 0.14.5", ] @@ -2719,13 +2749,18 @@ dependencies = [ [[package]] name = "mockito" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2f6e023aa5bdf392aa06c78e4a4e6d498baab5138d0c993503350ebbc37bf1e" +checksum = "09b34bd91b9e5c5b06338d392463e1318d683cf82ec3d3af4014609be6e2108d" dependencies = [ "assert-json-diff", - "futures-core", + "bytes", + "futures-util", + "http", + "http-body", + "http-body-util", "hyper", + "hyper-util", "log", "rand", "regex", @@ -2854,7 +2889,7 @@ dependencies = [ [[package]] name = "nu" -version = "0.95.1" +version = "0.96.2" dependencies = [ "assert_cmd", "crossterm", @@ -2899,16 +2934,16 @@ dependencies = [ [[package]] name = "nu-ansi-term" -version = "0.50.0" +version = "0.50.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd2800e1520bdc966782168a627aa5d1ad92e33b984bf7c7615d31280c83ff14" +checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "nu-cli" -version = "0.95.1" +version = "0.96.2" dependencies = [ "chrono", "crossterm", @@ -2943,7 +2978,7 @@ dependencies = [ [[package]] name = "nu-cmd-base" -version = "0.95.1" +version = "0.96.2" dependencies = [ "indexmap", "miette", @@ -2955,7 +2990,7 @@ dependencies = [ [[package]] name = "nu-cmd-extra" -version = "0.95.1" +version = "0.96.2" dependencies = [ "fancy-regex", "heck", @@ -2980,7 +3015,7 @@ dependencies = [ [[package]] name = "nu-cmd-lang" -version = "0.95.1" +version = "0.96.2" dependencies = [ "itertools 0.12.1", "nu-engine", @@ -2992,7 +3027,7 @@ dependencies = [ [[package]] name = "nu-cmd-plugin" -version = "0.95.1" +version = "0.96.2" dependencies = [ "itertools 0.12.1", "nu-engine", @@ -3003,7 +3038,7 @@ dependencies = [ [[package]] name = "nu-color-config" -version = "0.95.1" +version = "0.96.2" dependencies = [ "nu-ansi-term", "nu-engine", @@ -3015,7 +3050,7 @@ dependencies = [ [[package]] name = "nu-command" -version = "0.95.1" +version = "0.96.2" dependencies = [ "alphanumeric-sort", "base64 0.22.1", @@ -3101,7 +3136,7 @@ dependencies = [ "tempfile", "terminal_size", "titlecase", - "toml 0.8.15", + "toml 0.8.19", "trash", "umask", "unicode-segmentation", @@ -3125,7 +3160,7 @@ dependencies = [ [[package]] name = "nu-derive-value" -version = "0.95.1" +version = "0.96.2" dependencies = [ "convert_case", "proc-macro-error", @@ -3136,18 +3171,19 @@ dependencies = [ [[package]] name = "nu-engine" -version = "0.95.1" +version = "0.96.2" dependencies = [ "log", "nu-glob", "nu-path", "nu-protocol", "nu-utils", + "terminal_size", ] [[package]] name = "nu-explore" -version = "0.95.1" +version = "0.96.2" dependencies = [ "ansi-str", "anyhow", @@ -3172,14 +3208,14 @@ dependencies = [ [[package]] name = "nu-glob" -version = "0.95.1" +version = "0.96.2" dependencies = [ "doc-comment", ] [[package]] name = "nu-json" -version = "0.95.1" +version = "0.96.2" dependencies = [ "fancy-regex", "linked-hash-map", @@ -3192,7 +3228,7 @@ dependencies = [ [[package]] name = "nu-lsp" -version = "0.95.1" +version = "0.96.2" dependencies = [ "assert-json-diff", "crossbeam-channel", @@ -3213,7 +3249,7 @@ dependencies = [ [[package]] name = "nu-parser" -version = "0.95.1" +version = "0.96.2" dependencies = [ "bytesize", "chrono", @@ -3229,7 +3265,7 @@ dependencies = [ [[package]] name = "nu-path" -version = "0.95.1" +version = "0.96.2" dependencies = [ "dirs", "omnipath", @@ -3238,7 +3274,7 @@ dependencies = [ [[package]] name = "nu-plugin" -version = "0.95.1" +version = "0.96.2" dependencies = [ "log", "nix", @@ -3254,7 +3290,7 @@ dependencies = [ [[package]] name = "nu-plugin-core" -version = "0.95.1" +version = "0.96.2" dependencies = [ "interprocess", "log", @@ -3268,7 +3304,7 @@ dependencies = [ [[package]] name = "nu-plugin-engine" -version = "0.95.1" +version = "0.96.2" dependencies = [ "log", "nu-engine", @@ -3284,7 +3320,7 @@ dependencies = [ [[package]] name = "nu-plugin-protocol" -version = "0.95.1" +version = "0.96.2" dependencies = [ "bincode", "nu-protocol", @@ -3296,7 +3332,7 @@ dependencies = [ [[package]] name = "nu-plugin-test-support" -version = "0.95.1" +version = "0.96.2" dependencies = [ "nu-ansi-term", "nu-cmd-lang", @@ -3314,7 +3350,7 @@ dependencies = [ [[package]] name = "nu-pretty-hex" -version = "0.95.1" +version = "0.96.2" dependencies = [ "heapless", "nu-ansi-term", @@ -3323,7 +3359,7 @@ dependencies = [ [[package]] name = "nu-protocol" -version = "0.95.1" +version = "0.96.2" dependencies = [ "brotli", "byte-unit", @@ -3360,7 +3396,7 @@ dependencies = [ [[package]] name = "nu-std" -version = "0.95.1" +version = "0.96.2" dependencies = [ "log", "miette", @@ -3371,7 +3407,7 @@ dependencies = [ [[package]] name = "nu-system" -version = "0.95.1" +version = "0.96.2" dependencies = [ "chrono", "itertools 0.12.1", @@ -3389,7 +3425,7 @@ dependencies = [ [[package]] name = "nu-table" -version = "0.95.1" +version = "0.96.2" dependencies = [ "fancy-regex", "nu-ansi-term", @@ -3403,7 +3439,7 @@ dependencies = [ [[package]] name = "nu-term-grid" -version = "0.95.1" +version = "0.96.2" dependencies = [ "nu-utils", "unicode-width", @@ -3411,7 +3447,7 @@ dependencies = [ [[package]] name = "nu-test-support" -version = "0.95.1" +version = "0.96.2" dependencies = [ "nu-glob", "nu-path", @@ -3423,7 +3459,7 @@ dependencies = [ [[package]] name = "nu-utils" -version = "0.95.1" +version = "0.96.2" dependencies = [ "crossterm_winapi", "log", @@ -3449,7 +3485,7 @@ dependencies = [ [[package]] name = "nu_plugin_example" -version = "0.95.1" +version = "0.96.2" dependencies = [ "nu-cmd-lang", "nu-plugin", @@ -3459,20 +3495,22 @@ dependencies = [ [[package]] name = "nu_plugin_formats" -version = "0.95.1" +version = "0.96.2" dependencies = [ + "chrono", "eml-parser", "ical", "indexmap", "nu-plugin", "nu-plugin-test-support", "nu-protocol", + "plist", "rust-ini", ] [[package]] name = "nu_plugin_gstat" -version = "0.95.1" +version = "0.96.2" dependencies = [ "git2", "nu-plugin", @@ -3481,7 +3519,7 @@ dependencies = [ [[package]] name = "nu_plugin_inc" -version = "0.95.1" +version = "0.96.2" dependencies = [ "nu-plugin", "nu-protocol", @@ -3490,11 +3528,11 @@ dependencies = [ [[package]] name = "nu_plugin_polars" -version = "0.95.1" +version = "0.96.2" dependencies = [ "chrono", "chrono-tz 0.9.0", - "env_logger 0.11.4", + "env_logger 0.11.5", "fancy-regex", "indexmap", "log", @@ -3524,7 +3562,7 @@ dependencies = [ [[package]] name = "nu_plugin_query" -version = "0.95.1" +version = "0.96.2" dependencies = [ "gjson", "nu-plugin", @@ -3539,7 +3577,7 @@ dependencies = [ [[package]] name = "nu_plugin_stress_internals" -version = "0.95.1" +version = "0.96.2" dependencies = [ "interprocess", "serde", @@ -3653,7 +3691,7 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "nuon" -version = "0.95.1" +version = "0.96.2" dependencies = [ "chrono", "fancy-regex", @@ -3773,9 +3811,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.1" +version = "0.36.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" +checksum = "3f203fa8daa7bb185f760ae12bd8e097f63d17041dcdcaf675ac54cdf863170e" dependencies = [ "memchr", ] @@ -3884,12 +3922,12 @@ dependencies = [ [[package]] name = "os_pipe" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29d73ba8daf8fac13b0501d1abeddcfe21ba7401ada61a819144b6c2a4f32209" +checksum = "5ffd2b0a5634335b135d5728d84c5e0fd726954b87111f7506a61c502280d982" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4165,6 +4203,19 @@ dependencies = [ "winapi", ] +[[package]] +name = "plist" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" +dependencies = [ + "base64 0.22.1", + "indexmap", + "quick-xml 0.32.0", + "serde", + "time", +] + [[package]] name = "polars" version = "0.41.3" @@ -4642,9 +4693,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "precomputed-hash" @@ -4654,9 +4708,9 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "predicates" -version = "3.1.0" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b87bfd4605926cdfefc1c3b5f8fe560e3feca9d5552cf68c466d3d8236c7e8" +checksum = "7e9086cc7640c29a356d1a29fd134380bee9d8f79a17410aa76e7ad295f42c97" dependencies = [ "anstyle", "difflib", @@ -4665,15 +4719,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" +checksum = "ae8177bee8e75d6846599c6b9ff679ed51e882816914eec639944d7c9aa11931" [[package]] name = "predicates-tree" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" +checksum = "41b740d195ed3166cd147c8047ec98db0e22ec019eb8eeb76d343b795304fb13" dependencies = [ "predicates-core", "termtree", @@ -4832,6 +4886,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "quick-xml" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" +dependencies = [ + "memchr", +] + [[package]] name = "quick-xml" version = "0.34.0" @@ -5030,8 +5093,8 @@ dependencies = [ [[package]] name = "reedline" -version = "0.32.0" -source = "git+https://github.com/nushell/reedline?branch=main#480059a3f52cf919341cda88e8c544edd846bc73" +version = "0.33.0" +source = "git+https://github.com/nushell/reedline?branch=main#e064b645193ef7438927af991483ab6fae7b6235" dependencies = [ "arboard", "chrono", @@ -5072,9 +5135,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.5" +version = "1.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" dependencies = [ "aho-corasick", "memchr", @@ -5279,9 +5342,9 @@ dependencies = [ [[package]] name = "rust-ini" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d625ed57d8f49af6cfa514c42e1a71fadcff60eb0b1c517ff82fe41aa025b41" +checksum = "4e310ef0e1b6eeb79169a1171daf9abcb87a2e17c03bee2c4bb100b55c75409f" dependencies = [ "cfg-if", "ordered-multimap", @@ -5361,9 +5424,9 @@ dependencies = [ [[package]] name = "scc" -version = "2.1.4" +version = "2.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4465c22496331e20eb047ff46e7366455bc01c0c02015c4a376de0b2cd3a1af" +checksum = "8d777f59627453628a9a5be1ee8d948745b94b1dfc2d0c3099cbd9e08ab89e7c" dependencies = [ "sdd", ] @@ -5426,9 +5489,9 @@ dependencies = [ [[package]] name = "sdd" -version = "1.7.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85f05a494052771fc5bd0619742363b5e24e5ad72ab3111ec2e27925b8edc5f3" +checksum = "177258b64c0faaa9ffd3c65cd3262c2bc7e2588dbbd9c1641d0346145c1bbda8" [[package]] name = "seahash" @@ -5506,12 +5569,13 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.120" +version = "1.0.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" +checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da" dependencies = [ "indexmap", "itoa", + "memchr", "ryu", "serde", ] @@ -5529,9 +5593,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.6" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" dependencies = [ "serde", ] @@ -5608,9 +5672,9 @@ dependencies = [ [[package]] name = "shadow-rs" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a600f795d0894cda22235b44eea4b85c2a35b405f65523645ac8e35b306817a" +checksum = "d253e54681d4be0161e965db57974ae642a0b6aaeb18a999424c4dab062be8c5" dependencies = [ "const_format", "is_debug", @@ -5641,9 +5705,9 @@ dependencies = [ [[package]] name = "signal-hook-mio" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" dependencies = [ "libc", "mio 0.8.11", @@ -6045,12 +6109,13 @@ checksum = "c1bbb9f3c5c463a01705937a24fdabc5047929ac764b2d5b9cf681c1f5041ed5" [[package]] name = "tempfile" -version = "3.10.1" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "b8fcd239983515c23a32fb82099f97d0b11b8c72f654ed659363a95c3dad7a53" dependencies = [ "cfg-if", "fastrand", + "once_cell", "rustix", "windows-sys 0.52.0", ] @@ -6202,9 +6267,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.39.1" +version = "1.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d040ac2b29ab03b09d4129c2f5bbd012a3ac2f79d38ff506a4bf8dd34b0eac8a" +checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" dependencies = [ "backtrace", "bytes", @@ -6243,22 +6308,22 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.15" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac2caab0bf757388c6c0ae23b3293fdb463fee59434529014f85e3263b995c28" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" dependencies = [ "indexmap", "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.16", + "toml_edit 0.22.20", ] [[package]] name = "toml_datetime" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" dependencies = [ "serde", ] @@ -6289,23 +6354,17 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.16" +version = "0.22.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "278f3d518e152219c994ce877758516bca5e118eaed6996192a774fb9fbf0788" +checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" dependencies = [ "indexmap", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.15", + "winnow 0.6.18", ] -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - [[package]] name = "tracing" version = "0.1.40" @@ -6361,12 +6420,6 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "343e926fc669bc8cde4fa3129ab681c63671bae288b1f1081ceee6d9d37904fc" -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - [[package]] name = "typed-arena" version = "1.7.0" @@ -6387,9 +6440,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "typetag" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "661d18414ec032a49ece2d56eee03636e43c4e8d577047ab334c0ba892e29aaf" +checksum = "1f7ec175048b96728c30152928c52161bfcc8ea2bd3fb7ed4ccb7dec060b2834" dependencies = [ "erased-serde", "inventory", @@ -6400,9 +6453,9 @@ dependencies = [ [[package]] name = "typetag-impl" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac73887f47b9312552aa90ef477927ff014d63d1920ca8037c6c1951eab64bb1" +checksum = "84b5474fd169a5b02b6782b56bbbbff27e85947d4488e5501123687db3148647" dependencies = [ "proc-macro2", "quote", @@ -6699,9 +6752,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vte" @@ -6753,15 +6806,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -6926,9 +6970,9 @@ dependencies = [ [[package]] name = "which" -version = "6.0.1" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8211e4f58a2b2805adfbefbc07bab82958fc91e3836339b1ab7ae32465dce0d7" +checksum = "3d9c5ed668ee1f17edb3b627225343d210006a90bb1e3745ce1f30b1fb115075" dependencies = [ "either", "home", @@ -6969,11 +7013,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -7057,6 +7101,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -7246,9 +7299,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.15" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "557404e450152cd6795bb558bca69e43c585055f4606e3bcae5894fc6dac9ba0" +checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" dependencies = [ "memchr", ] @@ -7349,9 +7402,9 @@ dependencies = [ [[package]] name = "xxhash-rust" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63658493314859b4dfdf3fb8c1defd61587839def09582db50b8a4e93afca6bb" +checksum = "6a5cbf750400958819fb6178eaa83bee5cd9c29a26a40cc241df8c70fdd46984" [[package]] name = "yansi" @@ -7365,6 +7418,7 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] @@ -7402,18 +7456,18 @@ dependencies = [ [[package]] name = "zstd-safe" -version = "7.2.0" +version = "7.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa556e971e7b568dc775c136fc9de8c779b1c2fc3a63defaafadffdbd3181afa" +checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.12+zstd.1.5.6" +version = "2.0.13+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a4e40c320c3cb459d9a9ff6de98cff88f4751ee9275d140e2be94a2b74e4c13" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" dependencies = [ "cc", "pkg-config", diff --git a/Cargo.toml b/Cargo.toml index 45e4f4f55b..a03ad285a6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,8 +10,8 @@ homepage = "https://www.nushell.sh" license = "MIT" name = "nu" repository = "https://github.com/nushell/nushell" -rust-version = "1.77.2" -version = "0.95.1" +rust-version = "1.78.0" +version = "0.96.2" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -116,7 +116,7 @@ mockito = { version = "1.4", default-features = false } native-tls = "0.2" nix = { version = "0.28", default-features = false } notify-debouncer-full = { version = "0.3", default-features = false } -nu-ansi-term = "0.50.0" +nu-ansi-term = "0.50.1" num-format = "0.4" num-traits = "0.2" omnipath = "0.1" @@ -138,7 +138,7 @@ quote = "1.0" rand = "0.8" ratatui = "0.26" rayon = "1.10" -reedline = "0.32.0" +reedline = "0.33.0" regex = "1.9.5" rmp = "0.8" rmp-serde = "1.3" @@ -183,22 +183,22 @@ windows-sys = "0.48" winreg = "0.52" [dependencies] -nu-cli = { path = "./crates/nu-cli", version = "0.95.1" } -nu-cmd-base = { path = "./crates/nu-cmd-base", version = "0.95.1" } -nu-cmd-lang = { path = "./crates/nu-cmd-lang", version = "0.95.1" } -nu-cmd-plugin = { path = "./crates/nu-cmd-plugin", version = "0.95.1", optional = true } -nu-cmd-extra = { path = "./crates/nu-cmd-extra", version = "0.95.1" } -nu-command = { path = "./crates/nu-command", version = "0.95.1" } -nu-engine = { path = "./crates/nu-engine", version = "0.95.1" } -nu-explore = { path = "./crates/nu-explore", version = "0.95.1" } -nu-lsp = { path = "./crates/nu-lsp/", version = "0.95.1" } -nu-parser = { path = "./crates/nu-parser", version = "0.95.1" } -nu-path = { path = "./crates/nu-path", version = "0.95.1" } -nu-plugin-engine = { path = "./crates/nu-plugin-engine", optional = true, version = "0.95.1" } -nu-protocol = { path = "./crates/nu-protocol", version = "0.95.1" } -nu-std = { path = "./crates/nu-std", version = "0.95.1" } -nu-system = { path = "./crates/nu-system", version = "0.95.1" } -nu-utils = { path = "./crates/nu-utils", version = "0.95.1" } +nu-cli = { path = "./crates/nu-cli", version = "0.96.2" } +nu-cmd-base = { path = "./crates/nu-cmd-base", version = "0.96.2" } +nu-cmd-lang = { path = "./crates/nu-cmd-lang", version = "0.96.2" } +nu-cmd-plugin = { path = "./crates/nu-cmd-plugin", version = "0.96.2", optional = true } +nu-cmd-extra = { path = "./crates/nu-cmd-extra", version = "0.96.2" } +nu-command = { path = "./crates/nu-command", version = "0.96.2" } +nu-engine = { path = "./crates/nu-engine", version = "0.96.2" } +nu-explore = { path = "./crates/nu-explore", version = "0.96.2" } +nu-lsp = { path = "./crates/nu-lsp/", version = "0.96.2" } +nu-parser = { path = "./crates/nu-parser", version = "0.96.2" } +nu-path = { path = "./crates/nu-path", version = "0.96.2" } +nu-plugin-engine = { path = "./crates/nu-plugin-engine", optional = true, version = "0.96.2" } +nu-protocol = { path = "./crates/nu-protocol", version = "0.96.2" } +nu-std = { path = "./crates/nu-std", version = "0.96.2" } +nu-system = { path = "./crates/nu-system", version = "0.96.2" } +nu-utils = { path = "./crates/nu-utils", version = "0.96.2" } reedline = { workspace = true, features = ["bashisms", "sqlite"] } crossterm = { workspace = true } @@ -227,9 +227,9 @@ nix = { workspace = true, default-features = false, features = [ ] } [dev-dependencies] -nu-test-support = { path = "./crates/nu-test-support", version = "0.95.1" } -nu-plugin-protocol = { path = "./crates/nu-plugin-protocol", version = "0.95.1" } -nu-plugin-core = { path = "./crates/nu-plugin-core", version = "0.95.1" } +nu-test-support = { path = "./crates/nu-test-support", version = "0.96.2" } +nu-plugin-protocol = { path = "./crates/nu-plugin-protocol", version = "0.96.2" } +nu-plugin-core = { path = "./crates/nu-plugin-core", version = "0.96.2" } assert_cmd = "2.0" dirs = { workspace = true } tango-bench = "0.5" diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000000..3f161a77f9 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,29 @@ +# Security Policy + +As a shell and programming language Nushell provides you with great powers and the potential to do dangerous things to your computer and data. Whenever there is a risk that a malicious actor can abuse a bug or a violation of documented behavior/assumptions in Nushell to harm you this is a *security* risk. +We want to fix those issues without exposing our users to unnecessary risk. Thus we want to explain our security policy. +Additional issues may be part of *safety* where the behavior of Nushell as designed and implemented can cause unintended harm or a bug causes damage without the involvement of a third party. + +## Supported Versions + +As Nushell is still under very active pre-stable development, the only version the core team prioritizes for security and safety fixes is the [most recent version as published on GitHub](https://github.com/nushell/nushell/releases/latest). +Only if you provide a strong reasoning and the necessary resources, will we consider blessing a backported fix with an official patch release for a previous version. + +## Reporting a Vulnerability + +If you suspect that a bug or behavior of Nushell can affect security or may be potentially exploitable, please report the issue to us in private. +Either reach out to the core team on [our Discord server](https://discord.gg/NtAbbGn) to arrange a private channel or use the [GitHub vulnerability reporting form](https://github.com/nushell/nushell/security/advisories/new). +Please try to answer the following questions: +- How can we reach you for further questions? +- What is the bug? Which system of Nushell may be affected? +- Do you have proof-of-concept for a potential exploit or have you observed an exploit in the wild? +- What is your assessment of the severity based on what could be impacted should the bug be exploited? +- Are additional people aware of the issue or deserve credit for identifying the issue? + +We will try to get back to you within a week with: +- acknowledging the receipt of the report +- an initial plan of how we want to address this including the primary points of contact for further communication +- our preliminary assessment of how severe we judge the issue +- a proposal for how we can coordinate responsible disclosure (e.g. how we ship the bugfix, if we need to coordinate with distribution maintainers, when you can release a blog post if you want to etc.) + +For purely *safety* related issues where the impact is severe by direct user action instead of malicious input or third parties, feel free to open a regular issue. If we deem that there may be an additional *security* risk on a *safety* issue we may continue discussions in a restricted forum. diff --git a/crates/nu-cli/Cargo.toml b/crates/nu-cli/Cargo.toml index 2ed504d502..54af510916 100644 --- a/crates/nu-cli/Cargo.toml +++ b/crates/nu-cli/Cargo.toml @@ -5,27 +5,27 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu-cli" edition = "2021" license = "MIT" name = "nu-cli" -version = "0.95.1" +version = "0.96.2" [lib] bench = false [dev-dependencies] -nu-cmd-lang = { path = "../nu-cmd-lang", version = "0.95.1" } -nu-command = { path = "../nu-command", version = "0.95.1" } -nu-test-support = { path = "../nu-test-support", version = "0.95.1" } +nu-cmd-lang = { path = "../nu-cmd-lang", version = "0.96.2" } +nu-command = { path = "../nu-command", version = "0.96.2" } +nu-test-support = { path = "../nu-test-support", version = "0.96.2" } rstest = { workspace = true, default-features = false } tempfile = { workspace = true } [dependencies] -nu-cmd-base = { path = "../nu-cmd-base", version = "0.95.1" } -nu-engine = { path = "../nu-engine", version = "0.95.1" } -nu-path = { path = "../nu-path", version = "0.95.1" } -nu-parser = { path = "../nu-parser", version = "0.95.1" } -nu-plugin-engine = { path = "../nu-plugin-engine", version = "0.95.1", optional = true } -nu-protocol = { path = "../nu-protocol", version = "0.95.1" } -nu-utils = { path = "../nu-utils", version = "0.95.1" } -nu-color-config = { path = "../nu-color-config", version = "0.95.1" } +nu-cmd-base = { path = "../nu-cmd-base", version = "0.96.2" } +nu-engine = { path = "../nu-engine", version = "0.96.2" } +nu-path = { path = "../nu-path", version = "0.96.2" } +nu-parser = { path = "../nu-parser", version = "0.96.2" } +nu-plugin-engine = { path = "../nu-plugin-engine", version = "0.96.2", optional = true } +nu-protocol = { path = "../nu-protocol", version = "0.96.2" } +nu-utils = { path = "../nu-utils", version = "0.96.2" } +nu-color-config = { path = "../nu-color-config", version = "0.96.2" } nu-ansi-term = { workspace = true } reedline = { workspace = true, features = ["bashisms", "sqlite"] } diff --git a/crates/nu-cli/src/commands/history/history_.rs b/crates/nu-cli/src/commands/history/history_.rs index cdf85eea72..c270cef003 100644 --- a/crates/nu-cli/src/commands/history/history_.rs +++ b/crates/nu-cli/src/commands/history/history_.rs @@ -67,7 +67,7 @@ impl Command for History { } else { let history_reader: Option> = match history.file_format { HistoryFileFormat::Sqlite => { - SqliteBackedHistory::with_file(history_path.clone(), None, None) + SqliteBackedHistory::with_file(history_path.clone().into(), None, None) .map(|inner| { let boxed: Box = Box::new(inner); boxed @@ -77,7 +77,7 @@ impl Command for History { HistoryFileFormat::PlainText => FileBackedHistory::with_file( history.max_size as usize, - history_path.clone(), + history_path.clone().into(), ) .map(|inner| { let boxed: Box = Box::new(inner); @@ -156,58 +156,34 @@ fn create_history_record(idx: usize, entry: HistoryItem, long: bool, head: Span) //2. Create a record of either short or long columns and values let item_id_value = Value::int( - match entry.id { - Some(id) => { - let ids = id.to_string(); - match ids.parse::() { - Ok(i) => i, - _ => 0i64, - } - } - None => 0i64, - }, + entry + .id + .and_then(|id| id.to_string().parse::().ok()) + .unwrap_or_default(), head, ); let start_timestamp_value = Value::string( - match entry.start_timestamp { - Some(time) => time.to_string(), - None => "".into(), - }, + entry + .start_timestamp + .map(|time| time.to_string()) + .unwrap_or_default(), head, ); let command_value = Value::string(entry.command_line, head); let session_id_value = Value::int( - match entry.session_id { - Some(sid) => { - let sids = sid.to_string(); - match sids.parse::() { - Ok(i) => i, - _ => 0i64, - } - } - None => 0i64, - }, - head, - ); - let hostname_value = Value::string( - match entry.hostname { - Some(host) => host, - None => "".into(), - }, - head, - ); - let cwd_value = Value::string( - match entry.cwd { - Some(cwd) => cwd, - None => "".into(), - }, + entry + .session_id + .and_then(|id| id.to_string().parse::().ok()) + .unwrap_or_default(), head, ); + let hostname_value = Value::string(entry.hostname.unwrap_or_default(), head); + let cwd_value = Value::string(entry.cwd.unwrap_or_default(), head); let duration_value = Value::duration( - match entry.duration { - Some(d) => d.as_nanos().try_into().unwrap_or(0), - None => 0, - }, + entry + .duration + .and_then(|d| d.as_nanos().try_into().ok()) + .unwrap_or(0), head, ); let exit_status_value = Value::int(entry.exit_status.unwrap_or(0), head); diff --git a/crates/nu-cli/src/commands/keybindings_list.rs b/crates/nu-cli/src/commands/keybindings_list.rs index 350df7b820..abb5909a97 100644 --- a/crates/nu-cli/src/commands/keybindings_list.rs +++ b/crates/nu-cli/src/commands/keybindings_list.rs @@ -61,10 +61,12 @@ impl Command for KeybindingsList { .map(|option| call.has_flag(engine_state, stack, option)) .collect::, ShellError>>()?; + let no_option_specified = presence.iter().all(|present| !*present); + let records = all_options .iter() .zip(presence) - .filter(|(_, present)| *present) + .filter(|(_, present)| no_option_specified || *present) .flat_map(|(option, _)| get_records(option, call.head)) .collect(); diff --git a/crates/nu-cli/src/completions/command_completions.rs b/crates/nu-cli/src/completions/command_completions.rs index e37f8b2576..f594e3d667 100644 --- a/crates/nu-cli/src/completions/command_completions.rs +++ b/crates/nu-cli/src/completions/command_completions.rs @@ -99,10 +99,9 @@ impl CommandCompletion { suggestion: Suggestion { value: String::from_utf8_lossy(&x.0).to_string(), description: x.1, - style: None, - extra: None, span: reedline::Span::new(span.start - offset, span.end - offset), append_whitespace: true, + ..Suggestion::default() }, kind: Some(SuggestionKind::Command(x.2)), }) @@ -118,11 +117,9 @@ impl CommandCompletion { .map(move |x| SemanticSuggestion { suggestion: Suggestion { value: x, - description: None, - style: None, - extra: None, span: reedline::Span::new(span.start - offset, span.end - offset), append_whitespace: true, + ..Suggestion::default() }, // TODO: is there a way to create a test? kind: None, @@ -136,11 +133,9 @@ impl CommandCompletion { results.push(SemanticSuggestion { suggestion: Suggestion { value: format!("^{}", external.suggestion.value), - description: None, - style: None, - extra: None, span: external.suggestion.span, append_whitespace: true, + ..Suggestion::default() }, kind: external.kind, }) diff --git a/crates/nu-cli/src/completions/completer.rs b/crates/nu-cli/src/completions/completer.rs index 78398b4d19..e794354f09 100644 --- a/crates/nu-cli/src/completions/completer.rs +++ b/crates/nu-cli/src/completions/completer.rs @@ -443,14 +443,11 @@ pub fn map_value_completions<'a>( return Some(SemanticSuggestion { suggestion: Suggestion { value: s, - description: None, - style: None, - extra: None, span: reedline::Span { start: span.start - offset, end: span.end - offset, }, - append_whitespace: false, + ..Suggestion::default() }, kind: Some(SuggestionKind::Type(x.get_type())), }); @@ -460,14 +457,11 @@ pub fn map_value_completions<'a>( if let Ok(record) = x.as_record() { let mut suggestion = Suggestion { value: String::from(""), // Initialize with empty string - description: None, - style: None, - extra: None, span: reedline::Span { start: span.start - offset, end: span.end - offset, }, - append_whitespace: false, + ..Suggestion::default() }; // Iterate the cols looking for `value` and `description` diff --git a/crates/nu-cli/src/completions/completion_common.rs b/crates/nu-cli/src/completions/completion_common.rs index b3bca778a9..2b85f6091e 100644 --- a/crates/nu-cli/src/completions/completion_common.rs +++ b/crates/nu-cli/src/completions/completion_common.rs @@ -10,11 +10,9 @@ use nu_protocol::{ levenshtein_distance, Span, }; use nu_utils::get_ls_colors; -use std::path::{ - is_separator, Component, Path, PathBuf, MAIN_SEPARATOR as SEP, MAIN_SEPARATOR_STR, -}; +use std::path::{is_separator, Component, Path, PathBuf, MAIN_SEPARATOR as SEP}; -use super::SortBy; +use super::{MatchAlgorithm, SortBy}; #[derive(Clone, Default)] pub struct PathBuiltFromString { @@ -22,12 +20,21 @@ pub struct PathBuiltFromString { isdir: bool, } -fn complete_rec( +/// Recursively goes through paths that match a given `partial`. +/// built: State struct for a valid matching path built so far. +/// +/// `isdir`: whether the current partial path has a trailing slash. +/// Parsing a path string into a pathbuf loses that bit of information. +/// +/// want_directory: Whether we want only directories as completion matches. +/// Some commands like `cd` can only be run on directories whereas others +/// like `ls` can be run on regular files as well. +pub fn complete_rec( partial: &[&str], built: &PathBuiltFromString, cwd: &Path, options: &CompletionOptions, - dir: bool, + want_directory: bool, isdir: bool, ) -> Vec { let mut completions = vec![]; @@ -37,7 +44,7 @@ fn complete_rec( let mut built = built.clone(); built.parts.push(base.to_string()); built.isdir = true; - return complete_rec(rest, &built, cwd, options, dir, isdir); + return complete_rec(rest, &built, cwd, options, want_directory, isdir); } } @@ -58,7 +65,7 @@ fn complete_rec( built.parts.push(entry_name.clone()); built.isdir = entry_isdir; - if !dir || entry_isdir { + if !want_directory || entry_isdir { entries.push((entry_name, built)); } } @@ -70,12 +77,29 @@ fn complete_rec( match partial.split_first() { Some((base, rest)) => { if matches(base, &entry_name, options) { + // We use `isdir` to confirm that the current component has + // at least one next component or a slash. + // Serves as confirmation to ignore longer completions for + // components in between. if !rest.is_empty() || isdir { - completions.extend(complete_rec(rest, &built, cwd, options, dir, isdir)); + completions.extend(complete_rec( + rest, + &built, + cwd, + options, + want_directory, + isdir, + )); } else { completions.push(built); } } + if entry_name.eq(base) + && matches!(options.match_algorithm, MatchAlgorithm::Prefix) + && isdir + { + break; + } } None => { completions.push(built); @@ -93,16 +117,16 @@ enum OriginalCwd { } impl OriginalCwd { - fn apply(&self, mut p: PathBuiltFromString) -> String { + fn apply(&self, mut p: PathBuiltFromString, path_separator: char) -> String { match self { Self::None => {} Self::Home => p.parts.insert(0, "~".to_string()), Self::Prefix(s) => p.parts.insert(0, s.clone()), }; - let mut ret = p.parts.join(MAIN_SEPARATOR_STR); + let mut ret = p.parts.join(&path_separator.to_string()); if p.isdir { - ret.push(SEP); + ret.push(path_separator); } ret } @@ -133,6 +157,14 @@ pub fn complete_item( ) -> Vec<(nu_protocol::Span, String, Option