[devel] оптимизация сборочных зависимостей
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Чт Авг 31 08:05:05 MSD 2006
On Thu, Aug 31, 2006 at 03:19:37AM +0400, Alexey Tourbin wrote:
> On Thu, Aug 31, 2006 at 02:48:51AM +0400, Alexey Tourbin wrote:
> > $ cat ./optimize_package_list
> > #!/bin/sh -ef
> > . tmpdir.sh
> > cd $TMPDIR
> > rpm -q --qf '[%{REQUIRENAME}\t%{NAME}\n]' -- "$@" >qR
> > rpm -q --qf '[%{PROVIDENAME}\t%{NAME}\n]' -- "$@" >qP
> > awk '{print$2,$1}' qR |sort -u -k2,2 -k1,1 -o qR
> > awk '{print$2,$1}' qP |sort -u -k2,2 -k1,1 -o qP
> > #head -v qR qP
> > join -j 2 -o '1.1 2.1' qR qP |sort -u >p2p
> > tsort p2p >tsorted || [ -s tsorted ]
> > #head -v p2p tsorted
> > set -- `cat tsorted`
> > for i in `seq 1 $(($#-1))`; do
> > eval master="\$$i"
>
> К сожалению для i>9 эта конструкция не работает.
> Т.е. i=$10 воспринимается шеллом как i=${1}0 и т.д.
> То есть скрипт может лажаться при числе аргументов 10 и более.
> Весь этот вложенный цикл нужно переписать на awk или на перле. :)
--- optimize_package_list- 2006-08-30 23:31:38 +0000
+++ optimize_package_list 2006-08-31 04:00:46 +0000
@@ -9,17 +9,25 @@ awk '{print$2,$1}' qP |sort -u -k2,2 -k1
join -j 2 -o '1.1 2.1' qR qP |sort -u >p2p
tsort p2p >tsorted || [ -s tsorted ]
#head -v p2p tsorted
-set -- `cat tsorted`
-for i in `seq 1 $(($#-1))`; do
- eval master="\$$i"
- for j in `seq $((i+1)) $#`; do
- eval slave="\$$j"
- if grep -qs -Fx "$master $slave" p2p; then
- #echo master=$master slave=$slave >&2
- echo "$slave"
- fi
- done
-done >extrareq
+awk -f - p2p >extrareq <<'EOF'
+BEGIN { # process tsorted
+ while (getline <"tsorted")
+ tsorted[++N] = $1
+}
+{ # process p2p
+ p2p[$1,$2] = 1
+}
+END { # output unneeded reqs
+ for (i = 1; i < N; i++) {
+ master = tsorted[i]
+ for (j = i+1; j <= N; j++) {
+ slave = tsorted[j]
+ if (p2p[master,slave])
+ print slave
+ }
+ }
+}
+EOF
sort -o extrareq -u extrareq
awk '{print$1}' qR |sort -u >req
#head -v req extrareq
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20060831/90b8af96/attachment-0001.bin>
Подробная информация о списке рассылки Devel