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
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
|
#!/bin/bash
#
# Copyright © 2020,2022 Dr. Helge Kreutzmann <debian@helgefjell.de>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# This script finds all FIXMEs in manpages and prepeares as much as possible an output suitable for bug reporting
# An example of only upstream is man2/wait.2.po
# An example of both upstream and ours is man4/vcs.4.po
# CONFIG
DCSBASE=/scr/build/src/DCS/manpages-l10n/
CONFIGBASE=$DCSBASE/upstreambug/CONFIG
DIALOG=$(which dialog)
sk_temp=$((tempfile) 2>/dev/null)
SSF_MAILER=/usr/bin/mutt
SSF_BROWSER=/usr/bin/firefox
SSF_TMP=/tmp/ssf
TEMPLATE_FILE=$DCSBASE/upstreambug/TEMPLATE
SSF_LANGLIST="cs da de es fr it mk nl pl pt_BR ro"
# Allow to customize these variables if necessary
if [ -f $HOME/.config/reportupstreamrc ] ; then
echo "Sourcing local config"
. $HOME/.config/reportupstreamrc
fi
# Check if the files and directories exist
if [ ! -d $DCSBASE ]; then
echo "Could not find the git repository directory for manpages-l10n under $DCSBASE"
exit
fi
if [ ! -x $DIALOG ]; then
echo "Could not find the the dialog program (or not executable) $DIALOG"
exit
fi
if [ ! -x $SSF_MAILER ]; then
echo "Could not find the the mail program (or not executable) $SSF_MAILER"
exit
fi
if [ ! -x $SSF_BROWSER ]; then
echo "Could not find the the mail program (or not executable) $SSF_BROWSER"
exit
fi
if [ ! -d $SSF_TMP ]; then
mkdir -p $SSF_TMP
retval=$?
if [ $retval != 0 ]; then
echo "Dirctory for tempory files $SSF_TMP does not exist and cannot be created"
exit
fi
fi
echo "Please wait while scanning for FIXMEs …"
cd $DCSBASE/po
# Find all PO files with FIXME in them
for pofile in $(find . -name "*.po" -exec grep FIXME "{}" -ls ";" | cut -d/ -f4 | grep -v -E "min-0..-occurences.po" | LC_ALL=C sort -u); do
# Now look at them for each language
for lang in $SSF_LANGLIST; do
for checkfile in $(find $lang -name $pofile); do
# echo $checkfile $lang $pofile
grep FIXME $checkfile > $SSF_TMP/ssF.FIX.$lang.$pofile
md5sum $SSF_TMP/ssF.FIX.$lang.$pofile | cut -d " " -f1 > $SSF_TMP/ssF.md5.$lang.$pofile
done
done
mdnumtotal=$(cat $SSF_TMP/ssF.md5.*.$pofile| wc -l)
mdunique=$(cat $SSF_TMP/ssF.md5.*.$pofile| sort -u | wc -l)
# echo "Md5total: $mdnumtotal Md5unique: $mdunique"
# if [ $mdnumtotal -ge 2 ] ; then
#if [ $mdunique -eq 1 ] ; then
if [ $mdnumtotal -ge 2 -a $mdunique -eq 1 ] ; then
# echo "Blacklist-Kandidat $pofile"
echo $pofile >> $SSF_TMP/ssF.BLACKLIST
else
echo $pofile >> $SSF_TMP/ssF.WHITELIST
let cfcounter=0
cfilename=""
for cfile in $CONFIGBASE/CONFIG.*; do
#echo "grep -x $pofile $cfile"
if [ $(grep -x $pofile $cfile) ] ; then
let cfcounter=$cfcounter+1
finalfilename=$(basename $cfile)
fi
done
if [ $cfcounter -eq 0 ] ; then
echo "ERROR: $pofile not in any CONFIG file, please add and rerun the script" | logger -t $0
fi
if [ $cfcounter -gt 1 ] ; then
echo "ERROR: $pofile is in several ($cfcounter) CONFIG files, please fix them and rerun the script" | logger -t $0
fi
if [ $cfcounter -eq 1 ] ; then
echo $pofile >> $SSF_TMP/ssF.REPORT.$finalfilename
fi
fi
done
# The following line does not work, the first (largest) item is ignored??
#ls -lhS $SSF_TMP/ssF.REPORT.*| awk '{print $9}'|awk 'FS="." {print $4}'
# This is not very elegant, but works around the issue of skipping the first entry
echo "Dummy" > $SSF_TMP/ssF.list.Dummy
ls -lhS $SSF_TMP/ssF.REPORT.*| awk '{print $9}' >> $SSF_TMP/ssF.list.Dummy
ssf_ANZAHL=$(ls -l $SSF_TMP/ssF.REPORT.* |wc -l)
ssf_STOP=0
while [ $ssf_STOP -eq 0 ]; do
echo -n "$DIALOG --clear --title \"Reporting upstream\" --menu \"Choose which package to report for\" 20 71 $ssf_ANZAHL " > $SSF_TMP/ssf.menu
for i in $(cat $SSF_TMP/ssF.list.Dummy|awk 'FS="." {print $4}'|grep -v -E "^$"); do
ssF_date="not reported yet"
if [ -f $CONFIGBASE/LAST.$i ]; then
ssF_date=$(tail -n1 $CONFIGBASE/LAST.$i)
fi
echo "Entry: $i (Last reported: $ssF_date)"
echo -n "\"$i\" \"$i (Last reported: $ssF_date)\" " >> $SSF_TMP/ssf.menu
done
chmod +x $SSF_TMP/ssf.menu
bash $SSF_TMP/ssf.menu 2> $sk_temp
retval=$?
if [ $retval == 0 ]; then
ssf_SELCTION=$(cat $sk_temp)
echo $ssf_SELCTION
bugtype=$(grep Bugtype $CONFIGBASE/CONFIG.$ssf_SELCTION)
bfound=$?
if [ $bfound == 0 ]; then
bugmethod=$(echo $bugtype|cut -d" " -f2)
bugaddres=$(echo $bugtype|cut -d" " -f3)
bnote=$(grep Note: $CONFIGBASE/CONFIG.$ssf_SELCTION|sed 's/Note: //')
echo "Reporting bugs for $ssf_SELCTION as $bugtype"
echo ""
echo "Please consider the following when reporting:"
echo "$bnote"
echo ""
echo "Now the template is prepared with all FIXMEs. Please turn the template into"
echo "proper text suitable for reporting. Remove duplications and FIXMEs coming"
echo "from upstream."
echo ""
echo "Press Enter to generate the template"
read
echo "Please wait …"
rm -rf $SSF_TMP/ssF.BUGTEMPLATE
# This command does not work, it also replace double letters by single ones
#cat $TEMPLATE_FILE | tr -s PACKAGE $ssf_SELCTION >> $SSF_TMP/ssF.BUGTEMPLATE
cat $TEMPLATE_FILE >> $SSF_TMP/ssF.BUGTEMPLATE
for rf in $(cat $SSF_TMP/ssF.REPORT.CONFIG.$ssf_SELCTION|sort -u); do
find $DCSBASE -name $rf -exec msggrep -C -e FIXME -E "{}" ";" > $SSF_TMP/ssF.BUGTEMPLATE.tmp
if [ -s $SSF_TMP/ssF.BUGTEMPLATE.tmp ]; then
echo $rf >> $SSF_TMP/ssF.BUGTEMPLATE
#find $DCSBASE -name $rf -exec msggrep -C -e FIXME -E "{}" ";" >> $SSF_TMP/ssF.BUGTEMPLATE
cat $SSF_TMP/ssF.BUGTEMPLATE.tmp >> $SSF_TMP/ssF.BUGTEMPLATE
echo "============== End of file ================" >> $SSF_TMP/ssF.BUGTEMPLATE
fi
done
if [ $bugmethod == "email" ]; then
$SSF_MAILER -s "Issues in man pages of $ssf_SELCTION" -i $SSF_TMP/ssF.BUGTEMPLATE $bugaddres
elif [ $bugmethod == "web" ]; then
$SSF_BROWSER $bugaddres
vim $SSF_TMP/ssF.BUGTEMPLATE
elif [ $bugmethod == "reportbug" ]; then
# Use --header= instead of --body-file?
# FIXME: Not interactive, not asking for confirmation
# reportbug --no-debconf --no-config-files --no-query-bts --no-check-installed --no-bug-script --body-file=$SSF_TMP/ssF.BUGTEMPLATE
# Try this:
# reportbug --no-debconf --no-config-files --no-query-bts --no-check-installed --no-bug-script --print --body-file=$SSF_TMP/ssF.BUGTEMPLATE
# For now, simply create the template manually
echo "Package: $ssf_SELCTION" > $SSF_TMP/ssF.BUGTEMPLATEr
echo "Severity: minor" >> $SSF_TMP/ssF.BUGTEMPLATEr
echo "Tags: patch l10n" >> $SSF_TMP/ssF.BUGTEMPLATEr
echo "X-Debbugs-CC: mario.blaettermann@gmail.com" $SSF_TMP/ssF.BUGTEMPLATEr
echo "" >> $SSF_TMP/ssF.BUGTEMPLATEr
cat $SSF_TMP/ssF.BUGTEMPLATE >> $SSF_TMP/ssF.BUGTEMPLATEr
$SSF_MAILER -s "$ssf_SELCTION: Issues in man pages" -i $SSF_TMP/ssF.BUGTEMPLATEr submit@bugs.debian.org
fi
echo "If you reported the bugs, please answer yes to the following question."
echo ""
echo "Should the bug reporting date be recorded?"
read -p "(y/n)> "
if [ $REPLY == "y" ]; then
if [ $CONFIGBASE/LAST.$ssf_SELCT ]; then
date --rfc-3339=date >> $CONFIGBASE/LAST.$ssf_SELCTION
git add $CONFIGBASE/LAST.$ssf_SELCTION
else
date --rfc-3339=date >> $CONFIGBASE/LAST.$ssf_SELCTION
fi
git commit -m "reportupstream: Reported bugs for $ssf_SELCTION" $CONFIGBASE/LAST.$ssf_SELCTION
# echo "Writing date into $CONFIGBASE/LAST.$ssf_SELCTION"
# date --rfc-3339=date
# else
# echo "Not recording date."
fi
# read
else
echo "Reporting bugs unkown, check $CONFIGBASE/CONFIG.$ssf_SELCTION for the field \"bugtype\""
read
fi
else
ssf_STOP=1
fi
done
echo "Should the temporary directory $SSF_TMP be removed?"
read -p "(y/n)> "
if [ $REPLY == "y" ]; then
rm -r $SSF_TMP
retval=$?
if [ $retval != 0 ]; then
echo "Dirctory for tempory files $SSF_TMP could not be removed."
exit
fi
fi
clear
# A10 is not enough :-((
#for i in $(cat $SSF_TMP/ssF.REPORT.CONFIG.linuxmanpages); do find . -name $i -exec grep -A10 FIXME "{}" ";" -print ; done
|