]> git.pld-linux.org Git - packages/rpm-build-tools.git/blob - relup.sh
- cvsup mode
[packages/rpm-build-tools.git] / relup.sh
1 #!/bin/sh
2 # script to run after "rel up" style change.
3 # takes Release from spec and creates commit with message
4 # groups similiar commits together.
5 # "- rel $rel"
6 # - fails when specfile defines Icon: but the icon is not present in SOURCES
7 # TODO
8 # - optional message after rel: "- rel 9 (rebuild with foolib)"
9
10 set -e
11
12 get_dump() {
13         local specfile="$1"
14         if ! out=$(rpm --specfile "$specfile" --define 'prep %dump' -q 2>&1); then
15                 echo >&2 "$out"
16                 echo >&2 "You need icon files being present in SOURCES."
17                 exit 1
18         fi
19         echo "$out"
20 }
21
22 usage="Usage:
23 ${0##*/} [-i] [-u] [-t] [-m <MESSAGE>] <SPECLIST>
24
25 Options:
26 -i
27   Try to increment package release
28 -u
29   cvs update first
30 -t
31   Test mode. do not commit
32 -m
33   Specify commit message
34
35 "
36
37 get_release() {
38         local specfile="$1"
39         rel=$(awk '/^%define[   ]+_?rel[        ]+/{print $NF}' $specfile)
40         if [ -z "$rel" ]; then
41                 dump=$(get_dump "$specfile")
42                 rel=$(echo "$dump" | awk '/PACKAGE_RELEASE/{print $NF; exit}')
43         fi
44         echo $rel
45 }
46
47 set_release() {
48         local specfile="$1"
49         local rel="$2"
50         local newrel="$3"
51         sed -i -e "
52                 s/^\(%define[ \t]\+_\?rel[ \t]\+\)$rel\$/\1$newrel/
53                 s/^\(Release:[ \t]\+\)$rel\$/\1$newrel/
54         " $specfile
55 }
56
57 if [ ! -x /usr/bin/getopt ]; then
58         echo >&1 "You need to install util-linux to use relup.sh"
59         exit 1
60 fi
61
62 t=$(getopt -o 'm:iuth' -n "${0##*/}" -- "$@") || exit $?
63 # Note the quotes around `$t': they are essential!
64 eval set -- "$t"
65
66 while true; do
67         case "$1" in
68         -i)
69                 inc=1
70                 ;;
71         -u)
72                 update=1
73                 ;;
74         -t)
75                 test=1
76                 ;;
77         -m)
78                 shift
79                 message="${1#- }"
80                 ;;
81         -h)
82                 echo "$usage"
83                 exit 0
84                 ;;
85         --)
86                 shift
87                 break
88         ;;
89         *)
90                 echo 2>&1 "Internal error: [$1] not recognized!"
91                 exit 1
92                 ;;
93         esac
94         shift
95 done
96
97 tmpd=$(mktemp -d "${TMPDIR:-/tmp}/relXXXXXX")
98 for spec in "$@"; do
99         spec=${spec%.spec}.spec
100         rel=$(get_release "$spec")
101         if [ "$inc" = 1 ]; then
102                 newrel=$(expr $rel + 1)
103                 set_release "$spec" $rel $newrel
104
105                 # refetch release
106                 rel=$(get_release "$spec")
107         fi
108         echo "$spec" >> "$tmpd/$rel"
109 done
110
111 for file in $(ls "$tmpd" 2>/dev/null); do
112         files=$(cat "$tmpd/$file")
113         rel=$(basename "$file")
114         msg="- release $rel${message:+ ($message)}"
115         echo cvs ci -m "'$msg'"
116         if [ "$test" != 1 ]; then
117                 if [ "$update" = "1" ]; then
118                         cvs up $files
119                 fi
120                 cvs ci -m "$msg" $files
121         fi
122 done
123 rm -rf $tmpd
This page took 0.032786 seconds and 4 git commands to generate.