]> git.pld-linux.org Git - packages/rpm-build-tools.git/blame - pldnotify.awk
- added "-n" option to treat version numbers as numerical "float"
[packages/rpm-build-tools.git] / pldnotify.awk
CommitLineData
6fb3305d 1#!/bin/awk -f
d4089f30 2# $Revision$, $Date$
2aba2068
SZ
3function fixedsub(s1,s2,t, ind) {
4# substitutes fixed strings (not regexps)
5 if (ind = index(t,s1)) {
6 t = substr(t, 1, ind-1) s2 substr(t, ind+length(s1))
7 }
8 return t
9}
6fb3305d 10
70a5e8d4
SZ
11function compare_ver(v1,v2) {
12# compares version numbers
13 while (match(v1,/[a-zA-Z][0-9]|[0-9][a-zA-Z]/))
14 v1=(substr(v1,1,RSTART) "." substr(v1,RSTART+RLENGTH-1))
15 while (match(v2,/[a-zA-Z][0-9]|[0-9][a-zA-Z]/))
16 v2=(substr(v2,1,RSTART) "." substr(v2,RSTART+RLENGTH-1))
17 sub("^0*","",v1)
18 sub("^0*","",v2)
19 if (DEBUG) print "v1 == " v1
20 if (DEBUG) print "v2 == " v2
21 count=split(v1,v1a,"\.")
22 count2=split(v2,v2a,"\.")
23
24 if (count<count2) mincount=count
25 else mincount=count2
26
27 for (i=1; i<=mincount; i++) {
db83adc3
SZ
28 if (v1a[i]=="") v1a[i]=0
29 if (v2a[i]=="") v2a[i]=0
70a5e8d4
SZ
30 if (DEBUG) print "i == " i
31 if (DEBUG) print "v1[i] == " v1a[i]
32 if (DEBUG) print "v2[i] == " v2a[i]
33 if ((v1a[i]~/[0-9]/)&&(v2a[i]~/[0-9]/)) {
34 if (length(v2a[i])>length(v1a[i]))
35 return 1
36 else if (v2a[i]>v1a[i])
37 return 1
38 else if (length(v1a[i])>length(v2a[i]))
39 return 0
40 else if (v1a[i]>v2a[i])
41 return 0
42 } else if ((v1a[i]~/[A-Za-z]/)&&(v2a[i]~/[A-Za-z]/)) {
43 if (v2a[i]>v1a[i])
44 return 1
45 else if (v1a[i]>v2a[i])
46 return 0
2e301ef5 47 } else if ((v1a[i]~"pre")||(v1a[i]~"beta")||(v1a[i]~"alpha"))
70a5e8d4
SZ
48 return 1
49 else
50 return 0
51 }
52 if ((count2==mincount)&&(count!=count2)) {
53 for (i=count2+1; i<=count; i++)
2e301ef5 54 if ((v1a[i]~"pre")||(v1a[i]~"beta")||(v1a[i]~"alpha"))
70a5e8d4
SZ
55 return 1
56 return 0
57 } else if (count!=count2) {
58 for (i=count+1; i<=count2; i++)
2e301ef5 59 if ((v2a[i]~"pre")||(v2a[i]~"beta")||(v2a[i]~"alpha"))
70a5e8d4
SZ
60 return 0
61 return 1
62 }
db4f445e 63 return 0
70a5e8d4
SZ
64}
65
f11b5a76 66function compare_ver_dec(v1,v2) {
67# compares version numbers
68 while (match(v1,/[0-9][a-zA-Z]/))
69 v1=(substr(v1,1,RSTART) "." substr(v1,RSTART+RLENGTH-1))
70 while (match(v2,/[0-9][a-zA-Z]/))
71 v2=(substr(v2,1,RSTART) "." substr(v2,RSTART+RLENGTH-1))
72 sub("^0*","",v1)
73 sub("^0*","",v2)
74 if (DEBUG) print "v1 == " v1
75 if (DEBUG) print "v2 == " v2
76 count=split(v1,v1a,"\.")
77 count2=split(v2,v2a,"\.")
78
79 if (count<count2) mincount=count
80 else mincount=count2
81
82 for (i=1; i<=mincount; i++) {
83 if (v1a[i]=="") v1a[i]=0
84 if (v2a[i]=="") v2a[i]=0
85 if (DEBUG) print "i == " i
86 if (DEBUG) print "v1[i] == " v1a[i]
87 if (DEBUG) print "v2[i] == " v2a[i]
88 if ((v1a[i]~/[0-9]/)&&(v2a[i]~/[0-9]/)) {
89 if (i==2) {
90 if (0+("." v2a[i])>0+("." v1a[i]))
91 return 1
92 else if (0+("." v1a[i])>0+("." v2a[i]))
93 return 0
94 } else {
95 if (length(v2a[i])>length(v1a[i]))
96 return 1
97 else if (v2a[i]>v1a[i])
98 return 1
99 else if (length(v1a[i])>length(v2a[i]))
100 return 0
101 else if (v1a[i]>v2a[i])
102 return 0
103 }
104 } else if ((v1a[i]~/[A-Za-z]/)&&(v2a[i]~/[A-Za-z]/)) {
105 if (v2a[i]>v1a[i])
106 return 1
107 else if (v1a[i]>v2a[i])
108 return 0
109 } else if ((v1a[i]~"pre")||(v1a[i]~"beta")||(v1a[i]~"alpha"))
110 return 1
111 else
112 return 0
113 }
114 if ((count2==mincount)&&(count!=count2)) {
115 for (i=count2+1; i<=count; i++)
116 if ((v1a[i]~"pre")||(v1a[i]~"beta")||(v1a[i]~"alpha"))
117 return 1
118 return 0
119 } else if (count!=count2) {
120 for (i=count+1; i<=count2; i++)
121 if ((v2a[i]~"pre")||(v2a[i]~"beta")||(v2a[i]~"alpha"))
122 return 0
123 return 1
124 }
125 return 0
126}
127
2e301ef5 128function get_links(url, errno,link,oneline,retval,odp,tmpfile) {
70a5e8d4 129# get all <A HREF=..> tags from specified URL
db4f445e
SZ
130 "mktemp /tmp/XXXXXX" | getline tmpfile
131 close("mktemp /tmp/XXXXXX")
2e301ef5
SZ
132
133 if (DEBUG) print "Retrieving: " url
2d9cc4bb 134 errno=system("wget -O - \"" url "\" -t 3 -T 300 --passive-ftp > " tmpfile " 2>/dev/null" )
70a5e8d4 135
3f63995d 136 if (errno==0) {
7f460828
SZ
137 while (getline oneline < tmpfile)
138 odp=(odp " " oneline)
139 if ( DEBUG ) print "Odpowiedz: " odp
70a5e8d4 140 }
6f57d45d 141
3f63995d 142 close(tmpfile)
2e301ef5 143 system("rm -f " tmpfile)
55658186
JB
144 urldir=url;
145 sub(/[^\/]+$/,"",urldir)
3f63995d 146 if ( errno==0) {
93c3b403
SZ
147 while ((tolower(odp) ~ /<frame[ \t]/)||(tolower(odp) ~ /href=/)) {
148 if (tolower(odp) ~ /<frame[ \t]/) {
149 match(tolower(odp),/<frame[ \t][^>]*>/)
150 ramka=substr(odp,RSTART,RLENGTH)
151 odp=substr(odp,RSTART+RLENGTH)
6f57d45d 152 sub(/[sS][rR][cC]=[ \t]+/,"src=",ramka);
93c3b403 153 match(tolower(ramka),/src="[^"]+"/)
2e301ef5
SZ
154 newurl=substr(ramka,RSTART+5,RLENGTH-6)
155 if (DEBUG) print "Ramka: " newurl
55658186
JB
156 if (newurl !~ /\//) {
157 newurl=(urldir newurl)
158 if (DEBUG) print "Ramka->: " newurl
159 }
2e301ef5 160 retval=(retval " " get_links(newurl))
6f57d45d
JB
161 } else if (tolower(odp) ~ /href=[ \t]*"[^"]+"/) {
162 sub(/[hH][rR][eE][fF]=[ \t]+/,"href=",odp)
93c3b403
SZ
163 match(tolower(odp),/href="[^"]+"/)
164 link=substr(odp,RSTART,RLENGTH)
165 odp=substr(odp,RSTART+RLENGTH)
166 link=substr(link,7,length(link)-7)
167 retval=(retval " " link)
6f57d45d
JB
168 } else if (tolower(odp) ~ /href=[ \t]*[^ \t>]+/) {
169 sub(/[hH][rR][eE][fF]=[ \t]+/,"href=",odp)
8dfac79d
SZ
170 match(tolower(odp),/href=[^ \t>]+/)
171 link=substr(odp,RSTART,RLENGTH)
172 odp=substr(odp,RSTART+RLENGTH)
173 link=substr(link,6,length(link)-5)
174 retval=(retval " " link)
6f57d45d
JB
175 } else {
176 retval=(retval " INTERNAL_ERROR")
177 break
93c3b403 178 }
3f63995d
SZ
179 }
180 } else {
2e301ef5 181 retval=("WGET ERROR: " errno)
3f63995d
SZ
182 }
183
db4f445e 184
3f63995d 185 if (DEBUG) print "Zwracane: " retval
db4f445e 186 return retval
70a5e8d4
SZ
187}
188
6fb3305d 189function subst_defines(var,defs) {
3255b4c7 190# substitute all possible RPM macros
6fb3305d
SZ
191 while ((var ~ /%{.*}/) || (var ~ /%[A-Za-z0-9_]+/)) {
192 oldvar=var
193 for (j in defs) {
194 gsub("%{" j "}", defs[j], var)
195 gsub("%" j , defs[j], var)
196 }
197 if (var==oldvar) {
198 if ( DEBUG ) for (i in defs) print i " == " defs[i]
199 return var
200 }
201 }
202 return var
203}
204
c0bee1bc
JK
205function find_mirror(url) {
206
c54fbfc1
MK
207 while (succ = (getline line < "mirrors")) {
208 if (succ==-1) { return url }
c0bee1bc 209 nf=split(line,fields,"|")
a6f2cc98 210 if (nf>1){
c0bee1bc
JK
211 origin=fields[1]
212 mirror=fields[2]
213 mname=fields[3]
214 prefix=substr(url,1,length(origin))
215 if (prefix==origin){
216 if ( DEBUG ) print "Mirror znaleziony na " mname
217 close("mirrors")
218 return mirror substr(url,length(origin))
219 }
220 }
221 }
222
223 return url
224}
225
32aede2f 226function process_source(number,lurl,name,version) {
3255b4c7
SZ
227# fetches file list, and compares version numbers
228 if ( DEBUG ) print "Przetwarzam " lurl
3f63995d
SZ
229
230 if ( index(lurl,version)==0 ) {
231 if (DEBUG) print "Nie ma numeru wersji."
232 return 0
233 }
234
6fb3305d
SZ
235 sub("://",":",lurl)
236 sub("/",":/",lurl)
237 gsub("[^/]*$",":&",lurl)
238 split(lurl,url,":")
239 acc=url[1]
240 host=url[2]
241 dir=url[3]
70a5e8d4
SZ
242 filename=url[4]
243
3f63995d 244 if (index(dir,version)) {
70a5e8d4
SZ
245 dir=substr(dir,1,index(dir,version)-1)
246 sub("[^/]*$","",dir)
247 sub("(\.tar\.(bz|bz2|gz)|zip)$","",filename)
248 if ( DEBUG ) print "Sprawdze katalog: " dir
249 if ( DEBUG ) print "i plik: " filename
250 }
3f63995d 251
70a5e8d4
SZ
252 filenameexp=filename
253 gsub("\+","\\+",filenameexp)
254 sub(version,"[A-Za-z0-9\\.]+",filenameexp)
255 if ( DEBUG ) print "Wzorzec: " filenameexp
256 match(filename,version)
257 prever=substr(filename,1,RSTART-1)
258 postver=substr(filename,RSTART+RLENGTH)
259 if ( DEBUG ) print "Przed numerkiem: " prever
260 if ( DEBUG ) print "i po: " postver
c0bee1bc 261 newurl=find_mirror(acc "://" host dir)
c54fbfc1
MK
262 #print acc "://" host dir
263 #newurl=url[1]"://"url[2]url[3]url[4]
264 #newurl=acc "://" host dir filename
c0bee1bc 265