跳到主要内容

flush-subscriptions

自 4.8 版本起。

将缓冲的更新刷新到与当前会话关联的订阅,保证它们是最新的,截止到 Watchman 收到 flush-subscriptions 命令的时间。

订阅更新将在 flush-subscriptions 请求及其响应之间交错进行。 一旦收到响应,订阅就是最新的。

此命令旨在供交互式程序使用,这些程序具有维护 Watchman 订阅的后台进程或守护程序。 典型的模式是将交互式命令转发到该进程,该进程调用 flush-subscriptions,然后处理它收到的任何订阅更新。 此模式消除了在交互式命令之前立即更改的文件的竞争。

参数

  • sync_timeout:必需。 等待观察同步 Cookie 的毫秒数。 同步 Cookie 在 flush-subscriptions 调用的开始时创建,一旦观察到 Cookie,则表示操作系统已将所有更新发送给 Watchman,至少到 flush-subscriptions 调用的开始。
  • subscriptions:可选。 要刷新的订阅。 默认情况下,这将刷新与此会话上的此项目关联的所有订阅。

示例

假设在此会话上已建立订阅 sub1sub2sub3,如果 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 将立即强制这些更新通过。

当前由于 deferdefer_vcs 而延迟更新的订阅会立即更新,而无需等待 deferdefer_vcs 结束。

当前使用 drop 状态丢弃更新的订阅将不会收到任何更新。 他们的名称将在 dropped 字段中返回。

注释

  • flush-subscriptions 只能用于刷新与当前会话关联的订阅。
  • 单个会话可以同时订阅来自多个项目的更新。 但是,flush-subscriptions 每次只能刷新一个项目的更新。