=?iso-8859-1?q?=5Bkde-russian=5D_=F0=D2=CF_=22=CE=C5=D2=C1=C2=CF=D4=D5=22?= =?iso-8859-1?q?_KDE_=C9=DA_CVS?=

Nikita V. Youshchenko =?iso-8859-1?q?yoush_=CE=C1_cs=2Emsu=2Esu?=
Ср Май 29 09:59:58 MSD 2002


Прочитал про проблемы со сборкой CVS и Вспомнил. Вдруг кому интересно ...

Когда (несколько месяцев назад) у меня висел сервис, пересобирающий KDE из 
CVS каждую ночь, я сталкивался с такой ситуацией. Происходила следующая 
последовательность событий.

- делался cvs update,
- cvs менялся, с соответствующей установкой времени модификаций файлов,
- происходила сборка,
- (на следующую ночь) происходил новый cvs update
В результате время создания объектника оказывалось больше, чем время 
модификации файла (CVS при обновлении устанавливает в качестве времени 
модификации локального файла время соответствующего коммита), и при 
следующей сборке объектник не пересобирался. В результате, естественно, 
сегфолты.

Лечится это либо чистой сборкой каждый раз (если ну очень быстрая машина), 
либо скриптом, обнаруживающим эту ситуацию и удаляющим устаревшие 
объектники. У меня висела такая штука:

# Workaround commit-between-update-and-compile problem
egrep "^P |^U " LOGS/update | awk '{print($2)}' | while read x; do
  dn=`dirname $x`
  bn=`basename $x`
  mbn=`echo $bn | sed 's/\(.*\)\..*/\1/'`
  if [ "$bn" != "$mbn" ]; then rm -f $dn/{,.libs/}$mbn.{o,lo}; fi
done

где в LOGS/update была выдача cvs update. Но это не совсем правильно, т.к. 
не отлавливает ситуацию, когде модифицирован хэдер, но не cpp-шник.




Подробная информация о списке рассылки kde-russian