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