X-Git-Url: https://git.pld-linux.org/?a=blobdiff_plain;f=update-source.sh;h=1a4a51198d8a77a455dd2ca0cb9a7a841b3d7187;hb=224e17ab976ad662d375b4c07d92fa72f775989d;hp=8463986ca5d38ed12009cd9a8c3e5b9915e681cc;hpb=6eada10b758b2f2d4d59cedf1f03b44087b86989;p=packages%2Fvim.git diff --git a/update-source.sh b/update-source.sh index 8463986..1a4a511 100755 --- a/update-source.sh +++ b/update-source.sh @@ -10,6 +10,87 @@ dir=$(dirname "$0") cd "$dir" +update_sources() { + local ver="$1" + local patch msg over file + + echo "Updating $specfile to $ver" + patch=${ver#$basever.} + if [ -z "$patch" ]; then + echo >&2 "Will not set empty patchlevel" + exit 1 + fi + sed -i -e " + s/^\(%define[ \t]\+patchlevel[ \t]\+\)[0-9]\+\$/\1$patch/ + s/^\(%define[ \t]\+rel[ \t]\+\)[0-9.]\+\$/\11/ + " $specfile + + # fetch missing/mismatching files manually. faster than builder script does that + md5sum -c sources 2>/dev/null | awk -F: '$NF != " OK" {print $1}' | while read file; do + echo "$baseurl/$file" + done | wget -nv -i - + + WGET_OPTS="-nv" ../builder -g $specfile + + if [ "$build_package" != 0 ]; then + build_package + fi + + # autocommit + msg=$(mktemp) + echo "updated to $ver" > $msg + echo "" >> $msg + over=$(git diff sources | awk '/^\+[0-9a-f]+/{over=$NF; gsub(/\./, "\\.",over); print over; exit}') + sed -ne "/$over/,\$p" README.patches | sed -re 's,^[ 0-9]+ ,,' >> $msg + git commit -F $msg $specfile sources + rm -f $msg +} + +build_package() { + local logfile=$outdir/$pkg.log + + install -d $rpmdir + + # setup custom logfile via $HOME_ETC hack + # TODO: just add --logfile support for builder + cat > $outdir/.builderrc <<-EOF + if [ -n "$HOME_ETC" ]; then + . "$HOME_ETC/.builderrc" + elif [ -r ~/.builderrc ]; then + . ~/.builderrc + fi + LOGFILE='$logfile' + EOF + + > $logfile + HOME_ETC=$outdir \ + ../builder -bb --clean \ + --define "_unpackaged_files_terminate_build 1" \ + --define '_enable_debug_packages 0' \ + --define "_builddir $outdir" \ + --define "_rpmdir $rpmdir" \ + $specfile || { + echo "Package build failed" >&2 + tail -n 1000 $logfile >&2 + exit 1 + } + echo >&2 "Package build OK" + + if [ "$publish_packages" ] && [ "$(ls $rpmdir/*.rpm 2>/dev/null)" ]; then + publish_packages + fi +} + +publish_packages() { + local rpmdest=~/public_html/$dist/$arch/ + + install -d $rpmdest + umask 022 + chmod 644 $rpmdir/*.rpm + mv -v $rpmdir/*.rpm $rpmdest/ + poldek --cachedir=$HOME/tmp --mkidx -s $rpmdest/ --mt=pndir +} + # abort on errors set -e @@ -22,30 +103,33 @@ fi pkg=vim specfile=$pkg.spec -basever=7.3 +basever=7.4 baseurl=ftp://ftp.vim.org/pub/editors/vim/patches/$basever sources=ftp://ftp.vim.org/pub/editors/vim/patches/$basever/MD5SUMS +# setup some paths +dist=$(rpm -E %{pld_release}) +arch=$(rpm -E %{_host_cpu}) +outdir=$(readlink -f $dir)/BUILD-$dist-$arch +rpmdir=$outdir/RPMS + status=$(git status --porcelain sources) if [ "$status" ]; then - echo >&2 "sources status not clean; commit or stash any pending changes" + echo >&2 "WARNING: sources status not clean; commit or stash any pending changes" echo "$status" - exit 1 fi if [ "$1" ]; then ver=$1 else echo "Fetching latest patches list..." - wget -nv $sources -O sources - git status --porcelain sources - - status=$(git status --porcelain sources) - if [ -z "$status" ]; then - echo >&2 "No changes to 'sources'. All done" - echo "$status" - exit 0 - fi + wget -nv $sources -O sources.tmp 2>&1 + sort -k 2 -V < sources.tmp > sources.new + # exclude files already in git tree + git ls-files "$basever.*" | sed -e 's/\./\\./g;s/$/$/'| grep -vf - sources.new > sources + rm sources.new sources.tmp + # also update patches README + wget -nv $baseurl/README -O README.patches 2>&1 ver=$(tail -n1 sources | awk '{print $NF}') fi @@ -53,59 +137,7 @@ curpatch=$(awk '/^%define[ ]+patchlevel[ ]+/{print $NF}' $specfile) curver=$basever.$curpatch if [ "$curver" != "$ver" ]; then - echo "Updating $specfile to $ver" - patch=${ver#$basever.} - if [ -z "$patch" ]; then - echo >&2 "Will not set empty patchlevel" - exit 1 - fi - sed -i -e " - s/^\(%define[ \t]\+patchlevel[ \t]\+\)[0-9]\+\$/\1$patch/ - " $specfile - - WGET_OPTS="-nv" ../builder -g $specfile - - if [ "$build_package" != 0 ]; then - dist=$(rpm -E %{pld_release}) - arch=$(rpm -E %{_host_cpu}) - outdir=$(readlink -f $dir)/BUILD-$dist-$arch - logfile=$outdir/$pkg.log - rpmdir=$outdir/RPMS - install -d $rpmdir - - # setup custom logfile via $HOME_ETC hack - # TODO: just add --logfile support for builder - cat > $outdir/.builderrc <<-EOF - if [ -n "$HOME_ETC" ]; then - . "$HOME_ETC/.builderrc" - elif [ -r ~/.builderrc ]; then - . ~/.builderrc - fi - LOGFILE='$logfile' - EOF - - > $logfile - HOME_ETC=$outdir \ - ../builder -bb --clean \ - --define "_unpackaged_files_terminate_build 1" \ - --define '_enable_debug_packages 0' \ - --define "_builddir $outdir" \ - --define "_rpmdir $rpmdir" \ - $specfile || { - echo "Package build failed" - tail -n 1000 $logfile >&2 - exit 1 - } - - rpmdest=~/public_html/$dist/$arch/ - if [ "$publish_packages" ] && [ "$(ls $rpmdir/*.rpm 2>/dev/null)" ]; then - install -d $rpmdest - umask 022 - chmod 644 $rpmdir/*.rpm - mv -v $rpmdir/*.rpm $rpmdest/ - poldek --cachedir=$HOME/tmp --mkidx -s $rpmdest/ --mt=pndir - fi - fi + update_sources "$ver" else echo "$specfile already up to $ver" fi