]> git.llucax.com Git - software/mutt-debian.git/blob - muttbug.sh.in
fix index weirdness if mailbox is emptied while inside the pager (Closes: 375530)
[software/mutt-debian.git] / muttbug.sh.in
1 #!/bin/sh
2
3 #
4 #     File a bug against the Mutt mail user agent.
5 #
6
7
8 #     $Id$
9 #
10
11 #
12 #     Copyright (c) 2000 Thomas Roessler <roessler@does-not-exist.org>
13 #
14 #
15 #     This program is free software; you can redistribute it and/or modify
16 #     it under the terms of the GNU General Public License as published by
17 #     the Free Software Foundation; either version 2 of the License, or
18 #     (at your option) any later version.
19
20 #     This program is distributed in the hope that it will be useful,
21 #     but WITHOUT ANY WARRANTY; without even the implied warranty of
22 #     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23 #     GNU General Public License for more details.
24
25 #     You should have received a copy of the GNU General Public License
26 #     along with this program; if not, write to the Free Software
27 #     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
28 #
29
30 SUBMIT="fleas@mutt.org"
31 DEBIAN_SUBMIT="submit@bugs.debian.org"
32
33 prefix=@prefix@
34
35 DEBUGGER=@DEBUGGER@
36 SENDMAIL=@SENDMAIL@
37 sysconfdir=@sysconfdir@
38 pkgdatadir=@pkgdatadir@
39
40 include_file ()
41 {
42         echo
43         echo "--- Begin $1"
44         sed -e '/^[      ]*#/d; /^[      ]*$/d; s/^-/- -/' $1
45         echo "--- End $1"
46         echo
47 }
48
49 debug_gdb ()
50 {
51         cat << EOF > $SCRATCH/gdb.rc
52 bt
53 list
54 quit
55 EOF
56         $DEBUGGER -n -x $SCRATCH/gdb.rc -c $CORE mutt
57 }
58
59 debug_dbx ()
60 {
61         cat << EOF > $SCRATCH/dbx.rc
62 where
63 list
64 quit
65 EOF
66         $DEBUGGER -s $SCRATCH/dbx.rc mutt $CORE
67 }
68
69 debug_sdb ()
70 {
71         cat << EOF > $SCRATCH/sdb.rc
72 t
73 w
74 q
75 EOF
76         $DEBUGGER mutt $CORE < $SCRATCH/sdb.rc
77 }
78
79 case `echo -n` in
80 "") n=-n; c=   ;;
81  *) n=; c='\c' ;;
82 esac
83  
84
85 exec > /dev/tty
86 exec < /dev/tty
87
88 SCRATCH=${TMPDIR-/tmp}/`basename $0`.`hostname`.$$
89
90 mkdir ${SCRATCH} || \
91
92         echo "`basename $0`: Can't create temporary directory." >& 2 ; 
93         exit 1 ; 
94 }
95
96 trap "rm -r -f ${SCRATCH} ; trap '' 0 ; exit" 0 1 2
97
98 TEMPLATE=${SCRATCH}/template.txt
99
100 if test -z "$EMAIL" ; then
101         EMAIL="`mutt -Q from 2> /dev/null | sed -e 's/^from=.\(.*\).$/\1/'`"
102 fi
103
104 EMAILTMP=''
105 while test -z "$EMAILTMP"
106 do
107   echo "Please enter your e-mail address [$EMAIL]:"
108   echo $n "> $c"
109   read EMAILTMP
110
111   if test -z "$EMAILTMP"; then EMAILTMP="$EMAIL"; fi
112
113   if ! echo "$EMAILTMP" | grep -q @
114   then
115     echo "$EMAILTMP does not appear to be a valid email address"
116     EMAILTMP=''
117     continue
118   fi
119
120   EMAIL="$EMAILTMP"
121 done
122
123 echo "Please enter a one-line description of the problem you experience:"
124 echo $n "> $c"
125 read SUBJECT
126
127 cat <<EOF  
128 What should the severity for this bug report be?
129
130        0) Feature request, or maybe a bug which is very difficult to
131        fix due to major design considerations.
132
133        1) The package fails to perform correctly in some conditions,
134        or on some systems, or fails to comply with current policy
135        documents. Most bugs are in this category.
136
137        2) This bug makes this version of the package unsuitable for
138        a stable release.
139
140        3) Dangerous bug. Makes the package in question unusable by
141        anyone or mostly so, or causes data loss, or introduces a
142        security hole allowing access to the accounts of users who
143        use the package.
144
145        4) Critical bug. Makes unrelated software on the system (or
146        the whole system) break, or causes serious data loss, or
147        introduces a security hole on systems where you install the
148        package.
149
150 EOF
151 echo $n "Severity? [01234] $c"
152 read severity
153 case "$severity" in
154 0|[Ww]) severity=wishlist  ;;
155 2|[Ii]) severity=important ;;
156 3|[Gg]) severity=grave     ;;
157 4|[Cc]) severity=critical  ;;
158      *) severity=normal    ;;
159 esac
160
161 if test -x $DEBUGGER ; then
162         test -f core && CORE=core
163         echo "If mutt has crashed, it may have saved some program state in"
164         echo "a file named core.  We can include this information with the bug"
165         echo "report if you wish so."
166         echo "Do you want to include information gathered from a core file?"
167         echo "If yes, please enter the path - otherwise just say no: [$CORE]"
168         echo $n "> $c"
169         read _CORE
170         test "$_CORE" && CORE="$_CORE"
171 fi
172
173 echo $n "Do you want to include your personal mutt configuration files? [Y|n] $c"
174 read personal
175 case "$personal" in
176 [nN]*)  personal=no  ;;
177     *)  personal=yes ;;
178 esac
179
180 echo $n "Do you want to include your system's global mutt configuration file? [Y|n] $c"
181 read global
182 case "$global" in
183 [nN]*)  global=no  ;;
184     *)  global=yes ;;
185 esac
186
187 if test -f /etc/debian_version ; then
188         DEBIAN=yes
189         echo $n "Checking whether mutt has been installed as a package... $c"
190         DEBIANVERSION="`dpkg -l mutt | grep '^[ih]' | awk '{print $3}'`" 2> /dev/null
191         if test "$DEBIANVERSION" ; then
192                 DPKG=yes
193         else
194                 DPKG=no
195                 unset DEBIANVERSION
196         fi
197         echo "$DPKG"
198         echo $n "File this bug with Debian? [Y|n] $c"
199         read DPKG
200         case "$DPKG" in
201         [nN])   DPKG=no ;;
202         *)      DPKG=yes ;;
203         esac
204 else
205         DEBIAN=no
206         DPKG=no
207 fi
208
209 if rpm -q mutt > /dev/null 2> /dev/null ; then
210         echo "Mutt seems to come from an RPM package."
211         RPMVERSION="`rpm -q mutt`"
212         RPMPACKAGER="`rpm -q -i mutt | sed -n -e 's/^Packager *: *//p'`"
213 fi
214
215 MUTTVERSION="`mutt -v | awk '{print $2; exit; }'`"
216 test "$DPKG" = "yes" && SUBMIT="$SUBMIT, $DEBIAN_SUBMIT"
217
218 exec > ${TEMPLATE}
219
220 test "$EMAIL"        && echo "From: $EMAIL"
221 test "$REPLYTO"      && echo "Reply-To: $REPLYTO"
222 test "$ORGANIZATION" && echo "Organization: $ORGANIZATION"
223
224 echo "Subject: mutt-$MUTTVERSION: $SUBJECT"
225 echo "To: $SUBMIT"
226 test "$EMAIL"        && echo "Bcc: ${EMAIL}"
227 echo
228 echo "Package: mutt"
229 echo "Version: ${DEBIANVERSION-${RPMVERSION-$MUTTVERSION}}"
230 echo "Severity: $severity"
231 echo 
232 echo "-- Please type your report below this line"
233 echo
234 echo
235 echo
236
237 if test "$DEBIAN" = "yes" ; then
238         echo "Obtaining Debian-specific information..." > /dev/tty
239         bug -p -s dummy mutt < /dev/null 2> /dev/null |        \
240                 sed -n -e "/^-- System Information/,/^---/p" | \
241                 grep -v '^---'
242 else
243         echo "-- System Information"
244         echo "System Version: `uname -a`"
245         test -z "$RPMPACKAGER" || echo "RPM Packager: $RPMPACKAGER";
246         test -f /etc/redhat-release && echo "RedHat Release: `cat /etc/redhat-release`"
247         test -f /etc/SuSE-release && echo "SuSE Release: `sed 1q /etc/SuSE-release`"
248         # Please provide more of these if you have any.
249 fi
250
251 echo 
252 echo "-- Build environment information"
253 echo
254 echo "(Note: This is the build environment installed on the system"
255 echo "muttbug is run on.  Information may or may not match the environment"
256 echo "used to build mutt.)"
257 echo
258 echo "- gcc version information"
259 echo "@CC@"
260 @CC@ -v 2>&1
261 echo
262 echo "- CFLAGS"
263 echo @CFLAGS@
264
265
266 echo
267 echo "-- Mutt Version Information"
268 echo
269 LC_ALL=C mutt -v
270
271 if test "$CORE" && test -f "$CORE" ; then
272         echo 
273         echo "-- Core Dump Analysis Output"
274         echo
275
276         case "$DEBUGGER" in
277                 *sdb) debug_sdb $CORE ;;
278                 *dbx) debug_dbx $CORE ;;
279                 *gdb) debug_gdb $CORE ;;
280         esac
281         
282         echo
283 fi
284
285 if test "$personal" = "yes" ; then
286         CANDIDATES=".muttrc-${MUTTVERSION} .muttrc .mutt/muttrc-${MUTTVERSION} .mutt/muttrc"
287         MATCHED="none"
288         for f in $CANDIDATES; do
289                 if test -f "${HOME}/$f" ; then
290                         MATCHED="${HOME}/$f"
291                         break
292                 fi
293         done
294         
295         if test "$MATCHED" = "none" ; then
296                 echo "Warning: Can't find your personal .muttrc." >&2
297         else
298                 include_file $MATCHED
299         fi
300 fi
301
302
303 if test "$global" = "yes" ; then
304         CANDIDATES="Muttrc-${MUTTVERSION} Muttrc"
305         DIRECTORIES="$sysconfdir $pkgdatadir"
306         MATCHED="none"
307         for d in $DIRECTORIES ; do
308                 for f in $CANDIDATES; do
309                         if test -f $d/$f ; then
310                                 MATCHED="$d/$f"
311                                 break
312                         fi
313                 done
314                 test "$MATCHED" = "none" || break
315         done
316         
317         if test "$MATCHED" = "none" ; then
318                 echo "Warning: Can't find global Muttrc." >&2
319         else
320                 include_file $MATCHED
321         fi
322 fi
323
324 exec > /dev/tty
325
326 cp $TEMPLATE $SCRATCH/mutt-bug.txt
327
328 input="e"
329 while : ; do
330         if test "$input" = "e" ; then
331                 ${VISUAL-${EDITOR-vi}} $SCRATCH/mutt-bug.txt
332                 if cmp $SCRATCH/mutt-bug.txt ${TEMPLATE} > /dev/null ; then
333                         echo "Warning: Bug report was not modified!"
334                 fi
335         fi
336         
337         echo $n "Submit, Edit, View, Quit? [S|e|v|q] $c"
338         read _input
339         input="`echo $_input | tr EVSQ evsq`"
340         case $input in
341         e*)     ;;
342         v*)     ${PAGER-more} $SCRATCH/mutt-bug.txt ;;
343         s*|"")  $SENDMAIL -t < $SCRATCH/mutt-bug.txt ; exit ;;
344         q*)     exit
345         esac
346 done
347