Contents of /branches/mage-next/src/up2date/up2date.in
Parent Directory | Revision Log
Revision 2586 -
(show 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 | #!/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 $@ |