Skip to main content

flush-subscriptions

Since 4.8.

Flushes buffered updates to subscriptions associated with the current session, guaranteeing that they are up-to-date as of the time Watchman received the flush-subscriptions command.

Subscription updates will be interleaved between the flush-subscriptions request and its response. Once the response has been received, subscriptions are up-to-date.

This command is designed to be used by interactive programs that have a background process or daemon maintaining a subscription to Watchman. The typical pattern is for interactive commands to be forwarded to the process, which calls flush-subscriptions and then processes any subscription updates it received. This pattern eliminates races with files changed right before the interactive command.

Arguments

  • sync_timeout: Required. The number of milliseconds to wait to observe a synchronization cookie. The synchronization cookie is created at the start of the flush-subscriptions call, and once the cookie is observed, means that the OS has sent watchman all the updates till at least the start of the flush-subscriptions call.
  • subscriptions: Optional. Which subscriptions to flush. By default this flushes all subscriptions associated with this project on this session.

Examples

Assuming subscriptions sub1, sub2 and sub3 have been established on this session, if sub1 has updates pending, sub2 is up-to-date and sub3 is currently dropping updates:

["flush-subscriptions", "/path/to/root", {"sync_timeout": 1000}]

In response, Watchman will first emit a unilateral subscription PDU for sub1, then respond with

{
"clock": "c:1446410081:18462:7:135",
"synced": ["sub1"],
"no_sync_needed": ["sub2"],
"dropped": ["sub3"]
}

To flush updates for some but not all subscriptions associated with this session:

["flush-subscriptions", "/path/to/root",
{
"sync_timeout": 1000,
"subscriptions": ["sub1", "sub2"]
}
]

Deferred and Dropped Updates

Subscriptions will typically buffer individual updates until a settle period has expired. flush-subscriptions will force those updates through immediately.

Subscriptions currently deferring updates because of defer or defer_vcs are updated immediately, without waiting for the defer or defer_vcs to end.

Subscriptions currently dropping updates with a drop state will not get any updates. Their names will be returned in the dropped field.

Notes

  • flush-subscriptions can only be used to flush subscriptions associated with the current session.
  • A single session can be subscribed to updates from multiple projects at the same time. However, flush-subscriptions can only flush updates for one project at a time.