GET(1)
НАЗВАНИЕ
get - извлечение версии из SCCS-файла
СИНТАКСИС
get [-rс_идентификатор] [-cкон_время] [-iсписок] [-xсписок] [-k]
[-e] [-l[p]] [-p] [-m] [-n] [-s] [-b] [-g] [-t] [-wтекст]
[-aпорядковый_номер] файл ...
ОПИСАНИЕ
Команда get генерирует текстовый файл из указанных
SCCS-файлов в соответствии с опциями. Опции могут задаваться в любом порядке и относятся ко всем указанным
SCCS-файлам. Если указано имя каталога, get обрабатывает все файлы в этом каталоге, начинающиеся с s.; файлы,
к которым нет доступа на чтение, игнорируются без дополнительных сообщений. Если указано имя -, происходит
чтение со стандартного ввода; каждая строка при этом
трактуется, как имя SCCS-файла, подлежащего обработке.
Файлы, не начинающиеся с s., и файлы, к которым нет
доступа на чтение, также игнорируются без дополнительных сообщений.
Сгенерированный текст обычно записывается в так называемый g-файл. Имя g-файла получается путем удаления начальных s. из имени SCCS-файла (см. ниже).
Каждая опция об ясняется ниже для одного обрабатываемого файла; при нескольких файлах она применяется к каждому из них.
- -rс_идентификатор
- Извлечь из SCCS-файла версию по указанному с_иден-
тификатору (SID, SCCS IDentification string). Таблица 1 (ниже) показывает для наиболее распространенных случаев, как зависит извлекаемая версия от
указанного с_идентификатора, а также каким будет
с_идентификатор новой версии после создания командой delta(1) (если в get использована опция -e).
- -cкон_время
- Кон_время имеет формат:
гг[мм[дд[чч[мм[сс]]]]]
Не включать в генерируемый файл версии SCCS-файла, которые созданы после указанного кон_времени. Опущенные цифры по умолчанию имеют максимально возможные значения, например -c7502 эквивалентно -c750228235959. Произвольное число любых нецифровых символов может разделять пары цифр, например можно задать кон_время в виде "-c77/2/2 9:22:25". Это позволяет использовать ключевые слова %E% и %U% (см. ниже) для вложенных get, например, в сеансе работы с командой cu(1C):
~!get "-c%E% %U%" s.file
- -e
- Показывает, что команда get делается для редактирования или последующего добавления версии в
SCCS-файл с помощью delta(1). Если для какой-либо
версии в SCCS-файле сделан get, последующие версии
с тем же с_идентификатором отвергаются до тех пор,
пока не будет выполнена команда delta [или в
SCCS-файле не будет установлен флаг j, см. admin(1)]. Допускается использование команды get -e одновременно для разных с_идентификаторов.
Если сгенерированный командой get с опцией -e g-файл случайно испорчен, он может быть перегенерирован командой get с опцией -k вместо -e.
Ограничение прав доступа к версиям SCCS-файла организуется с помощью запоминаемого в файле максимального и минимального номера версии, доступной
для редактирования, и списка пользователей, которые могут редактировать версии [см. admin(1)]. При использовании опции -e все эти права проверяются.
- -b
- Используется вместе в опцией -e для указания, что
новая версия должна начинать ответвление, как показано в таблице 1. Опция -b игнорируется, если в
SCCS-файле отсутствует флаг b [см. admin(1)] или
извлекаемая версия не является терминальной (то
есть у нее есть преемники в дереве версий
SCCS-файла). Для нетерминальных версий всегда будет строиться ответвление.
- -iсписок
- Список версий, которые должны быть включены при
генерации файла. Список имеет следующий синтаксис:
<список> ::= <элемент> | <список>,<элемент>
<элемент> ::= СИД | СИД-СИД
где СИД - сокращение от с_идентификатор - может
иметь любой формат, упомянутый в колонке "Указанный СИД" таблицы 1. Интерпретация значений показана в колонке "Извлеченный СИД" таблицы 1.
- -xсписок
- Список версий, которые не должны быть включены при
генерации файла. Формат списка см. в описании опции -i.
- -k
- Подавить при генерации подстановку значений вместо
ключевых слов (см. ниже). Опция -k подразумевается
опцией -e.
- -l[p]
- Выдать сведения о версиях в l-файл. Если используется опция -lp, l-файл не создается, все сведения пишутся на стандартный вывод. Формат l-файла
описан ниже.
- -p
- Текст, извлеченный из SCCS-файла, пишется на стандартный вывод. G-файл не создается. Все то, что
обычно пишется на стандартный вывод, при этом, если указана опция -s, не выводится никуда (исчезает), а если опция -s опущена, переадресуется в
стандартный протокол.
- -s
- Подавить выдачу на стандартный вывод. Выдача в
стандартный протокол (в том числе сообщения о фатальных ошибках) при этом не подавляется.
- -m
- Перед каждой строкой, извлеченной из SCCS-файла,
помещается с_идентификатор версии, в которой она
появилась, в следующем формате:
с_идентификатор табуляция строка
- -n
- Перед каждой строкой, извлеченной из SCCS-файла,
помещается значение ключевого слова %M% (см. ниже) в соответствии с форматом:
%M% табуляция строка
Если опции -m и -n используются одновременно, формат будет таким:
%M% табуляция с_идентификатор табуляция строка
- -g
- Подавить генерацию g-файла. Эта опция используется
для генерации l-файла или для проверки существования конкретного с_идентификатора.
- -t
- Получить доступ к самому последнему (по времени)
состоянию указанной версии (например -r1) или версии и уровню (например -r1.2).
- -wтекст
- Подставить текст вместо всех вхождений %W% в извлекаемый файл.
- -aпорядковый_номер
- Порядковый номер версии SCCS-файла, которая должна
быть извлечена (см. sccsfile(4)). Эта опция используется командой comb(1), пользователям ее применять не рекомендуется. Если указаны одновременно
опции -r и -a, принимается опция -a. Необходимо
соблюдать осторожность при одновременном использовании опций -a и -e, так как с_идентификатор создаваемой версии может оказаться не тем, который
ожидается. Для управления с_идентификатором создаваемой версии можно использовать одновременно
опции -a, -e и -r.
Для каждого обрабатываемого файла команда get выводит
на стандартный вывод с_идентификатор и количество
строк, извлеченных из SCCS-файла. Если используется опция -e, вслед за с_идентификатором, к которому получен
доступ, следует вновь созданный с_идентификатор. Если в
команде указано более одного файла, указан каталог или
стандартный ввод, перед обработкой каждого файла выводится его имя с предшествующим переводом строки. Если
используется опция -i, выводятся включаемые версии, за
которыми следует слово Included. Если используется опция -x, выводятся исключаемые версии, за которыми следует слово Excluded.
Таблица 1. Определение с_идентификатора (СИД)
Указанный СИД* | Опция -b**** | Дополнительные условия | Извлеченный СИД | СИД создаваемой версии
|
---|
<пусто>***** | нет | R по умолч.=mR | mR.mL | mR.(mL+1)
|
<пусто>***** | да | R по умолч.=mR | mR.mL | mR.mL.(mB+1).1
|
R | нет | R > mR | mR.mL | R.1***
|
R | нет | R = mR | mR.mL | mR.(mL+1)
|
R | да | R > mR | mR.mL | mR.mL.(mB+1).1
|
R | да | R = mR | mR.mL | mR.mL.(mB+1).1
|
| | R < mR и | |
|
R | - | R не существует hR.mL** | hR.mL.(mB+1).1
|
| | R < mR и | |
|
R | - | R существует | R.mL | R.mL.(mB+1).1
|
R.L | нет | L = mL | R.L | R.(L+1)
|
R.L | да | L = mL | R.L | R.L.(mB+1).1
|
R.L | - | L < mL | R.L | R.L.(mB+1).1
|
R.L.B | нет | B = mB | R.L.B.mS | R.L.B.(mS+1)
|
R.L.B | да | B = mB | R.L.B.mS | R.L.(mB+1).1
|
R.L.B.S | нет | B = mB | R.L.B.S | R.L.B.(S+1)
|
R.L.B.S | да | B = mB | R.L.B.S | R.L.(mB+1).1
|
R.L.B.S | - | B < mB | R.L.B.S | R.L.(mB+1).1
|
* | R, L, B, и S - это соответствующие компоненты с_идентификатора: выпуск (release), уровень (level),
ветвь (branch), модификация (sequence); m означает
максимум. Таким образом, например, R.mL означает
максимальный номер уровня в версии R; R.L.(mB+1).1
означает первый номер новой ветви (то есть максимальный номер ветви плюс 1) уровня L версии R. При указании с_идентификатора в виде R.L, R.L.B или
R.L.B.S каждый из указанных компонентов должен существовать.
|
---|
** | hR - это максимальная существующая версия, меньшая, чем указанная несуществующая версия R.
|
---|
*** | Используется для создания первой версии нового выпуска.
|
---|
**** | Опция -b работает, только если в SCCS-файле присутствует флаг b [см. admin(1)]. Если в колонке указан -, то значение может быть любым.
|
---|
***** | Применимо, только если флаг d (с_идентификатор по
умолчанию) в файле не установлен. Если флаг d установлен, используется его значение, как если бы оно было указано в команде. Тем самым применяются
другие строки таблицы 1.
|
---|
Идентифицирующие ключевые слова
Идентифицирующая информация вставляется в извлекаемый
текст вместо идентифицирующих ключевых слов. В текстах,
сохраняемых в SCCS-файлах, могут использоваться следующие ключевые слова:
%M% | Имя модуля: либо значение флага m [см. admin(1)],
либо, если флаг m отсутствует, простое имя
SCCS-файла в котором удалены передние s..
|
---|
%I% | С_идентификатор (%R%.%L%.%B%.%S%) извлекаемого
текста.
|
---|
%R% | Выпуск (release).
|
---|
%L% | Уровень (level).
|
---|
%B% | Ветвь (branch).
|
---|
%S% | Модификация (sequence).
|
---|
%D% | Текущая дата (гг/мм/дд).
|
---|
%H% | Текущая дата (мм/дд/гг).
|
---|
%T% | Текущее время (чч:мм:сс).
|
---|
%E% | Дата создания последней версии (гг/мм/дд).
|
---|
%G% | Дата создания последней версии (мм/дд/гг).
|
---|
%U% | Время создания последней версии (чч:мм:сс).
|
---|
%Y% | Тип модуля: значение флага t в SCCS-файле [см. admin(1)].
|
---|
%F% | Простое имя SCCS-файла.
|
---|
%P% | Полное имя SCCS-файла.
|
---|
%Q% | Значение флага q в SCCS-файле [см. admin(1)].
|
---|
%C% | Текущий номер строки. Это ключевое слово предназначено для идентификации ошибок типа "этого не должно быть". Оно не предназначено для использования в каждой строке для нумерации.
|
---|
%Z% | Четырехсимвольная цепочка @(#), распознаваемая
программой what(1).
|
---|
%W% | Сокращение для создания строк выполняемых файлов
версии 5 для what(1): %W% = %Z%%M% табуляция %I%
|
---|
%A% | Сокращение для создания строк выполняемых файлов
не версии 5 для what(1): %A% = %Z%%Y% %M% %I%%Z%
|
---|
Команда get создает несколько дополнительных файлов:
g-файл, l-файл, p-файл и z-файл. Имена дополнительных
файлов формируются из имени SCCS-файла: простое имя
SCCS-файла должно начинаться с s.; имя g-файла получается путем удаления s., имена остальных файлов строятся
путем замены первого символа s соответственно на l, p,
z. Например, для файла s.xyz.c, дополнительные файлы
будут иметь имена соответственно xyz.c, l.xyz.c,
p.xyz.c и z.xyz.c.
G-файл, содержащий сгенерированный текст, создается в
текущем каталоге (если не используется опция -p).
G-файл создается даже если из SCCS-файла get не извлек
ни одной строки. За идентификатор владельца берется реальный идентификатор пользователя. Если используется
опция -k, права доступа к файлу устанавливаются равными
644, иначе 444. Реальный идентификатор пользователя
должен быть таким, чтобы позволить запись в текущий каталог.
L-файл содержит таблицу, показывающую, какие версии были использованы при генерации текста. L-файл создается
в текущем каталоге при использовании опции -l; его права доступа 444, идентификатор владельца равен реальному
идентификатору пользователя. Реальный идентификатор
пользователя должен быть таким, чтобы позволить запись
в текущий каталог.
Строки l-файла имеют следующий формат:
- Пробел, если версия использована; * в противном
случае.
- Пробел, если версия использована или проигнорирована; *, если версия не использована и не проигнорирована.
- Код причины, почему версия была или не была использована:
I: Включена по опции -i.
X: Исключена по опции -x.
C: Время не соответствует указанному в опции -c.
- Пробел.
- С_идентификатор.
- Табуляция.
- Дата и время создания (гг/мм/дд чч:мм:сс).
- Пробел.
- Входное имя пользователя, создавшего версию.
Комментарии и номер причины модификации выводятся
на следующих строках, перед ними один знак табуляции. Каждая запись заканчивается пустой строкой.
P-файл используется для передачи информации от get с
опцией -e к delta. Его содержимое также используется
для предотвращения последующего выполнения get -e с тем
же с_идентификатором, пока не будет выполнена команда
delta или в SCCS-файле не будет установлен флаг j, [см.
admin(1)]. P-файл создается в каталоге, содержащем
SCCS-файл, действующий идентификатор пользователя должен быть таким, чтобы разрешить запись в этот каталог.
Права доступа к файлу равны 644, идентификатор владельца равен действующему идентификатору пользователя. Формат p-файла следующий: извлеченный с_идентификатор,
пробел, новый с_идентификатор, пробел, имя, соответствующее реальному идентификатору пользователя, пробел,
дата и время выполнения get, пробел, аргумент опции -i
(если есть), пробел, аргумент опции -x (если есть), перевод строки. В p-файле может быть различное число
строк; никакие две из них не могут содержать один и тот
же новый с_идентификатор.
Z-файл служит как файл-замок для защиты от одновременных изменений. Его содержимое - двоичный двухбайтный
идентификатор процесса get, создавшего z-файл. Z-файл
создается в каталоге, содержащем SCCS-файл, на время
выполнения get. Права доступа к z-файлу 444, остальное
то же, что и для p-файла.
ФАЙЛЫ
g-файл Существует до выполнения команды delta;
удаляется после ее завершения.
p-файл Существует до выполнения команды delta;
может остаться после ее завершения.
q-файл Создается во время выполнения команды
delta; удаляется после ее завершения.
x-файл Создается во время выполнения команды
delta; переименовывается в SCCS-файл
после ее завершения.
z-файл Создается во время выполнения команды
delta; удаляется также во время ее вы-
полнения.
d-файл Создается во время выполнения команды
delta; удаляется после ее завершения.
/usr/bin/bdiff Программа для выявления различий между
"извлеченным" и g-файлом.
СМ. ТАКЖЕ
admin(1), delta(1), help(1), prs(1), what(1).
sccsfile(4) в Справочнике программиста.
ДИАГНОСТИКА
Для раз яснений пользуйтесь командой help(1).
СЮРПРИЗЫ
Если действующий идентификатор пользователя позволяет
запись (явно или неявно) в каталог, содержащий
SCCS-файлы, а реальный идентификатор пользователя этого
не позволяет, то при использовании опции -e в команде
get может быть указано только одно имя файла.