Отображение контрольных номеров версий CVS на Web страницах
Автор: © Mark Nielsen
|
ВведениеНесколько лет я пишу статьи. Простой парень, имя которого Фил Хантер (Phil Hunter) из Central Ohio Linux User Group советовал мне несколько раз вести контроль версий моих статей. Конечно, это лишь еще один пункт в длинном списке того, что стоило бы сделать. Как обычно, при невероятном стечении обстоятельств, я решил воплотить разные идеи в жизнь. Предпосылки были следующими:
Perl скрипт для отображения номеров версийДля упрощения, так что бы каждый документ мог использовать одну и ту же команду, я использовал следующую серверную включаемую команду, которая работает с Apache. PHP, Perl ASP, Mason. Другие серверные скриптовые языки включают похожие команды:<!--#include virtual="/ssi/cvs_version.pl" --> Также необходимо настроить сервер так, чтобы все страницы могли использовать серверные включаемые команды. Я это сделал, указав в файле httpd.conf следующие вещи: <Directory "/usr/local/apache_gnujobs/htdocs"> Options All Indexes FollowSymLinks MultiViews ExecCGI Includes AllowOverride All Order allow,deny Allow from all </Directory> AddType text/html .shtml AddHandler server-parsed .shtml .html .htm .shtm Тут находится текстовая версия скрипта, а можно просто вырезать его из этого документа. #!/usr/bin/perl print "Content-type: text/html\n\n\n\n"; ### Получаем имя затребованного файла. my $Temp = $ENV{'REQUEST_URI'}; my $Cvs = $Temp; ### Разбиваем URL на части по "/". my (@Junk) = split(/\//, $Cvs); ### Получаем конец URL, который является именем файла. my $File = pop @Junk; $Cvs =~ s/[^\/]+$//g; ### Присоединяем корневой каталог документов, так, что получаем полный путь к ### файлу на нашем сервере. Так же подсоединяем имя CVS/Entries, что бы получить ### информацию CVS. $Cvs = $ENV{'DOCUMENT_ROOT'} . $Cvs . "CVS/Entries"; ### Открываем файл, и если находим соответствие, записываем в $Match my $Match = ""; open(FILE,$Cvs); while (my $Line = <FILE>) { if ($Line =~ /$File/) {$Match = $Line; chomp $Line} } close FILE; ### если соответствие не найдено, печатаем "не найдено", иначе получаем информацию. if ($Match eq "") {print "Информация CVS не найдена. '$File'\n";} else { ### Получаем необходимую информацию и выводим ее. my ($Junk,$File,$Version,$Date,@Junk) = split(/\//, $Match); print "Версия <b>$Version</b> : Дата последнего изменения <b>$Date</b>\n"; } БезопасностьЕсть потенциальная проблема с безопасностью при использовании моего скрипта. Кто угодно может получить доступ к вашим файлам, находящихся в каталоге CVS. Я не знаю, будет ли это сильно беспокоить большинство людей, и я совершенно точно знаю, что это не будет беспокоить меня, но на всякий случай я блокировал чтение файлов в каждом каталоге CVS, использовав нижеприведённые команды в моём httpd.conf файле. Это простой вариант. У меня нет и не будет файлов, имена которых будут заканчиваться на "Root", "CVS", "Repository" или "Entries", так что для меня всё подходит.<Files ~ "CVS$"> Order allow,deny Deny from all </Files> <Files ~ "Root$"> Order allow,deny Deny from all </Files> <Files ~ "Repository$"> Order allow,deny Deny from all </Files> <Files ~ "Entries$"> Order allow,deny Deny from all </Files> ВыводыПрименение CVS для управления версиями документов, программ и скриптов очень удобно. Использование CVS и моего скрипта на perl, выводящего версии, очень хороший и приятный путь для контроля версий ваших документов. У меня не было необходимости в более сложном контроле, и то, что я написал мне совершенно подходит.Несколько простых вещей, которые стоило бы сделать:
Ссылки
Марк (Mark) работает в качестве независимого консультанта, а свободное время использует для таких благих дел, как GNUJobs.com, написания статей, написания свободного ПО и работает добровольцем на eastmont.net. Copyright © 1/2001 Mark Nielsen
|
Copyright © 2001, Mark Nielsen. Copying license http://www.linuxgazette.com/copying.html Published in Issue 64 of Linux Gazette, March 2001 |
Вернуться на главную страницу |