[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