blob: 2217fdfb1618475bdeddcc34acb22aa4c75a2620 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
#!/bin/bash
# by {maekke,opfer}@gentoo.org
REPODIR="${HOME}/cvs/gentoo-x86"
BUGZ_USER="maekke@gentoo.org"
BUGZ="bugz"
die() {
echo $@
exit 1
}
if [[ $# -lt 3 ]] ; then
echo "usage:"
echo " ${0} bug-id \"arch1 arch2...\" pkg1 pkg2 ..."
echo
echo "Examples: ${0} 1234 \"amd64 x86\" \$(cat /tmp/kde-3.5.9)"
echo " ${0} 2345 ppc =sys-kernel/vanilla-sources-2.6.25"
echo " ${0} 456 \"amd64 x86 sparc\" sys-apps/baselayout-2.0.0"
echo " ${0} 0 x86 media-gfx/graphviz (will generate a message w/o bug#)"
echo " ${0} -m \"some bug message\+ 1234 \"amd64 arm\+ sys-apps/baselayout-2.0.0"
exit 1
fi
# some checks, that everything needed is installed
if [[ ! -x $(which q) ]] ; then
echo "you need portage-utils"
echo "emerge app-portage/portage-utils"
exit 1
fi
if [[ ! -d ${REPODIR} ]] ; then
echo "your \${REPODIR}='${REPODIR}' does not exist."
exit 1
fi
if [[ ${1} == "-m" ]]; then
shift
bugz_message="$1"
shift
fi
bugid="${1}"
arches="${2}"
shift 2
pkgs="$@"
# check if arches are sane
for arch in ${arches} ; do
[[ $(egrep "\<${arch/\~/}\>" ${REPODIR}/profiles/arch.list | wc -l) == 0 ]] && die "invalid arch (${arch})"
done
# commit message
if [ ${arches:0:1} == "~" ] ; then
msg="add ${arches// //}"
else
msg="${arches// //} stable"
fi
[[ ${bugid} != "0" ]] && msg="${msg}, bug #${bugid}"
pkgno=0
for pkg in ${pkgs} ; do
pkgno=$(( ${pkgno} + 1 ))
echo ">>> processing: ${pkg} (${pkgno}/$#)"
declare -a qatom
qatom=($(qatom ${pkg}))
[[ ${qatom#} < 2 ]] && die "invalid atom ${pkg}"
category=${qatom[0]/=}
pn=${qatom[1]}
version=${qatom[2]}
revision=${qatom[3]}
if [ -n "${revision}" ] ; then
version="${version}-${revision}"
fi
cd "${REPODIR}/${category}/${pn}" || die "package ${category}/${pn} not found"
cvs up || die "cvs up failed"
repoman full || die "repoman full failed"
ekeyword ${arches} ${pn}-${version}.ebuild || die "ebuild not found"
repoman manifest || die "repoman manifest failed"
repoman full || die "repoman full failed"
echangelog --strict "${msg}" || die "echangelog failed"
repoman commit -m "${msg}" || die "repoman commit failed"
done
if [[ ${arches:0:1} == "~" ]] ; then
echo "removing arches from KEYWORDREQ bug unsupported atm"
exit 0
fi
[[ ${bugid} == 0 ]] && echo "done, as bug# is 0" && exit 0
tmpfile="$(mktemp)"
${BUGZ} get --base=https://bugs.gentoo.org ${bugid} > ${tmpfile}
aliases="$(grep ^CC ${tmpfile} | awk '{ print $3 }')"
assignee="$(grep ^Assignee ${tmpfile} | awk '{ print $3 }')"
rm ${tmpfile}
[[ -z ${assignee} ]] && die "problem with bugz: assignee empty"
[[ -z ${aliases} ]] && die "problem with bugz: aliases empty"
# only accept arches, no herds/users etc
for alias in ${aliases} ; do
if [[ $(grep ^${alias/@gentoo.org}\$ ${REPODIR}/profiles/arch.list | wc -l) -gt 0 ]] ; then
bugarches="${bugarches} ${alias}"
fi
done
lastarch="1"
for bugarch in ${bugarches} ; do
found="0"
for arch in ${arches} ; do
[[ "${arch}@gentoo.org" == "${bugarch}" ]] && found="1"
done
[[ ${found} == 0 ]] && lastarch="0"
done
bugz_options="--base="https://bugs.gentoo.org" --user=${BUGZ_USER}"
for arch in ${arches} ; do
bugz_options="${bugz_options} --remove-cc=${arch}@gentoo.org"
done
if [[ ${lastarch} == "1" ]] ; then
[[ -z ${bugz_message} ]] && bugz_message="${arches// //} stable, all arches done."
[[ ${assignee} != "security@gentoo.org" ]] && bugz_options="${bugz_options} --fixed"
else
[[ -z ${bugz_message} ]] && bugz_message="${arches// //} stable"
fi
echo "running ${BUGZ} modify ${bugid} ${bugz_options} --comment=\"${bugz_message}\""
${BUGZ} modify ${bugid} ${bugz_options} --comment="${bugz_message}" || die "bugz failed"
echo ">>> finished successfully"
|