]>
Commit | Line | Data |
---|---|---|
5dc951e1 | 1 | #!/bin/sh |
3c02bcbe | 2 | # script to run after "release bump" style change. |
5dc951e1 | 3 | # takes Release from spec and creates commit with message |
c2d1361e | 4 | # groups similiar commits together. |
3c02bcbe | 5 | # "- release $rel" |
5dc951e1 ER |
6 | |
7 | set -e | |
5dc951e1 ER |
8 | |
9 | get_dump() { | |
b9c37ff0 | 10 | local specfile="$1" |
c2d1361e ER |
11 | if ! out=$(rpm --specfile "$specfile" --define 'prep %dump' -q 2>&1); then |
12 | echo >&2 "$out" | |
13 | echo >&2 "You need icon files being present in SOURCES." | |
14 | exit 1 | |
15 | fi | |
b77bda72 | 16 | echo "$out" |
5dc951e1 ER |
17 | } |
18 | ||
e5c1545d | 19 | usage="Usage: |
ed891ce4 | 20 | ${0##*/} [-i] [-u] [-t] [-n] [-m <MESSAGE>] <SPECLIST> |
e5c1545d ER |
21 | |
22 | Options: | |
23 | -i | |
24 | Try to increment package release | |
2592af77 | 25 | -u |
2d0ad334 | 26 | git pull first |
ed891ce4 ER |
27 | -t | -n |
28 | Test mode (dry-run). do not commit | |
e5c1545d ER |
29 | -m |
30 | Specify commit message | |
31 | ||
32 | " | |
33 | ||
5dc951e1 | 34 | get_release() { |
376ea54e | 35 | local specfile="$1" |
4881d2e7 | 36 | rel=$(awk '/^%define[ ]+_?rel[ ]+/{print $NF}' $specfile) |
376ea54e | 37 | if [ -z "$rel" ]; then |
c2d1361e ER |
38 | dump=$(get_dump "$specfile") |
39 | rel=$(echo "$dump" | awk '/PACKAGE_RELEASE/{print $NF; exit}') | |
376ea54e ER |
40 | fi |
41 | echo $rel | |
5dc951e1 ER |
42 | } |
43 | ||
82e31bc6 ER |
44 | set_release() { |
45 | local specfile="$1" | |
46 | local rel="$2" | |
bdfdf194 | 47 | local newrel="$3" |
82e31bc6 | 48 | sed -i -e " |
4881d2e7 | 49 | s/^\(%define[ \t]\+_\?rel[ \t]\+\)$rel\$/\1$newrel/ |
5c68af79 | 50 | s/^\(Release:[ \t]\+\)$rel\$/\1$newrel/ |
82e31bc6 ER |
51 | " $specfile |
52 | } | |
53 | ||
b6f02a43 ER |
54 | if [ ! -x /usr/bin/getopt ]; then |
55 | echo >&1 "You need to install util-linux to use relup.sh" | |
56 | exit 1 | |
57 | fi | |
58 | ||
ed891ce4 | 59 | t=$(getopt -o 'm:inuth' -n "${0##*/}" -- "$@") || exit $? |
82e31bc6 | 60 | # Note the quotes around `$t': they are essential! |
b6f02a43 ER |
61 | eval set -- "$t" |
62 | ||
63 | while true; do | |
64 | case "$1" in | |
82e31bc6 ER |
65 | -i) |
66 | inc=1 | |
67 | ;; | |
2592af77 AM |
68 | -u) |
69 | update=1 | |
70 | ;; | |
ed891ce4 | 71 | -t | -n) |
bdfdf194 ER |
72 | test=1 |
73 | ;; | |
b6f02a43 ER |
74 | -m) |
75 | shift | |
6de0e286 | 76 | message="${1#- }" |
b6f02a43 | 77 | ;; |
e5c1545d ER |
78 | -h) |
79 | echo "$usage" | |
80 | exit 0 | |
81 | ;; | |
b6f02a43 ER |
82 | --) |
83 | shift | |
84 | break | |
85 | ;; | |
86 | *) | |
87 | echo 2>&1 "Internal error: [$1] not recognized!" | |
88 | exit 1 | |
89 | ;; | |
90 | esac | |
91 | shift | |
92 | done | |
93 | ||
b9c37ff0 | 94 | tmpd=$(mktemp -d "${TMPDIR:-/tmp}/relXXXXXX") |
b822263b | 95 | topdir=$(rpm -E '%{_topdir}') |
07ea9b01 ER |
96 | |
97 | # round 1: get packages and update .spec files | |
98 | # batches changes for each release | |
99 | # TODO: drop this, in git need to commit and push each package separately, no | |
100 | # way to group changes as in CVS | |
b822263b ER |
101 | cd "$topdir" |
102 | for pkg in "$@"; do | |
fcb9ab5a ER |
103 | name=${pkg%.spec} name=${name##*/} |
104 | spec=$(rpm -D "name $name" -E '%{_specdir}/%{name}.spec') | |
b822263b | 105 | spec=${spec#$topdir/} |
86d87bda | 106 | if [ "$update" = "1" ]; then |
b822263b | 107 | ./builder -g -ns "$spec" |
86d87bda | 108 | fi |
59617750 | 109 | rel=$(get_release "$spec") |
82e31bc6 | 110 | if [ "$inc" = 1 ]; then |
ca451162 JR |
111 | if [[ $rel = *%* ]]; then |
112 | relmacro=${rel#*%} | |
113 | relnum=${rel%%%*} | |
114 | newrel=$(expr ${relnum} + 1) | |
115 | set_release "$spec" $rel "${newrel}%${relmacro}" | |
116 | else | |
117 | newrel=$(expr ${rel} + 1) | |
118 | set_release "$spec" $rel $newrel | |
119 | fi | |
82e31bc6 ER |
120 | |
121 | # refetch release | |
122 | rel=$(get_release "$spec") | |
123 | fi | |
b9c37ff0 ER |
124 | echo "$spec" >> "$tmpd/$rel" |
125 | done | |
126 | ||
07ea9b01 | 127 | # round 2: commit the changes |
ed891ce4 ER |
128 | n="$(echo -e '\nn')" |
129 | n="${n%%n}" | |
d9602bf7 ER |
130 | for rel in $(ls "$tmpd" 2>/dev/null); do |
131 | packages=$(cat "$tmpd/$rel") | |
132 | for pkg in $packages; do | |
133 | pkgdir=${pkg%/*} | |
134 | spec=${pkg##*/} | |
135 | msg="" | |
136 | [ -n "$message" ] && msg="$msg- $message$n" | |
137 | msg="$msg- release ${rel%%%*} (by relup.sh)" | |
138 | echo git commit -m "$msg" $spec | |
139 | if [ "$test" != 1 ]; then | |
140 | cd $pkgdir | |
141 | git commit -m "$msg" $spec | |
142 | git push | |
143 | cd .. | |
144 | fi | |
145 | done | |
b9c37ff0 ER |
146 | done |
147 | rm -rf $tmpd |