flush-subscriptions
自 4.8 版本起。
将缓冲的更新刷新到与当前会话关联的订阅,保证它们是最新的,截止到 Watchman 收到 flush-subscriptions
命令的时间。
订阅更新将在 flush-subscriptions
请求及其响应之间交错进行。 一旦收到响应,订阅就是最新的。
此命令旨在供交互式程序使用,这些程序具有维护 Watchman 订阅的后台进程或守护程序。 典型的模式是将交互式命令转发到该进程,该进程调用 flush-subscriptions
,然后处理它收到的任何订阅更新。 此模式消除了在交互式命令之前立即更改的文件的竞争。
参数
sync_timeout
:必需。 等待观察同步 Cookie 的毫秒数。 同步 Cookie 在flush-subscriptions
调用的开始时创建,一旦观察到 Cookie,则表示操作系统已将所有更新发送给 Watchman,至少到flush-subscriptions
调用的开始。subscriptions
:可选。 要刷新的订阅。 默认情况下,这将刷新与此会话上的此项目关联的所有订阅。
示例
假设在此会话上已建立订阅 sub1
、sub2
和 sub3
,如果 sub1
有未决更新,sub2
是最新的,而 sub3
当前正在丢弃更新
["flush-subscriptions", "/path/to/root", {"sync_timeout": 1000}]
作为响应,Watchman 将首先为 sub1
发出一个单方面的订阅 PDU,然后响应
{
"clock": "c:1446410081:18462:7:135",
"synced": ["sub1"],
"no_sync_needed": ["sub2"],
"dropped": ["sub3"]
}
要刷新某些但并非所有与此会话关联的订阅的更新
["flush-subscriptions", "/path/to/root",
{
"sync_timeout": 1000,
"subscriptions": ["sub1", "sub2"]
}
]
延迟和丢弃的更新
订阅通常会缓冲单个更新,直到 *settle* 周期到期。 flush-subscriptions
将立即强制这些更新通过。
当前由于 defer
或 defer_vcs
而延迟更新的订阅会立即更新,而无需等待 defer
或 defer_vcs
结束。
当前使用 drop
状态丢弃更新的订阅将不会收到任何更新。 他们的名称将在 dropped
字段中返回。
注释
flush-subscriptions
只能用于刷新与当前会话关联的订阅。- 单个会话可以同时订阅来自多个项目的更新。 但是,
flush-subscriptions
每次只能刷新一个项目的更新。