Я хотел бы выполнить команду, которая берет определенный файл в проекте (строит его по мере необходимости) и отправляет куда-то извне. Например, это может быть команда, загружающая веб-страницу или отправляющая электронное письмо. Он может даже записывать некоторые дополнительные файлы, такие как журнал, но не в этом смысл его вызова.
Другими словами, это действие вызывается указанием его источника, а не цели — либо потому, что нет ощутимой цели, либо оно незначительно, а действие в первую очередь требуется из-за его побочного эффекта.
Я вижу, что должен быть предоставлен дополнительный аргумент командной строки, например:
% BuildSystem send pizza.box
Приведенная выше команда должна быть эквивалентна следующей:
% BuildSystem pizza.box
% send pizza.box
Можно ли (и "должно ли") выполнять это с помощью системы сборки shake
?
P.S. Как Дэниел предлагает в ответе, я могу расширить анализатор аргументов shake
. Но я не уверен, что это лучшая практика для такого случая. Кажется, это немного противоречит тому, как ведет себя shake
, рассматривая каждый аргумент командной строки как самодостаточную цель. Это также совершенно новая логика для оператора, так много накладных расходов для такой черной задачи.
Может быть более интуитивно понятно запрашивать файл receipt
для каждого отправляемого box
. Например:
% BuildSystem pizza.receipt
- тогда будет эквивалентно:
% BuildSystem pizza.box
% send pizza.box >pizza.receipt
С другой стороны, как я понимаю из официального ответа на вопрос рядом, у нас не может быть псевдоцели, такой как pizza.send
, которая не фактически приводит к созданию файла pizza.send
. Так что я не уверен, опять же, если это правильный путь.
P.S. 2 Было бы еще лучше, если бы мы могли заменить верификатор успеха по умолчанию "файл существует" на собственный код. Например, вместо того, чтобы проверять, действительно ли был создан файл pizza.receipt
(в котором нет необходимости), мы можем позвонить клиенту и спросить, понравился ли ему обед. Если мы сможем это устроить, то сможем вызвать соответствующее правило с целью "псевдофайл" pizza.send
. Как правило, артефакты сборки вообще не обязательно должны находиться в локальной файловой системе, поскольку предоставляется код, который может их проверять и извлекать.