Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package watchexec for openSUSE:Factory 
checked in at 2026-05-04 14:24:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/watchexec (Old)
 and      /work/SRC/openSUSE:Factory/.watchexec.new.30200 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "watchexec"

Mon May  4 14:24:48 2026 rev:15 rq:1350637 version:2.5.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/watchexec/watchexec.changes      2026-03-14 
22:22:44.697999904 +0100
+++ /work/SRC/openSUSE:Factory/.watchexec.new.30200/watchexec.changes   
2026-05-04 14:24:53.171950566 +0200
@@ -1,0 +2,14 @@
+Fri Apr 24 20:14:01 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 2.5.1:
+  * chore: Release
+  * add a bunch of new archs as experimental builds
+  * ci: add riscv64 to release cross-build targets (#1039)
+  * chore: Release
+  * update changelog
+  * feat(supervisor): add SpawnFn to allow custom process spawning (#1013)
+  * Update README.md
+  * chore: Release
+  * deps: update lockfile
+
+-------------------------------------------------------------------

Old:
----
  cargo_config
  watchexec-2.5.0.tar.xz

New:
----
  _servicedata
  watchexec-2.5.1.tar.xz
  watchexec.obsinfo

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ watchexec.spec ++++++
--- /var/tmp/diff_new_pack.i1W8kF/_old  2026-05-04 14:24:54.760016117 +0200
+++ /var/tmp/diff_new_pack.i1W8kF/_new  2026-05-04 14:24:54.760016117 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           watchexec
-Version:        2.5.0
+Version:        2.5.1
 Release:        0
 Summary:        Watches a path and runs a command whenever it detects 
modifications.
 License:        Apache-2.0
@@ -25,7 +25,6 @@
 URL:            https://github.com/watchexec/watchexec
 Source0:        %{name}-%{version}.tar.xz
 Source1:        vendor.tar.xz
-Source2:        cargo_config
 BuildRequires:  cargo-packaging
 
 %description
@@ -34,8 +33,6 @@
 
 %prep
 %autosetup -a1
-mkdir -p .cargo
-cp %{SOURCE2} .cargo/config
 
 %build
 %{cargo_build}

++++++ _service ++++++
--- /var/tmp/diff_new_pack.i1W8kF/_old  2026-05-04 14:24:54.816018429 +0200
+++ /var/tmp/diff_new_pack.i1W8kF/_new  2026-05-04 14:24:54.820018595 +0200
@@ -1,27 +1,26 @@
 <services>
-  <service mode="disabled" name="obs_scm">
+  <service mode="manual" name="tar_scm">
     <param name="url">https://github.com/watchexec/watchexec.git</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="scm">git</param>
-    <param name="revision">v2.5.0</param>
+    <param name="revision">v2.5.1</param>
     <param name="match-tag">*</param>
     <param name="versionrewrite-pattern">v(\d+\.\d+\.\d+)</param>
     <param name="versionrewrite-replacement">\1</param>
     <param name="changesgenerate">enable</param>
-    <param name="changesauthor">[email protected]</param>
   </service>
-  <service mode="disabled" name="tar" />
-  <service mode="disabled" name="recompress">
+  <service mode="manual" name="tar" />
+  <service mode="manual" name="recompress">
     <param name="file">*.tar</param>
     <param name="compression">xz</param>
   </service>
-  <service mode="disabled" name="set_version"/>
-  <service name="cargo_vendor" mode="disabled">
+  <service mode="manual" name="set_version"/>
+  <service name="cargo_vendor" mode="manual">
      <param name="srcdir">watchexec</param>
      <param name="compression">xz</param>
      <param name="update">true</param>
   </service>
-  <service name="cargo_audit" mode="disabled">
+  <service name="cargo_audit" mode="manual">
      <param name="srcdir">watchexec</param>
   </service>
 </services>

++++++ _servicedata ++++++
<servicedata>
<service name="tar_scm">
                <param 
name="url">https://github.com/watchexec/watchexec.git</param>
              <param 
name="changesrevision">9b7fed6a52c7586815864fe5c5bd1b6b5e5cec37</param></service></servicedata>
(No newline at EOF)

++++++ vendor.tar.xz ++++++
/work/SRC/openSUSE:Factory/watchexec/vendor.tar.xz 
/work/SRC/openSUSE:Factory/.watchexec.new.30200/vendor.tar.xz differ: char 15, 
line 1

++++++ watchexec-2.5.0.tar.xz -> watchexec-2.5.1.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/watchexec-2.5.0/.github/workflows/release-cli.yml 
new/watchexec-2.5.1/.github/workflows/release-cli.yml
--- old/watchexec-2.5.0/.github/workflows/release-cli.yml       2026-02-25 
11:28:30.000000000 +0100
+++ new/watchexec-2.5.1/.github/workflows/release-cli.yml       2026-03-30 
08:23:47.000000000 +0200
@@ -77,13 +77,37 @@
             os: ubuntu-24.04
             target: s390x-unknown-linux-gnu
             cross: true
-            experimental: false
+            experimental: true
+
+          - name: linux-riscv64gc-gnu
+            os: ubuntu-24.04
+            target: riscv64gc-unknown-linux-gnu
+            cross: true
+            experimental: true
 
           - name: linux-ppc64le-gnu
             os: ubuntu-24.04
             target: powerpc64le-unknown-linux-gnu
             cross: true
-            experimental: false
+            experimental: true
+
+          - name: illumos-x86-64
+            os: ubuntu-24.04
+            target: x86_64-unknown-illumos
+            cross: true
+            experimental: true
+
+          - name: freebsd-x86-64
+            os: ubuntu-24.04
+            target: x86_64-unknown-freebsd
+            cross: true
+            experimental: true
+
+          - name: linux-loongarch64-gnu
+            os: ubuntu-24.04
+            target: loongarch64-unknown-linux-gnu
+            cross: true
+            experimental: true
 
           - name: mac-x86-64
             os: macos-14
@@ -143,6 +167,9 @@
       - name: Add s390x-gnu tools
         run: sudo apt install -y gcc-s390x-linux-gnu
         if: startsWith(matrix.target, 's390x-unknown-linux-gnu')
+      - name: Add riscv64-gnu tools
+        run: sudo apt install -y gcc-riscv64-linux-gnu
+        if: startsWith(matrix.target, 'riscv64gc-unknown-linux-gnu')
       - name: Add ppc64le-gnu tools
         run: sudo apt install -y gcc-powerpc64le-linux-gnu
         if: startsWith(matrix.target, 'powerpc64le-unknown-linux-gnu')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/watchexec-2.5.0/CITATION.cff 
new/watchexec-2.5.1/CITATION.cff
--- old/watchexec-2.5.0/CITATION.cff    2026-02-25 11:28:30.000000000 +0100
+++ new/watchexec-2.5.1/CITATION.cff    2026-03-30 08:23:47.000000000 +0200
@@ -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: "2.5.0"
-date-released: 2026-02-25
+version: "2.5.1"
+date-released: 2026-03-30
 
 repository-code: https://github.com/watchexec/watchexec
 license: Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/watchexec-2.5.0/Cargo.lock 
new/watchexec-2.5.1/Cargo.lock
--- old/watchexec-2.5.0/Cargo.lock      2026-02-25 11:28:30.000000000 +0100
+++ new/watchexec-2.5.1/Cargo.lock      2026-03-30 08:23:47.000000000 +0200
@@ -604,7 +604,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "5def4343d62f01f67ff1a49147e4a15112e936c6a6a3f8ff7a29394e76468244"
 dependencies = [
- "nix 0.31.1",
+ "nix 0.31.2",
  "terminfo",
  "thiserror 2.0.18",
  "which",
@@ -796,9 +796,9 @@
 
 [[package]]
 name = "dispatch2"
-version = "0.3.0"
+version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec"
+checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38"
 dependencies = [
  "bitflags 2.11.0",
  "objc2",
@@ -1786,9 +1786,9 @@
 
 [[package]]
 name = "jiff"
-version = "0.2.21"
+version = "0.2.22"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b3e3d65f018c6ae946ab16e80944b97096ed73c35b221d1c478a6c81d8f57940"
+checksum = "819b44bc7c87d9117eb522f14d46e918add69ff12713c475946b0a29363ed1c2"
 dependencies = [
  "jiff-static",
  "jiff-tzdb-platform",
@@ -1801,9 +1801,9 @@
 
 [[package]]
 name = "jiff-static"
-version = "0.2.21"
+version = "0.2.22"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a17c2b211d863c7fde02cbea8a3c1a439b98e109286554f2860bdded7ff83818"
+checksum = "470252db18ecc35fd766c0891b1e3ec6cbbcd62507e85276c01bf75d8e94d4a1"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1827,9 +1827,9 @@
 
 [[package]]
 name = "js-sys"
-version = "0.3.89"
+version = "0.3.91"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f4eacb0641a310445a4c513f2a5e23e19952e269c6a38887254d5f837a305506"
+checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c"
 dependencies = [
  "once_cell",
  "wasm-bindgen",
@@ -1869,9 +1869,9 @@
 
 [[package]]
 name = "libc"
-version = "0.2.180"
+version = "0.2.182"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc"
+checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112"
 
 [[package]]
 name = "libm"
@@ -1891,11 +1891,10 @@
 
 [[package]]
 name = "libredox"
-version = "0.1.12"
+version = "0.1.14"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616"
+checksum = "1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a"
 dependencies = [
- "bitflags 2.11.0",
  "libc",
 ]
 
@@ -1907,9 +1906,9 @@
 
 [[package]]
 name = "linux-raw-sys"
-version = "0.11.0"
+version = "0.12.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
+checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
 
 [[package]]
 name = "listenfd"
@@ -2097,9 +2096,9 @@
 
 [[package]]
 name = "nix"
-version = "0.31.1"
+version = "0.31.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "225e7cfe711e0ba79a68baeddb2982723e4235247aefce1482f2f16c27865b66"
+checksum = "5d6d0705320c1e6ba1d912b5e37cf18071b6c2e9b7fa8215a1e8a7651966f5d3"
 dependencies = [
  "bitflags 2.11.0",
  "cfg-if",
@@ -2207,9 +2206,9 @@
 
 [[package]]
 name = "objc2"
-version = "0.6.3"
+version = "0.6.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05"
+checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f"
 dependencies = [
  "objc2-encode",
 ]
@@ -2398,18 +2397,18 @@
 
 [[package]]
 name = "pin-project"
-version = "1.1.10"
+version = "1.1.11"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a"
+checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517"
 dependencies = [
  "pin-project-internal",
 ]
 
 [[package]]
 name = "pin-project-internal"
-version = "1.1.10"
+version = "1.1.11"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
+checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -2418,9 +2417,9 @@
 
 [[package]]
 name = "pin-project-lite"
-version = "0.2.16"
+version = "0.2.17"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
+checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
 
 [[package]]
 name = "pin-utils"
@@ -2430,9 +2429,9 @@
 
 [[package]]
 name = "piper"
-version = "0.2.4"
+version = "0.2.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066"
+checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1"
 dependencies = [
  "atomic-waker",
  "fastrand",
@@ -2529,13 +2528,13 @@
 
 [[package]]
 name = "process-wrap"
-version = "9.0.3"
+version = "9.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ccd9713fe2c91c3c85ac388b31b89de339365d2c995146e630b5e0da9d06526a"
+checksum = "2e842efad9119158434d193c6682e2ebee4b44d6ad801d7b349623b3f57cdf55"
 dependencies = [
  "futures",
  "indexmap",
- "nix 0.31.1",
+ "nix 0.31.2",
  "tokio",
  "tracing",
  "windows 0.62.2",
@@ -2740,9 +2739,9 @@
 
 [[package]]
 name = "regex-syntax"
-version = "0.8.9"
+version = "0.8.10"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c"
+checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
 
 [[package]]
 name = "roff"
@@ -2767,14 +2766,14 @@
 
 [[package]]
 name = "rustix"
-version = "1.1.3"
+version = "1.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34"
+checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
 dependencies = [
  "bitflags 2.11.0",
  "errno",
  "libc",
- "linux-raw-sys 0.11.0",
+ "linux-raw-sys 0.12.1",
  "windows-sys 0.61.2",
 ]
 
@@ -3083,9 +3082,9 @@
 
 [[package]]
 name = "tempfile"
-version = "3.25.0"
+version = "3.26.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0136791f7c95b1f6dd99f9cc786b91bb81c3800b639b3478e561ddb7be95e5f1"
+checksum = "82a72c767771b47409d2345987fda8628641887d5466101319899796367354a0"
 dependencies = [
  "fastrand",
  "getrandom 0.4.1",
@@ -3711,9 +3710,9 @@
 
 [[package]]
 name = "wasm-bindgen"
-version = "0.2.112"
+version = "0.2.114"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "05d7d0fce354c88b7982aec4400b3e7fcf723c32737cef571bd165f7613557ee"
+checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e"
 dependencies = [
  "cfg-if",
  "once_cell",
@@ -3724,9 +3723,9 @@
 
 [[package]]
 name = "wasm-bindgen-macro"
-version = "0.2.112"
+version = "0.2.114"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "55839b71ba921e4f75b674cb16f843f4b1f3b26ddfcb3454de1cf65cc021ec0f"
+checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6"
 dependencies = [
  "quote",
  "wasm-bindgen-macro-support",
@@ -3734,9 +3733,9 @@
 
 [[package]]
 name = "wasm-bindgen-macro-support"
-version = "0.2.112"
+version = "0.2.114"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "caf2e969c2d60ff52e7e98b7392ff1588bffdd1ccd4769eba27222fd3d621571"
+checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3"
 dependencies = [
  "bumpalo",
  "proc-macro2",
@@ -3747,9 +3746,9 @@
 
 [[package]]
 name = "wasm-bindgen-shared"
-version = "0.2.112"
+version = "0.2.114"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0861f0dcdf46ea819407495634953cdcc8a8c7215ab799a7a7ce366be71c7b30"
+checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16"
 dependencies = [
  "unicode-ident",
 ]
@@ -3790,7 +3789,7 @@
 
 [[package]]
 name = "watchexec"
-version = "8.1.2"
+version = "8.2.0"
 dependencies = [
  "async-priority-channel",
  "atomic-take",
@@ -3812,7 +3811,7 @@
 
 [[package]]
 name = "watchexec-cli"
-version = "2.5.0"
+version = "2.5.1"
 dependencies = [
  "argfile",
  "blake3",
@@ -3917,7 +3916,7 @@
 
 [[package]]
 name = "watchexec-supervisor"
-version = "5.1.0"
+version = "5.2.0"
 dependencies = [
  "boxcar",
  "futures",
@@ -4511,18 +4510,18 @@
 
 [[package]]
 name = "zerocopy"
-version = "0.8.39"
+version = "0.8.40"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a"
+checksum = "a789c6e490b576db9f7e6b6d661bcc9799f7c0ac8352f56ea20193b2681532e5"
 dependencies = [
  "zerocopy-derive",
 ]
 
 [[package]]
 name = "zerocopy-derive"
-version = "0.8.39"
+version = "0.8.40"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517"
+checksum = "f65c489a7071a749c849713807783f70672b28094011623e200cb86dcb835953"
 dependencies = [
  "proc-macro2",
  "quote",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/watchexec-2.5.0/README.md 
new/watchexec-2.5.1/README.md
--- old/watchexec-2.5.0/README.md       2026-02-25 11:28:30.000000000 +0100
+++ new/watchexec-2.5.1/README.md       2026-03-30 08:23:47.000000000 +0200
@@ -79,6 +79,7 @@
 - [cargo watch](https://github.com/watchexec/cargo-watch): a specialised 
watcher for Rust/Cargo projects.
 - [cargo lambda](https://github.com/cargo-lambda/cargo-lambda): a dev tool for 
Rust-powered AWS Lambda functions.
 - [create-rust-app](https://create-rust-app.dev): a template for Rust+React 
web apps.
+- [devenv.sh](https://github.com/cachix/devenv): a developer environment with 
nix-based declarative configs.
 - [dotter](https://github.com/supercuber/dotter): a dotfile manager.
 - [ghciwatch](https://github.com/mercurytechnologies/ghciwatch): a specialised 
watcher for Haskell projects.
 - [tectonic](https://tectonic-typesetting.github.io/book/latest/): a TeX/LaTeX 
typesetting system.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/watchexec-2.5.0/crates/cli/Cargo.toml 
new/watchexec-2.5.1/crates/cli/Cargo.toml
--- old/watchexec-2.5.0/crates/cli/Cargo.toml   2026-02-25 11:28:30.000000000 
+0100
+++ new/watchexec-2.5.1/crates/cli/Cargo.toml   2026-03-30 08:23:47.000000000 
+0200
@@ -1,6 +1,6 @@
 [package]
 name = "watchexec-cli"
-version = "2.5.0"
+version = "2.5.1"
 
 authors = ["Félix Saparelli <[email protected]>", "Matt Green 
<[email protected]>"]
 license = "Apache-2.0"
@@ -81,7 +81,7 @@
 path = "../project-origins"
 
 [dependencies.watchexec]
-version = "8.1.2"
+version = "8.2.0"
 path = "../lib"
 
 [dependencies.watchexec-events]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/watchexec-2.5.0/crates/cli/watchexec.exe.manifest 
new/watchexec-2.5.1/crates/cli/watchexec.exe.manifest
--- old/watchexec-2.5.0/crates/cli/watchexec.exe.manifest       2026-02-25 
11:28:30.000000000 +0100
+++ new/watchexec-2.5.1/crates/cli/watchexec.exe.manifest       2026-03-30 
08:23:47.000000000 +0200
@@ -3,7 +3,7 @@
        <assemblyIdentity
                type="win32"
                name="Watchexec.Cli.watchexec"
-               version="2.5.0.0"
+               version="2.5.1.0"
        />
 
        <trustInfo>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/watchexec-2.5.0/crates/filterer/globset/Cargo.toml 
new/watchexec-2.5.1/crates/filterer/globset/Cargo.toml
--- old/watchexec-2.5.0/crates/filterer/globset/Cargo.toml      2026-02-25 
11:28:30.000000000 +0100
+++ new/watchexec-2.5.1/crates/filterer/globset/Cargo.toml      2026-03-30 
08:23:47.000000000 +0200
@@ -24,7 +24,7 @@
 path = "../../ignore-files"
 
 [dependencies.watchexec]
-version = "8.1.2"
+version = "8.2.0"
 path = "../../lib"
 
 [dependencies.watchexec-events]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/watchexec-2.5.0/crates/filterer/ignore/Cargo.toml 
new/watchexec-2.5.1/crates/filterer/ignore/Cargo.toml
--- old/watchexec-2.5.0/crates/filterer/ignore/Cargo.toml       2026-02-25 
11:28:30.000000000 +0100
+++ new/watchexec-2.5.1/crates/filterer/ignore/Cargo.toml       2026-03-30 
08:23:47.000000000 +0200
@@ -26,7 +26,7 @@
 path = "../../ignore-files"
 
 [dependencies.watchexec]
-version = "8.1.2"
+version = "8.2.0"
 path = "../../lib"
 
 [dependencies.watchexec-events]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/watchexec-2.5.0/crates/lib/CHANGELOG.md 
new/watchexec-2.5.1/crates/lib/CHANGELOG.md
--- old/watchexec-2.5.0/crates/lib/CHANGELOG.md 2026-02-25 11:28:30.000000000 
+0100
+++ new/watchexec-2.5.1/crates/lib/CHANGELOG.md 2026-03-30 08:23:47.000000000 
+0200
@@ -2,6 +2,10 @@
 
 ## Next (YYYY-MM-DD)
 
+## v8.2.0 (2026-03-02)
+
+- Feat: add `fs_ready` signal for watcher readiness 
([#1024](https://github.com/watchexec/watchexec/pull/1024))
+
 ## v8.1.2 (2026-02-24)
 
 ## v8.1.1 (2026-02-22)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/watchexec-2.5.0/crates/lib/Cargo.toml 
new/watchexec-2.5.1/crates/lib/Cargo.toml
--- old/watchexec-2.5.0/crates/lib/Cargo.toml   2026-02-25 11:28:30.000000000 
+0100
+++ new/watchexec-2.5.1/crates/lib/Cargo.toml   2026-03-30 08:23:47.000000000 
+0200
@@ -1,6 +1,6 @@
 [package]
 name = "watchexec"
-version = "8.1.2"
+version = "8.2.0"
 
 authors = ["Félix Saparelli <[email protected]>", "Matt Green 
<[email protected]>"]
 license = "Apache-2.0"
@@ -33,7 +33,7 @@
 path = "../signals"
 
 [dependencies.watchexec-supervisor]
-version = "5.1.0"
+version = "5.2.0"
 path = "../supervisor"
 
 [dependencies.tokio]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/watchexec-2.5.0/crates/lib/src/config.rs 
new/watchexec-2.5.1/crates/lib/src/config.rs
--- old/watchexec-2.5.0/crates/lib/src/config.rs        2026-02-25 
11:28:30.000000000 +0100
+++ new/watchexec-2.5.1/crates/lib/src/config.rs        2026-03-30 
08:23:47.000000000 +0200
@@ -2,7 +2,7 @@
 
 use std::{future::Future, pin::pin, sync::Arc, time::Duration};
 
-use tokio::sync::Notify;
+use tokio::sync::{watch, Notify};
 use tracing::{debug, trace};
 
 use crate::{
@@ -154,6 +154,11 @@
        ///
        /// This is unchangeable at runtime and must be set before Watchexec 
instantiation.
        pub event_channel_size: usize,
+
+       /// Signalled by the filesystem worker after it finishes applying a 
pathset change
+       /// (registering/unregistering OS watches). Subscribe via 
[`Config::fs_ready()`] **before**
+       /// calling [`Config::pathset()`] to avoid missing the notification.
+       pub(crate) fs_ready: watch::Sender<()>,
 }
 
 impl Default for Config {
@@ -169,6 +174,7 @@
                        filterer: Default::default(),
                        error_channel_size: 64,
                        event_channel_size: 4096,
+                       fs_ready: watch::channel(()).0,
                }
        }
 }
@@ -196,6 +202,17 @@
                ConfigWatched::new(self.change_signal.clone())
        }
 
+       /// Subscribe to filesystem worker readiness notifications.
+       ///
+       /// Returns a [`watch::Receiver`] that is notified each time the 
filesystem worker finishes
+       /// applying a pathset change (i.e. OS watches are 
registered/unregistered). Signals readiness
+       /// even if some paths failed to register; check the error handler for 
failures. To avoid
+       /// missing a notification, subscribe **before** calling 
[`Config::pathset()`], then
+       /// `.changed().await`.
+       pub fn fs_ready(&self) -> watch::Receiver<()> {
+               self.fs_ready.subscribe()
+       }
+
        /// Set the pathset to be watched.
        pub fn pathset<I, P>(&self, pathset: I) -> &Self
        where
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/watchexec-2.5.0/crates/lib/src/sources/fs.rs 
new/watchexec-2.5.1/crates/lib/src/sources/fs.rs
--- old/watchexec-2.5.0/crates/lib/src/sources/fs.rs    2026-02-25 
11:28:30.000000000 +0100
+++ new/watchexec-2.5.1/crates/lib/src/sources/fs.rs    2026-03-30 
08:23:47.000000000 +0200
@@ -132,6 +132,7 @@
                        );
                        watcher.take();
                        pathset.clear();
+                       let _ = config.fs_ready.send(());
                        continue;
                }
 
@@ -217,6 +218,8 @@
                                pathset.insert(path);
                        }
                }
+
+               let _ = config.fs_ready.send(());
        }
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/watchexec-2.5.0/crates/supervisor/CHANGELOG.md 
new/watchexec-2.5.1/crates/supervisor/CHANGELOG.md
--- old/watchexec-2.5.0/crates/supervisor/CHANGELOG.md  2026-02-25 
11:28:30.000000000 +0100
+++ new/watchexec-2.5.1/crates/supervisor/CHANGELOG.md  2026-03-30 
08:23:47.000000000 +0200
@@ -2,6 +2,10 @@
 
 ## Next (YYYY-MM-DD)
 
+## v5.2.0 (2026-03-09)
+
+- Add the ability to use `spawn_with` from process-wrap (#1013)
+
 ## v5.1.0 (2026-02-22)
 
 - Add `is_running()` and clarify what `is_dead()` is measuring
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/watchexec-2.5.0/crates/supervisor/Cargo.toml 
new/watchexec-2.5.1/crates/supervisor/Cargo.toml
--- old/watchexec-2.5.0/crates/supervisor/Cargo.toml    2026-02-25 
11:28:30.000000000 +0100
+++ new/watchexec-2.5.1/crates/supervisor/Cargo.toml    2026-03-30 
08:23:47.000000000 +0200
@@ -1,6 +1,6 @@
 [package]
 name = "watchexec-supervisor"
-version = "5.1.0"
+version = "5.2.0"
 
 authors = ["Félix Saparelli <[email protected]>"]
 license = "Apache-2.0 OR MIT"
@@ -19,7 +19,7 @@
 tracing = "0.1.40"
 
 [dependencies.process-wrap]
-version = "9.0.1"
+version = "9.1.0"
 features = ["reset-sigmask", "tokio1"]
 
 [dependencies.tokio]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/watchexec-2.5.0/crates/supervisor/src/job/job.rs 
new/watchexec-2.5.1/crates/supervisor/src/job/job.rs
--- old/watchexec-2.5.0/crates/supervisor/src/job/job.rs        2026-02-25 
11:28:30.000000000 +0100
+++ new/watchexec-2.5.1/crates/supervisor/src/job/job.rs        2026-03-30 
08:23:47.000000000 +0200
@@ -349,6 +349,32 @@
                self.control(Control::UnsetSpawnHook)
        }
 
+       /// Set the spawn function.
+       ///
+       /// When set, this function is passed to
+       /// 
[`CommandWrap::spawn_with()`](process_wrap::tokio::CommandWrap::spawn_with) 
instead of
+       /// using the default [`CommandWrap::spawn()`]. It receives a `&mut 
tokio::process::Command`
+       /// and must return the spawned [`tokio::process::Child`].
+       ///
+       /// All process-wrap layers are still applied around the child, so this 
only customises the
+       /// low-level spawn step. This is useful for delegating process 
spawning to a privileged
+       /// helper (e.g. for Linux capability granting) while keeping the 
supervisor's lifecycle
+       /// management.
+       pub fn set_spawn_fn(
+               &self,
+               fun: impl Fn(&mut tokio::process::Command) -> 
std::io::Result<tokio::process::Child>
+                       + Send
+                       + Sync
+                       + 'static,
+       ) -> Ticket {
+               self.control(Control::SetSpawnFn(Arc::new(fun)))
+       }
+
+       /// Unset any spawn function, reverting to the default 
`CommandWrap::spawn()`.
+       pub fn unset_spawn_fn(&self) -> Ticket {
+               self.control(Control::ClearSpawnFn)
+       }
+
        /// Set the error handler.
        pub fn set_error_handler(&self, fun: impl Fn(SyncIoError) + Send + Sync 
+ 'static) -> Ticket {
                self.control(Control::SetSyncErrorHandler(Arc::new(fun)))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/watchexec-2.5.0/crates/supervisor/src/job/messages.rs 
new/watchexec-2.5.1/crates/supervisor/src/job/messages.rs
--- old/watchexec-2.5.0/crates/supervisor/src/job/messages.rs   2026-02-25 
11:28:30.000000000 +0100
+++ new/watchexec-2.5.1/crates/supervisor/src/job/messages.rs   2026-03-30 
08:23:47.000000000 +0200
@@ -12,6 +12,7 @@
 
 use super::task::{
        AsyncErrorHandler, AsyncFunc, AsyncSpawnHook, SyncErrorHandler, 
SyncFunc, SyncSpawnHook,
+       SpawnFn,
 };
 
 /// The underlying control message types for [`Job`](super::Job).
@@ -66,6 +67,11 @@
        SetAsyncErrorHandler(AsyncErrorHandler),
        /// For 
[`Job::unset_error_handler()`](super::Job::unset_error_handler()).
        UnsetErrorHandler,
+
+       /// For [`Job::set_spawn_fn()`](super::Job::set_spawn_fn()).
+       SetSpawnFn(SpawnFn),
+       /// For [`Job::unset_spawn_fn()`](super::Job::unset_spawn_fn()).
+       ClearSpawnFn,
 }
 
 impl std::fmt::Debug for Control {
@@ -107,6 +113,8 @@
                                .debug_struct("SetAsyncErrorHandler")
                                .finish_non_exhaustive(),
                        Self::UnsetErrorHandler => 
f.debug_struct("UnsetErrorHandler").finish(),
+                       Self::SetSpawnFn(_) => 
f.debug_struct("SetSpawnFn").finish_non_exhaustive(),
+                       Self::ClearSpawnFn => 
f.debug_struct("ClearSpawnFn").finish(),
                }
        }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/watchexec-2.5.0/crates/supervisor/src/job/state.rs 
new/watchexec-2.5.1/crates/supervisor/src/job/state.rs
--- old/watchexec-2.5.0/crates/supervisor/src/job/state.rs      2026-02-25 
11:28:30.000000000 +0100
+++ new/watchexec-2.5.1/crates/supervisor/src/job/state.rs      2026-03-30 
08:23:47.000000000 +0200
@@ -7,6 +7,7 @@
 use watchexec_events::ProcessEnd;
 
 use crate::command::Command;
+use super::task::SpawnFn;
 
 /// The state of the job's command / process.
 ///
@@ -76,6 +77,7 @@
                &mut self,
                command: Arc<Command>,
                mut spawnable: CommandWrap,
+               spawn_fn: Option<&SpawnFn>,
        ) -> std::io::Result<bool> {
                if let Self::Running { .. } = self {
                        trace!("command running, not spawning again");
@@ -88,7 +90,11 @@
                let child = super::TestChild::new(command)?;
 
                #[cfg(not(test))]
-               let child = spawnable.spawn()?;
+               let child = if let Some(f) = spawn_fn {
+                       spawnable.spawn_with(|cmd| f(cmd))?
+               } else {
+                       spawnable.spawn()?
+               };
 
                *self = Self::Running {
                        child,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/watchexec-2.5.0/crates/supervisor/src/job/task.rs 
new/watchexec-2.5.1/crates/supervisor/src/job/task.rs
--- old/watchexec-2.5.0/crates/supervisor/src/job/task.rs       2026-02-25 
11:28:30.000000000 +0100
+++ new/watchexec-2.5.1/crates/supervisor/src/job/task.rs       2026-03-30 
08:23:47.000000000 +0200
@@ -55,6 +55,7 @@
                tokio::spawn(async move {
                        let mut error_handler = ErrorHandler::None;
                        let mut spawn_hook = SpawnHook::None;
+                       let mut spawn_fn: Option<SpawnFn> = None;
                        let mut command_state = CommandState::Pending;
                        let mut previous_run = None;
                        let mut stop_timer = None;
@@ -100,7 +101,7 @@
                                                                                
                },
                                                                                
        )
                                                                                
        .await;
-                                                                               
if let Err(err) = command_state.spawn(command.clone(), spawnable) {
+                                                                               
if let Err(err) = command_state.spawn(command.clone(), spawnable, 
spawn_fn.as_ref()) {
                                                                                
        let fut = error_handler.call(sync_io_error(err));
                                                                                
        fut.await;
                                                                                
        return Loop::Skip;
@@ -165,7 +166,7 @@
                                                                                
                },
                                                                                
        )
                                                                                
        .await;
-                                                                               
try_with_handler!(command_state.spawn(command.clone(), spawnable));
+                                                                               
try_with_handler!(command_state.spawn(command.clone(), spawnable, 
spawn_fn.as_ref()));
                                                                        }
                                                                }
                                                                Control::Stop 
=> {
@@ -231,7 +232,7 @@
                                                                                
                },
                                                                                
        )
                                                                                
        .await;
-                                                                               
try_with_handler!(command_state.spawn(command.clone(), spawnable));
+                                                                               
try_with_handler!(command_state.spawn(command.clone(), spawnable, 
spawn_fn.as_ref()));
                                                                        } else {
                                                                                
trace!("child isn't running, skip");
                                                                        }
@@ -282,7 +283,7 @@
                                                                                
        },
                                                                                
)
                                                                                
.await;
-                                                                       
try_with_handler!(command_state.spawn(command.clone(), spawnable));
+                                                                       
try_with_handler!(command_state.spawn(command.clone(), spawnable, 
spawn_fn.as_ref()));
                                                                }
                                                                
Control::Signal(signal) => {
                                                                        if let 
CommandState::Running { child, .. } = &mut command_state {
@@ -348,6 +349,14 @@
                                                                        
trace!("unsetting spawn hook");
                                                                        
spawn_hook = SpawnHook::None;
                                                                }
+                                                               
Control::SetSpawnFn(f) => {
+                                                                       
trace!("setting spawn fn");
+                                                                       
spawn_fn = Some(f);
+                                                               }
+                                                               
Control::ClearSpawnFn => {
+                                                                       
trace!("clearing spawn fn");
+                                                                       
spawn_fn = None;
+                                                               }
                                                        }
 
                                                        trace!("raising control 
done flag");
@@ -436,6 +445,23 @@
                + Send
                + Sync
                + 'static,
+>;
+
+/// A function that customises how the underlying process is spawned.
+///
+/// When set on a [`Job`](super::Job), this function is passed to
+/// 
[`CommandWrap::spawn_with()`](process_wrap::tokio::CommandWrap::spawn_with) 
instead of using
+/// the default 
[`CommandWrap::spawn()`](process_wrap::tokio::CommandWrap::spawn). It receives a
+/// `&mut tokio::process::Command` and must return the spawned 
`tokio::process::Child`.
+///
+/// All process-wrap layers are still applied around the child, so this only 
customises the
+/// low-level spawn step. This is useful for delegating process spawning to a 
privileged helper
+/// (e.g. for Linux capability granting) while keeping the supervisor's 
lifecycle management.
+pub type SpawnFn = Arc<
+       dyn Fn(&mut tokio::process::Command) -> 
std::io::Result<tokio::process::Child>
+               + Send
+               + Sync
+               + 'static,
 >;
 
 sync_async_callbox!(SpawnHook, SyncSpawnHook, AsyncSpawnHook, (command: &mut 
CommandWrap, context: &JobTaskContext<'_>));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/watchexec-2.5.0/crates/supervisor/src/job.rs 
new/watchexec-2.5.1/crates/supervisor/src/job.rs
--- old/watchexec-2.5.0/crates/supervisor/src/job.rs    2026-02-25 
11:28:30.000000000 +0100
+++ new/watchexec-2.5.1/crates/supervisor/src/job.rs    2026-03-30 
08:23:47.000000000 +0200
@@ -5,7 +5,7 @@
        job::Job,
        messages::{Control, Ticket},
        state::CommandState,
-       task::JobTaskContext,
+       task::{JobTaskContext, SpawnFn},
 };
 
 #[cfg(test)]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/watchexec-2.5.0/doc/watchexec.1 
new/watchexec-2.5.1/doc/watchexec.1
--- old/watchexec-2.5.0/doc/watchexec.1 2026-02-25 11:28:30.000000000 +0100
+++ new/watchexec-2.5.1/doc/watchexec.1 2026-03-30 08:23:47.000000000 +0200
@@ -1,6 +1,6 @@
 .ie \n(.g .ds Aq \(aq
 .el .ds Aq '
-.TH watchexec 1  "watchexec 2.5.0" 
+.TH watchexec 1  "watchexec 2.5.1" 
 .SH NAME
 watchexec \- Execute commands when watched files change
 .SH SYNOPSIS
@@ -634,6 +634,6 @@
 
 Didn\*(Aqt expect this much output? Use the short \*(Aq\-h\*(Aq flag to get 
short help.
 .SH VERSION
-v2.5.0
+v2.5.1
 .SH AUTHORS
 Félix Saparelli <[email protected]>, Matt Green <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/watchexec-2.5.0/doc/watchexec.1.md 
new/watchexec-2.5.1/doc/watchexec.1.md
--- old/watchexec-2.5.0/doc/watchexec.1.md      2026-02-25 11:28:30.000000000 
+0100
+++ new/watchexec-2.5.1/doc/watchexec.1.md      2026-03-30 08:23:47.000000000 
+0200
@@ -987,7 +987,7 @@
 
 # VERSION
 
-v2.5.0
+v2.5.1
 
 # AUTHORS
 

++++++ watchexec.obsinfo ++++++
name: watchexec
version: 2.5.1
mtime: 1774851827
commit: 9b7fed6a52c7586815864fe5c5bd1b6b5e5cec37

Reply via email to