Magellan Linux

Annotation of /trunk/pkgtools/up2date.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3112 - (hide annotations) (download) (as text)
Fri Mar 15 11:30:25 2019 UTC (5 years, 1 month ago) by niro
File MIME type: application/x-sh
File size: 28588 byte(s)
-include mage.rc/rc.global, added utf8encode() function and use it, use upsort() and tarball functions for better version detection and added a bunch of small fixes
1 niro 2017 #!/bin/bash
2    
3     source /usr/lib/mage/mage4.functions.sh
4     source /usr/lib/mage/smage2.functions.sh
5 niro 3112 source /etc/mage.rc.global
6     source /etc/mage.rc
7 niro 2017
8     # timeout in seconds
9 niro 2106 LYNX_CONNECT_TIMEOUT=10
10 niro 2111 LYNX_READ_TIMEOUT=10
11 niro 3112 #LYNX_OPTIONS="-pauth=user:pass"
12 niro 2017
13     ## only for tests -> normally in /etc/rc.d/init.d/functions
14     COLRED="\033[1;6m\033[31m"
15     COLGREEN="\033[1;6m\033[32m"
16     COLYELLOW="\033[1;6m\033[33m"
17     COLBLUE="\033[1;6m\033[34m"
18     COLMAGENTA="\033[1;6m\033[35m"
19     COLWHITE="\033[1;6m\033[37m"
20     COLGRAY="\033[0;6m\033[37m"
21     COLBOLD="\033[1m"
22     COLDEFAULT="\033[0m"
23    
24     if [[ ${NOCOLORS} = true ]]
25     then
26     COLRED=""
27     COLGREEN=""
28     COLYELLOW=""
29     COLBLUE=""
30     COLMAGENTA=""
31     COLWHITE=""
32     COLGRAY=""
33     COLBOLD=""
34     COLDEFAULT=""
35     fi
36    
37     die() { echo "Error: $@"; exit 1; }
38    
39 niro 3112 #sminclude() { true; }
40     #msetfeature() { true; }
41     #mqueryfeature() { true; }
42     #haskell_enable_feature() { true; }
43     #haskell_disable_feature() { true; }
44 niro 2017
45 niro 3112 SILENT=1
46     FVERBOSE=off
47    
48     utf8encode()
49     {
50     iconv --from-code=ISO_8859-15 --to-code=UTF-8 $@
51     }
52    
53 niro 2017 urlencode()
54     {
55     local uri="$@"
56    
57     # fix percent (do this first!!)
58     uri=$(echo ${uri} | sed 's:%:%25:g')
59    
60     # fix spaces
61     uri=$(echo ${uri} | sed 's:\ :%20:g')
62    
63     # fix less than
64     uri=$(echo ${uri} | sed 's:<:%3C:g')
65    
66     # fix greater than
67     uri=$(echo ${uri} | sed 's:>:%3E:g')
68    
69     # fix pound
70     uri=$(echo ${uri} | sed 's:#:%23:g')
71    
72     # fix curly brace left
73     uri=$(echo ${uri} | sed 's:{:%7B:g')
74    
75     # fix curly brace right
76     uri=$(echo ${uri} | sed 's:}:%7D:g')
77    
78     # fix square bracket left
79     uri=$(echo ${uri} | sed 's:\[:%5B:g')
80    
81     # fix square bracket right
82     uri=$(echo ${uri} | sed 's:\]:%5D:g')
83    
84    
85     # return
86     echo "${uri}"
87     }
88    
89 niro 3112 upsort()
90 niro 2017 {
91 niro 3112 local allversions="$@"
92     [[ -n ${allversions} ]] || die "upsort(): no versions given"
93 niro 2017
94 niro 3112 if [ -x /home/tjoke/archlinux_version/highestver ]
95     then
96     /home/tjoke/archlinux_version/highestver ${allversions}
97     else
98     for i in ${allversions}
99     do
100     echo "${i}"
101     done | sort -g | tac | head -n 1
102     fi
103     }
104 niro 2111
105 niro 3112 upsort_pipe()
106     {
107     local data
108     local versions
109    
110     versions=""
111     while read data
112     do
113     versions+="${data} "
114     done
115    
116     upsort ${versions}
117 niro 2017 }
118    
119 niro 3112 #highesttarball()
120     #{
121     # local suffix=bz2
122     # local seperator="-"
123     # [[ ! -z $1 ]] && suffix="$1"
124     # local data
125     # local version
126     #
127     # [[ ! -z ${UP2SEPERATOR} ]] && seperator="${UP2SEPERATOR}"
128     # [[ ${UP2SEPERATOR} = NULL ]] && seperator=""
129     #
130     # case ${suffix} in
131     # tbz2|tgz|zip)
132     # if [[ ! -z ${UP2EXCLUDE} ]]
133     # then
134     # grep "\(\.${suffix}\)\(\$\|\#\)" | grep -v -- "${UP2EXCLUDE}" | sed "s/.*${seperator}\(.*\)\(\.${suffix}\).*/\1/" | upsort_pipe
135     # else
136     # grep "\(\.${suffix}\)\(\$\|\#\)" | sed "s/.*${seperator}\(.*\)\(\.${suffix}\).*/\1/" | upsort_pipe
137     # fi
138     # ;;
139     # *)
140     # if [[ ! -z ${UP2EXCLUDE} ]]
141     # then
142     # grep "\(\.tar\.${suffix}\)\(\$\|\#\)" | grep -v -- "${UP2EXCLUDE}" | sed "s/.*${seperator}\(.*\)\(\.tar\.${suffix}\).*/\1/" | upsort_pipe
143     # else
144     # grep "\(\.tar\.${suffix}\)\(\$\|\#\)" | sed "s/.*${seperator}\(.*\)\(\.tar\.${suffix}\).*/\1/" | upsort_pipe
145     # fi
146     # ;;
147     # esac
148     #}
149    
150     #lasttarball()
151     #{
152     # local suffix=bz2
153     # local seperator="-"
154     # [[ ! -z $1 ]] && suffix="$1"
155     #
156     # [[ ! -z ${UP2SEPERATOR} ]] && seperator="${UP2SEPERATOR}"
157     # [[ ${UP2SEPERATOR} = NULL ]] && seperator=""
158     #
159     # case ${suffix} in
160     # tbz2|tgz|zip)
161     # if [[ ! -z ${UP2EXCLUDE} ]]
162     # then
163     # grep "\(\.${suffix}\)\(\$\|\#\)" | grep -v -- "${UP2EXCLUDE}" | sed -n "s/.*${seperator}\(.*\)\(\.${suffix}\).*/\1/;$ p"
164     # else
165     # grep "\(\.${suffix}\)\(\$\|\#\)" | sed -n "s/.*${seperator}\(.*\)\(\.${suffix}\).*/\1/;$ p"
166     # fi
167     # ;;
168     # *)
169     # if [[ ! -z ${UP2EXCLUDE} ]]
170     # then
171     # grep "\(\.tar\.${suffix}\)\(\$\|\#\)" | grep -v -- "${UP2EXCLUDE}" | sed -n "s/.*${seperator}\(.*\)\(\.tar\.${suffix}\).*/\1/;$ p"
172     # else
173     # grep "\(\.tar\.${suffix}\)\(\$\|\#\)" | sed -n "s/.*${seperator}\(.*\)\(\.tar\.${suffix}\).*/\1/;$ p"
174     # fi
175     # ;;
176     # esac
177     #}
178    
179     #firsttarball()
180     #{
181     # local suffix=bz2
182     # local seperator="-"
183     # [[ ! -z $1 ]] && suffix="$1"
184     #
185     # [[ ! -z ${UP2SEPERATOR} ]] && seperator="${UP2SEPERATOR}"
186     # [[ ${UP2SEPERATOR} = NULL ]] && seperator=""
187     #
188     # case ${suffix} in
189     # tbz2|tgz|zip)
190     # if [[ ! -z ${UP2EXCLUDE} ]]
191     # then
192     # grep "\(\.${suffix}\)\(\$\|\#\)" | grep -v -- "${UP2EXCLUDE}" | sed "s/.*${seperator}\(.*\)\(\.${suffix}\).*/\1/;q"
193     # else
194     # grep "\(\.${suffix}\)\(\$\|\#\)" | sed "s/.*${seperator}\(.*\)\(\.${suffix}\).*/\1/;q"
195     # fi
196     # ;;
197     # *)
198     # if [[ ! -z ${UP2EXCLUDE} ]]
199     # then
200     # grep "\(\.tar\.${suffix}\)\(\$\|\#\)" | grep -v -- "${UP2EXCLUDE}" | sed "s/.*${seperator}\(.*\)\(\.tar\.${suffix}\).*/\1/;q"
201     # else
202     # grep "\(\.tar\.${suffix}\)\(\$\|\#\)" | sed "s/.*${seperator}\(.*\)\(\.tar\.${suffix}\).*/\1/;q"
203     # fi
204     # ;;
205     # esac
206     #}
207    
208     tarballversions()
209 niro 2017 {
210     local suffix=bz2
211 niro 2111 local seperator="-"
212 niro 2017 [[ ! -z $1 ]] && suffix="$1"
213 niro 3112 local data
214     local version
215 niro 2017
216 niro 2111 [[ ! -z ${UP2SEPERATOR} ]] && seperator="${UP2SEPERATOR}"
217     [[ ${UP2SEPERATOR} = NULL ]] && seperator=""
218    
219 niro 2017 case ${suffix} in
220 niro 3112 tbz2|tgz|zip)
221 niro 2106 if [[ ! -z ${UP2EXCLUDE} ]]
222     then
223 niro 3112 grep "\(\.${suffix}\)\(\$\|\#\)" | grep -v -- "${UP2EXCLUDE}" | sed "s/.*${seperator}\(.*\)\(\.${suffix}\).*/\1/"
224 niro 2106 else
225 niro 3112 grep "\(\.${suffix}\)\(\$\|\#\)" | sed "s/.*${seperator}\(.*\)\(\.${suffix}\).*/\1/"
226 niro 2106 fi
227 niro 2017 ;;
228     *)
229 niro 2106 if [[ ! -z ${UP2EXCLUDE} ]]
230     then
231 niro 3112 grep "\(\.tar\.${suffix}\)\(\$\|\#\)" | grep -v -- "${UP2EXCLUDE}" | sed "s/.*${seperator}\(.*\)\(\.tar\.${suffix}\).*/\1/"
232 niro 2106 else
233 niro 3112 grep "\(\.tar\.${suffix}\)\(\$\|\#\)" | sed "s/.*${seperator}\(.*\)\(\.tar\.${suffix}\).*/\1/"
234 niro 2106 fi
235 niro 2017 ;;
236     esac
237     }
238    
239 niro 3112 highesttarball()
240     {
241     tarballversions $@ | upsort_pipe
242     }
243    
244     lasttarball()
245     {
246     tarballversions $@ | sed -n "$ p"
247     }
248    
249     firsttarball()
250     {
251     tarballversions $@ | sed "q"
252     }
253    
254 niro 2017 updatecmd()
255     {
256     local uppver
257     local useragent
258     [[ ! -z ${UP2USERAGENT} ]] && useragent="-useragent '${UP2USERAGENT}'"
259    
260 niro 3112 uppver=$(lynx ${LYNX_OPTIONS} -connect_timeout=${LYNX_CONNECT_TIMEOUT} -read_timeout=${LYNX_READ_TIMEOUT} -dump "${useragent}" $@ | utf8encode)
261 niro 2017 if [[ $? -ne 0 ]]
262     then
263     echo "Error connecting '$@'"
264     sleep 1
265     return 1
266     fi
267    
268     if [[ ! -z ${UP2SUBSTITUTE} ]]
269     then
270     echo "${uppver}" | sed "s:${UP2SUBSTITUTE}::g"
271     else
272     echo "${uppver}"
273     fi
274     }
275    
276     updatecmd_gnu()
277     {
278     local pname=$1
279     local archive
280     local tarball
281    
282     [[ -z ${pname} ]] && die "give me a \$PNAME"
283     [[ ! -z $2 ]] && archive="$2"
284    
285     tarball="${pname}"
286     [[ ! -z ${UP2TARBALL} ]] && tarball="${UP2TARBALL}"
287    
288     # remove 'latest' tarball too
289 niro 3112 updatecmd "http://ftp.gnu.org/gnu/${pname}" | grep "${tarball}-" | sed '/latest/d' | highesttarball "${archive}"
290 niro 2017 }
291    
292     updatecmd_sourceforge_old()
293     {
294     local projectname="$1"
295     local pname="$2"
296     local check_deep_release_id="$3"
297     local archive
298     local uri
299     local group_id
300     local package_link_id
301     local package_id
302     local package_name
303     local release_link_id
304     local release_id
305    
306     [[ -z ${projectname} ]] && die "give me a \$PROJECTNAME"
307     [[ -z ${pname} ]] && pname="${projectname}"
308     case ${check_deep_release_id} in
309     deep|release_id|releaseid) check_deep_release_id="true" ;;
310     esac
311     [[ ! -z $4 ]] && archive="$4"
312    
313     # project home uri
314     uri="http://sourceforge.net/projects/${projectname}"
315     group_id=$(updatecmd ${uri} | grep showfiles | sed 's/.*=\(.*\)/\1/;s/#downloads$//;q')
316    
317     # showfiles.php uri with group_id to get the latest files
318     uri="http://sourceforge.net/project/showfiles.php?group_id=${group_id}"
319    
320     package_link_id=$(updatecmd ${uri} | grep "\[.*\]${pname} \[.*\].*Release.*" | sed "s/.*\[\(.*\)\]${pname}.*/\1/")
321     package_id=$(updatecmd ${uri} | grep "${package_link_id}\..*showfiles.*" | sed 's/.*package_id=\(.*\)/\1/')
322    
323     # debug
324     #echo group_id=${group_id}
325     #echo package_link_id=${package_link_id}
326     #echo package_id=${package_id}
327    
328     uri="http://sourceforge.net/project/showfiles.php?group_id=${group_id}&package_id=${package_id}"
329     package_name=$(updatecmd "${uri}" | grep -m1 'Latest \[.*\]' | sed 's/.*]\(.*\) \[.*\].*/\1/')
330    
331     if [[ ${check_deep_release_id} = true ]]
332     then
333     # showfiles.php uri with group_id and package to get the latest released files
334     uri="http://sourceforge.net/project/showfiles.php?group_id=${group_id}&package_id=${package_id}"
335     release_link_id=$(updatecmd ${uri} | grep ".*Latest.*\[.*\]${package_name} \[.*\].*" | sed "s/.*\[\(.*\)\]${package_name}.*/\1/")
336     release_id=$(updatecmd "${uri}" | grep "${release_link_id}\..*showfiles.*" | sed 's/.*release_id=\(.*\)/\1/')
337    
338     # debug
339     #echo package_name=${package_name}
340     #echo release_link_id=${release_link_id}
341     #echo release_id=${release_id}
342    
343     uri="http://sourceforge.net/project/showfiles.php?group_id=${group_id}&package_id=${package_id}&release_id=${release_id}"
344     case ${archive} in
345     tbz2|tgz)
346     updatecmd "${uri}" | grep "\(\.${suffix}\)" | sed -n "s/.*-\(.*\)\(\.${suffix}\).*/\1/;$ p"
347     ;;
348     *)
349     updatecmd "${uri}" | grep "\(\.tar\.${archive}\)" | sed -n "s/.*-\(.*\)\(\.tar\.${archive}\).*/\1/;$ p"
350     ;;
351     esac
352     else
353     echo "${package_name}"
354     fi
355     }
356    
357     # new layout
358     updatecmd_sourceforge2()
359     {
360     local projectname="$1"
361     local pname="$2"
362     local suffix
363     local uri
364     local package_link_id
365     local package_seperator="-"
366     local excluded
367    
368     [[ -z ${projectname} ]] && die "give me a \$PROJECTNAME"
369     [[ -z ${pname} ]] && pname="${projectname}"
370     [[ ! -z $3 ]] && package_seperator="$3"
371    
372     # project home uri
373     uri="http://sourceforge.net/projects/${projectname}/files"
374     # list of file suffixes, which should be excluded
375     excluded='(.asc|.md5)'
376     # package file names has always the date and time at the end <---------|
377     #package_link_id=$(updatecmd ${uri} | egrep -v ${excluded} | grep -v .md5 | grep -m1 "${pname}${package_seperator}[0-9].* [0-9]" | sed "s/.*\[\(.*\)\]${pname}.*/\1/")
378     package_link_id=$(updatecmd ${uri} | egrep -v ${excluded} | grep -m1 "${pname}${package_seperator}[0-9].* [0-9]" | sed "s/.*\[\(.*\)\].*/\1/")
379     echo DEBUG1:${package_link_id}
380    
381     # get the suffix
382     suffix=$(updatecmd -listonly ${uri} | grep "\ ${package_link_id}\." | sed "s/.*${pname}.*\(\..*\)/\1/")
383     # echo "DEBUG2:${suffix}"
384    
385     case ${suffix} in
386     .tbz2|.tgz|.zip|.rar)
387     #updatecmd ${uri} | grep -m1 "${pname}.*${suffix}" #| sed "s/.*${pname}\(.*\)${suffix}.*/\1/;s/-/_/g;s/_//1"
388     updatecmd -listonly ${uri} | grep "\ ${package_link_id}\." | sed "s/.*${pname}\(.*\)${suffix}.*/\1/;s/-/_/g;s/_//1"
389     ;;
390     *)
391     #updatecmd ${uri} | grep -m1 "${pname}.*.tar${suffix}" | sed "s/.*${pname}\(.*\).tar${suffix}.*/\1/;s/-/_/g;s/_//1"
392     updatecmd -listonly ${uri} | grep "\ ${package_link_id}\." | sed "s/.*${pname}\(.*\).tar${suffix}.*/\1/;s/-/_/g;s/_//1"
393     ;;
394     esac
395     }
396    
397     # new layout, only newest
398     updatecmd_sourceforge_latest()
399     {
400     local projectname="$1"
401     local pname="$2"
402     local suffix
403     local uri
404     local package_link_id
405     local package_seperator="-"
406     local excluded
407     local deep="no"
408     local filename
409     local uppver
410    
411     [[ -z ${projectname} ]] && die "give me a \$PROJECTNAME"
412     [[ -z ${pname} ]] && pname="${projectname}"
413     [[ ! -z $3 ]] && package_seperator="$3"
414     if [[ ! -z $4 ]]
415     then
416     deep="yes"
417     filename="$4"
418     fi
419    
420     # project home uri
421     uri="http://sourceforge.net/projects/${projectname}/files"
422     # list of file suffixes, which should be excluded
423     excluded='(.asc|.md5)'
424     # package file names has always the date and time at the end <---------|
425     # package_link_id=$(updatecmd ${uri} | sed -n '/Newest Files/,/All Files/p' | grep -v ${excluded} | grep -m1 "${pname}${package_seperator}[0-9].* [0-9]" | sed "s/.*\[\(.*\)\].*/\1/")
426     package_link_id=$(updatecmd ${uri} | grep -A1 'Newest Files' | sed -n "s/.*\[\(.*\)\].*${pname}${package_seperator}.*/\1/;$ p")
427     # if [[ ${deep} = yes ]]
428     # then
429     # #package_link_id=$(updatecmd ${uri} | sed -n "/${pname}.*Subscribe.*/,/.*Subscribe.*/p" | sed -n "/${filename}.*Release Notes.*/,/.*Release Notes/p" | grep -v ${excluded} | grep -m1 ".*${package_seperator}[0-9].* [0-9]" | sed "s/.*\[\(.*\)\].*/\1/")
430     # package_link_id=$(updatecmd ${uri} | sed -n "/${pname}.*Subscribe.*/,/.*Subscribe.*/p" | sed -n "/${filename}.*Release Notes.*/,/.*Release Notes/p" | grep -v ${excluded} | grep -m1 "${pname}\ \[.*\]" | sed "s/.*\[\(.*\)\].*/\1/")
431     # else
432     # #package_link_id=$(updatecmd ${uri} | sed -n "/${pname}.*Subscribe.*/,/.*Subscribe.*/p" | grep -v ${excluded} | grep -m1 ".*${package_seperator}[0-9].* [0-9]" | sed "s/.*\[\(.*\)\].*/\1/")
433     # #package_link_id=$(updatecmd ${uri} | sed -n "/${pname}.*Subscribe.*/,/.*Subscribe.*/p" | grep -v ${excluded} | grep -m1 "${pname}\ \[.*\]" | sed "s/.*\[\(.*\)\].*/\1/")
434     # package_link_id=$(updatecmd ${uri} | grep -A1 'Newest Files' | sed -n "s/.*\[\(.*\)\].*${pname}${package_seperator}.*/\1/;$ p")
435     # fi
436     # #echo DEBUG1:${package_link_id}
437    
438     # get the suffix
439     #suffix=$(updatecmd -listonly ${uri} | grep "\ ${package_link_id}\." | sed "s/.*${pname}.*\(\..*\)\/download/\1/")
440     suffix=$(updatecmd -listonly ${uri} | grep "\ ${package_link_id}\." | sed "s/.*\(\..*\)\/download/\1/")
441     #echo "DEBUG2:${suffix}"
442    
443     case ${suffix} in
444     .tbz2|.tgz|.zip|.rar|.7z)
445     #updatecmd ${uri} | grep -m1 "${pname}.*${suffix}" #| sed "s/.*${pname}\(.*\)${suffix}.*/\1/;s/-/_/g;s/_//1"
446     #updatecmd -listonly ${uri} | grep "\ ${package_link_id}\." | sed "s/.*${pname}\(.*\)${suffix}.*/\1/;s/-/_/g;s/_//1"
447     #updatecmd -listonly ${uri} | grep "\ ${package_link_id}\." | sed "s/.*${package_seperator}\(.*\)${suffix}.*/\1/;s/-/_/g;s/_//1"
448     uppver=$(updatecmd -listonly ${uri} | grep "\ ${package_link_id}\." | sed "s/.*${package_seperator}\([0-9].*\)${suffix}.*/\1/;s/-/_/g;s/_//1")
449     ;;
450     *)
451     #updatecmd ${uri} | grep -m1 "${pname}.*.tar${suffix}" | sed "s/.*${pname}\(.*\).tar${suffix}.*/\1/;s/-/_/g;s/_//1"
452     #updatecmd -listonly ${uri} | grep "\ ${package_link_id}\." | sed "s/.*${package_seperator}\(.*\).tar${suffix}.*/\1/;s/-/_/g;s/_//1"
453     uppver=$(updatecmd -listonly ${uri} | grep "\ ${package_link_id}\." | sed "s/.*${package_seperator}\([0-9].*\).tar${suffix}.*/\1/;s/-/_/g;s/_//1")
454     ;;
455     esac
456    
457     if [[ ! -z ${UP2SUBSTITUTE} ]]
458     then
459     echo "${uppver}" | sed "s:${UP2SUBSTITUTE}::g"
460     else
461     echo "${uppver}"
462     fi
463     }
464    
465    
466     # new layout, only newest
467     updatecmd_sourceforge_lala()
468     {
469     local projectname="$1"
470     local pname="$2"
471     local suffix
472     local uri
473     local opts
474     local package_link_id
475     local package_seperator="-"
476     local excluded
477     local deep="no"
478     local filename="${pname}"
479     local uppver
480    
481     [[ -z ${projectname} ]] && die "give me a \$PROJECTNAME"
482     [[ -z ${pname} ]] && pname="${projectname}"
483     if [[ ! -z $3 ]]
484     then
485     case $3 in
486     null|NULL) package_seperator='' ;;
487     *) package_seperator="$3" ;;
488     esac
489     fi
490     if [[ ! -z $4 ]]
491     then
492     deep="yes"
493     filename="$4"
494     else
495     filename="${pname}"
496     fi
497    
498     # special opts like sort date asc
499     if [[ ! -z ${UP2OPTS} ]]
500     then
501     opts="${UP2OPTS}"
502     else
503     opts='?sort=date&sortdir=asc'
504     fi
505     # project home uri # urlencode $pname
506     uri="http://sourceforge.net/projects/${projectname}/files/$(urlencode ${pname})${opts}"
507     # list of file suffixes, which should be excluded
508     excluded='(.asc|.md5|.exe|.txt|.sign|.rpm|.html|.7z|.dmg)'
509     package_link_id=$(updatecmd "${uri}" | grep "\[.*\]${filename}${package_seperator}" | egrep -v ${excluded} | sed -n "s/.*\[\(.*\)\].*${filename}${package_seperator}.*/\1/;$ p")
510    
511     # get the suffix
512     suffix=$(updatecmd -listonly "${uri}" | grep "\ ${package_link_id}\." | sed "s/.*\(\..*\)\/download/\1/")
513     #echo "DEBUG2:${suffix}"
514    
515     case ${suffix} in
516     .tbz2|.tgz|.zip|.rar|.7z)
517     uppver=$(updatecmd -listonly "${uri}" | grep "\ ${package_link_id}\." | sed "s/.*${package_seperator}\([0-9].*\)${suffix}.*/\1/;s/-/_/g;s/_//1")
518     ;;
519     *)
520     uppver=$(updatecmd -listonly "${uri}" | grep "\ ${package_link_id}\." | sed "s/.*${package_seperator}\([0-9].*\).tar${suffix}.*/\1/;s/-/_/g;s/_//1")
521     ;;
522     esac
523    
524     if [[ ! -z ${UP2SUBSTITUTE} ]]
525     then
526     echo "${uppver}" | sed "s:${UP2SUBSTITUTE}::g"
527     else
528     echo "${uppver}"
529     fi
530     }
531    
532     # new layout, only newest
533     updatecmd_sourceforge_ftp_dir()
534     {
535     local projectname="$1"
536     local pname="$2"
537     local modifier="$3"
538     local uppver
539    
540     # mesh works, kent not
541     #local mirror="http://mesh.dl.sourceforge.net"
542     local mirror="http://garr.dl.sourceforge.net"
543    
544     [[ -z ${projectname} ]] && die "give me a \$PROJECTNAME"
545     [[ -z ${pname} ]] && pname="${projectname}"
546     case ${modifier} in
547     date-asc) modifier='?C=M;O=A' ;;
548     date-desc) modifier='?C=M;O=D' ;;
549     name) modifier='' ;;
550     *) modifier='' ;;
551     esac
552    
553     # urlencode everything
554     projectname=$(urlencode ${projectname})
555     pname=$(urlencode ${pname})
556    
557     if [[ ! -z ${UP2EXCLUDE} ]]
558     then
559     uppver=$(updatecmd "${mirror}/project/${projectname}/${pname}/${modifier}" | grep -v -- "${UP2EXCLUDE}" | grep '[DIR].*\[[0-9].*\/' | sed -n 's/.*[0-9]\]\(.*\)\/.*/\1/;$ p')
560     else
561     uppver=$(updatecmd "${mirror}/project/${projectname}/${pname}/${modifier}" | grep '[DIR].*\[[0-9].*\/' | sed -n 's/.*[0-9]\]\(.*\)\/.*/\1/;$ p')
562     fi
563    
564     if [[ ! -z ${UP2SUBSTITUTE} ]]
565     then
566     echo "${uppver}" | sed "s:${UP2SUBSTITUTE}::g"
567     else
568     echo "${uppver}"
569     fi
570     }
571    
572     # needs app-text/xmlstarlet
573     updatecmd_sourceforge()
574     {
575     local projectname="$1"
576     local subprojectname="$2"
577     local archive="$3"
578     local uri
579     local project_id
580     local tarballname
581     local seperator
582 niro 3112 local rss_limit=50
583 niro 2017 local tarballprefix
584     local uppver
585     local allver
586    
587     if [[ -z ${archive} ]] && [[ -n ${subprojectname} ]]
588     then
589     case ${subprojectname} in
590     xz|gz|bz2|tbz|tbz2|txz|tgz|zip|rar|7z|jar)
591     archive="${subprojectname}"
592     unset subprojectname
593     ;;
594     esac
595     fi
596    
597     [[ -z ${projectname} ]] && die "give me a \$PROJECTNAME"
598     [[ -z ${subprojectname} ]] && subprojectname="${projectname}"
599     if [[ -z ${tarballname} ]]
600     then
601     if [[ ${subprojectname} != ${projectname} ]]
602     then
603     tarballname="${subprojectname}"
604     else
605     tarballname="${projectname}"
606     fi
607     fi
608     [[ -z ${seperator} ]] && seperator="-"
609     [[ -z ${archive} ]] && archive="bz2"
610    
611     # overrides
612     [[ ! -z ${UP2TARBALL} ]] && tarballname="${UP2TARBALL}"
613     [[ ! -z ${UP2SEPERATOR} ]] && seperator="${UP2SEPERATOR}"
614     [[ ${UP2SEPERATOR} = NULL ]] && seperator=""
615    
616     uri="http://sourceforge.net/projects/${projectname}"
617 niro 3112 # project_id=$(updatecmd ${uri} | grep project-id | sed -e 's:.*project-id/::;s:/.*::')
618     # rss_uri="http://sourceforge.net/api/file/index/project-id/${project_id}/mtime/desc/limit/${rss_limit}/rss"
619     rss_uri="${uri}/rss?path=/"
620 niro 2017
621     case ${archive} in
622     bz2|gz|xz) tarballprefix=".tar.${archive}" ;;
623 niro 3112 archive-bz2|archive-gz|archive-xz) tarballprefix=".${archive/archive-/}" ;;
624 niro 2017 tbz|tbz2|txz|tgz|zip|rar|7z|jar) tarballprefix=".${archive}" ;;
625 niro 3112 *) tarballprefix=".${archive}" ;;
626 niro 2017 esac
627    
628     if [[ -x $(type -P xml) ]]
629     then
630     allver=$(updatecmd ${rss_uri} | xml sel -T -t -m //item -v title -n)
631     else
632     allver=$(updatecmd ${rss_uri})
633     fi
634    
635     if [[ ! -z ${UP2EXCLUDE} ]]
636     then
637     allver=$(echo "${allver}" | grep -v -- "${UP2EXCLUDE}")
638     fi
639    
640     allver=$(echo "${allver}" | grep "/${subprojectname}.*/${tarballname}${seperator}.*${tarballprefix}" | sed -e "s:.*${tarballname}${seperator}::;s:${tarballprefix}.*::")
641     #uppver=$(echo "${allver}" | sort -g | tac | head -n 1)
642 niro 3112 #uppver=$(echo "${allver}" | sort -n | tac | head -n 1)
643     uppver=$(upsort "${allver}")
644 niro 2017
645     if [[ ! -z ${UP2SUBSTITUTE} ]]
646     then
647     echo "${uppver}" | sed "s:${UP2SUBSTITUTE}::g"
648     else
649     echo "${uppver}"
650     fi
651     }
652    
653     updatecmd_berlios()
654     {
655     local projectname="$1"
656     local pname="$2"
657     local uri
658     local group_id
659    
660     [[ -z ${projectname} ]] && die "give me a \$PROJECTNAME"
661     [[ -z ${pname} ]] && pname="${projectname}"
662    
663     uri="http://developer.berlios.de/projects/${projectname}"
664     group_id=$(updatecmd "${uri}" | grep showfiles | sed 's/.*group_id=\(.*\)&.*/\1/;q')
665    
666     # debug
667     # echo group_id=${group_id}
668     # echo package_link_id=${package_link_id}
669     # echo package_id=${package_id}
670    
671     uri="http://developer.berlios.de/project/showfiles.php?group_id=${group_id}"
672     updatecmd "${uri}" | grep -A3 "^${pname}$" | sed -n 's/.*\[.*]\(.*\) .*[0-9]-.*/\1/;$ p'
673     }
674    
675     updatecmd_freedesktop()
676     {
677     local pname=$1
678     local archive
679     local subdir
680     local tarballname
681    
682     [[ -z ${pname} ]] && die "give me a \$PNAME"
683     [[ ! -z $2 ]] && archive="$2"
684     [[ ! -z ${UP2SUBDIR} ]] && subdir="/${UP2SUBDIR}"
685     tarballname="${pname}"
686     [[ ! -z ${UP2TARBALL} ]] && tarballname="${UP2TARBALL}"
687    
688     # exclude rc versions!
689 niro 3112 updatecmd "http://${pname}.freedesktop.org/releases${subdir}" | grep ${tarballname}- | grep -v rc[0-9] | highesttarball "${archive}"
690 niro 2017 }
691    
692     updatecmd_xorg()
693     {
694     local pname=$1
695     local subdir
696     local tarballname
697     local pcat
698    
699     [[ -z ${pname} ]] && die "give me a \$PNAME"
700     [[ ! -z $2 ]] && archive="$2"
701     tarballname="${pname}-"
702     if [[ ! -z ${PCAT} ]]
703     then
704     pcat="${PCAT}"
705     else
706     pcat="${PCATEGORIE}"
707     fi
708     subdir="$(echo ${pcat} | sed -e 's:x11-::' -e 's:media-::' -e 's/\(.*\)s$/\1/')"
709     [[ ! -z ${UP2SUBDIR} ]] && subdir="${UP2SUBDIR}"
710     [[ ! -z ${UP2TARBALL} ]] && tarballname="${UP2TARBALL}"
711    
712 niro 3112 updatecmd "http://xorg.freedesktop.org/archive/individual/${subdir}/?C=M;O=A" | grep "/${tarballname}" | highesttarball "${archive}"
713 niro 2017 }
714    
715     updatecmd_perl()
716     {
717     local pname=$1
718     local archive
719     local uppver
720    
721     [[ -z ${pname} ]] && die "give me a \$PNAME"
722     [[ ! -z $2 ]] && archive="$2"
723    
724     uppver=$(updatecmd "http://search.cpan.org/dist/${pname}/" | lasttarball "${archive}")
725    
726 niro 3112 if [[ ! -z ${UP2SUBSTITUTE} ]]
727     then
728     echo "${uppver}" | sed "s:${UP2SUBSTITUTE}::g"
729     else
730     echo "${uppver}"
731     fi
732 niro 2017 }
733    
734 niro 3112 updatecmd_pypi()
735     {
736     local pname="$1"
737     local archive="$2"
738     local uppver
739     # local fullarchive
740     # local tarball=
741     # local seperator
742    
743     [[ -z ${pname} ]] && die "give me a \$PNAME"
744     [[ -z ${archive} ]] && die "give me a \$ARCHIVE"
745    
746     # case ${archive} in
747     # gz|bz2) fullarchive=".tar.${archive}" ;;
748     # *) fullarchive=".${archive}" ;;
749     # esac
750    
751     # tarball="${pname}"
752     # seperator="-"
753     # [[ -z ${UP2TARBALL} ]] || tarball="${UP2TARBALL}"
754     # [[ -z ${UP2SEPERATOR} ]] || seperator="${UP2SEPERATOR}"
755    
756     # we cannot sort with C=M;O=A
757     # uppver=$(updatecmd -listonly https://pypi.python.org/packages/source/${pname:0:1}/${pname}/ | grep ${tarball} | grep ${fullarchive} | sed "s:.*${tarball}${seperator}\(.*\)${fullarchive}:\1:")
758     uppver=$(updatecmd https://pypi.python.org/pypi/${pname}/ | grep "/source/${pname:0:1}/${pname}/" | highesttarball ${archive})
759     #uppver=$(updatecmd -listonly https://pypi.python.org/pypi/${pname}/ | grep ${tarball} | grep ${fullarchive} | sed "s:.*${tarball}${seperator}\(.*\)${fullarchive}:\1:")
760    
761     upsort ${uppver}
762     }
763    
764 niro 2017 updatecmd_gnome()
765     {
766     local uri
767     local pname="$1"
768 niro 3112 local mode="$2"
769     local appmajor
770 niro 2017
771 niro 3112
772 niro 2017 [[ -z ${pname} ]] && die "give me a \$PNAME"
773    
774 niro 3112 case ${mode} in
775     devel|--devel) mode="devel" ;;
776     *) mode="normal" ;;
777     esac
778    
779     uri="http://ftp.gnome.org/pub/GNOME/sources/${pname}"
780     if [[ ${mode} = devel ]]
781     then
782     appmajor=$(updatecmd "${uri}"/?C=N\;O=D | grep '/' | sed -ne 's|.*]\(.*\)/.*|\1|' -e '1 p')
783     else
784     appmajor=$(updatecmd "${uri}"/?C=N\;O=D | grep '[0-9]\.[0-9]*[02468]/' | sed -ne 's|.*]\(.*\)/.*|\1|' -e '1 p')
785     fi
786    
787     updatecmd ${uri}/${appmajor}/ | grep ]LA | sed 's/.*S-\([0-9\.]*\).*/\1/' | upsort_pipe
788 niro 2017 }
789    
790     updatecmd_xfce()
791     {
792     local uri
793     local pname="$1"
794     local archive
795     local subdir
796    
797     [[ -z ${pname} ]] && die "give me a \$PNAME"
798     [[ ! -z $2 ]] && archive="$2"
799     if [[ -n ${UP2SUBDIR} ]]
800     then
801     subdir="${UP2SUBDIR}"
802     else
803     subdir="xfce"
804     fi
805    
806     uri="http://archive.xfce.org/src/${subdir}/${pname}"
807 niro 3112 if [[ ${UP2OPTS} = unstable ]]
808     then
809     #updatecmd ${uri}/$(updatecmd "${uri}"/?C=N\;O=D | grep '[0-9]\.[0-9]/' | sed -ne 's|.*]\(.*\)/.*|\1|' -e '1 p')/?C=M\;O=A | lasttarball "${archive}"
810     updatecmd ${uri}/$(updatecmd -nolist "${uri}" | grep '[0-9]\.[0-9]*[0-9]/' | sed -e 's|.*]\(.*\)/.*|\1|' | upsort_pipe)/ | highesttarball "${archive}"
811     else
812     #updatecmd ${uri}/$(updatecmd "${uri}"/?C=N\;O=D | grep '[0-9]\.[0-9]*[02468]/' | sed -ne 's|.*]\(.*\)/.*|\1|' -e '1 p')/?C=M\;O=A | lasttarball "${archive}"
813     updatecmd ${uri}/$(updatecmd -nolist "${uri}" | grep '[0-9]\.[0-9]*[02468]/' | sed -e 's|.*]\(.*\)/.*|\1|' | upsort_pipe)/ | highesttarball "${archive}"
814     fi
815 niro 2017 }
816    
817     updatecmd_google()
818     {
819     local uri
820     local pname="$1"
821     local archive
822    
823     [[ -z ${pname} ]] && die "give me a \$PNAME"
824     [[ ! -z $2 ]] && archive="$2"
825    
826     uri="http://code.google.com/p/${pname}/downloads/list"
827     updatecmd --listonly "${uri}" | grep ${pname}- | firsttarball "${archive}"
828     }
829    
830     updateme()
831     {
832     local smage="$1"
833     local ONLY_PRINT_UPSTREAM
834    
835     if [[ $1 = --upstream ]] || [[ $1 = -u ]]
836     then
837     if [[ -z $2 ]] || [[ ${2##*.} != smage2 ]]
838     then
839     echo "you must give me a smagefile."
840     exit 1
841     fi
842     ONLY_PRINT_UPSTREAM=1
843     smage="$2"
844     fi
845    
846     local PNAME
847     local PCATEGORIE
848     local PCAT
849     local PVER
850     local UP2DATE
851 niro 3112 local UP2URI
852 niro 2017 local UP2PVER
853     local UP2TARBALL
854     local UP2SUBDIR
855     local UP2SUBSTITUTE
856     local UP2USERAGENT
857     local UP2EXCLUDE
858     local UP2SEPERATOR
859     local UP2OPTS
860     local UPSTREAM_PVER
861 niro 3112 #
862     # PNAME="$(get_value_from_magefile PNAME ${smage})"
863     # PCATEGORIE="$(get_value_from_magefile PCATEGORIE ${smage})"
864     # PCAT="$(get_value_from_magefile PCAT ${smage})"
865     # PVER="$(get_value_from_magefile PVER ${smage})"
866     # UP2PVER="$(get_value_from_magefile UP2PVER ${smage})"
867     # UP2TARBALL="$(get_value_from_magefile UP2TARBALL ${smage})"
868     # UP2SUBDIR="$(get_value_from_magefile UP2SUBDIR ${smage})"
869     # UP2SUBSTITUTE="$(get_value_from_magefile UP2SUBSTITUTE ${smage})"
870     # UP2USERAGENT="$(get_value_from_magefile UP2USERAGENT ${smage})"
871     # UP2EXCLUDE="$(get_value_from_magefile UP2EXCLUDE ${smage})"
872     # UP2SEPERATOR="$(get_value_from_magefile UP2SEPERATOR ${smage})"
873     # UP2OPTS="$(get_value_from_magefile UP2OPTS ${smage})"
874     smagesource "${smage}"
875 niro 2017
876     [[ -z ${UP2PVER} ]] && UP2PVER="${PVER}"
877    
878     UP2DATE=$(get_value_from_magefile UP2DATE ${smage})
879    
880     if [[ -z ${UP2DATE} ]]
881     then
882     #echo "\$UP2DATE is empty, skipping ..."
883 niro 3112 #continue
884     :
885 niro 2017 fi
886    
887     #echo "UP2DATE=${UP2DATE}"
888     #read
889     UPSTREAM_PVER=$(eval "${UP2DATE}")
890     if [[ ${ONLY_PRINT_UPSTREAM} = 1 ]]
891     then
892     echo "${UPSTREAM_PVER}"
893     else
894     # [[ ${UP2PVER} = ${UPSTREAM_PVER} ]] && echo -e "${PNAME}: ${COLGREEN}'${UP2PVER}' = '${UPSTREAM_PVER}'${COLDEFAULT}"
895     # #[[ ${UP2PVER} != ${UPSTREAM_PVER} ]] && echo "${PNAME}: '${UP2PVER}' != '${UPSTREAM_PVER}'"
896     # [[ ${UP2PVER} < ${UPSTREAM_PVER} ]] && echo -e "${PNAME}: ${COLRED}'${UP2PVER}' < '${UPSTREAM_PVER}'${COLDEFAULT}"
897     # [[ ${UP2PVER} > ${UPSTREAM_PVER} ]] && echo -e "${PNAME}: ${COLYELLOW}'${UP2PVER}' > '${UPSTREAM_PVER}'${COLDEFAULT}"
898     local retval
899     retval=$(/home/tjoke/archlinux_version/vercomp "${UP2PVER}" "${UPSTREAM_PVER}")
900     [ ${retval} -eq 0 ] && echo -e "${PNAME}: ${COLGREEN}'${UP2PVER}' = '${UPSTREAM_PVER}'${COLDEFAULT}"
901     [ ${retval} -lt 0 ] && echo -e "${PNAME}: ${COLRED}'${UP2PVER}' < '${UPSTREAM_PVER}'${COLDEFAULT}"
902     [ ${retval} -gt 0 ] && echo -e "${PNAME}: ${COLYELLOW}'${UP2PVER}' > '${UPSTREAM_PVER}'${COLDEFAULT}"
903     fi
904     }
905    
906     updateall()
907     {
908     #local REPOS
909     local PACKAGE
910     local smage
911     local repo
912 niro 3112 local UP2DATE_SLEEP_COUNT=0
913     local UP2DATE_SLEEP_TIMEOUT=0
914 niro 2017 local ONLY_PRINT_UPSTREAM=0
915    
916     : ${REPOS="/home/tjoke/svn/smage/trunk/core /home/tjoke/svn/smage/trunk/extras /home/tjoke/svn/smage/trunk/nonfree /home/tjoke/svn/smage/trunk/todo"}
917     # REPOS="/home/tjoke/svn/smage/trunk/core /home/tjoke/svn/smage/trunk/extras"
918     # REPOS="/home/tjoke/svn/smage/trunk/core"
919     # PACKAGE="glibc-nptl"
920     # PACKAGE="autoconf21"
921     PACKAGE="*"
922     [[ ! -z $1 ]] && PACKAGE="$1"
923    
924     if [[ $1 = --upstream ]] || [[ $1 = -u ]]
925     then
926     if [[ -z $2 ]] || [[ ${2##*.} != smage2 ]]
927     then
928     echo "you must give me a smagefile."
929     exit 1
930     fi
931     updateme $1 $2
932     return 0
933     fi
934    
935     ##############################################################################
936     # recurse all depends if requested
937     #
938     if [[ $1 = --depend ]] || [[ $1 = -d ]]
939     then
940     if [[ -z $2 ]] || [[ ${2##*.} != smage2 ]]
941     then
942     echo "you must give me a smagefile."
943     exit 1
944     fi
945    
946     SMAGEFILE="$2"
947     PACKAGE="$(magename2pname ${SMAGEFILE})"
948    
949     echo "processing '${SMAGEFILE}' ..."
950     echo "running dependency checks for package '${PACKAGE}'..."
951    
952     DEPEND=$(get_value_from_magefile DEPEND ${SMAGEFILE})
953     SDEPEND=$(get_value_from_magefile SDEPEND ${SMAGEFILE})
954    
955     declare -i c=0
956     while read sign dep
957     do
958     case ${dep} in
959     "") continue;;
960     esac
961    
962     # sleep every 15 packages for 5 seconds
963     (( c++ ))
964     if [[ ${c} -eq ${UP2DATE_SLEEP_COUNT} ]]
965     then
966     declare -i c=0
967     echo "DEBUG: Sleep Count (${UP2DATE_SLEEP_COUNT}x) reached, sleeping for ${UP2DATE_SLEEP_TIMEOUT} seconds ..."
968     sleep ${UP2DATE_SLEEP_TIMEOUT}
969     fi
970     #echo "debug: ${dep}"
971     updateme "$(dep2pname ${dep})"
972     done << EOF
973     ${DEPEND}
974     ${SDEPEND}
975     EOF
976     fi
977     #
978     # eof recurse
979     ##############################################################################
980    
981     for repo in ${REPOS}
982     do
983     # exclude not existing
984     [[ ${PACKAGE} != \* ]] && [[ ! -d ${repo}/${PACKAGE} ]] && continue
985    
986     declare -i c=0
987     for smage in ${repo}/${PACKAGE}/*.smage2
988     do
989     updateme ${smage}
990    
991     # sleep every 15 packages for 5 seconds
992     (( c++ ))
993     if [[ ${c} -eq ${UP2DATE_SLEEP_COUNT} ]]
994     then
995     declare -i c=0
996     echo "DEBUG: Sleep Count (${UP2DATE_SLEEP_COUNT}x) reached, sleeping for ${UP2DATE_SLEEP_TIMEOUT} seconds ..."
997     sleep ${UP2DATE_SLEEP_TIMEOUT}
998     fi
999     done
1000     done
1001     }
1002    
1003     updateall $@

Properties

Name Value
svn:executable *