3 function 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))
12 if ((s~"pre")||(s~"PRE")||(s~"beta")||(s~"BETA")||(s~"alpha")||(s~"ALPHA")||(s~"rc")||(s~"RC")) {
13 if (DEBUG) print "pre-version"
20 function 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))
30 if (DEBUG) print "v1 == " v1
31 if (DEBUG) print "v2 == " v2
32 count=split(v1,v1a,"\.")
33 count2=split(v2,v2a,"\.")
35 if (count<count2) mincount=count
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]))
47 else if (v2a[i]>v1a[i])
49 else if (length(v1a[i])>length(v2a[i]))
51 else if (v1a[i]>v2a[i])
53 } else if ((v1a[i]~/[A-Za-z]/)&&(v2a[i]~/[A-Za-z]/)) {
56 else if (v1a[i]>v2a[i])
58 } else if (ispre(v1a[i]) == 1)
63 if ((count2==mincount)&&(count!=count2)) {
64 for (i=count2+1; i<=count; i++)
65 if (ispre(v1a[i]) == 1)
68 } else if (count!=count2) {
69 for (i=count+1; i<=count2; i++)
70 if (ispre(v2a[i]) == 1)
77 function 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))
85 if (DEBUG) print "v1 == " v1
86 if (DEBUG) print "v2 == " v2
87 count=split(v1,v1a,"\.")
88 count2=split(v2,v2a,"\.")
90 if (count<count2) mincount=count
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]/)) {
101 if (0+("." v2a[i])>0+("." v1a[i]))
103 else if (0+("." v1a[i])>0+("." v2a[i]))
106 if (length(v2a[i])>length(v1a[i]))
108 else if (v2a[i]>v1a[i])
110 else if (length(v1a[i])>length(v2a[i]))
112 else if (v1a[i]>v2a[i])
115 } else if ((v1a[i]~/[A-Za-z]/)&&(v2a[i]~/[A-Za-z]/)) {
118 else if (v1a[i]>v2a[i])
120 } else if (ispre(v1a[i]) == 1)
125 if ((count2==mincount)&&(count!=count2)) {
126 for (i=count2+1; i<=count; i++)
127 if (ispre(v1a[i]) == 1)
130 } else if (count!=count2) {
131 for (i=count+1; i<=count2; i++)
132 if (ispre(v2a[i]) == 1)
139 function 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")
144 if (DEBUG) print "Retrieving: " url
145 errno=system("wget -O - \"" url "\" -t 3 -T 300 --passive-ftp > " tmpfile " 2>/dev/null" )
148 while (getline oneline < tmpfile)
149 odp=(odp " " oneline)
150 if ( DEBUG ) print "Odpowiedz: " odp
154 system("rm -f " tmpfile)
156 sub(/[^\/]+$/,"",urldir)
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)
163 sub(/[sS][rR][cC]=[ \t]+/,"src=",ramka);
164 match(tolower(ramka),/src="[^"]+"/)
165 newurl=substr(ramka,RSTART+5,RLENGTH-6)
166 if (DEBUG) print "Ramka: " newurl
167 if (newurl !~ /\//) {
168 newurl=(urldir newurl)
169 if (DEBUG) print "Ramka->: " newurl
171 retval=(retval " " get_links(newurl))
172 } else if (tolower(odp) ~ /href=[ \t]*"[^"]+"/) {
173 sub(/[hH][rR][eE][fF]=[ \t]+/,"href=",odp)
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)
179 } else if (tolower(odp) ~ /href=[ \t]*[^ \t>]+/) {
180 sub(/[hH][rR][eE][fF]=[ \t]+/,"href=",odp)
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)
187 retval=(retval " INTERNAL_ERROR")
192 retval=("WGET ERROR: " errno)
196 if (DEBUG) print "Zwracane: " retval
200 function subst_defines(var,defs) {
201 # substitute all possible RPM macros
202 while ((var ~ /%{.*}/) || (var ~ /%[A-Za-z0-9_]+/)) {
205 gsub("%{" j "}", defs[j], var)
206 gsub("%" j , defs[j], var)
209 if ( DEBUG ) for (i in defs) print i " == " defs[i]
216 function find_mirror(url) {
218 while (succ = (getline line < "mirrors")) {
219 if (succ==-1) { return url }
220 nf=split(line,fields,"|")
225 prefix=substr(url,1,length(origin))
227 if ( DEBUG ) print "Mirror znaleziony na " mname
229 return mirror substr(url,length(origin))
237 function process_source(number,lurl,name,version) {
238 # fetches file list, and compares version numbers
239 if ( DEBUG ) print "Przetwarzam " lurl
241 if ( index(lurl,version)==0 ) {
242 if (DEBUG) print "Nie ma numeru wersji."
248 gsub("[^/]*$",":&",lurl)
255 if (index(dir,version)) {
256 dir=substr(dir,1,index(dir,version)-1)
258 sub("(\.tar\.(bz|bz2|gz)|zip)$","",filename)
259 if ( DEBUG ) print "Sprawdze katalog: " dir
260 if ( DEBUG ) print "i plik: " filename
264 gsub("\+","\\+",filenameexp)
265 sub(version,"[A-Za-z0-9.]+",filenameexp)
266 gsub("\.","\\.",filenameexp)
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 if ( DEBUG ) print "ZaglĀ±dam na " newurl
282 odp=get_links(newurl)
283 if( odp ~ "ERROR: ") {
284 print name "(" number ") " odp
286 if (DEBUG) print "Sciagnieta strona"
288 for (nr=1; nr<=c; nr++) {
290 if (DEBUG) print "Znaleziony link: " addr
291 if ((addr ~ filenameexp) && !(addr ~ "[-_.0-9A-Za-z]" filenameexp)) {
292 match(addr,filenameexp)
293 newfilename=substr(addr,RSTART,RLENGTH)
294 if (DEBUG) print "Hipotetyczny nowy: " newfilename
295 newfilename=fixedsub(prever,"",newfilename)
296 newfilename=fixedsub(postver,"",newfilename)
297 if (DEBUG) print "Wersja: " newfilename
299 if ( compare_ver_dec(version, newfilename)==1 ) {
300 if (DEBUG) print "Tak, jest nowa"
304 } else if ( compare_ver(version, newfilename)==1 ) {
305 if (DEBUG) print "Tak, jest nowa"
312 print name "(" number ") seems ok: " oldversion
314 print name "(" number ") [OLD] " oldversion " [NEW] " version
318 function process_data(name,ver,rel,src) {
319 # this function checks if substitutions were valid, and if true:
320 # processes each URL and tries to get current file list
322 if ( src[i] !~ /%{.*}/ && src[i] !~ /%[A-Za-z0-9_]/ ) {
323 if ( DEBUG ) print "Zrodlo: " src[i]
324 process_source(i,src[i],name,ver)
326 print FNAME ":" i ": niemozliwe podstawienie: " src[i]
332 # if U want to use DEBUG, run script with "-v DEBUG=1"
333 # or uncomment the line below
336 errno=system("wget --help > /dev/null 2>&1")
338 print "No wget installed!"
341 if (ARGC>=3 && ARGV[2]=="-n") {
343 for (i=3; i<ARGC; i++) ARGV[i-1]=ARGV[i]
350 process_data(NAME,VER,REL,SRC)
351 NAME="" ; VER="" ; REL=""
352 for (i in DEFS) delete DEFS[i]
353 for (i in SRC) delete SRC[i]
358 /^[Uu][Rr][Ll]:/&&(URL=="") { URL=subst_defines($2,DEFS) ; DEFS["url"]=URL }
359 /^[Nn]ame:/&&(NAME=="") { NAME=subst_defines($2,DEFS) ; DEFS["name"]=NAME }
360 /^[Vv]ersion:/&&(VER=="") { VER=subst_defines($2,DEFS) ; DEFS["version"]=VER }
361 /^[Rr]elease:/&&(REL=="") { REL=subst_defines($2,DEFS) ; DEFS["release"]=REL }
362 /^[Ss]ource[0-9]*:/ { if (/(ftp|http):\/\//) SRC[FNR]=subst_defines($2,DEFS) }
363 /%define/ { DEFS[$2]=subst_defines($3,DEFS) }
366 process_data(NAME,VER,REL,SRC)