> Hi!
>
> На ftp.lexa.ru имеются свежие последовательные диффы (19.2 ->19.3, 19.3->20.0
> ... 20.2->20.3). Употребляйте. Я постараюсь держать их на пару версий назад
> постоянно. Возможно, в отдельной директории diffs (еще подумаю).
>
> К сожалению, пожелания о diff -C 5 и о выделении mod_charset.{c,h} я выполнять
> на регулярной основе не в состоянии. По той причине, что это никак не
> вписывается в производственный процесс.
>
Почему не вписывается?
> Поясню подробнее. Процесс выглядит так - разрабатываю/правлю я дома (крайне
> редко - где-то еще), а CVS repository живет в университете. Как следствие, я
> могу либо делать cvs diff дома (_до_ коммита), либо делать cvs rdiff
> "в университете" (через rsh). Первый путь подразумевает ручную работу. К
> сожалению, времени на ручную работу почти нет - и так на русский апач остается
> минут по 40 в день, а ручная работа займет порядка половины этого времени
> (по простой причине - сказать ~/.bin/supercommit 20.3 и идти ужинать - это одно
> - оно само дозвонится, сделает commit, tag, rdiff и положит на ftp, а вбивать
> одну команду пока "оно" три раза перезванивает - совсем другое).
>
> Аналогично и с выдиранием mod_charset отдельно. Я могу согласиться, что кому-то
> так удобнее. Но мне - неудобнее, а я сталкиваюсь с русским апачем вероятно чаще
> всех :). Т.е. когда-то, по большим праздникам, типа начало нового patchlevel -
> возможно. Но не каждый день - извините, некогда. И автоматизировать некогда
> (по простой причине - список файлов все время меняется - хотя-бы в test-suite
> добавляется по 2-3 файла ежедневно - значит нужно где-то держать их список и
> автоматом его апдейтить - еще и об этом думать).
>
Зачем? Почему скрипт не может сравнить список файлов из Russian Apache и из
оригинального Apache ? Чтобы никто не обвинял меня в голословности прилагаю
скромненький скриптик, который у меня дома во всяком случае (RedHat 4.2)
отлично все рассортировывает на две кучки: xxx.gz -- patch для измененных
файлов и yyy.tar.gz -- архив добавленных файлов ;)
> Извините за эгоцентризм. Я не хотел никого задеть. Но GNU patch мои файлы
> понимает и этого должно быть достаточно :).
>
В принципе да, но написать скрипт не так уж сложно -- IMHO перепирательства по
этому поводу уже заняли сравнимое время ;))
P.S. Насчет использования скрипта: он сделан на скорую руку (уж извините).
Запускается с 3-мя параметрами: первый -- исходный patch (с apache.lexa.ru),
второй -- имя файла, куда положить отличия в виде, приемлемом для patch'а,
третий -- имя .tar.gz файла с добавленными файлами... Все три параметра должны
представлять из себя абсолютные имена (т.е. начинаться со "/" ;) Кроме того
можно установить три переменные окружения: SRC_HOME -- место для работы
скрипта (по умолчанию /tmp, но можно указать другое место, если хочется
не распаковывать каждый раз все заново), APACHE_NAME -- название подкаталога
apache внутри APACHE_SRC -- архива Apache с www.apache.org ... Скрипт создает
в подкаталоге $SRC_HOME еще два подкаталога: $SRC_HOME/$APACHE_NAME и
$SRC_HOME/$APACHE_NAME.orig. В $SRC_HOME/$APACHE_NAME.orig лежат неисправленные
тексты Apache, а в $SRC_HOME/$APACHE_NAME лежит русский Apache. Если скрипт
обнаруживает подкаталог $SRC_HOME/$APACHE_NAME.orig, то он его использует,
считая, что там лежат правильные исходники Apache, а если не находит, то
распаковывает архив, а в конце работы подкаталог $SRC_HOME/$APACHE_NAME.orig
удаляет... По моему его вызов можно при желании без проблем сделать автоматом...
-- cut --
#!/bin/bash
if [ "$SRC_HOME" = '' ]; then
SRC_HOME=/tmp
fi
if [ "$APACHE_NAME" = '' ]; then
APACHE_NAME=apache_1.2.1
fi
if [ "$APACHE_SRC" = '' ]; then
APACHE_SRC=/usr/src/redhat/SOURCES/apache_1.2.1.tar.gz
fi
if ! [ -d $SRC_HOME/$APACHE_NAME ]; then
RAPACHE_REMOVE=yes
else
RAPACHE_REMOVE=no
rm -rf $SRC_HOME/$APACHE_NAME
fi
if ! [ -d $SRC_HOME/$APACHE_NAME.orig ]; then
cd $SRC_HOME
tar xzf $APACHE_SRC
mv $SRC_HOME/$APACHE_NAME $SRC_HOME/$APACHE_NAME.orig
APACHE_REMOVE=yes
else
APACHE_REMOVE=no
fi
cp -R $SRC_HOME/$APACHE_NAME.orig $SRC_HOME/$APACHE_NAME
cd $SRC_HOME/$APACHE_NAME
zcat $1 | patch -p1 >& /dev/null
rm -rf $SRC_HOME/$APACHE_NAME/htdocs/manual/misc/FAQ.html.rej
if ! [ "`find $SRC_HOME/$APACHE_NAME \
\( -name '*.rej' -o -name '*.rej' \) `" = '' ]; then
echo "Can not apply patch. Sorry." 1>&2
exit 1
fi
find $SRC_HOME/$APACHE_NAME \
\( -name "*.orig" -o -name ".*.orig" \) -print | xargs rm -f
rm -f /tmp/1.$$
rm -f /tmp/2.$$
for i in `find . -type f` ; do
ii=`echo $i | sed sX^./XX`
if [ -f $SRC_HOME/$APACHE_NAME.orig/$i ]; then
echo diff -U 5 $APACHE_NAME.orig/$ii $APACHE_NAME/$ii >> /tmp/1.$$
else
echo $APACHE_NAME/$ii >> /tmp/2.$$
fi
done
cd $SRC_HOME
. /tmp/1.$$ | gzip > $2
rm -f /tmp/1.$$
tar czf $3 `cat /tmp/2.$$`
rm -f /tmp/2.$$
if [ $APACHE_REMOVE = yes ]; then
rm -rf $SRC_HOME/$APACHE_NAME.orig
fi
if [ $RAPACHE_REMOVE = yes ]; then
rm -rf $SRC_HOME/$APACHE_NAME
fi
-- cut --
"Russian Apache" includes software developed
by the Apache Group for use in the Apache HTTP server project
(http://www.apache.org/) See
Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C)
1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.