Facebook представил Watchman, открытый инструмент для отслеживания изменения файлов

5 июня 2013 года

Инженеры из компании Facebook анонсировали новый открытый инструмент Watchman, в рамках которого создан сервис для отслеживания изменения и поиска файлов в заданных иерархиях директорий. При обнаружении факта изменения содержимого файла Watchman позволяет выполнить определённое пользователем событие, привязанное к типу файла и характеру изменений.

Несмотря на то, что подобные возможности могут найти достаточно широкую область применения, основной целью разработки является ускорение работы системы сборки больших проектов, в которых Watchman может быть использован для автоматизации пересборки ресурсов, связанных с файлом для которого зафиксировано изменение. В частности, Watchman используется в Facebook для ускорения многоступенчатой системы сборки компонентов на языке PHP - вместо пересборки всего проекта применяется тактика инкрементальной пересборки только изменённого кода. В результате время пересборки удалось сократить на 60%.

Код проекта написан на языке Си и распространяется под лицензией Apache 2.0. Программой поддерживается широкий спектр средств отслеживания изменений в файловой системе: inotify в Linux, kqueue в Mac OS X, FreeBSD 9.1 и OpenBSD, port_create в Illumos и Solaris.

Watchman поддерживает рекурсивный мониторинг изменений в произвольном числе директорий, отслеживая всю иерархию от текущей директории до конечных ветвей дерева. Перед инициированием действия и запуском связанной с ним команды система дожидается завершения изменения и закрытия файла. Серверный и клиентский интерфейс реализован в рамках единого исполняемого файла watchman, поддерживающего как управление из командной строки так и работу в виде сервиса, обрабатывающего запросы в формате JSON.

Допускается создание достаточно сложных фильтров, определяющих правила выбора файлов для привязки к действиям. Возможно определение исключений, учёт времени изменения, использование регулярных выражений PCRE и логических операторов, задание таймаута перед запуском команды, создание многоступенчатых правил (например, запуск действия когда файл А изменён после изменения файла Б). Watchman также поддерживает большинство возможностей утилиты find, но отличается тем, что осуществляет выборку по предварительно сформированному индексу, без перебора содержимого всей иерархии директорий на каждый запрос. Также поддерживается работа в режиме накопления лога изменений содержимого файловой системы. Кроме запуска приложений для выполнения действий поддерживается организация взаимодействия через систему подписки на изменения, при котором внешняя программа открывает сокет и ждёт поступления сигналов о наличии изменений.

Простейший пример использования сервиса выглядит следующим образом:

Запускаем мониторинг директории ~/src:


$ watchman watch ~/src

Указываем о необходимости запуска программы buildme при изменении CSS-файлов (путь к файлу передаётся в качестве аргумента при запуске buildme):


$ watchman -- trigger ~/src buildme '*.css' -- minify-css

Источники править


 
 
Creative Commons
Эта статья содержит материалы из статьи «Facebook представил Watchman, открытый инструмент для отслеживания изменения файлов», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.