X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=pldnotify.awk;h=fb81ce5c7b361ba7661b9b9146408f52812bb4c5;hb=0269da834dd6ae37615f425cbfb8dcc0cf4ac820;hp=ba36414088b680f9d3f0f5e6ffab499066c40741;hpb=2e301ef54be2880e125763719d4262144af885c8;p=packages%2Frpm-build-tools.git diff --git a/pldnotify.awk b/pldnotify.awk index ba36414..fb81ce5 100644 --- a/pldnotify.awk +++ b/pldnotify.awk @@ -1,5 +1,12 @@ #!/bin/awk -f # $Revision$, $Date$ +function fixedsub(s1,s2,t, ind) { +# substitutes fixed strings (not regexps) + if (ind = index(t,s1)) { + t = substr(t, 1, ind-1) s2 substr(t, ind+length(s1)) + } + return t +} function compare_ver(v1,v2) { # compares version numbers @@ -9,6 +16,8 @@ function compare_ver(v1,v2) { v2=(substr(v2,1,RSTART) "." substr(v2,RSTART+RLENGTH-1)) sub("^0*","",v1) sub("^0*","",v2) + gsub("\.0*",".",v1) + gsub("\.0*",".",v2) if (DEBUG) print "v1 == " v1 if (DEBUG) print "v2 == " v2 count=split(v1,v1a,"\.") @@ -37,19 +46,81 @@ function compare_ver(v1,v2) { return 1 else if (v1a[i]>v2a[i]) return 0 - } else if ((v1a[i]~"pre")||(v1a[i]~"beta")||(v1a[i]~"alpha")) + } else if ((v1a[i]~"pre")||(v1a[i]~"beta")||(v1a[i]~"alpha")||(v1a[i]~"rc")) + return 1 + else + return 0 + } + if ((count2==mincount)&&(count!=count2)) { + for (i=count2+1; i<=count; i++) + if ((v1a[i]~"pre")||(v1a[i]~"beta")||(v1a[i]~"alpha")||(v1a[i]~"rc")) + return 1 + return 0 + } else if (count!=count2) { + for (i=count+1; i<=count2; i++) + if ((v2a[i]~"pre")||(v2a[i]~"beta")||(v2a[i]~"alpha")||(v2a[i]~"rc")) + return 0 + return 1 + } + return 0 +} + +function compare_ver_dec(v1,v2) { +# compares version numbers as decimal floats + while (match(v1,/[0-9][a-zA-Z]/)) + v1=(substr(v1,1,RSTART) "." substr(v1,RSTART+RLENGTH-1)) + while (match(v2,/[0-9][a-zA-Z]/)) + v2=(substr(v2,1,RSTART) "." substr(v2,RSTART+RLENGTH-1)) + sub("^0*","",v1) + sub("^0*","",v2) + if (DEBUG) print "v1 == " v1 + if (DEBUG) print "v2 == " v2 + count=split(v1,v1a,"\.") + count2=split(v2,v2a,"\.") + + if (count0+("." v1a[i])) + return 1 + else if (0+("." v1a[i])>0+("." v2a[i])) + return 0 + } else { + if (length(v2a[i])>length(v1a[i])) + return 1 + else if (v2a[i]>v1a[i]) + return 1 + else if (length(v1a[i])>length(v2a[i])) + return 0 + else if (v1a[i]>v2a[i]) + return 0 + } + } else if ((v1a[i]~/[A-Za-z]/)&&(v2a[i]~/[A-Za-z]/)) { + if (v2a[i]>v1a[i]) + return 1 + else if (v1a[i]>v2a[i]) + return 0 + } else if ((v1a[i]~"pre")||(v1a[i]~"beta")||(v1a[i]~"alpha")||(v1a[i]~"rc")) return 1 else return 0 } if ((count2==mincount)&&(count!=count2)) { for (i=count2+1; i<=count; i++) - if ((v1a[i]~"pre")||(v1a[i]~"beta")||(v1a[i]~"alpha")) + if ((v1a[i]~"pre")||(v1a[i]~"beta")||(v1a[i]~"alpha")||(v1a[i]~"rc")) return 1 return 0 } else if (count!=count2) { for (i=count+1; i<=count2; i++) - if ((v2a[i]~"pre")||(v2a[i]~"beta")||(v2a[i]~"alpha")) + if ((v2a[i]~"pre")||(v2a[i]~"beta")||(v2a[i]~"alpha")||(v2a[i]~"rc")) return 0 return 1 } @@ -62,32 +133,50 @@ function get_links(url, errno,link,oneline,retval,odp,tmpfile) { close("mktemp /tmp/XXXXXX") if (DEBUG) print "Retrieving: " url - errno=system("wget -O - \"" url "\" > " tmpfile " 2>/dev/null" ) + errno=system("wget -O - \"" url "\" -t 3 -T 300 --passive-ftp > " tmpfile " 2>/dev/null" ) if (errno==0) { while (getline oneline < tmpfile) odp=(odp " " oneline) if ( DEBUG ) print "Odpowiedz: " odp } - + close(tmpfile) system("rm -f " tmpfile) + urldir=url; + sub(/[^\/]+$/,"",urldir) if ( errno==0) { while ((tolower(odp) ~ /]*>/) ramka=substr(odp,RSTART,RLENGTH) odp=substr(odp,RSTART+RLENGTH) + sub(/[sS][rR][cC]=[ \t]+/,"src=",ramka); match(tolower(ramka),/src="[^"]+"/) newurl=substr(ramka,RSTART+5,RLENGTH-6) if (DEBUG) print "Ramka: " newurl + if (newurl !~ /\//) { + newurl=(urldir newurl) + if (DEBUG) print "Ramka->: " newurl + } retval=(retval " " get_links(newurl)) - } else { + } else if (tolower(odp) ~ /href=[ \t]*"[^"]+"/) { + sub(/[hH][rR][eE][fF]=[ \t]+/,"href=",odp) match(tolower(odp),/href="[^"]+"/) link=substr(odp,RSTART,RLENGTH) odp=substr(odp,RSTART+RLENGTH) link=substr(link,7,length(link)-7) retval=(retval " " link) + } else if (tolower(odp) ~ /href=[ \t]*[^ \t>]+/) { + sub(/[hH][rR][eE][fF]=[ \t]+/,"href=",odp) + match(tolower(odp),/href=[^ \t>]+/) + link=substr(odp,RSTART,RLENGTH) + odp=substr(odp,RSTART+RLENGTH) + link=substr(link,6,length(link)-5) + retval=(retval " " link) + } else { + retval=(retval " INTERNAL_ERROR") + break } } } else { @@ -115,6 +204,27 @@ function subst_defines(var,defs) { return var } +function find_mirror(url) { + + while (succ = (getline line < "mirrors")) { + if (succ==-1) { return url } + nf=split(line,fields,"|") + if (nf>1){ + origin=fields[1] + mirror=fields[2] + mname=fields[3] + prefix=substr(url,1,length(origin)) + if (prefix==origin){ + if ( DEBUG ) print "Mirror znaleziony na " mname + close("mirrors") + return mirror substr(url,length(origin)) + } + } + } + + return url +} + function process_source(number,lurl,name,version) { # fetches file list, and compares version numbers if ( DEBUG ) print "Przetwarzam " lurl @@ -143,35 +253,46 @@ function process_source(number,lurl,name,version) { filenameexp=filename gsub("\+","\\+",filenameexp) - sub(version,"[A-Za-z0-9\\.]+",filenameexp) + sub(version,"[A-Za-z0-9.]+",filenameexp) + gsub("\.","\\.",filenameexp) if ( DEBUG ) print "Wzorzec: " filenameexp match(filename,version) prever=substr(filename,1,RSTART-1) postver=substr(filename,RSTART+RLENGTH) if ( DEBUG ) print "Przed numerkiem: " prever if ( DEBUG ) print "i po: " postver - - if ( DEBUG ) print "ZaglĀ±dam na " acc "://" host dir + newurl=find_mirror(acc "://" host dir) + #print acc "://" host dir + #newurl=url[1]"://"url[2]url[3]url[4] + #newurl=acc "://" host dir filename + if ( DEBUG ) print "ZaglĀ±dam na " newurl references=0 finished=0 oldversion=version - odp=get_links(acc "://" host dir) + odp=get_links(newurl) if( odp ~ "ERROR: ") { print name "(" number ") " odp } else { + if (DEBUG) print "Sciagnieta strona" c=split(odp,linki) for (nr=1; nr<=c; nr++) { addr=linki[nr] if (DEBUG) print "Znaleziony link: " addr - if (addr ~ filenameexp) { + if ((addr ~ filenameexp) && !(addr ~ "[-_.0-9A-Za-z]" filenameexp)) { match(addr,filenameexp) newfilename=substr(addr,RSTART,RLENGTH) if (DEBUG) print "Hipotetyczny nowy: " newfilename - sub(prever,"",newfilename) - sub(postver,"",newfilename) + newfilename=fixedsub(prever,"",newfilename) + newfilename=fixedsub(postver,"",newfilename) if (DEBUG) print "Wersja: " newfilename - if ( compare_ver(version, newfilename)==1 ) { + if (NUMERIC) { + if ( compare_ver_dec(version, newfilename)==1 ) { + if (DEBUG) print "Tak, jest nowa" + version=newfilename + finished=1 + } + } else if ( compare_ver(version, newfilename)==1 ) { if (DEBUG) print "Tak, jest nowa" version=newfilename finished=1 @@ -179,7 +300,7 @@ function process_source(number,lurl,name,version) { } } if (finished==0) - print name "(" number ") seems ok" + print name "(" number ") seems ok: " oldversion else print name "(" number ") [OLD] " oldversion " [NEW] " version } @@ -208,6 +329,11 @@ BEGIN { print "No wget installed!" exit 1 } + if (ARGC>=3 && ARGV[2]=="-n") { + NUMERIC=1 + for (i=3; i