GET(1) 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, см. ad- min(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-файле [см. ad- min(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-файла имеют следующий формат: 1. Пробел, если версия использована; * в противном случае. 2. Пробел, если версия использована или проигнори- рована; *, если версия не использована и не проигнорирована. 3. Код причины, почему версия была или не была ис- пользована: I: Включена по опции -i. X: Исключена по опции -x. C: Время не соответствует указанному в опции -c. 4. Пробел. 5. С_идентификатор. 6. Табуляция. 7. Дата и время создания (гг/мм/дд чч:мм:сс). 8. Пробел. 9. Входное имя пользователя, создавшего версию. Комментарии и номер причины модификации выводятся на следующих строках, перед ними один знак табуля- ции. Каждая запись заканчивается пустой строкой. 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 может быть указано только одно имя файла.