diff --git a/CHANGELOG.md b/CHANGELOG.md index 03e52fa..a16057b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,13 @@ # CHANGELOG -## Unreleased (2026-08-24) +## v1.5.6 (2026-08-24) - **重启可靠性**: - 文件事件、终端 `rs` 和 `SIGUSR1` 重启请求统一串行处理,防止并行启动多个子进程。 - 等待旧进程完整退出后再启动新进程,并输出停止或启动失败信息。 +- **依赖更新**: 对齐 `shell v1.5.6`、`file v1.5.6`、`cast v1.5.5`、`encoding v1.5.6`、`rand v1.5.4`、`safe v1.5.3`。 + +## v1.5.5 (2026-08-24) +- **CLI**: 增加 `watch.pid` 生命周期管理和 `SIGUSR1` 手动重启支持。 ## v1.5.4 (2026-06-27) - **修复 Bug**: 修复了配置 `Types`(文件类型白名单)时,目录本身的创建/删除等事件未能被正确过滤的问题。 @@ -50,7 +54,4 @@ - 从 `@ssgo/tool/watcher` 迁移并重构。 - **基础设施对齐**: 使用 `apigo.cc/go/file` 替代标准库。 - **API 优化**: 引入 `Event` 结构体,提供 `EasyStart` 极简入口。 -# [v1.5.5] - 2026-08-24 -- **CLI**: - - Add `watch.pid` lifecycle management and `SIGUSR1` manual reload support. - Add `-r/--reload` PID-file control and ensure `-h/--help` takes precedence over `.watch` tasks. diff --git a/TEST.md b/TEST.md index 6fc9ab0..c4a6dea 100644 --- a/TEST.md +++ b/TEST.md @@ -1,5 +1,10 @@ # Test Report +## v1.5.6 验证 +- 验证文件事件、`rs` 与 `SIGUSR1` 重启请求串行执行。 +- 验证旧进程退出并释放资源后才启动新进程。 +- 全量测试、竞态测试和基准测试均通过。 + ## 单元测试结果 执行时间: 2026-06-27 @@ -18,11 +23,11 @@ ok apigo.cc/go/watch 1.018s ## 性能测试结果 (Benchmark) ``` -BenchmarkIsMatch-16 16974895 67.03 ns/op -BenchmarkIsExcluded-16 42681092 24.32 ns/op -BenchmarkDebounce-16 3321357 351.8 ns/op -BenchmarkKeyGeneration-16 27723735 42.48 ns/op -BenchmarkKeyGenerationWithFmt-16 7360394 167.6 ns/op +BenchmarkIsMatch-16 26264806 45.35 ns/op +BenchmarkIsExcluded-16 42229480 28.65 ns/op +BenchmarkDebounce-16 8131125 148.0 ns/op +BenchmarkKeyGeneration-16 47584114 25.56 ns/op +BenchmarkKeyGenerationWithFmt-16 13956841 88.51 ns/op ``` ## 测试覆盖场景 diff --git a/go.mod b/go.mod index 6a57de3..4925b5f 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module apigo.cc/go/watch go 1.25.0 require ( - apigo.cc/go/file v1.5.5 + apigo.cc/go/file v1.5.6 apigo.cc/go/timer v1.5.0 github.com/fsnotify/fsnotify v1.10.1 github.com/gobwas/glob v0.2.3 @@ -11,14 +11,14 @@ require ( require ( apigo.cc/go/jsmod v1.5.3 // indirect - apigo.cc/go/shell v1.5.4 + apigo.cc/go/shell v1.5.6 ) require ( - apigo.cc/go/cast v1.5.3 // indirect - apigo.cc/go/encoding v1.5.4 // indirect - apigo.cc/go/rand v1.5.3 // indirect - apigo.cc/go/safe v1.5.2 // indirect + apigo.cc/go/cast v1.5.5 // indirect + apigo.cc/go/encoding v1.5.6 // indirect + apigo.cc/go/rand v1.5.4 // indirect + apigo.cc/go/safe v1.5.3 // indirect github.com/kr/text v0.2.0 // indirect golang.org/x/crypto v0.52.0 // indirect golang.org/x/sys v0.45.0 // indirect diff --git a/go.sum b/go.sum index 3d917c0..fc6dd5e 100644 --- a/go.sum +++ b/go.sum @@ -1,17 +1,17 @@ -apigo.cc/go/cast v1.5.3 h1:jk6VX0rGFhjKtfPhsaV6IKYpiGmORRk9qPTtuNS53tw= -apigo.cc/go/cast v1.5.3/go.mod h1:GMjjrYn93tWat1U409G7h1jR3ejfLLI7r0efBo9Sbd4= -apigo.cc/go/encoding v1.5.4 h1:Fk8TrveZATyy8SHukC4ZiqdTSp+QIfsRHtt55xmMK7w= -apigo.cc/go/encoding v1.5.4/go.mod h1:dShEsZ3gKqBINz7TSOYf4e7/fBCqCY9VzlenoGUQUFM= -apigo.cc/go/file v1.5.5 h1:/+HmDumLu6Qk2KuQL63M9lpgzHTDL+QJ8dStOl7e9gs= -apigo.cc/go/file v1.5.5/go.mod h1:xRVNhctvqOKeBemmcRW/BQfgkc3B+vT/UZVdSc7duUo= +apigo.cc/go/cast v1.5.5 h1:DMbfK3uPhPjRaXutj3StIZIkfjFIATSXfuAOeNOd4Fw= +apigo.cc/go/cast v1.5.5/go.mod h1:GMjjrYn93tWat1U409G7h1jR3ejfLLI7r0efBo9Sbd4= +apigo.cc/go/encoding v1.5.6 h1:v02swVfbFGidD4QcX2ktuHHbCjdSbOB85fhzAXay+7M= +apigo.cc/go/encoding v1.5.6/go.mod h1:Big9q1Zwy4071dXtnrQ3SJDzfa/G7/A60KE/5+M//P8= +apigo.cc/go/file v1.5.6 h1:Y7w3Tyu4e16VuED7rF2pzba+dzGE+hjDnBlIPVHIfzA= +apigo.cc/go/file v1.5.6/go.mod h1:9sdW4ylSOA0HWc8Yt8qdnmMf6nn5SUEmjoPKyXpYXIQ= apigo.cc/go/jsmod v1.5.3 h1:S3W317bH0QV2NMeRO1E0v6ySIBOfMWYv/NuQJbvqKWU= apigo.cc/go/jsmod v1.5.3/go.mod h1:bmyeZtOAP/j5am+YRnaiM89smysK24K7ebk0koFtsSw= -apigo.cc/go/rand v1.5.3 h1:O4bPIwyaOWEBCr0nL9A4G4qG48AqiGTCzfPeckm3Ius= -apigo.cc/go/rand v1.5.3/go.mod h1:q1BTFkY/cXE229dDD5Q22lF7T0DoKPV6xAu+6bCrDH4= -apigo.cc/go/safe v1.5.2 h1:EnuEOW/SGwf/5A0nw9LnqfKJE071+TIc6ez8HI9R9Lg= -apigo.cc/go/safe v1.5.2/go.mod h1:2GqCCLLGex4OAhdET3iBWm1R+LIYtmTrvHP8W0iESSw= -apigo.cc/go/shell v1.5.4 h1:Kn6lP6I6d9U0hbyUjpKKFdFZ8RPo4vi4V6AYW8YFzrc= -apigo.cc/go/shell v1.5.4/go.mod h1:FdZWUrcXHGJXo725oSyHqAeFoX0E9yY3PDhrz9hujgY= +apigo.cc/go/rand v1.5.4 h1:eessFBsKQuoOYdzrStldOGw9f4HqbeO87X95bI4jIBQ= +apigo.cc/go/rand v1.5.4/go.mod h1:q1BTFkY/cXE229dDD5Q22lF7T0DoKPV6xAu+6bCrDH4= +apigo.cc/go/safe v1.5.3 h1:9p/BmdlVWLbekpKByZIFC09Qn8Wdhik2eINiwunBxPs= +apigo.cc/go/safe v1.5.3/go.mod h1:Ay8kEPL76DeXH4ifsVTc/3/sfGHlWLQjAp4vi7GA9AI= +apigo.cc/go/shell v1.5.6 h1:2i93lNJ0oy/D5kOmlmOjwVjLPsW7vQBo0trLOF9AAAI= +apigo.cc/go/shell v1.5.6/go.mod h1:Bp73DGKESOISWSIGUtL1dsFo5g4SI10GhgsnLJCTpsw= apigo.cc/go/timer v1.5.0 h1:iPo/IQn+iuhBRI1/MR1txwZnamef/RBBfOiIlBiqkgk= apigo.cc/go/timer v1.5.0/go.mod h1:kOnqTTX+zA4AH7SfC+LpUm4ZvS+DVyWWMqul/V5QWJs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=