Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package watchexec for openSUSE:Factory checked in at 2023-03-22 22:31:54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/watchexec (Old) and /work/SRC/openSUSE:Factory/.watchexec.new.31432 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "watchexec" Wed Mar 22 22:31:54 2023 rev:6 rq:1073835 version:1.22.2 Changes: -------- --- /work/SRC/openSUSE:Factory/watchexec/watchexec.changes 2023-03-21 17:44:12.658600194 +0100 +++ /work/SRC/openSUSE:Factory/.watchexec.new.31432/watchexec.changes 2023-03-22 22:32:43.126820210 +0100 @@ -1,0 +2,15 @@ +Wed Mar 22 13:18:18 UTC 2023 - [email protected] + +- Update to version 1.22.2: + * release: watchexec-cli v1.22.2 (#560) + * Normalise paths to unix on windows for filtering only (#558) + * Disable signals on windows (#559) + * Build manpage just before packaging (#557) + * Fix tests-pass job (#556) + * Update manpage (#555) + * Fix dist-manifest gen (#554) + * Switch away from set-output (#553) + * release: watchexec-cli v1.22.1 (#551) + * release: watchexec v2.3.0 (#550) + +------------------------------------------------------------------- Old: ---- watchexec-1.22.0.obscpio watchexec-1.22.0.tar.xz New: ---- watchexec-1.22.2.obscpio watchexec-1.22.2.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ watchexec.spec ++++++ --- /var/tmp/diff_new_pack.jgfT4p/_old 2023-03-22 22:32:43.786823532 +0100 +++ /var/tmp/diff_new_pack.jgfT4p/_new 2023-03-22 22:32:43.790823552 +0100 @@ -17,7 +17,7 @@ Name: watchexec -Version: 1.22.0 +Version: 1.22.2 Release: 0 Summary: Watches a path and runs a command whenever it detects modifications. License: Apache-2.0 ++++++ _constraints ++++++ --- /var/tmp/diff_new_pack.jgfT4p/_old 2023-03-22 22:32:43.834823774 +0100 +++ /var/tmp/diff_new_pack.jgfT4p/_new 2023-03-22 22:32:43.838823794 +0100 @@ -4,7 +4,7 @@ <size unit="G">4</size> </memory> <disk> - <size unit="G">16</size> + <size unit="G">20</size> </disk> </hardware> </constraints> ++++++ _service ++++++ --- /var/tmp/diff_new_pack.jgfT4p/_old 2023-03-22 22:32:43.862823914 +0100 +++ /var/tmp/diff_new_pack.jgfT4p/_new 2023-03-22 22:32:43.862823914 +0100 @@ -3,7 +3,7 @@ <param name="url">https://github.com/watchexec/watchexec.git</param> <param name="versionformat">@PARENT_TAG@</param> <param name="scm">git</param> - <param name="revision">v1.22.0</param> + <param name="revision">v1.22.2</param> <param name="match-tag">*</param> <param name="versionrewrite-pattern">v(\d+\.\d+\.\d+)</param> <param name="versionrewrite-replacement">\1</param> ++++++ vendor.tar.xz ++++++ /work/SRC/openSUSE:Factory/watchexec/vendor.tar.xz /work/SRC/openSUSE:Factory/.watchexec.new.31432/vendor.tar.xz differ: char 27, line 1 ++++++ watchexec-1.22.0.obscpio -> watchexec-1.22.2.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/.github/workflows/release-cli.yml new/watchexec-1.22.2/.github/workflows/release-cli.yml --- old/watchexec-1.22.0/.github/workflows/release-cli.yml 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/.github/workflows/release-cli.yml 2023-03-22 12:37:49.000000000 +0100 @@ -34,7 +34,7 @@ exit 1 fi - echo "::set-output name=cli_version::$version" + echo "cli_version=$version" >> $GITHUB_OUTPUT - name: Extract release notes id: notes @@ -47,7 +47,7 @@ set -euxo pipefail release_pr=$(head -n1 <<< "${release_commit:-}" | grep -oP '(?<=[(]#)\d+(?=[)])') if [[ -z "$release_pr" ]]; then - echo "::set-output name=notes_json::null" + echo "notes_json=null" >> $GITHUB_OUTPUT exit fi @@ -55,15 +55,13 @@ pr --repo "$GITHUB_REPO" \ view "$release_pr" \ --json body \ - --jq '"::set-output name=notes_json::\((.body | split("### Release notes")[1] // "") | tojson)"' + --jq '"notes_json=\((.body | split("### Release notes")[1] // "") | tojson)"' \ + >> $GITHUB_OUTPUT - name: Make a new announcement post id: announce if: endsWith(steps.version.outputs.cli_version, '.0') - run: echo "::set-output name=announce::Announcements" - # TODO: append patch release notes as comments on minor version announce discussion - # TODO: add link to discussion from patch release notes - # TODO: rename minor version announce discussion to be just CLI vX.Y (remove .0) + run: echo "announce=Announcements" >> $GITHUB_OUTPUT build: strategy: @@ -234,6 +232,12 @@ if: matrix.cross run: cross build --package watchexec-cli --release --locked --target ${{ matrix.target }} + - name: Make manpage + run: cargo run -p watchexec-cli -- --manual > doc/watchexec.1 + + - name: Make completions + run: bin/completions + - name: Package shell: bash run: | @@ -249,7 +253,7 @@ cp "$bin" "target/release/" # workaround for cargo-deb silliness with targets cp "$bin" "$dst/" - cp -r crates/cli/README.md LICENSE completions doc/{logo.svg,watchexec.1{,.html}} "$dst/" + cp -r crates/cli/README.md LICENSE completions doc/{logo.svg,watchexec.1{,.*}} "$dst/" - name: Archive (tar) if: '! startsWith(matrix.name, ''windows-'')' @@ -281,7 +285,7 @@ watchexec-*.rpm watchexec-*.zip - sign: + upload: needs: [build, info] name: Checksum and publish @@ -304,7 +308,7 @@ jq -ncf .github/workflows/dist-manifest.jq \ --arg version "{{ needs.info.outputs.cli_version }}" \ --arg changelog "{{ needs.info.outputs.release_notes }}" \ - --arg files "$(ls watchexec-*)" + --arg files "$(ls watchexec-*)" \ > dist-manifest.json - name: Bulk checksums @@ -315,7 +319,7 @@ - name: File checksums run: | - for file in watchexec-* do + for file in watchexec-*; do b3sum --no-names $file > "$file.b3" sha256sum $file | cut -d ' ' -f1 > "$file.sha256" sha512sum $file | cut -d ' ' -f1 > "$file.sha512" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/.github/workflows/release-pr.ejs new/watchexec-1.22.2/.github/workflows/release-pr.ejs --- old/watchexec-1.22.0/.github/workflows/release-pr.ejs 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/.github/workflows/release-pr.ejs 2023-03-22 12:37:49.000000000 +0100 @@ -42,6 +42,7 @@ _Edit release notes into the section below:_ <!-- do not change or remove this heading --> +<% if (crate.name == "watchexec-cli") { %> ### Release notes _Software development often involves running the same commands over and over. Boring! Watchexec is a simple, standalone tool that watches a path and runs a command whenever it detects modifications. Install it today with [`cargo-binstall watchexec-cli`](https://github.com/cargo-bins/cargo-binstall), from the binaries below, find it [in your favourite package manager](https://github.com/watchexec/watchexec/blob/main/doc/packages.md), or build it from source with `cargo install watchexec-cli`._ @@ -53,4 +54,8 @@ #### Other changes: - +<% } else { %> +### Changelog +- +<% } %> <% } %> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/.github/workflows/release-pr.yml new/watchexec-1.22.2/.github/workflows/release-pr.yml --- old/watchexec-1.22.0/.github/workflows/release-pr.yml 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/.github/workflows/release-pr.yml 2023-03-22 12:37:49.000000000 +0100 @@ -43,7 +43,7 @@ github-token: ${{ secrets.GITHUB_TOKEN }} version: ${{ inputs.version }} crate-path: crates/${{ inputs.crate }} - pr-release-notes: ${{ inputs.crate == 'cli' }} + pr-release-notes: true pr-label: release pr-template-file: .github/workflows/release-pr.ejs env: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/.github/workflows/tests.yml new/watchexec-1.22.2/.github/workflows/tests.yml --- old/watchexec-1.22.0/.github/workflows/tests.yml 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/.github/workflows/tests.yml 2023-03-22 12:37:49.000000000 +0100 @@ -131,4 +131,6 @@ - cross-checks runs-on: ubuntu-latest steps: - - run: echo "Tests pass" + # fail if ANY dependency has failed or been skipped or cancelled + - if: "contains(needs.*.result, 'failure') || contains(needs.*.result, 'skipped') || contains(needs.*.result, 'cancelled')" + run: exit 1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/CITATION.cff new/watchexec-1.22.2/CITATION.cff --- old/watchexec-1.22.0/CITATION.cff 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/CITATION.cff 2023-03-22 12:37:49.000000000 +0100 @@ -3,8 +3,8 @@ If you use this software, please cite it using these metadata. title: "Watchexec: a tool to react to filesystem changes, and a crate ecosystem to power it" -version: "1.22.0" -date-released: 2023-03-18 +version: "1.22.2" +date-released: 2023-03-22 repository-code: https://github.com/watchexec/watchexec license: Apache-2.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/Cargo.lock new/watchexec-1.22.2/Cargo.lock --- old/watchexec-1.22.0/Cargo.lock 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/Cargo.lock 2023-03-22 12:37:49.000000000 +0100 @@ -60,9 +60,9 @@ [[package]] name = "anstream" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1be94522db49757a6f9266e8ac18a59704e3e1c770c2e8173a39f9f8161a163a" +checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f" dependencies = [ "anstyle", "anstyle-parse", @@ -75,9 +75,9 @@ [[package]] name = "anstyle" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba0b55c2201aa802adb684e7963ce2c3191675629e7df899774331e3ac747cf" +checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" [[package]] name = "anstyle-parse" @@ -100,9 +100,9 @@ [[package]] name = "anyhow" -version = "1.0.69" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" +checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" [[package]] name = "arc-swap" @@ -212,13 +212,13 @@ [[package]] name = "async-recursion" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b015a331cc64ebd1774ba119538573603427eaace0a1950c423ab971f903796" +checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.4", ] [[package]] @@ -240,7 +240,7 @@ dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -251,13 +251,13 @@ [[package]] name = "async-trait" -version = "0.1.66" +version = "0.1.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" +checksum = "86ea188f25f0255d8f92797797c97ebf5631fa88178beb1a46fdf5622c9a00e4" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.4", ] [[package]] @@ -286,7 +286,7 @@ dependencies = [ "async-trait", "axum-core", - "bitflags", + "bitflags 1.3.2", "bytes", "futures-util", "http", @@ -351,6 +351,12 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] +name = "bitflags" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487f1e0fcbe47deb8b0574e646def1c903389d95241dd1bbcc6ce4a715dfc0c1" + +[[package]] name = "block" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -389,9 +395,9 @@ [[package]] name = "bstr" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" +checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" dependencies = [ "memchr", "once_cell", @@ -464,11 +470,11 @@ [[package]] name = "clap" -version = "4.1.8" +version = "4.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5" +checksum = "42dfd32784433290c51d92c438bb72ea5063797fc3cc9a21a8c4346bebbb2098" dependencies = [ - "bitflags", + "bitflags 2.0.2", "clap_derive", "clap_lex", "is-terminal", @@ -480,9 +486,9 @@ [[package]] name = "clap_complete" -version = "4.1.4" +version = "4.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501ff0a401473ea1d4c3b125ff95506b62c5bc5768d818634195fbb7c4ad5ff4" +checksum = "37686beaba5ac9f3ab01ee3172f792fc6ffdd685bfb9e63cfef02c0571a4e8e1" dependencies = [ "clap", ] @@ -499,31 +505,31 @@ [[package]] name = "clap_derive" -version = "4.1.8" +version = "4.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bec8e5c9d09e439c4335b1af0abaab56dcf3b94999a936e1bb47b9134288f0" +checksum = "fddf67631444a3a3e3e5ac51c36a5e01335302de677bd78759eaa90ab1f46644" dependencies = [ "heck 0.4.1", "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "clap_lex" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350b9cf31731f9957399229e9b2adc51eeabdfbe9d71d9a0552275fd12710d09" +checksum = "033f6b7a4acb1f358c742aaca805c939ee73b4c6209ae4318ec7aca81c42e646" dependencies = [ "os_str_bytes", ] [[package]] name = "clap_mangen" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0f09a0ca8f0dd8ac92c546b426f466ef19828185c6d504c80c48c9c2768ed9" +checksum = "4237e29de9c6949982ba87d51709204504fb8ed2fd38232fcb1e5bf7d4ba48c8" dependencies = [ "clap", "roff", @@ -759,9 +765,9 @@ [[package]] name = "cxx" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" +checksum = "a9c00419335c41018365ddf7e4d5f1c12ee3659ddcf3e01974650ba1de73d038" dependencies = [ "cc", "cxxbridge-flags", @@ -771,9 +777,9 @@ [[package]] name = "cxx-build" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" +checksum = "fb8307ad413a98fff033c8545ecf133e3257747b3bae935e7602aab8aa92d4ca" dependencies = [ "cc", "codespan-reporting", @@ -781,24 +787,24 @@ "proc-macro2", "quote", "scratch", - "syn", + "syn 2.0.4", ] [[package]] name = "cxxbridge-flags" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" +checksum = "edc52e2eb08915cb12596d29d55f0b5384f00d697a646dbd269b6ecb0fbd9d31" [[package]] name = "cxxbridge-macro" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" +checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.4", ] [[package]] @@ -809,7 +815,7 @@ dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -828,7 +834,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" dependencies = [ - "dirs-sys", + "dirs-sys 0.3.7", +] + +[[package]] +name = "dirs" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dece029acd3353e3a58ac2e3eb3c8d6c35827a892edc6cc4138ef9c33df46ecd" +dependencies = [ + "dirs-sys 0.4.0", ] [[package]] @@ -853,6 +868,17 @@ ] [[package]] +name = "dirs-sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04414300db88f70d74c5ff54e50f9e1d1737d9a5b90f53fcf2e95ca2a9ab554b" +dependencies = [ + "libc", + "redox_users", + "windows-sys 0.45.0", +] + +[[package]] name = "dirs-sys-next" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -906,7 +932,7 @@ dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1062,7 +1088,7 @@ dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1128,7 +1154,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc" dependencies = [ - "bitflags", + "bitflags 1.3.2", "libc", "libgit2-sys", "log", @@ -1260,7 +1286,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "693d4a4ba0531e46fe558459557a5b29fb86c3e4b2666c1c0861d93c7c678331" dependencies = [ - "bitflags", + "bitflags 1.3.2", "bstr", "gix-path", "libc", @@ -1349,7 +1375,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93e43efd776bc543f46f0fd0ca3d920c37af71a764a16f2aebd89765e9ff2993" dependencies = [ - "bitflags", + "bitflags 1.3.2", "bstr", ] @@ -1380,7 +1406,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "546ee7855d5d8731288f05a63c07ab41b59cb406660a825ed3fe89d7223823df" dependencies = [ - "bitflags", + "bitflags 1.3.2", "bstr", "btoi", "filetime", @@ -1565,8 +1591,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8ffa5bf0772f9b01de501c035b6b084cf9b8bb07dec41e3afc6a17336a65f47" dependencies = [ - "bitflags", - "dirs", + "bitflags 1.3.2", + "dirs 4.0.0", "gix-path", "libc", "windows 0.43.0", @@ -1829,16 +1855,16 @@ [[package]] name = "iana-time-zone" -version = "0.1.53" +version = "0.1.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +checksum = "0c17cc76786e99f8d2f055c11159e7f0091c42474dcc3189fbab96072e873e6d" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "winapi", + "windows 0.46.0", ] [[package]] @@ -1918,7 +1944,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" dependencies = [ - "bitflags", + "bitflags 1.3.2", "inotify-sys", "libc", ] @@ -1953,19 +1979,20 @@ [[package]] name = "io-lifetimes" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3" +checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb" dependencies = [ + "hermit-abi 0.3.1", "libc", "windows-sys 0.45.0", ] [[package]] name = "is-terminal" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" +checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes", @@ -2044,7 +2071,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8367585489f01bc55dd27404dcf56b95e6da061a256a666ab23be9ba96a2e587" dependencies = [ - "bitflags", + "bitflags 1.3.2", "libc", ] @@ -2226,7 +2253,7 @@ dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2240,9 +2267,9 @@ [[package]] name = "mime" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "minimal-lexical" @@ -2277,7 +2304,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if", "libc", "memoffset 0.7.1", @@ -2323,7 +2350,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "58ea850aa68a06e48fdb069c0ec44d0d64c8dbffa49bf3b6f7f0a901fdea1ba9" dependencies = [ - "bitflags", + "bitflags 1.3.2", "crossbeam-channel", "filetime", "fsevent-sys", @@ -2453,9 +2480,9 @@ [[package]] name = "os_str_bytes" -version = "6.4.1" +version = "6.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" +checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" dependencies = [ "memchr", ] @@ -2562,7 +2589,7 @@ dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2590,7 +2617,7 @@ checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa" dependencies = [ "autocfg", - "bitflags", + "bitflags 1.3.2", "cfg-if", "concurrent-queue", "libc", @@ -2624,7 +2651,7 @@ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "version_check", ] @@ -2689,7 +2716,7 @@ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2777,7 +2804,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -2793,9 +2820,9 @@ [[package]] name = "regex" -version = "1.7.1" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +checksum = "cce168fea28d3e05f158bda4576cf0c844d5045bc2cc3620fa0292ed5bb5814c" dependencies = [ "aho-corasick", "memchr", @@ -2813,9 +2840,9 @@ [[package]] name = "regex-syntax" -version = "0.6.28" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "roff" @@ -2840,11 +2867,11 @@ [[package]] name = "rustix" -version = "0.36.9" +version = "0.36.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" +checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", "io-lifetimes", "libc", @@ -2893,22 +2920,22 @@ [[package]] name = "serde" -version = "1.0.156" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4" +checksum = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.156" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d" +checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.4", ] [[package]] @@ -2924,13 +2951,13 @@ [[package]] name = "serde_repr" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395627de918015623b32e7669714206363a7fc00382bf477e72c1f7533e8eafc" +checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.4", ] [[package]] @@ -3086,7 +3113,7 @@ "heck 0.3.3", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3129,6 +3156,17 @@ ] [[package]] +name = "syn" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c622ae390c9302e214c31013517c2061ecb2699935882c60a9b37f82f8625ae" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] name = "sync_wrapper" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3193,7 +3231,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da31aef70da0f6352dbcb462683eb4dd2bfad01cf3fc96cf204547b9a839a585" dependencies = [ - "dirs", + "dirs 4.0.0", "fnv", "nom 5.1.2", "phf", @@ -3213,22 +3251,22 @@ [[package]] name = "thiserror" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.4", ] [[package]] @@ -3334,7 +3372,7 @@ dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3473,7 +3511,7 @@ dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3599,9 +3637,9 @@ [[package]] name = "unicode-bidi" -version = "0.3.11" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-bom" @@ -3715,12 +3753,11 @@ [[package]] name = "walkdir" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" dependencies = [ "same-file", - "winapi", "winapi-util", ] @@ -3767,7 +3804,7 @@ "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-shared", ] @@ -3789,7 +3826,7 @@ dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3802,7 +3839,7 @@ [[package]] name = "watchexec" -version = "2.2.0" +version = "2.3.0" dependencies = [ "async-priority-channel", "async-recursion", @@ -3827,7 +3864,7 @@ [[package]] name = "watchexec-cli" -version = "1.22.0" +version = "1.22.2" dependencies = [ "argfile", "bosion", @@ -3838,7 +3875,7 @@ "clap_mangen", "command-group", "console-subscriber", - "dirs", + "dirs 5.0.0", "embed-resource", "futures", "humantime", @@ -3904,7 +3941,7 @@ [[package]] name = "watchexec-filterer-tagged" -version = "0.2.0" +version = "0.3.0" dependencies = [ "futures", "globset", @@ -4005,6 +4042,15 @@ ] [[package]] +name = "windows" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25" +dependencies = [ + "windows-targets", +] + +[[package]] name = "windows-sys" version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4135,9 +4181,9 @@ [[package]] name = "zbus" -version = "3.11.0" +version = "3.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20aae5dd5b051971cd2f49f9f3b860e57b2b495ba5ba254eaec42d34ede57e97" +checksum = "3dc29e76f558b2cb94190e8605ecfe77dd40f5df8c072951714b4b71a97f5848" dependencies = [ "async-broadcast", "async-executor", @@ -4149,7 +4195,7 @@ "async-trait", "byteorder", "derivative", - "dirs", + "dirs 4.0.0", "enumflags2", "event-listener", "futures-core", @@ -4174,15 +4220,15 @@ [[package]] name = "zbus_macros" -version = "3.11.0" +version = "3.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9264b3a1bcf5503d4e0348b6e7efe1da58d4f92a913c15ed9e63b52de85faaa1" +checksum = "62a80fd82c011cd08459eaaf1fd83d3090c1b61e6d5284360074a7475af3a85d" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", "regex", - "syn", + "syn 1.0.109", "zvariant_utils", ] @@ -4220,7 +4266,7 @@ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "zvariant_utils", ] @@ -4232,5 +4278,5 @@ dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/cli/Cargo.toml new/watchexec-1.22.2/crates/cli/Cargo.toml --- old/watchexec-1.22.0/crates/cli/Cargo.toml 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/cli/Cargo.toml 2023-03-22 12:37:49.000000000 +0100 @@ -1,6 +1,6 @@ [package] name = "watchexec-cli" -version = "1.22.0" +version = "1.22.2" authors = ["Félix Saparelli <[email protected]>", "Matt Green <[email protected]>"] license = "Apache-2.0" @@ -25,7 +25,7 @@ clap_complete = "4.1.4" clap_complete_nushell = "0.1.10" clap_mangen = "0.2.9" -dirs = "4.0.0" +dirs = "5.0.0" futures = "0.3.17" humantime = "2.1.0" is-terminal = "0.4.4" @@ -60,7 +60,7 @@ path = "../project-origins" [dependencies.watchexec] -version = "2.2.0" +version = "2.3.0" path = "../lib" [dependencies.watchexec-events] @@ -134,8 +134,10 @@ assets = [ ["../../target/release/watchexec", "usr/bin/watchexec", "755"], ["README.md", "usr/share/doc/watchexec/README", "644"], - ["../../doc/watchexec.1.html", "usr/share/doc/watchexec/watchexec.1.html", "644"], + ["../../doc/watchexec.1.md", "usr/share/doc/watchexec/watchexec.1.md", "644"], ["../../doc/watchexec.1", "usr/share/man/man1/watchexec.1.html", "644"], + ["../../completions/bash", "usr/share/bash-completion/completions/watchexec", "644"], + ["../../completions/fish", "usr/share/fish/completions/watchexec.fish", "644"], ["../../completions/zsh", "usr/share/zsh/site-functions/_watchexec", "644"], ["../../doc/logo.svg", "usr/share/icons/hicolor/scalable/apps/watchexec.svg", "644"], ] @@ -144,8 +146,10 @@ assets = [ { source = "../../target/release/watchexec", dest = "/usr/bin/watchexec", mode = "755" }, { source = "README.md", dest = "/usr/share/doc/watchexec/README", mode = "644", doc = true }, - { source = "../../doc/watchexec.1.html", dest = "/usr/share/doc/watchexec/watchexec.1.html", mode = "644", doc = true }, + { source = "../../doc/watchexec.1.md", dest = "/usr/share/doc/watchexec/watchexec.1.md", mode = "644", doc = true }, { source = "../../doc/watchexec.1", dest = "/usr/share/man/man1/watchexec.1.html", mode = "644" }, + { source = "../../completions/bash", dest = "/usr/share/bash-completion/completions/watchexec", mode = "644" }, + { source = "../../completions/fish", dest = "/usr/share/fish/completions/watchexec.fish", mode = "644" }, { source = "../../completions/zsh", dest = "/usr/share/zsh/site-functions/_watchexec", mode = "644" }, { source = "../../doc/logo.svg", dest = "/usr/share/icons/hicolor/scalable/apps/watchexec.svg", mode = "644" }, # set conf = true for config file when that lands diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/cli/src/args.rs new/watchexec-1.22.2/crates/cli/src/args.rs --- old/watchexec-1.22.0/crates/cli/src/args.rs 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/cli/src/args.rs 2023-03-22 12:37:49.000000000 +0100 @@ -174,6 +174,9 @@ /// controlled by '--stop-signal'. /// /// See the long documentation for '--stop-signal' for syntax. + /// + /// Signals are not supported on Windows at the moment, and will always be overridden to 'kill'. + /// See '--stop-signal' for more on Windows "signals". #[arg( short, long, @@ -214,6 +217,9 @@ /// Takes a unit-less value in seconds, or a time span value such as "5min 20s". /// /// The default is 60 seconds. Set to 0 to immediately force-kill the command. + /// + /// This has no practical effect on Windows as the command is always forcefully terminated; see + /// '--stop-signal' for why. #[arg( long, default_value = "60", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/cli/src/config/runtime.rs new/watchexec-1.22.2/crates/cli/src/config/runtime.rs --- old/watchexec-1.22.0/crates/cli/src/config/runtime.rs 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/cli/src/config/runtime.rs 2023-03-22 12:37:49.000000000 +0100 @@ -169,13 +169,15 @@ let when_idle = start.clone(); let when_running = match on_busy { + OnBusyUpdate::Restart if cfg!(windows) => Outcome::both(Outcome::Stop, start), OnBusyUpdate::Restart => Outcome::both( Outcome::both( Outcome::Signal(stop_signal.unwrap_or(Signal::Terminate)), - Outcome::both(Outcome::Sleep(stop_timeout), Outcome::Stop), + Outcome::wait_timeout(stop_timeout, Outcome::Stop), ), start, ), + OnBusyUpdate::Signal if cfg!(windows) => Outcome::Stop, OnBusyUpdate::Signal => { Outcome::Signal(stop_signal.or(signal).unwrap_or(Signal::Terminate)) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/cli/src/filterer/globset.rs new/watchexec-1.22.2/crates/cli/src/filterer/globset.rs --- old/watchexec-1.22.0/crates/cli/src/filterer/globset.rs 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/cli/src/filterer/globset.rs 2023-03-22 12:37:49.000000000 +0100 @@ -129,6 +129,100 @@ } } - self.inner.check_event(event, priority) + #[cfg(windows)] + { + let normalised = windows_norm::normalise_event_to_unix(event, false); + trace!(event=?normalised, "check against unix-normalised event"); + if !self.inner.check_event(&normalised, priority)? { + return Ok(false); + } + + let prefixed_normalised = windows_norm::normalise_event_to_unix(event, true); + trace!(event=?prefixed_normalised, "check against prefixed unix-normalised event"); + if !self.inner.check_event(&prefixed_normalised, priority)? { + return Ok(false); + } + } + + trace!("check against original event"); + if !self.inner.check_event(event, priority)? { + return Ok(false); + } + + Ok(true) + } +} + +#[cfg(windows)] +mod windows_norm { + use std::{ + ffi::OsString, + path::{Component, Path, PathBuf}, + }; + use watchexec_events::{Event, Tag}; + + pub fn normalise_event_to_unix(event: &Event, with_prefix: bool) -> Event { + let mut path_normalised_event = event.clone(); + for mut tag in &mut path_normalised_event.tags { + if let Tag::Path { ref mut path, .. } = &mut tag { + *path = normalise_path_to_unix(path, with_prefix); + } + } + path_normalised_event + } + + pub fn normalise_path_to_unix(path: &Path, with_prefix: bool) -> PathBuf { + let mut newpath = OsString::with_capacity(path.as_os_str().len()); + let mut skip_root = false; + for component in path.components() { + if matches!(component, Component::Prefix(_)) { + if with_prefix { + newpath.push(component.as_os_str()); + skip_root = true; + } + } else if matches!(component, Component::RootDir) && skip_root { + // skip + } else { + newpath.push("/"); + newpath.push(component.as_os_str()); + } + } + + PathBuf::from(newpath) + } + + #[cfg(test)] + #[test] + fn test_normalise_path_to_unix() { + assert_eq!( + normalise_path_to_unix(Path::new("C:\\Users\\foo\\bar"), false), + PathBuf::from("/Users/foo/bar") + ); + assert_eq!( + normalise_path_to_unix(Path::new("C:\\Users\\foo\\bar"), true), + PathBuf::from("C:/Users/foo/bar") + ); + assert_eq!( + normalise_path_to_unix(Path::new("E:\\_temp\\folder_to_watch\\private"), false), + PathBuf::from("/_temp/folder_to_watch/private") + ); + assert_eq!( + normalise_path_to_unix(Path::new("E:\\_temp\\folder_to_watch\\private"), true), + PathBuf::from("E:/_temp/folder_to_watch/private") + ); + assert_eq!( + normalise_path_to_unix( + Path::new("\\\\?\\E:\\_temp\\folder_to_watch\\public\\.hgignore"), + false + ), + PathBuf::from("/_temp/folder_to_watch/public/.hgignore") + ); + assert_eq!( + normalise_path_to_unix( + Path::new("\\\\?\\E:\\_temp\\folder_to_watch\\public\\.hgignore"), + true + ), + PathBuf::from("\\\\?\\E:/_temp/folder_to_watch/public/.hgignore") + ); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/cli/watchexec.exe.manifest new/watchexec-1.22.2/crates/cli/watchexec.exe.manifest --- old/watchexec-1.22.0/crates/cli/watchexec.exe.manifest 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/cli/watchexec.exe.manifest 2023-03-22 12:37:49.000000000 +0100 @@ -3,7 +3,7 @@ <assemblyIdentity type="win32" name="Watchexec.Cli.watchexec" - version="1.22.0.0" + version="1.22.2.0" /> <trustInfo> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/filterer/globset/Cargo.toml new/watchexec-1.22.2/crates/filterer/globset/Cargo.toml --- old/watchexec-1.22.0/crates/filterer/globset/Cargo.toml 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/filterer/globset/Cargo.toml 2023-03-22 12:37:49.000000000 +0100 @@ -24,7 +24,7 @@ path = "../../ignore-files" [dependencies.watchexec] -version = "2.2.0" +version = "2.3.0" path = "../../lib" [dependencies.watchexec-filterer-ignore] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/filterer/ignore/Cargo.toml new/watchexec-1.22.2/crates/filterer/ignore/Cargo.toml --- old/watchexec-1.22.0/crates/filterer/ignore/Cargo.toml 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/filterer/ignore/Cargo.toml 2023-03-22 12:37:49.000000000 +0100 @@ -24,7 +24,7 @@ path = "../../ignore-files" [dependencies.watchexec] -version = "2.2.0" +version = "2.3.0" path = "../../lib" [dependencies.watchexec-signals] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/filterer/tagged/CHANGELOG.md new/watchexec-1.22.2/crates/filterer/tagged/CHANGELOG.md --- old/watchexec-1.22.0/crates/filterer/tagged/CHANGELOG.md 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/filterer/tagged/CHANGELOG.md 2023-03-22 12:37:49.000000000 +0100 @@ -2,6 +2,8 @@ ## Next (YYYY-MM-DD) +## v0.3.0 (2023-03-18) + - Ditch MSRV policy. The `rust-version` indication will remain, for the minimum estimated Rust version for the code features used in the crate's own code, but dependencies may have already moved on. From now on, only latest stable is assumed and tested for. ([#510](https://github.com/watchexec/watchexec/pull/510)) ## v0.2.0 (2023-01-09) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/filterer/tagged/Cargo.toml new/watchexec-1.22.2/crates/filterer/tagged/Cargo.toml --- old/watchexec-1.22.0/crates/filterer/tagged/Cargo.toml 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/filterer/tagged/Cargo.toml 2023-03-22 12:37:49.000000000 +0100 @@ -1,6 +1,6 @@ [package] name = "watchexec-filterer-tagged" -version = "0.2.0" +version = "0.3.0" authors = ["Félix Saparelli <[email protected]>"] license = "Apache-2.0" @@ -37,7 +37,7 @@ ] [dependencies.watchexec] -version = "2.2.0" +version = "2.3.0" path = "../../lib" [dependencies.watchexec-filterer-ignore] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/lib/CHANGELOG.md new/watchexec-1.22.2/crates/lib/CHANGELOG.md --- old/watchexec-1.22.0/crates/lib/CHANGELOG.md 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/lib/CHANGELOG.md 2023-03-22 12:37:49.000000000 +0100 @@ -2,6 +2,14 @@ ## Next (YYYY-MM-DD) +## v2.3.0 (2023-03-22) + +- New: `Outcome::Race` and `Outcome::race()` ([#548](https://github.com/watchexec/watchexec/pull/548)) +- New: `Outcome::wait_timeout()` ([#548](https://github.com/watchexec/watchexec/pull/548)) +- New: `Outcome::sequence()` ([#548](https://github.com/watchexec/watchexec/pull/548)) +- Fix: `kill_on_drop(true)` set for group commands as well as ungrouped ([#549](https://github.com/watchexec/watchexec/pull/549)) +- Some `debug!`s upgraded to `info!`s, based on experience reading logs ([#547](https://github.com/watchexec/watchexec/pull/547)) + ## v2.2.0 (2023-03-18) - Ditch MSRV policy. The `rust-version` indication will remain, for the minimum estimated Rust version for the code features used in the crate's own code, but dependencies may have already moved on. From now on, only latest stable is assumed and tested for. ([#510](https://github.com/watchexec/watchexec/pull/510)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/lib/Cargo.toml new/watchexec-1.22.2/crates/lib/Cargo.toml --- old/watchexec-1.22.0/crates/lib/Cargo.toml 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/lib/Cargo.toml 2023-03-22 12:37:49.000000000 +0100 @@ -1,6 +1,6 @@ [package] name = "watchexec" -version = "2.2.0" +version = "2.3.0" authors = ["Matt Green <[email protected]>", "Félix Saparelli <[email protected]>"] license = "Apache-2.0" @@ -27,7 +27,7 @@ normalize-path = "0.2.0" [dependencies.command-group] -version = "2.0.1" +version = "2.1.0" features = ["with-tokio"] [dependencies.watchexec-events] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/lib/src/action/outcome.rs new/watchexec-1.22.2/crates/lib/src/action/outcome.rs --- old/watchexec-1.22.0/crates/lib/src/action/outcome.rs 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/lib/src/action/outcome.rs 2023-03-22 12:37:49.000000000 +0100 @@ -56,6 +56,9 @@ /// Do both outcomes in order. Both(Box<Outcome>, Box<Outcome>), + + /// Race both outcomes: run both at once, and when one finishes, cancel the other. + Race(Box<Outcome>, Box<Outcome>), } impl Default for Outcome { @@ -77,10 +80,32 @@ Self::Both(Box::new(one), Box::new(two)) } - /// Convenience function to wait for the subprocess to complete before executing the outcome. + /// Pattern that creates a sequence of outcomes from an iterator. + #[must_use] + pub fn sequence(mut outcomes: impl Iterator<Item = Self>) -> Self { + let mut seq = outcomes.next().unwrap_or(Self::DoNothing); + for outcome in outcomes { + seq = Self::both(seq, outcome); + } + seq + } + + /// Convenience function to create a race of outcomes. + #[must_use] + pub fn race(one: Self, two: Self) -> Self { + Self::Race(Box::new(one), Box::new(two)) + } + + /// Pattern that waits for the subprocess to complete before executing the outcome. #[must_use] pub fn wait(and_then: Self) -> Self { - Self::Both(Box::new(Self::Wait), Box::new(and_then)) + Self::both(Self::Wait, and_then) + } + + /// Pattern that waits for the subprocess to complete with a timeout. + #[must_use] + pub fn wait_timeout(timeout: Duration, and_then: Self) -> Self { + Self::both(Self::race(Self::Sleep(timeout), Self::Wait), and_then) } /// Resolves the outcome given the current state of the subprocess. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/lib/src/action/outcome_worker.rs new/watchexec-1.22.2/crates/lib/src/action/outcome_worker.rs --- old/watchexec-1.22.0/crates/lib/src/action/outcome_worker.rs 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/lib/src/action/outcome_worker.rs 2023-03-22 12:37:49.000000000 +0100 @@ -5,13 +5,16 @@ use async_priority_channel as priority; use clearscreen::ClearScreen; -use futures::Future; +use futures::{ + future::{select, Either}, + Future, +}; use tokio::{ spawn, sync::{mpsc, watch::Receiver}, time::sleep, }; -use tracing::{debug, error, trace, warn}; +use tracing::{debug, error, info, trace, warn}; use crate::{ command::Supervisor, @@ -63,7 +66,7 @@ match this.apply(outcome.clone()).await { Err(err) => { if matches!(err, RuntimeError::Exit) { - debug!(%gen, "propagating graceful exit"); + info!(%gen, "propagating graceful exit"); } else { error!(?err, %gen, "outcome applier errored"); } @@ -191,6 +194,14 @@ notry!(self.apply(*two))?; } + + (_, Outcome::Race(one, two)) => { + if let Either::Left((Err(err), _)) | Either::Right((Err(err), _)) = + select(self.apply(*one), self.apply(*two)).await + { + return Err(err); + } + } } Ok(()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/lib/src/action/worker.rs new/watchexec-1.22.2/crates/lib/src/action/worker.rs --- old/watchexec-1.22.0/crates/lib/src/action/worker.rs 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/lib/src/action/worker.rs 2023-03-22 12:37:49.000000000 +0100 @@ -11,7 +11,7 @@ }, time::timeout, }; -use tracing::{debug, trace}; +use tracing::{debug, info, trace}; use crate::{ error::{CriticalError, RuntimeError}, @@ -123,7 +123,7 @@ #[allow(clippy::iter_with_drain)] let events = Arc::from(set.drain(..).collect::<Vec<_>>().into_boxed_slice()); let action = Action::new(Arc::clone(&events)); - debug!(?action, "action constructed"); + info!(?action, "action constructed"); debug!("running action handler"); let action_handler = { @@ -143,10 +143,10 @@ } let outcome = outcome.get().cloned().unwrap_or_default(); - debug!(?outcome, "handler finished"); + debug!(?outcome, "action handler finished"); let outcome = outcome.resolve(process.is_running().await); - debug!(?outcome, "outcome resolved"); + info!(?outcome, "outcome resolved"); OutcomeWorker::spawn( outcome, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/lib/src/command/supervisor.rs new/watchexec-1.22.2/crates/lib/src/command/supervisor.rs --- old/watchexec-1.22.0/crates/lib/src/command/supervisor.rs 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/lib/src/command/supervisor.rs 2023-03-22 12:37:49.000000000 +0100 @@ -9,7 +9,7 @@ watch, }, }; -use tracing::{debug, debug_span, error, trace, Span}; +use tracing::{debug, debug_span, error, info, trace, Span}; use watchexec_signals::Signal; use crate::{ @@ -280,7 +280,6 @@ let (pre_spawn, spawnable) = span.in_scope::<_, Result<_, RuntimeError>>(|| { debug!(%grouped, ?command, "preparing command"); let mut spawnable = command.to_spawnable()?; - spawnable.kill_on_drop(true); // Required from Rust 1.66: // https://github.com/rust-lang/rust/pull/101077 @@ -320,24 +319,30 @@ .map_err(|_| RuntimeError::HandlerLockHeld("pre-spawn"))? .into_inner(); - debug!(command=?spawnable, "spawning command"); + info!(command=?spawnable, "spawning command"); let (proc, id) = if grouped { let proc = spawnable - .group_spawn() + .group() + .kill_on_drop(true) + .spawn() .map_err(|err| RuntimeError::IoError { about: "spawning process group", err, })?; let id = proc.id().ok_or(RuntimeError::ProcessDeadOnArrival)?; - debug!(pgid=%id, "process group spawned"); + info!(pgid=%id, "process group spawned"); (Process::Grouped(proc), id) } else { - let proc = spawnable.spawn().map_err(|err| RuntimeError::IoError { - about: "spawning process (ungrouped)", - err, - })?; + let proc = + spawnable + .kill_on_drop(true) + .spawn() + .map_err(|err| RuntimeError::IoError { + about: "spawning process (ungrouped)", + err, + })?; let id = proc.id().ok_or(RuntimeError::ProcessDeadOnArrival)?; - debug!(pid=%id, "process spawned"); + info!(pid=%id, "process spawned"); (Process::Ungrouped(proc), id) }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/doc/watchexec.1 new/watchexec-1.22.2/doc/watchexec.1 --- old/watchexec-1.22.0/doc/watchexec.1 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/doc/watchexec.1 2023-03-22 12:37:49.000000000 +0100 @@ -1,6 +1,6 @@ .ie \n(.g .ds Aq \(aq .el .ds Aq ' -.TH watchexec 1 "watchexec 1.22.0" +.TH watchexec 1 "watchexec 1.22.2" .SH NAME watchexec \- Execute commands when watched files change .SH SYNOPSIS @@ -71,6 +71,8 @@ Specify a signal to send to the process when it\*(Aqs still running. This implies \*(Aq\-\-on\-busy\-update=signal\*(Aq; otherwise the signal used when that mode is \*(Aqrestart\*(Aq is controlled by \*(Aq\-\-stop\-signal\*(Aq. See the long documentation for \*(Aq\-\-stop\-signal\*(Aq for syntax. + +Signals are not supported on Windows at the moment, and will always be overridden to \*(Aqkill\*(Aq. See \*(Aq\-\-stop\-signal\*(Aq for more on Windows "signals". .TP \fB\-\-stop\-signal\fR=\fISIGNAL\fR Signal to send to stop the command @@ -91,6 +93,8 @@ Takes a unit\-less value in seconds, or a time span value such as "5min 20s". The default is 60 seconds. Set to 0 to immediately force\-kill the command. + +This has no practical effect on Windows as the command is always forcefully terminated; see \*(Aq\-\-stop\-signal\*(Aq for why. .TP \fB\-\-debounce\fR=\fITIMEOUT\fR Time to wait for new events before taking action @@ -468,6 +472,6 @@ .SH EXTRA Use @argfile as first argument to load arguments from the file \*(Aqargfile\*(Aq (one argument per line) which will be inserted in place of the @argfile (further arguments on the CLI will override or add onto those in the file). .SH VERSION -v1.22.0 +v1.22.2 .SH AUTHORS Félix Saparelli <[email protected]>, Matt Green <[email protected]> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/doc/watchexec.1.md new/watchexec-1.22.2/doc/watchexec.1.md --- old/watchexec-1.22.0/doc/watchexec.1.md 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/doc/watchexec.1.md 2023-03-22 12:37:49.000000000 +0100 @@ -113,6 +113,9 @@ See the long documentation for \--stop-signal for syntax. +Signals are not supported on Windows at the moment, and will always be +overridden to kill. See \--stop-signal for more on Windows \"signals\". + **\--stop-signal**=*SIGNAL* : Signal to send to stop the command @@ -149,6 +152,9 @@ The default is 60 seconds. Set to 0 to immediately force-kill the command. +This has no practical effect on Windows as the command is always +forcefully terminated; see \--stop-signal for why. + **\--debounce**=*TIMEOUT* : Time to wait for new events before taking action @@ -667,7 +673,7 @@ # VERSION -v1.22.0 +v1.22.2 # AUTHORS Binary files old/watchexec-1.22.0/doc/watchexec.1.pdf and new/watchexec-1.22.2/doc/watchexec.1.pdf differ ++++++ watchexec-1.22.0.tar.xz -> watchexec-1.22.2.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/.github/workflows/release-cli.yml new/watchexec-1.22.2/.github/workflows/release-cli.yml --- old/watchexec-1.22.0/.github/workflows/release-cli.yml 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/.github/workflows/release-cli.yml 2023-03-22 12:37:49.000000000 +0100 @@ -34,7 +34,7 @@ exit 1 fi - echo "::set-output name=cli_version::$version" + echo "cli_version=$version" >> $GITHUB_OUTPUT - name: Extract release notes id: notes @@ -47,7 +47,7 @@ set -euxo pipefail release_pr=$(head -n1 <<< "${release_commit:-}" | grep -oP '(?<=[(]#)\d+(?=[)])') if [[ -z "$release_pr" ]]; then - echo "::set-output name=notes_json::null" + echo "notes_json=null" >> $GITHUB_OUTPUT exit fi @@ -55,15 +55,13 @@ pr --repo "$GITHUB_REPO" \ view "$release_pr" \ --json body \ - --jq '"::set-output name=notes_json::\((.body | split("### Release notes")[1] // "") | tojson)"' + --jq '"notes_json=\((.body | split("### Release notes")[1] // "") | tojson)"' \ + >> $GITHUB_OUTPUT - name: Make a new announcement post id: announce if: endsWith(steps.version.outputs.cli_version, '.0') - run: echo "::set-output name=announce::Announcements" - # TODO: append patch release notes as comments on minor version announce discussion - # TODO: add link to discussion from patch release notes - # TODO: rename minor version announce discussion to be just CLI vX.Y (remove .0) + run: echo "announce=Announcements" >> $GITHUB_OUTPUT build: strategy: @@ -234,6 +232,12 @@ if: matrix.cross run: cross build --package watchexec-cli --release --locked --target ${{ matrix.target }} + - name: Make manpage + run: cargo run -p watchexec-cli -- --manual > doc/watchexec.1 + + - name: Make completions + run: bin/completions + - name: Package shell: bash run: | @@ -249,7 +253,7 @@ cp "$bin" "target/release/" # workaround for cargo-deb silliness with targets cp "$bin" "$dst/" - cp -r crates/cli/README.md LICENSE completions doc/{logo.svg,watchexec.1{,.html}} "$dst/" + cp -r crates/cli/README.md LICENSE completions doc/{logo.svg,watchexec.1{,.*}} "$dst/" - name: Archive (tar) if: '! startsWith(matrix.name, ''windows-'')' @@ -281,7 +285,7 @@ watchexec-*.rpm watchexec-*.zip - sign: + upload: needs: [build, info] name: Checksum and publish @@ -304,7 +308,7 @@ jq -ncf .github/workflows/dist-manifest.jq \ --arg version "{{ needs.info.outputs.cli_version }}" \ --arg changelog "{{ needs.info.outputs.release_notes }}" \ - --arg files "$(ls watchexec-*)" + --arg files "$(ls watchexec-*)" \ > dist-manifest.json - name: Bulk checksums @@ -315,7 +319,7 @@ - name: File checksums run: | - for file in watchexec-* do + for file in watchexec-*; do b3sum --no-names $file > "$file.b3" sha256sum $file | cut -d ' ' -f1 > "$file.sha256" sha512sum $file | cut -d ' ' -f1 > "$file.sha512" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/.github/workflows/release-pr.ejs new/watchexec-1.22.2/.github/workflows/release-pr.ejs --- old/watchexec-1.22.0/.github/workflows/release-pr.ejs 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/.github/workflows/release-pr.ejs 2023-03-22 12:37:49.000000000 +0100 @@ -42,6 +42,7 @@ _Edit release notes into the section below:_ <!-- do not change or remove this heading --> +<% if (crate.name == "watchexec-cli") { %> ### Release notes _Software development often involves running the same commands over and over. Boring! Watchexec is a simple, standalone tool that watches a path and runs a command whenever it detects modifications. Install it today with [`cargo-binstall watchexec-cli`](https://github.com/cargo-bins/cargo-binstall), from the binaries below, find it [in your favourite package manager](https://github.com/watchexec/watchexec/blob/main/doc/packages.md), or build it from source with `cargo install watchexec-cli`._ @@ -53,4 +54,8 @@ #### Other changes: - +<% } else { %> +### Changelog +- +<% } %> <% } %> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/.github/workflows/release-pr.yml new/watchexec-1.22.2/.github/workflows/release-pr.yml --- old/watchexec-1.22.0/.github/workflows/release-pr.yml 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/.github/workflows/release-pr.yml 2023-03-22 12:37:49.000000000 +0100 @@ -43,7 +43,7 @@ github-token: ${{ secrets.GITHUB_TOKEN }} version: ${{ inputs.version }} crate-path: crates/${{ inputs.crate }} - pr-release-notes: ${{ inputs.crate == 'cli' }} + pr-release-notes: true pr-label: release pr-template-file: .github/workflows/release-pr.ejs env: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/.github/workflows/tests.yml new/watchexec-1.22.2/.github/workflows/tests.yml --- old/watchexec-1.22.0/.github/workflows/tests.yml 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/.github/workflows/tests.yml 2023-03-22 12:37:49.000000000 +0100 @@ -131,4 +131,6 @@ - cross-checks runs-on: ubuntu-latest steps: - - run: echo "Tests pass" + # fail if ANY dependency has failed or been skipped or cancelled + - if: "contains(needs.*.result, 'failure') || contains(needs.*.result, 'skipped') || contains(needs.*.result, 'cancelled')" + run: exit 1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/CITATION.cff new/watchexec-1.22.2/CITATION.cff --- old/watchexec-1.22.0/CITATION.cff 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/CITATION.cff 2023-03-22 12:37:49.000000000 +0100 @@ -3,8 +3,8 @@ If you use this software, please cite it using these metadata. title: "Watchexec: a tool to react to filesystem changes, and a crate ecosystem to power it" -version: "1.22.0" -date-released: 2023-03-18 +version: "1.22.2" +date-released: 2023-03-22 repository-code: https://github.com/watchexec/watchexec license: Apache-2.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/Cargo.lock new/watchexec-1.22.2/Cargo.lock --- old/watchexec-1.22.0/Cargo.lock 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/Cargo.lock 2023-03-22 12:37:49.000000000 +0100 @@ -60,9 +60,9 @@ [[package]] name = "anstream" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1be94522db49757a6f9266e8ac18a59704e3e1c770c2e8173a39f9f8161a163a" +checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f" dependencies = [ "anstyle", "anstyle-parse", @@ -75,9 +75,9 @@ [[package]] name = "anstyle" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba0b55c2201aa802adb684e7963ce2c3191675629e7df899774331e3ac747cf" +checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" [[package]] name = "anstyle-parse" @@ -100,9 +100,9 @@ [[package]] name = "anyhow" -version = "1.0.69" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" +checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" [[package]] name = "arc-swap" @@ -212,13 +212,13 @@ [[package]] name = "async-recursion" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b015a331cc64ebd1774ba119538573603427eaace0a1950c423ab971f903796" +checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.4", ] [[package]] @@ -240,7 +240,7 @@ dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -251,13 +251,13 @@ [[package]] name = "async-trait" -version = "0.1.66" +version = "0.1.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" +checksum = "86ea188f25f0255d8f92797797c97ebf5631fa88178beb1a46fdf5622c9a00e4" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.4", ] [[package]] @@ -286,7 +286,7 @@ dependencies = [ "async-trait", "axum-core", - "bitflags", + "bitflags 1.3.2", "bytes", "futures-util", "http", @@ -351,6 +351,12 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] +name = "bitflags" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487f1e0fcbe47deb8b0574e646def1c903389d95241dd1bbcc6ce4a715dfc0c1" + +[[package]] name = "block" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -389,9 +395,9 @@ [[package]] name = "bstr" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" +checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" dependencies = [ "memchr", "once_cell", @@ -464,11 +470,11 @@ [[package]] name = "clap" -version = "4.1.8" +version = "4.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5" +checksum = "42dfd32784433290c51d92c438bb72ea5063797fc3cc9a21a8c4346bebbb2098" dependencies = [ - "bitflags", + "bitflags 2.0.2", "clap_derive", "clap_lex", "is-terminal", @@ -480,9 +486,9 @@ [[package]] name = "clap_complete" -version = "4.1.4" +version = "4.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501ff0a401473ea1d4c3b125ff95506b62c5bc5768d818634195fbb7c4ad5ff4" +checksum = "37686beaba5ac9f3ab01ee3172f792fc6ffdd685bfb9e63cfef02c0571a4e8e1" dependencies = [ "clap", ] @@ -499,31 +505,31 @@ [[package]] name = "clap_derive" -version = "4.1.8" +version = "4.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bec8e5c9d09e439c4335b1af0abaab56dcf3b94999a936e1bb47b9134288f0" +checksum = "fddf67631444a3a3e3e5ac51c36a5e01335302de677bd78759eaa90ab1f46644" dependencies = [ "heck 0.4.1", "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "clap_lex" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350b9cf31731f9957399229e9b2adc51eeabdfbe9d71d9a0552275fd12710d09" +checksum = "033f6b7a4acb1f358c742aaca805c939ee73b4c6209ae4318ec7aca81c42e646" dependencies = [ "os_str_bytes", ] [[package]] name = "clap_mangen" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0f09a0ca8f0dd8ac92c546b426f466ef19828185c6d504c80c48c9c2768ed9" +checksum = "4237e29de9c6949982ba87d51709204504fb8ed2fd38232fcb1e5bf7d4ba48c8" dependencies = [ "clap", "roff", @@ -759,9 +765,9 @@ [[package]] name = "cxx" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" +checksum = "a9c00419335c41018365ddf7e4d5f1c12ee3659ddcf3e01974650ba1de73d038" dependencies = [ "cc", "cxxbridge-flags", @@ -771,9 +777,9 @@ [[package]] name = "cxx-build" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" +checksum = "fb8307ad413a98fff033c8545ecf133e3257747b3bae935e7602aab8aa92d4ca" dependencies = [ "cc", "codespan-reporting", @@ -781,24 +787,24 @@ "proc-macro2", "quote", "scratch", - "syn", + "syn 2.0.4", ] [[package]] name = "cxxbridge-flags" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" +checksum = "edc52e2eb08915cb12596d29d55f0b5384f00d697a646dbd269b6ecb0fbd9d31" [[package]] name = "cxxbridge-macro" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" +checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.4", ] [[package]] @@ -809,7 +815,7 @@ dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -828,7 +834,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" dependencies = [ - "dirs-sys", + "dirs-sys 0.3.7", +] + +[[package]] +name = "dirs" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dece029acd3353e3a58ac2e3eb3c8d6c35827a892edc6cc4138ef9c33df46ecd" +dependencies = [ + "dirs-sys 0.4.0", ] [[package]] @@ -853,6 +868,17 @@ ] [[package]] +name = "dirs-sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04414300db88f70d74c5ff54e50f9e1d1737d9a5b90f53fcf2e95ca2a9ab554b" +dependencies = [ + "libc", + "redox_users", + "windows-sys 0.45.0", +] + +[[package]] name = "dirs-sys-next" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -906,7 +932,7 @@ dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1062,7 +1088,7 @@ dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1128,7 +1154,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc" dependencies = [ - "bitflags", + "bitflags 1.3.2", "libc", "libgit2-sys", "log", @@ -1260,7 +1286,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "693d4a4ba0531e46fe558459557a5b29fb86c3e4b2666c1c0861d93c7c678331" dependencies = [ - "bitflags", + "bitflags 1.3.2", "bstr", "gix-path", "libc", @@ -1349,7 +1375,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93e43efd776bc543f46f0fd0ca3d920c37af71a764a16f2aebd89765e9ff2993" dependencies = [ - "bitflags", + "bitflags 1.3.2", "bstr", ] @@ -1380,7 +1406,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "546ee7855d5d8731288f05a63c07ab41b59cb406660a825ed3fe89d7223823df" dependencies = [ - "bitflags", + "bitflags 1.3.2", "bstr", "btoi", "filetime", @@ -1565,8 +1591,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8ffa5bf0772f9b01de501c035b6b084cf9b8bb07dec41e3afc6a17336a65f47" dependencies = [ - "bitflags", - "dirs", + "bitflags 1.3.2", + "dirs 4.0.0", "gix-path", "libc", "windows 0.43.0", @@ -1829,16 +1855,16 @@ [[package]] name = "iana-time-zone" -version = "0.1.53" +version = "0.1.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +checksum = "0c17cc76786e99f8d2f055c11159e7f0091c42474dcc3189fbab96072e873e6d" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "winapi", + "windows 0.46.0", ] [[package]] @@ -1918,7 +1944,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" dependencies = [ - "bitflags", + "bitflags 1.3.2", "inotify-sys", "libc", ] @@ -1953,19 +1979,20 @@ [[package]] name = "io-lifetimes" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3" +checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb" dependencies = [ + "hermit-abi 0.3.1", "libc", "windows-sys 0.45.0", ] [[package]] name = "is-terminal" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" +checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes", @@ -2044,7 +2071,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8367585489f01bc55dd27404dcf56b95e6da061a256a666ab23be9ba96a2e587" dependencies = [ - "bitflags", + "bitflags 1.3.2", "libc", ] @@ -2226,7 +2253,7 @@ dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2240,9 +2267,9 @@ [[package]] name = "mime" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "minimal-lexical" @@ -2277,7 +2304,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if", "libc", "memoffset 0.7.1", @@ -2323,7 +2350,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "58ea850aa68a06e48fdb069c0ec44d0d64c8dbffa49bf3b6f7f0a901fdea1ba9" dependencies = [ - "bitflags", + "bitflags 1.3.2", "crossbeam-channel", "filetime", "fsevent-sys", @@ -2453,9 +2480,9 @@ [[package]] name = "os_str_bytes" -version = "6.4.1" +version = "6.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" +checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" dependencies = [ "memchr", ] @@ -2562,7 +2589,7 @@ dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2590,7 +2617,7 @@ checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa" dependencies = [ "autocfg", - "bitflags", + "bitflags 1.3.2", "cfg-if", "concurrent-queue", "libc", @@ -2624,7 +2651,7 @@ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "version_check", ] @@ -2689,7 +2716,7 @@ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2777,7 +2804,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -2793,9 +2820,9 @@ [[package]] name = "regex" -version = "1.7.1" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +checksum = "cce168fea28d3e05f158bda4576cf0c844d5045bc2cc3620fa0292ed5bb5814c" dependencies = [ "aho-corasick", "memchr", @@ -2813,9 +2840,9 @@ [[package]] name = "regex-syntax" -version = "0.6.28" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "roff" @@ -2840,11 +2867,11 @@ [[package]] name = "rustix" -version = "0.36.9" +version = "0.36.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" +checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", "io-lifetimes", "libc", @@ -2893,22 +2920,22 @@ [[package]] name = "serde" -version = "1.0.156" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4" +checksum = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.156" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d" +checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.4", ] [[package]] @@ -2924,13 +2951,13 @@ [[package]] name = "serde_repr" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395627de918015623b32e7669714206363a7fc00382bf477e72c1f7533e8eafc" +checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.4", ] [[package]] @@ -3086,7 +3113,7 @@ "heck 0.3.3", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3129,6 +3156,17 @@ ] [[package]] +name = "syn" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c622ae390c9302e214c31013517c2061ecb2699935882c60a9b37f82f8625ae" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] name = "sync_wrapper" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3193,7 +3231,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da31aef70da0f6352dbcb462683eb4dd2bfad01cf3fc96cf204547b9a839a585" dependencies = [ - "dirs", + "dirs 4.0.0", "fnv", "nom 5.1.2", "phf", @@ -3213,22 +3251,22 @@ [[package]] name = "thiserror" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.4", ] [[package]] @@ -3334,7 +3372,7 @@ dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3473,7 +3511,7 @@ dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3599,9 +3637,9 @@ [[package]] name = "unicode-bidi" -version = "0.3.11" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-bom" @@ -3715,12 +3753,11 @@ [[package]] name = "walkdir" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" dependencies = [ "same-file", - "winapi", "winapi-util", ] @@ -3767,7 +3804,7 @@ "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-shared", ] @@ -3789,7 +3826,7 @@ dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3802,7 +3839,7 @@ [[package]] name = "watchexec" -version = "2.2.0" +version = "2.3.0" dependencies = [ "async-priority-channel", "async-recursion", @@ -3827,7 +3864,7 @@ [[package]] name = "watchexec-cli" -version = "1.22.0" +version = "1.22.2" dependencies = [ "argfile", "bosion", @@ -3838,7 +3875,7 @@ "clap_mangen", "command-group", "console-subscriber", - "dirs", + "dirs 5.0.0", "embed-resource", "futures", "humantime", @@ -3904,7 +3941,7 @@ [[package]] name = "watchexec-filterer-tagged" -version = "0.2.0" +version = "0.3.0" dependencies = [ "futures", "globset", @@ -4005,6 +4042,15 @@ ] [[package]] +name = "windows" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25" +dependencies = [ + "windows-targets", +] + +[[package]] name = "windows-sys" version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4135,9 +4181,9 @@ [[package]] name = "zbus" -version = "3.11.0" +version = "3.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20aae5dd5b051971cd2f49f9f3b860e57b2b495ba5ba254eaec42d34ede57e97" +checksum = "3dc29e76f558b2cb94190e8605ecfe77dd40f5df8c072951714b4b71a97f5848" dependencies = [ "async-broadcast", "async-executor", @@ -4149,7 +4195,7 @@ "async-trait", "byteorder", "derivative", - "dirs", + "dirs 4.0.0", "enumflags2", "event-listener", "futures-core", @@ -4174,15 +4220,15 @@ [[package]] name = "zbus_macros" -version = "3.11.0" +version = "3.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9264b3a1bcf5503d4e0348b6e7efe1da58d4f92a913c15ed9e63b52de85faaa1" +checksum = "62a80fd82c011cd08459eaaf1fd83d3090c1b61e6d5284360074a7475af3a85d" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", "regex", - "syn", + "syn 1.0.109", "zvariant_utils", ] @@ -4220,7 +4266,7 @@ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "zvariant_utils", ] @@ -4232,5 +4278,5 @@ dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/cli/Cargo.toml new/watchexec-1.22.2/crates/cli/Cargo.toml --- old/watchexec-1.22.0/crates/cli/Cargo.toml 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/cli/Cargo.toml 2023-03-22 12:37:49.000000000 +0100 @@ -1,6 +1,6 @@ [package] name = "watchexec-cli" -version = "1.22.0" +version = "1.22.2" authors = ["Félix Saparelli <[email protected]>", "Matt Green <[email protected]>"] license = "Apache-2.0" @@ -25,7 +25,7 @@ clap_complete = "4.1.4" clap_complete_nushell = "0.1.10" clap_mangen = "0.2.9" -dirs = "4.0.0" +dirs = "5.0.0" futures = "0.3.17" humantime = "2.1.0" is-terminal = "0.4.4" @@ -60,7 +60,7 @@ path = "../project-origins" [dependencies.watchexec] -version = "2.2.0" +version = "2.3.0" path = "../lib" [dependencies.watchexec-events] @@ -134,8 +134,10 @@ assets = [ ["../../target/release/watchexec", "usr/bin/watchexec", "755"], ["README.md", "usr/share/doc/watchexec/README", "644"], - ["../../doc/watchexec.1.html", "usr/share/doc/watchexec/watchexec.1.html", "644"], + ["../../doc/watchexec.1.md", "usr/share/doc/watchexec/watchexec.1.md", "644"], ["../../doc/watchexec.1", "usr/share/man/man1/watchexec.1.html", "644"], + ["../../completions/bash", "usr/share/bash-completion/completions/watchexec", "644"], + ["../../completions/fish", "usr/share/fish/completions/watchexec.fish", "644"], ["../../completions/zsh", "usr/share/zsh/site-functions/_watchexec", "644"], ["../../doc/logo.svg", "usr/share/icons/hicolor/scalable/apps/watchexec.svg", "644"], ] @@ -144,8 +146,10 @@ assets = [ { source = "../../target/release/watchexec", dest = "/usr/bin/watchexec", mode = "755" }, { source = "README.md", dest = "/usr/share/doc/watchexec/README", mode = "644", doc = true }, - { source = "../../doc/watchexec.1.html", dest = "/usr/share/doc/watchexec/watchexec.1.html", mode = "644", doc = true }, + { source = "../../doc/watchexec.1.md", dest = "/usr/share/doc/watchexec/watchexec.1.md", mode = "644", doc = true }, { source = "../../doc/watchexec.1", dest = "/usr/share/man/man1/watchexec.1.html", mode = "644" }, + { source = "../../completions/bash", dest = "/usr/share/bash-completion/completions/watchexec", mode = "644" }, + { source = "../../completions/fish", dest = "/usr/share/fish/completions/watchexec.fish", mode = "644" }, { source = "../../completions/zsh", dest = "/usr/share/zsh/site-functions/_watchexec", mode = "644" }, { source = "../../doc/logo.svg", dest = "/usr/share/icons/hicolor/scalable/apps/watchexec.svg", mode = "644" }, # set conf = true for config file when that lands diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/cli/src/args.rs new/watchexec-1.22.2/crates/cli/src/args.rs --- old/watchexec-1.22.0/crates/cli/src/args.rs 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/cli/src/args.rs 2023-03-22 12:37:49.000000000 +0100 @@ -174,6 +174,9 @@ /// controlled by '--stop-signal'. /// /// See the long documentation for '--stop-signal' for syntax. + /// + /// Signals are not supported on Windows at the moment, and will always be overridden to 'kill'. + /// See '--stop-signal' for more on Windows "signals". #[arg( short, long, @@ -214,6 +217,9 @@ /// Takes a unit-less value in seconds, or a time span value such as "5min 20s". /// /// The default is 60 seconds. Set to 0 to immediately force-kill the command. + /// + /// This has no practical effect on Windows as the command is always forcefully terminated; see + /// '--stop-signal' for why. #[arg( long, default_value = "60", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/cli/src/config/runtime.rs new/watchexec-1.22.2/crates/cli/src/config/runtime.rs --- old/watchexec-1.22.0/crates/cli/src/config/runtime.rs 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/cli/src/config/runtime.rs 2023-03-22 12:37:49.000000000 +0100 @@ -169,13 +169,15 @@ let when_idle = start.clone(); let when_running = match on_busy { + OnBusyUpdate::Restart if cfg!(windows) => Outcome::both(Outcome::Stop, start), OnBusyUpdate::Restart => Outcome::both( Outcome::both( Outcome::Signal(stop_signal.unwrap_or(Signal::Terminate)), - Outcome::both(Outcome::Sleep(stop_timeout), Outcome::Stop), + Outcome::wait_timeout(stop_timeout, Outcome::Stop), ), start, ), + OnBusyUpdate::Signal if cfg!(windows) => Outcome::Stop, OnBusyUpdate::Signal => { Outcome::Signal(stop_signal.or(signal).unwrap_or(Signal::Terminate)) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/cli/src/filterer/globset.rs new/watchexec-1.22.2/crates/cli/src/filterer/globset.rs --- old/watchexec-1.22.0/crates/cli/src/filterer/globset.rs 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/cli/src/filterer/globset.rs 2023-03-22 12:37:49.000000000 +0100 @@ -129,6 +129,100 @@ } } - self.inner.check_event(event, priority) + #[cfg(windows)] + { + let normalised = windows_norm::normalise_event_to_unix(event, false); + trace!(event=?normalised, "check against unix-normalised event"); + if !self.inner.check_event(&normalised, priority)? { + return Ok(false); + } + + let prefixed_normalised = windows_norm::normalise_event_to_unix(event, true); + trace!(event=?prefixed_normalised, "check against prefixed unix-normalised event"); + if !self.inner.check_event(&prefixed_normalised, priority)? { + return Ok(false); + } + } + + trace!("check against original event"); + if !self.inner.check_event(event, priority)? { + return Ok(false); + } + + Ok(true) + } +} + +#[cfg(windows)] +mod windows_norm { + use std::{ + ffi::OsString, + path::{Component, Path, PathBuf}, + }; + use watchexec_events::{Event, Tag}; + + pub fn normalise_event_to_unix(event: &Event, with_prefix: bool) -> Event { + let mut path_normalised_event = event.clone(); + for mut tag in &mut path_normalised_event.tags { + if let Tag::Path { ref mut path, .. } = &mut tag { + *path = normalise_path_to_unix(path, with_prefix); + } + } + path_normalised_event + } + + pub fn normalise_path_to_unix(path: &Path, with_prefix: bool) -> PathBuf { + let mut newpath = OsString::with_capacity(path.as_os_str().len()); + let mut skip_root = false; + for component in path.components() { + if matches!(component, Component::Prefix(_)) { + if with_prefix { + newpath.push(component.as_os_str()); + skip_root = true; + } + } else if matches!(component, Component::RootDir) && skip_root { + // skip + } else { + newpath.push("/"); + newpath.push(component.as_os_str()); + } + } + + PathBuf::from(newpath) + } + + #[cfg(test)] + #[test] + fn test_normalise_path_to_unix() { + assert_eq!( + normalise_path_to_unix(Path::new("C:\\Users\\foo\\bar"), false), + PathBuf::from("/Users/foo/bar") + ); + assert_eq!( + normalise_path_to_unix(Path::new("C:\\Users\\foo\\bar"), true), + PathBuf::from("C:/Users/foo/bar") + ); + assert_eq!( + normalise_path_to_unix(Path::new("E:\\_temp\\folder_to_watch\\private"), false), + PathBuf::from("/_temp/folder_to_watch/private") + ); + assert_eq!( + normalise_path_to_unix(Path::new("E:\\_temp\\folder_to_watch\\private"), true), + PathBuf::from("E:/_temp/folder_to_watch/private") + ); + assert_eq!( + normalise_path_to_unix( + Path::new("\\\\?\\E:\\_temp\\folder_to_watch\\public\\.hgignore"), + false + ), + PathBuf::from("/_temp/folder_to_watch/public/.hgignore") + ); + assert_eq!( + normalise_path_to_unix( + Path::new("\\\\?\\E:\\_temp\\folder_to_watch\\public\\.hgignore"), + true + ), + PathBuf::from("\\\\?\\E:/_temp/folder_to_watch/public/.hgignore") + ); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/cli/watchexec.exe.manifest new/watchexec-1.22.2/crates/cli/watchexec.exe.manifest --- old/watchexec-1.22.0/crates/cli/watchexec.exe.manifest 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/cli/watchexec.exe.manifest 2023-03-22 12:37:49.000000000 +0100 @@ -3,7 +3,7 @@ <assemblyIdentity type="win32" name="Watchexec.Cli.watchexec" - version="1.22.0.0" + version="1.22.2.0" /> <trustInfo> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/filterer/globset/Cargo.toml new/watchexec-1.22.2/crates/filterer/globset/Cargo.toml --- old/watchexec-1.22.0/crates/filterer/globset/Cargo.toml 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/filterer/globset/Cargo.toml 2023-03-22 12:37:49.000000000 +0100 @@ -24,7 +24,7 @@ path = "../../ignore-files" [dependencies.watchexec] -version = "2.2.0" +version = "2.3.0" path = "../../lib" [dependencies.watchexec-filterer-ignore] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/filterer/ignore/Cargo.toml new/watchexec-1.22.2/crates/filterer/ignore/Cargo.toml --- old/watchexec-1.22.0/crates/filterer/ignore/Cargo.toml 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/filterer/ignore/Cargo.toml 2023-03-22 12:37:49.000000000 +0100 @@ -24,7 +24,7 @@ path = "../../ignore-files" [dependencies.watchexec] -version = "2.2.0" +version = "2.3.0" path = "../../lib" [dependencies.watchexec-signals] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/filterer/tagged/CHANGELOG.md new/watchexec-1.22.2/crates/filterer/tagged/CHANGELOG.md --- old/watchexec-1.22.0/crates/filterer/tagged/CHANGELOG.md 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/filterer/tagged/CHANGELOG.md 2023-03-22 12:37:49.000000000 +0100 @@ -2,6 +2,8 @@ ## Next (YYYY-MM-DD) +## v0.3.0 (2023-03-18) + - Ditch MSRV policy. The `rust-version` indication will remain, for the minimum estimated Rust version for the code features used in the crate's own code, but dependencies may have already moved on. From now on, only latest stable is assumed and tested for. ([#510](https://github.com/watchexec/watchexec/pull/510)) ## v0.2.0 (2023-01-09) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/filterer/tagged/Cargo.toml new/watchexec-1.22.2/crates/filterer/tagged/Cargo.toml --- old/watchexec-1.22.0/crates/filterer/tagged/Cargo.toml 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/filterer/tagged/Cargo.toml 2023-03-22 12:37:49.000000000 +0100 @@ -1,6 +1,6 @@ [package] name = "watchexec-filterer-tagged" -version = "0.2.0" +version = "0.3.0" authors = ["Félix Saparelli <[email protected]>"] license = "Apache-2.0" @@ -37,7 +37,7 @@ ] [dependencies.watchexec] -version = "2.2.0" +version = "2.3.0" path = "../../lib" [dependencies.watchexec-filterer-ignore] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/lib/CHANGELOG.md new/watchexec-1.22.2/crates/lib/CHANGELOG.md --- old/watchexec-1.22.0/crates/lib/CHANGELOG.md 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/lib/CHANGELOG.md 2023-03-22 12:37:49.000000000 +0100 @@ -2,6 +2,14 @@ ## Next (YYYY-MM-DD) +## v2.3.0 (2023-03-22) + +- New: `Outcome::Race` and `Outcome::race()` ([#548](https://github.com/watchexec/watchexec/pull/548)) +- New: `Outcome::wait_timeout()` ([#548](https://github.com/watchexec/watchexec/pull/548)) +- New: `Outcome::sequence()` ([#548](https://github.com/watchexec/watchexec/pull/548)) +- Fix: `kill_on_drop(true)` set for group commands as well as ungrouped ([#549](https://github.com/watchexec/watchexec/pull/549)) +- Some `debug!`s upgraded to `info!`s, based on experience reading logs ([#547](https://github.com/watchexec/watchexec/pull/547)) + ## v2.2.0 (2023-03-18) - Ditch MSRV policy. The `rust-version` indication will remain, for the minimum estimated Rust version for the code features used in the crate's own code, but dependencies may have already moved on. From now on, only latest stable is assumed and tested for. ([#510](https://github.com/watchexec/watchexec/pull/510)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/lib/Cargo.toml new/watchexec-1.22.2/crates/lib/Cargo.toml --- old/watchexec-1.22.0/crates/lib/Cargo.toml 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/lib/Cargo.toml 2023-03-22 12:37:49.000000000 +0100 @@ -1,6 +1,6 @@ [package] name = "watchexec" -version = "2.2.0" +version = "2.3.0" authors = ["Matt Green <[email protected]>", "Félix Saparelli <[email protected]>"] license = "Apache-2.0" @@ -27,7 +27,7 @@ normalize-path = "0.2.0" [dependencies.command-group] -version = "2.0.1" +version = "2.1.0" features = ["with-tokio"] [dependencies.watchexec-events] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/lib/src/action/outcome.rs new/watchexec-1.22.2/crates/lib/src/action/outcome.rs --- old/watchexec-1.22.0/crates/lib/src/action/outcome.rs 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/lib/src/action/outcome.rs 2023-03-22 12:37:49.000000000 +0100 @@ -56,6 +56,9 @@ /// Do both outcomes in order. Both(Box<Outcome>, Box<Outcome>), + + /// Race both outcomes: run both at once, and when one finishes, cancel the other. + Race(Box<Outcome>, Box<Outcome>), } impl Default for Outcome { @@ -77,10 +80,32 @@ Self::Both(Box::new(one), Box::new(two)) } - /// Convenience function to wait for the subprocess to complete before executing the outcome. + /// Pattern that creates a sequence of outcomes from an iterator. + #[must_use] + pub fn sequence(mut outcomes: impl Iterator<Item = Self>) -> Self { + let mut seq = outcomes.next().unwrap_or(Self::DoNothing); + for outcome in outcomes { + seq = Self::both(seq, outcome); + } + seq + } + + /// Convenience function to create a race of outcomes. + #[must_use] + pub fn race(one: Self, two: Self) -> Self { + Self::Race(Box::new(one), Box::new(two)) + } + + /// Pattern that waits for the subprocess to complete before executing the outcome. #[must_use] pub fn wait(and_then: Self) -> Self { - Self::Both(Box::new(Self::Wait), Box::new(and_then)) + Self::both(Self::Wait, and_then) + } + + /// Pattern that waits for the subprocess to complete with a timeout. + #[must_use] + pub fn wait_timeout(timeout: Duration, and_then: Self) -> Self { + Self::both(Self::race(Self::Sleep(timeout), Self::Wait), and_then) } /// Resolves the outcome given the current state of the subprocess. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/lib/src/action/outcome_worker.rs new/watchexec-1.22.2/crates/lib/src/action/outcome_worker.rs --- old/watchexec-1.22.0/crates/lib/src/action/outcome_worker.rs 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/lib/src/action/outcome_worker.rs 2023-03-22 12:37:49.000000000 +0100 @@ -5,13 +5,16 @@ use async_priority_channel as priority; use clearscreen::ClearScreen; -use futures::Future; +use futures::{ + future::{select, Either}, + Future, +}; use tokio::{ spawn, sync::{mpsc, watch::Receiver}, time::sleep, }; -use tracing::{debug, error, trace, warn}; +use tracing::{debug, error, info, trace, warn}; use crate::{ command::Supervisor, @@ -63,7 +66,7 @@ match this.apply(outcome.clone()).await { Err(err) => { if matches!(err, RuntimeError::Exit) { - debug!(%gen, "propagating graceful exit"); + info!(%gen, "propagating graceful exit"); } else { error!(?err, %gen, "outcome applier errored"); } @@ -191,6 +194,14 @@ notry!(self.apply(*two))?; } + + (_, Outcome::Race(one, two)) => { + if let Either::Left((Err(err), _)) | Either::Right((Err(err), _)) = + select(self.apply(*one), self.apply(*two)).await + { + return Err(err); + } + } } Ok(()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/lib/src/action/worker.rs new/watchexec-1.22.2/crates/lib/src/action/worker.rs --- old/watchexec-1.22.0/crates/lib/src/action/worker.rs 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/lib/src/action/worker.rs 2023-03-22 12:37:49.000000000 +0100 @@ -11,7 +11,7 @@ }, time::timeout, }; -use tracing::{debug, trace}; +use tracing::{debug, info, trace}; use crate::{ error::{CriticalError, RuntimeError}, @@ -123,7 +123,7 @@ #[allow(clippy::iter_with_drain)] let events = Arc::from(set.drain(..).collect::<Vec<_>>().into_boxed_slice()); let action = Action::new(Arc::clone(&events)); - debug!(?action, "action constructed"); + info!(?action, "action constructed"); debug!("running action handler"); let action_handler = { @@ -143,10 +143,10 @@ } let outcome = outcome.get().cloned().unwrap_or_default(); - debug!(?outcome, "handler finished"); + debug!(?outcome, "action handler finished"); let outcome = outcome.resolve(process.is_running().await); - debug!(?outcome, "outcome resolved"); + info!(?outcome, "outcome resolved"); OutcomeWorker::spawn( outcome, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/crates/lib/src/command/supervisor.rs new/watchexec-1.22.2/crates/lib/src/command/supervisor.rs --- old/watchexec-1.22.0/crates/lib/src/command/supervisor.rs 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/crates/lib/src/command/supervisor.rs 2023-03-22 12:37:49.000000000 +0100 @@ -9,7 +9,7 @@ watch, }, }; -use tracing::{debug, debug_span, error, trace, Span}; +use tracing::{debug, debug_span, error, info, trace, Span}; use watchexec_signals::Signal; use crate::{ @@ -280,7 +280,6 @@ let (pre_spawn, spawnable) = span.in_scope::<_, Result<_, RuntimeError>>(|| { debug!(%grouped, ?command, "preparing command"); let mut spawnable = command.to_spawnable()?; - spawnable.kill_on_drop(true); // Required from Rust 1.66: // https://github.com/rust-lang/rust/pull/101077 @@ -320,24 +319,30 @@ .map_err(|_| RuntimeError::HandlerLockHeld("pre-spawn"))? .into_inner(); - debug!(command=?spawnable, "spawning command"); + info!(command=?spawnable, "spawning command"); let (proc, id) = if grouped { let proc = spawnable - .group_spawn() + .group() + .kill_on_drop(true) + .spawn() .map_err(|err| RuntimeError::IoError { about: "spawning process group", err, })?; let id = proc.id().ok_or(RuntimeError::ProcessDeadOnArrival)?; - debug!(pgid=%id, "process group spawned"); + info!(pgid=%id, "process group spawned"); (Process::Grouped(proc), id) } else { - let proc = spawnable.spawn().map_err(|err| RuntimeError::IoError { - about: "spawning process (ungrouped)", - err, - })?; + let proc = + spawnable + .kill_on_drop(true) + .spawn() + .map_err(|err| RuntimeError::IoError { + about: "spawning process (ungrouped)", + err, + })?; let id = proc.id().ok_or(RuntimeError::ProcessDeadOnArrival)?; - debug!(pid=%id, "process spawned"); + info!(pid=%id, "process spawned"); (Process::Ungrouped(proc), id) }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/doc/watchexec.1 new/watchexec-1.22.2/doc/watchexec.1 --- old/watchexec-1.22.0/doc/watchexec.1 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/doc/watchexec.1 2023-03-22 12:37:49.000000000 +0100 @@ -1,6 +1,6 @@ .ie \n(.g .ds Aq \(aq .el .ds Aq ' -.TH watchexec 1 "watchexec 1.22.0" +.TH watchexec 1 "watchexec 1.22.2" .SH NAME watchexec \- Execute commands when watched files change .SH SYNOPSIS @@ -71,6 +71,8 @@ Specify a signal to send to the process when it\*(Aqs still running. This implies \*(Aq\-\-on\-busy\-update=signal\*(Aq; otherwise the signal used when that mode is \*(Aqrestart\*(Aq is controlled by \*(Aq\-\-stop\-signal\*(Aq. See the long documentation for \*(Aq\-\-stop\-signal\*(Aq for syntax. + +Signals are not supported on Windows at the moment, and will always be overridden to \*(Aqkill\*(Aq. See \*(Aq\-\-stop\-signal\*(Aq for more on Windows "signals". .TP \fB\-\-stop\-signal\fR=\fISIGNAL\fR Signal to send to stop the command @@ -91,6 +93,8 @@ Takes a unit\-less value in seconds, or a time span value such as "5min 20s". The default is 60 seconds. Set to 0 to immediately force\-kill the command. + +This has no practical effect on Windows as the command is always forcefully terminated; see \*(Aq\-\-stop\-signal\*(Aq for why. .TP \fB\-\-debounce\fR=\fITIMEOUT\fR Time to wait for new events before taking action @@ -468,6 +472,6 @@ .SH EXTRA Use @argfile as first argument to load arguments from the file \*(Aqargfile\*(Aq (one argument per line) which will be inserted in place of the @argfile (further arguments on the CLI will override or add onto those in the file). .SH VERSION -v1.22.0 +v1.22.2 .SH AUTHORS Félix Saparelli <[email protected]>, Matt Green <[email protected]> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/watchexec-1.22.0/doc/watchexec.1.md new/watchexec-1.22.2/doc/watchexec.1.md --- old/watchexec-1.22.0/doc/watchexec.1.md 2023-03-18 16:06:47.000000000 +0100 +++ new/watchexec-1.22.2/doc/watchexec.1.md 2023-03-22 12:37:49.000000000 +0100 @@ -113,6 +113,9 @@ See the long documentation for \--stop-signal for syntax. +Signals are not supported on Windows at the moment, and will always be +overridden to kill. See \--stop-signal for more on Windows \"signals\". + **\--stop-signal**=*SIGNAL* : Signal to send to stop the command @@ -149,6 +152,9 @@ The default is 60 seconds. Set to 0 to immediately force-kill the command. +This has no practical effect on Windows as the command is always +forcefully terminated; see \--stop-signal for why. + **\--debounce**=*TIMEOUT* : Time to wait for new events before taking action @@ -667,7 +673,7 @@ # VERSION -v1.22.0 +v1.22.2 # AUTHORS Binary files old/watchexec-1.22.0/doc/watchexec.1.pdf and new/watchexec-1.22.2/doc/watchexec.1.pdf differ ++++++ watchexec.obsinfo ++++++ --- /var/tmp/diff_new_pack.jgfT4p/_old 2023-03-22 22:32:44.254825887 +0100 +++ /var/tmp/diff_new_pack.jgfT4p/_new 2023-03-22 22:32:44.258825907 +0100 @@ -1,5 +1,5 @@ name: watchexec -version: 1.22.0 -mtime: 1679152007 -commit: c337ebca869abe99595e61c6be430296a0bf39fb +version: 1.22.2 +mtime: 1679485069 +commit: e8391cd1d07b4d2b597fdbf1f4b77d01d6504a8a
