--- lib/libapse.lib.in 2009-10-16 11:50:55.000000000 +0200 +++ lib/libapse.lib.in 2009-07-23 00:16:29.000000000 +0200 @@ -12,6 +12,12 @@ . /usr/share/autospec/lib/libmsgmng.lib +[ -r /usr/share/autospec/lib/libspec.lib ] || + { echo "$me: "$"library not found"": /usr/share/autospec/lib/libspec.lib" 1>&2 + exit 1; } + +. /usr/share/autospec/lib/libspec.lib + if [[ -z "$LANG" && -r /etc/sysconfig/i18n ]]; then . /etc/sysconfig/i18n [ "$LANG" ] && export LANG @@ -317,24 +323,66 @@ *) notify.warning $"curl error (exit code: $retval)" ;; esac - local pcknameregexp=$(echo $pcknameverbatim | sed "\ - s,%[{]*name[}]*,$specname, - s,%[{]*version[}]*,\\\([A-Za-z0-9._]*\\\), - s,%[{]*.*[}]*,[A-Za-z0-9._]*, - s,\.gz$,., - s,\.tgz$,., - s,\.bz2$,., - s,\.lzma$,.,") + local svar svalue spck candidate_version + # filter "?var:" expressions + spck=`echo $pcknameverbatim | sed "s,%{?[A-Za-z0-9_]*:.*\(%[A-Za-z0-9_]*\)},\1,"` + + while true; do + svar=`echo $spck | sed "\ + s,.*%[{]*\([A-Za-z0-9_]*\)[}]*.*,\1,"` + [ "$svar" = "$spck" ] && break + if [ "$svar" = "version" ]; then + svalue="\\\([A-Za-z0-9._]*\\\)" + else + svalue=`rpmvars.solve "%$svar" "$spec_dir/$specname.spec"` + [ "$svalue" = "%$svar" ] && svalue= + fi + spck=`echo $spck | sed "\ + s,%[{]*$svar[}]*,$svalue,"` + done + # remove archiver extension from rexexp to match changes + local pcknameregexp=$(echo [^A-Za-z0-9._-]$spck | sed "\ + s,\.gz$,\\\., + s,\.tgz$,\\\., + s,\.bz2$,\\\., + s,\.lzma$,\\\., + s,\.lz$,\\\., + s,\.tbz2$,\\\.,") +#echo $pcknameregexp if [ $? -eq 0 ]; then if [ "${pcknameregexp/(/}" = "${pcknameregexp}" ]; then notify.warning "* "$"not parametric source0 name; cannot update" else - new_version=$(\ + candidate_versions=($(\ grep -i "$pcknameregexp" $fcurlout | \ sed "\ -s,.*$pcknameregexp.*,\1,g" | \ -sort -t. -n -r -k1 -k2 -k3 -k4 -k5 -k6 -k7 -k8 -k9 -k10 | head -n1) +s,.*$pcknameregexp.*,\1,g +s,.*\.md5,, +s,\.zip$,, +s,\.tar\.gz$,, +s,\.tar\.bz2$,, +s,\.gz$,, +s,\.tgz$,, +s,\.bz2$,, +s,\.lzma$,, +s,\.i386$,, +s,\.bin$,, +s,\.exe$,, +s,\.dmg$,, +s,\.tbz2$,, +s,\.lz$,," | +sort -t. -n -r -k1 -k2 -k3 -k4 -k5 -k6 -k7 -k8 -k9 -k10 )) + + local curr_version_dots new_version_dots candidate_version + curr_version_dots=`echo $SPEC_VERSION | tr -d [0-9][A-Z][a-z]_` + for candidate_version in ${candidate_versions[*]}; do + # skip version with no dots if current version has at least one (e.g. date release like 20000110) + new_version_dots=`echo $candidate_version | tr -d [0-9][A-Z][a-z]_` + [ ${#new_version_dots} = 0 -a ${#curr_version_dots} -gt 0 ] && continue + new_version=$candidate_version + break + done fi fi