X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=relup.sh;h=9a07402e5bfc5f0a574a31c602f59cd8f45de329;hb=84a0aacd62b5eba65e73edaa87a6a22cb0c8ec41;hp=3c27e78996383a720b8481de96ec3268530bd1cf;hpb=471b4de06ad965375228ebf714f76440a6ed46e3;p=packages%2Frpm-build-tools.git diff --git a/relup.sh b/relup.sh old mode 100644 new mode 100755 index 3c27e78..9a07402 --- a/relup.sh +++ b/relup.sh @@ -1,11 +1,8 @@ #!/bin/sh -# script to run after "rel up" style change. +# script to run after "release bump" style change. # takes Release from spec and creates commit with message # groups similiar commits together. -# "- rel $rel" -# - fails when specfile defines Icon: but the icon is not present in SOURCES -# TODO -# - optional message after rel: "- rel 9 (rebuild with foolib)" +# "- release $rel" set -e @@ -20,13 +17,17 @@ get_dump() { } usage="Usage: -${0##*/} [-i] [-t] [-m ] +${0##*/} [-i] [-g] [-u] [-t|-n] [-m ] Options: -i Try to increment package release --t - Test mode. do not commit +-g + get packages if missing, do nothing else +-u + update packages (git pull) +-t | -n + Test mode (dry-run). do not commit -m Specify commit message @@ -52,12 +53,44 @@ set_release() { " $specfile } +bump_release() { + local release=$1 rel + + rel=$(expr ${release} + 1) + echo $rel +} + +# normalize spec +# takes as input: +# - PACKAGE/ +# - ./PACKAGE/ +# - PACKAGE +# - PACKAGE.spec +# - ./PACKAGE.spec +# - PACKAGE/PACKAGE +# - PACKAGE/PACKAGE.spec +# - ./PACKAGE/PACKAGE.spec +# - rpm/PACKAGE/PACKAGE +# - rpm/PACKAGE/PACKAGE.spec +# - ./rpm/PACKAGE/PACKAGE.spec +# returns PACKAGE +package_name() { + local specfile="${1%/}" package + + # basename + specfile=${specfile##*/} + # strip .spec + package=${specfile%.spec} + + echo $package +} + if [ ! -x /usr/bin/getopt ]; then echo >&1 "You need to install util-linux to use relup.sh" exit 1 fi -t=$(getopt -o 'm:ith' -n "${0##*/}" -- "$@") || exit $? +t=$(getopt -o 'm:inguth' -n "${0##*/}" -- "$@") || exit $? # Note the quotes around `$t': they are essential! eval set -- "$t" @@ -66,7 +99,13 @@ while true; do -i) inc=1 ;; - -t) + -u) + update=1 + ;; + -g) + get=1 + ;; + -t | -n) test=1 ;; -m) @@ -89,27 +128,63 @@ while true; do shift done -tmpd=$(mktemp -d "${TMPDIR:-/tmp}/relXXXXXX") -for spec in "$@"; do - spec=${spec%.spec}.spec +topdir=$(rpm -E '%{_topdir}') + +n="$(echo -e '\nn')" +n="${n%%n}" + +cd "$topdir" +for pkg in "$@"; do + # pkg: package %{name} + pkg=$(package_name "$pkg") + + # spec: package/package.spec + spec=$(rpm -D "name $pkg" -E '%{_specdir}/%{name}.spec') + spec=${spec#$topdir/} + + # pkgdir: package/ + pkgdir=${spec%/*} + + # specname: only spec filename + specname=${spec##*/} + + # start real work + echo "$pkg ..." + + # get package + [ "$get" = 1 -a -d "$pkgdir" ] && continue + + if [ "$update" = "1" -o "$get" = "1" ]; then + ./builder -g -ns "$spec" + fi + + [ "$get" = 1 ] && continue + + # update .spec files rel=$(get_release "$spec") if [ "$inc" = 1 ]; then - newrel=$(expr $rel + 1) - set_release "$spec" $rel $newrel + if [[ $rel = *%* ]]; then + relmacro=${rel#*%} + newrel=$(bump_release ${rel%%%*}) + set_release "$spec" $rel "${newrel}%${relmacro}" + else + newrel=$(bump_release ${rel}) + set_release "$spec" $rel $newrel + fi # refetch release rel=$(get_release "$spec") fi - echo "$spec" >> "$tmpd/$rel" -done -for file in $(ls "$tmpd" 2>/dev/null); do - files=$(cat "$tmpd/$file") - rel=$(basename "$file") - msg="- release $rel${message:+ ($message)}" - echo cvs ci -m "'$msg'" + # commit the changes + msg="" + [ -n "$message" ] && msg="$msg- $message$n" + msg="$msg- release ${rel%%%*} (by relup.sh)" + echo git commit -m "$msg" $spec if [ "$test" != 1 ]; then - cvs ci -m "$msg" $files + cd $pkgdir + git commit -m "$msg" $specname + git push + cd .. fi done -rm -rf $tmpd