On Wed, Aug 31, 2005 at 06:12:47PM +0400, Alexey Tourbin wrote: > On Wed, Aug 31, 2005 at 04:00:54PM +0400, Dmitry V. Levin wrote: > Потому что для пакета, который уже был в репозитарии, робот помнит > версию и номер предыдующей сборки. И выдает интервал changelog'а между > предыдущей сборкой и новой сборкой. А для "совсем новых" (BRAND NEW) > пакетов робот не знает, что такое "передыдущая сборка". То есть в каждый момент времени имеется два дампа -- dump.new с текущим состоянием и dump.old с предыдущим состоянием. > fmt_new() > { > subj="$subj +$1!" > echo " $1 BRAND NEW $2"; echo > while IFS=$'\t' read -r name SVR f _; do > rpm_summary "$SRPMS/$f" > rpm_lastchange "$SRPMS/$f" > echo > done > } > > fmt_updated() > { > subj="$subj +$1" > echo " $1 UPDATED $2"; echo > while IFS=$'\t' read -r name SVR2 _ _ SVR4 f _; do > rpm_summary "$SRPMS/$f" > rpm_changes_since "$SVR2" "$SRPMS/$f" > echo > done > } Список для fmt_new формируется при помощи comm, а список для fmt_updated -- при помощи comm+join. Робот что-либо "помнит" только в смысле сравнения двух дампов. comm -13 dump.old dump.new >comm.plus comm -23 dump.old dump.new >comm.minus [ -s comm.plus -o -s comm.minus ] || exit 0 if [ -n "$opt_join" ]; then join -t$'\t' comm.minus comm.plus >join.updated join -t$'\t' -v1 comm.minus comm.plus >join.old join -t$'\t' -v2 comm.minus comm.plus >join.new [ -s join.updated -o -s join.old -o -s join.new ] || exit 0 fi