Russian Apache Switch to English
Switch to Russian koi8-r
windows=1251
cp-866
iso8859-5
Russian Apache Как это работает Рекоммендации Где взять Как установить Как настроить Статус и поддержка
Краткий обзор FAQ Список рассылки Благодарности Поиск по серверу Powered by Russian Apache
Russian Apache mailing list archive (apache-rus@lists.lexa.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: diffы



> 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 ] [ Как это работает ] [ Рекомендации ] [ Где взять ] [ Как установить ] [ Как настроить ] [ Статус и поддержка ] [ Краткий обзор ] [ FAQ ] [ Список рассылки ] [ Благодарности ] [ Поиск по серверу ] [ Powered by Russian Apache ] [ Apache-talk archive ]

"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.