]>
Commit | Line | Data |
---|---|---|
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 | if [ "$update" = "1" ]; then | |
101 | cvs up "$spec" | |
102 | fi | |
103 | rel=$(get_release "$spec") | |
104 | if [ "$inc" = 1 ]; then | |
105 | if [[ $rel = *%* ]]; then | |
106 | relmacro=${rel#*%} | |
107 | relnum=${rel%%%*} | |
108 | newrel=$(expr ${relnum} + 1) | |
109 | set_release "$spec" $rel "${newrel}%${relmacro}" | |
110 | else | |
111 | newrel=$(expr ${rel} + 1) | |
112 | set_release "$spec" $rel $newrel | |
113 | fi | |
114 | ||
115 | # refetch release | |
116 | rel=$(get_release "$spec") | |
117 | fi | |
118 | echo "$spec" >> "$tmpd/$rel" | |
119 | done | |
120 | ||
121 | for file in $(ls "$tmpd" 2>/dev/null); do | |
122 | files=$(cat "$tmpd/$file") | |
123 | rel=$(basename "$file") | |
124 | msg="- release $rel${message:+ ($message)}" | |
125 | echo cvs ci -m "'$msg'" | |
126 | if [ "$test" != 1 ]; then | |
127 | cvs ci -m "$msg" $files | |
128 | fi | |
129 | done | |
130 | rm -rf $tmpd |