X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=relup.sh;h=573919793d970b6f736a360cd0b33db7190a8464;hb=refs%2Fheads%2Fmaster;hp=76f735e9c5167b30af89684653d26520b0a60cb5;hpb=62113de5758fa81a6bdd9a0c28b29d17aab4316b;p=packages%2Frpm-build-tools.git diff --git a/relup.sh b/relup.sh index 76f735e..5739197 100755 --- a/relup.sh +++ b/relup.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # script to run after "release bump" style change. # takes Release from spec and creates commit with message # groups similiar commits together. @@ -8,22 +8,31 @@ set -e get_dump() { local specfile="$1" - if ! out=$(rpm --specfile "$specfile" --define 'prep %dump' -q 2>&1); then - echo >&2 "$out" + local rpm_dump + local success="y" + if [ -x /usr/bin/rpm-specdump ]; then + rpm_dump=$(rpm-specdump "$specfile" 2>&1) || success="n" + else + rpm_dump=$(rpm --specfile "$specfile" --define 'prep %dump' -q 2>&1) || success="n" + fi + if [ "$success" != "y" ]; then + echo >&2 "$rpm_dump" echo >&2 "You need icon files being present in SOURCES." exit 1 fi - echo "$out" + echo "$rpm_dump" } usage="Usage: -${0##*/} [-i] [-u] [-t] [-n] [-m ] +${0##*/} [-i] [-g] [-u] [-t|-n] [-m ] Options: -i Try to increment package release +-g + get packages if missing, do nothing else -u - git pull first + update packages (git pull) -t | -n Test mode (dry-run). do not commit -m @@ -36,7 +45,7 @@ get_release() { rel=$(awk '/^%define[ ]+_?rel[ ]+/{print $NF}' $specfile) if [ -z "$rel" ]; then dump=$(get_dump "$specfile") - rel=$(echo "$dump" | awk '/PACKAGE_RELEASE/{print $NF; exit}') + rel=$(echo "$dump" | awk '$2~/^(PACKAGE_)?RELEASE$/{print $NF; exit}') fi echo $rel } @@ -75,6 +84,8 @@ bump_release() { package_name() { local specfile="${1%/}" package + # strip branch + specfile=${specfile%:*} # basename specfile=${specfile##*/} # strip .spec @@ -83,12 +94,24 @@ package_name() { echo $package } +get_branch() { + local specfile="${1%/}" branch + + branch=${specfile#*:} + + if [ "$branch" != "$specfile" ]; then + echo "$branch" + else + echo "" + fi +} + 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:inuth' -n "${0##*/}" -- "$@") || exit $? +t=$(getopt -o 'm:inguth' -n "${0##*/}" -- "$@") || exit $? # Note the quotes around `$t': they are essential! eval set -- "$t" @@ -100,6 +123,9 @@ while true; do -u) update=1 ;; + -g) + get=1 + ;; -t | -n) test=1 ;; @@ -123,24 +149,48 @@ while true; do shift done -tmpd=$(mktemp -d "${TMPDIR:-/tmp}/relXXXXXX") topdir=$(rpm -E '%{_topdir}') -# round 1: get packages and update .spec files -# batches changes for each release -# TODO: drop this, in git need to commit and push each package separately, no -# way to group changes as in CVS +n="$(echo -e '\nn')" +n="${n%%n}" + cd "$topdir" for pkg in "$@"; do + branch=$(get_branch "$pkg") + # pkg: package %{name} pkg=$(package_name "$pkg") + + # spec: package/package.spec spec=$(rpm -D "name $pkg" -E '%{_specdir}/%{name}.spec') spec=${spec#$topdir/} - echo "$pkg ..." + # pkgdir: package/ + pkgdir=${spec%/*} + + # specname: only spec filename + specname=${spec##*/} - if [ "$update" = "1" ]; then - ./builder -g -ns "$spec" + # start real work + if [ -n "$branch" ]; then + echo "$pkg:$branch ..." + else + echo "$pkg ..." fi + + # get package + [ "$get" = 1 -a -d "$pkgdir" ] && continue + + if [ "$update" = "1" -o "$get" = "1" ]; then + if [ -n "$branch" ]; then + ./builder -g -ns "$spec" -r $branch + else + ./builder -g -ns "$spec" + fi + fi + + [ "$get" = 1 ] && continue + + # update .spec files rel=$(get_release "$spec") if [ "$inc" = 1 ]; then if [[ $rel = *%* ]]; then @@ -155,27 +205,17 @@ for pkg in "$@"; do # refetch release rel=$(get_release "$spec") fi - echo "$spec" >> "$tmpd/$rel" -done -# round 2: commit the changes -n="$(echo -e '\nn')" -n="${n%%n}" -for rel in $(ls "$tmpd" 2>/dev/null); do - packages=$(cat "$tmpd/$rel") - for pkg in $packages; do - pkgdir=${pkg%/*} - spec=${pkg##*/} - msg="" - [ -n "$message" ] && msg="$msg- $message$n" - msg="$msg- release ${rel%%%*} (by relup.sh)" - echo git commit -m "$msg" $spec - if [ "$test" != 1 ]; then - cd $pkgdir - git commit -m "$msg" $spec - git push - cd .. - fi - done + # commit the changes + msg="" + [ -n "$message" ] && msg="${msg}$message$n$n" + msg="${msg}Release ${rel%%%*} (by relup.sh)" + + echo git commit -m "$msg" $spec + if [ "$test" != 1 ]; then + cd $pkgdir + git commit -m "$msg" $specname + git push + cd .. + fi done -rm -rf $tmpd