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