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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
|
#!/bin/bash
# Copyright 2017 Holger Levsen <holger@layer-acht.org>
# released under the GPLv=2
#
# run with "bug" as first parameter for interactive mode which will fire up mutt for 10 buggy packages
#
#
if [ -z "$1" ] ; then
echo "Call $(basename $0) [bug] NEXT SUITE1 SUITE2 SUITE3"
echo " bug to enter manual mode"
echo " NEXT suite which is being developed, eg 'buster'"
echo " SUITE1/2/3: suites to look at, eg. 'jessie stretch sid'"
exit 0
fi
DEBUG=false
if [ -f /srv/jenkins/bin/common-functions.sh ] ; then
. /srv/jenkins/bin/common-functions.sh
common_init "$@"
else
#normally defined in common-functions.sh
export MIRROR=http://deb.debian.org/debian
#for quicker development:
#PACKAGES[0]=/home/schroots/jessie/var/lib/apt/lists/deb.debian.org_debian_dists_jessie_main_binary-amd64_Packages
#PACKAGES[1]=/var/lib/apt/lists/deb.debian.org_debian_dists_stretch_main_binary-amd64_Packages
#PACKAGES[2]=/home/schroots/sid/var/lib/apt/lists/deb.debian.org_debian_dists_sid_main_binary-amd64_Packages
fi
if ! which chdist ; then
echo "Please install devscripts."
exit 1
elif ! which grep-dctrl ; then
echo "Please install grep-dctrl."
exit 1
fi
if [ "$1" = "bug" ] ; then
MANUAL_MODE=true
echo "Entering manual bug filing mode."
shift
else
MANUAL_MODE=false
fi
LANG="en_EN.UTF-8"
ARCH=amd64
NEXT="$1" # buster
shift
SUITES="$@" # jessie stretch sid
OLDSTABLE="jessie"
STABLE="stretch"
if [ "$NEXT" != "buster" ] ; then
echo "This script needs more changes to work on other suites than buster…"
echo "Not many, but a very few."
exit 1
fi
echo "Looking at $SUITES for obsolete transitional packages in $NEXT."
# transitional packages we know bugs have been filed about…
BUGGED="multiarch-support jadetex dh-systemd libpcap-dev transfig myspell-it myspell-sl python-gobject ttf-dejavu ttf-dejavu-core ttf-dejavu-extra libav-tools netcat gnupg2 libkf5akonadicore-bin qml-module-org-kde-extensionplugin myspell-ca myspell-en-gb myspell-sv-se myspell-lt khelpcenter4 libqca2-plugin-ossl gambas3-gb-desktop-gnome git-core gperf-ace libalberta2-dev asterisk-prompt-it libatk-adaptor-data kdemultimedia-dev kdemultimedia-kio-plugins autoconf-gl-macros autofs5 autofs5-hesiod autofs5-ldap librime-data-stroke5 librime-data-stroke-simp librime-data-triungkox3p pmake host bibledit bibledit-data baloo libc-icap-mod-clamav otf-symbols-circos migemo condor condor-dbg condor-dev condor-doc cscope-el cweb-latex dconf-tools python-decoratortools deluge-torrent deluge-webui django-filter python-django-filter django-tables django-xmlrpc drbd8-utils libefreet1 libjs-flot conky ttf-kacst ttf-junicode ttf-isabella font-hosny-amiri ttf-hanazono ttf-georgewilliams otf-freefont ttf-freefont ttf-freefarsi ttf-liberation libhdf5-serial-dev graphviz-dev git-bzr libgd-gd2-noxpm-ocaml-dev libgd-gd2-noxpm-ocaml ganeti2 ftgl-dev kcron kttsd jfugue verilog iproute iproute-doc ifenslave-2.6 node-highlight libjs-highlight ssh-krb5 libparted0-dev cgroup-bin liblemonldap-ng-conf-perl kdelirc kbattleship kdewallpapers kde-icons-nuvola kdebase-runtime kdebase-bin kdebase-apps libconfig++8-dev libconfig8-dev libdmtx-utils libgcrypt11-dev libixp libphp-swiftmailer libpqxx3-dev libtasn1-3-bin monajat minisat2 mingw-ocaml m17n-contrib lunch qtpfsgui liblua5.1-bitop0 liblua5.1-bitop-dev libtime-modules-perl libtest-yaml-meta-perl scrollkeeper scrobble-cli libqjson0-dbg python-clientform python-gobject-dbg python-pyatspi2 python-gobject-dev python3-pyatspi2 gaim-extendedprefs ptop nowebm node-finished netsurf mupen64plus mpqc-openmpi mono-dmcs nagios-plugins nagios-plugins-basic nagios-plugins-common nagios-plugins-standard libraspell-ruby libraspell-ruby1.8 libraspell-ruby1.9.1 rcs-latex ffgtk ruby-color-tools libfilesystem-ruby libfilesystem-ruby1.8 libfilesystem-ruby1.9 god rxvt-unicode-ml bkhive scanbuttond python-scikits-learn slurm-llnl slurm-llnl-slurmdbd python-sphinxcontrib-docbookrestapi python-sphinxcontrib-programoutput strongswan-ike strongswan-ikev1 strongswan-ikev2 sushi-plugins task tclcl-dev telepathy-sofiasip tesseract-ocr-dev trac-privateticketsplugin python-twisted-libravatar vdr-plugin-svdrpext qemulator python-weboob-core xfce4-screenshooter-plugin zeroinstall-injector libzookeeper2"
BASEPATH=$(ls -1d /tmp/transitional-????? 2>/dev/null || true)
if [ -z "$BASEPATH" ] ; then
BASEPATH=$(mktemp -t $TMPDIR -d transitional-XXXXX)
for SUITE in $SUITES ; do
mkdir -p $BASEPATH/$SUITE
# the "[arch=$ARCH]" is a workaround until #774685 is fixed
chdist --data-dir=$BASEPATH/$SUITE --arch=$ARCH create $SUITE-$ARCH "[arch=$ARCH]" $MIRROR $SUITE main
# in interactive mode we don't care about sources
if $MANUAL_MODE ; then
sed -i "s#deb-src#\#deb-src#g" $BASEPATH/$SUITE/$SUITE-$ARCH/etc/apt/sources.list
fi
chdist --data-dir=$BASEPATH/$SUITE --arch=$ARCH apt-get $SUITE-$ARCH update
echo
done
fi
NR=0
for SUITE in $SUITES ; do
PACKAGES[$NR]=$(ls $BASEPATH/$SUITE/$SUITE-$ARCH/var/lib/apt/lists/*_dists_${SUITE}_main_binary-${ARCH}_Packages)
echo "PACKAGES[$NR] = ${PACKAGES[$NR]}"
# only in interactive mode we care about sources
if ! $MANUAL_MODE ; then
SOURCES[$NR]=$(ls $BASEPATH/$SUITE/$SUITE-$ARCH/var/lib/apt/lists/*_dists_${SUITE}_main_source_Sources)
echo "SOURCES[$NR] = ${SOURCES[$NR]}"
fi
echo
let NR=$NR+1
done
BAD=""
BAD_COUNTER=0
GOOD_COUNTER=0
BUGGED_COUNTER=0 ; for i in $BUGGED ; do let BUGGED_COUNTER=$BUGGED_COUNTER+1 ; done
for PKG in $(grep-dctrl -sPackage -n -FDescription "transitional.*package" --ignore-case --regex ${PACKAGES[1]}) ; do
if [ "${PKG:0:9}" = "iceweasel" ] || [ "${PKG:0:7}" = "icedove" ] || [ "${PKG:0:6}" = "iceowl" ] || [ "${PKG:0:9}" = "lightning" ]; then
echo "ignore iceweasel, icedove, iceowl, lightning and friends…: $PKG"
continue
fi
if echo " $BUGGED " | egrep -q " $PKG " ; then
echo "ignore $PKG because a bug has already been filed."
continue
fi
OLDSTABLE_HIT=$(grep-dctrl -sPackage -n -FDescription "transitional.*package" --ignore-case --regex ${PACKAGES[0]} |egrep "^$PKG$" || true)
if [ -z "$OLDSTABLE_HIT" ] ; then
echo "$PKG not in $OLDSTABLE, so new transitional package, so fine."
else
SID_HIT=$(grep-dctrl -sPackage -n -FDescription "transitional.*package" --ignore-case --regex ${PACKAGES[2]} |egrep "^$PKG$" || true)
if [ -z "$SID_HIT" ] ; then
echo "Transitional package $PKG in $OLDSTABLE and $STABLE, but not in sid, yay!"
let GOOD_COUNTER=$GOOD_COUNTER+1
else
let BAD_COUNTER=$BAD_COUNTER+1
echo "SIGH #$BAD_COUNTER: $PKG is a transitional package in $OLDSTABLE, $STABLE and sid. Someone should file a bug."
BAD="$BAD $PKG"
fi
fi
done
echo
# interactive mode
if $MANUAL_MODE ; then
MAX=20
NR=0
echo "Entering manual mode, filing $MAX bugs."
for PKG in $BAD ; do
echo "firefox https://packages.debian.org/$PKG ;"
let NR=$NR+1
if [ $NR -eq $MAX ] ; then
echo "Filed $MAX bugs, ending."
break
fi
done
echo "Please open those firefox tabs… and press enter"
read a
NR=0
for PKG in $BAD ; do
SRC=$(grep-dctrl -sSource -FPackage -n $PKG --exact-match ${PACKAGES[2]} | cut -d " " -f1)
if [ -z "$SRC" ] ; then
SRC=$PKG
fi
VERSION=$(grep-dctrl -sVersion -FPackage -n $PKG --exact-match ${PACKAGES[1]})
VERBOSE=$( ( for SAUCE in ${PACKAGES[0]} ${PACKAGES[1]} ${PACKAGES[2]} ; do
grep-dctrl -sPackage,Description,Version -FPackage $PKG --exact-match $SAUCE
done ) | sort -u)
#firefox https://packages.debian.org/$PKG &
TMPFILE=`mktemp`
cat >> $TMPFILE <<- EOF
Package: $PKG
Version: $VERSION
Severity: normal
user: qa.debian.org@packages.debian.org
usertags: transitional
Please drop the transitional package $PKG for $NEXT,
as it has been released with $OLDSTABLE and $STABLE already.
$VERBOSE
Thanks for maintaining $SRC!
EOF
mutt -s "please drop transitional package $PKG" -i $TMPFILE submit@bugs.debian.org
rm $TMPFILE
let NR=$NR+1
if [ $NR -eq $MAX ] ; then
echo "Filed $MAX bugs, ending."
break
fi
done
else
# non-interactive mode
for PKG in $BAD ; do
echo
( for SAUCE in ${PACKAGES[0]} ${PACKAGES[1]} ${PACKAGES[2]} ; do
grep-dctrl -sPackage,Description,Version -FPackage $PKG --exact-match $SAUCE
done ) | sort -u
done
echo
echo $BAD | dd-list --sources ${SOURCES[2]} -i
fi
echo
echo "Found $BAD_COUNTER bad packages (=transitional dummy package in $OLDSTABLE, $STABLE and sid) and $GOOD_COUNTER removed transitional packages (=doesn't exist in sid) plus we know about $BUGGED_COUNTER open bugs about obsolete transitional packages."
echo "In the future, this script should probably complain about transitional packages in stretch and buster, and suggest to file wishlist bugs for those. Though probably it's more useful to file wishlist bugs against packages depending on those, first (or do both)… and should those latter be normal severity?"
echo
if [ "${BASEPATH:0:5}" = "/tmp/" ] ; then
rm $BASEPATH -r
else
du -sch $BASEPATH
echo "please rm $BASEPATH manually."
fi
|