watchman/cmds/find.cpp (30 lines of code) (raw):
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#include "watchman/Client.h"
#include "watchman/query/Query.h"
#include "watchman/query/eval.h"
#include "watchman/query/parse.h"
#include "watchman/saved_state/SavedStateFactory.h"
#include "watchman/watchman_cmd.h"
using namespace watchman;
/* find /root [patterns] */
static void cmd_find(Client* client, const json_ref& args) {
/* resolve the root */
if (json_array_size(args) < 2) {
client->sendErrorResponse("not enough arguments for 'find'");
return;
}
auto root = resolveRoot(client, args);
auto query = parseQueryLegacy(root, args, 2, nullptr, nullptr, nullptr);
if (client->client_mode) {
query->sync_timeout = std::chrono::milliseconds(0);
}
query->clientPid = client->stm ? client->stm->getPeerProcessID() : 0;
auto res = w_query_execute(query.get(), root, nullptr, getInterface);
auto response = make_response();
response.set(
{{"clock", res.clockAtStartOfQuery.toJson()},
{"files", std::move(res.resultsArray)}});
client->enqueueResponse(std::move(response));
}
W_CMD_REG(
"find",
cmd_find,
CMD_DAEMON | CMD_ALLOW_ANY_USER,
w_cmd_realpath_root)
/* vim:ts=2:sw=2:et:
*/