14.9 Файл установки фильтров contents

14.9 Файл установки фильтров

Фильтры позволяют вам сделать автоматически специальное преобразование файлов при внесении их в хранилище CVS, а также при копировании файлов из хранилища.

Файл с именем cvswrappers определяет скрипт, который будет выполняться над файлом, когда его имя удовлетворяет регулярному выражению. Более точно, существует два скрипта. Один тот, который выполняется над файлом/каталогом перед тем, как файл помещается в хранилище (параметр -t), а другой - тот, который вызывается, когда файл копируется из хранилища (параметр -f). Параметры -t и -f не действуют, если используется CVS типа клиент/сервер.

cvswrappers имеет параметр -m, чтобы определить методологию слияния файлов, если только они не двоичные, когда они обновляются. MERGE означает обычное поведение CVS: попытка слияния. COPY означает, что cvs update не будет пытаться слить файлы, как она не делает это для двоичных файлов.

Предупреждение: не стоит пробовать этот параметр для версий CVS ранее, чем 1.9.

Параметр -m в файле cvswrappers воздействует на поведение CVS лишь когда производится слияние по команде update. Нет никакой разницы в каком виде файлы хранятся. Базовый формат файла cvswrappers следующий:

wildcard [option value][option value]... ,
где параметрами могут быть:

-f
фильтрация при выдаче из CVS;
-t
фильтрация при записи в CVS;
-m
метод обновления (update);
-k
подстановка ключевых слов,
а значениями параметров являются строки, ограниченные одиночными апострофами, например:
*.nib -f 'unwrap %s' -t 'wrap %s %s' -m 'COPY'
*.c -t 'indent %s %s'
wildcard означает в примере шаблон, описывающий имена файлов. Вышепривед©нный пример файла cvswrappers устанавливает, что все файлы и каталоги в хранилище, имена которых заканчиваются на .nib, должны фильтроваться программой wrap непосредственно перед помещением в хранилище. Такие файлы должны быть подвергнуты фильтрации программой unwrap после выдачи из хранилища. В примере устанавливается также, что будет использован метод COPY во время выполнения команды update, т.е. не будут предприняты попытки слияния.

В последней строке примера устанавливается, что для файлов, имена которых оканчиваются на .c будет предпринята фильтрация программой indent перед помещением в хранилище.

Фильтр -t вызывается с двумя аргументами: первый - имя файла/каталога, который должен фильтроваться, второй - путь, куда должен быть помещ©н результат фильтрации.

Фильтр -f вызывается с одним аргументом, именем файла/каталога, который подлежит фильтрации. Конечный результат фильтрации будет находиться в пользовательском каталоге.

Заметим, что параметры -t и -f не вполне эффективно справляются с частью операций CVS: установление факта модификации файлов. Например, CVS может ошибочно воспринимать каталог немодифицированным, даже если какой-то файл внутри модифицирован, но вы сможете заставить CVS выполнить операцию commit, использовав параметр -f в команде cvs commit.

Другой пример. Следующая команда импортирует каталог, обрабатывая файлы, имена которых заканчиваются на .exe как двоичные:
cvs import -I ! -W "*.exe -k 'b'" first-dir vendortag reltag


contents Обновлено: 16.03.2015