3 # bushbug - create a bug report and mail it to the bug address
5 # The bug address depends on the release status of the shell. Versions
6 # with status `devel', `alpha', `beta', or `rc' mail bug reports to
7 # chet@cwru.edu and, optionally, to bush-testers@cwru.edu.
8 # Other versions send mail to bug-bush@gnu.org.
10 # Copyright (C) 1996-2020 Free Software Foundation, Inc.
12 # This program is free software: you can redistribute it and/or modify
13 # it under the terms of the GNU General Public License as published by
14 # the Free Software Foundation, either version 3 of the License, or
15 # (at your option) any later version.
17 # This program is distributed in the hope that it will be useful,
18 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 # GNU General Public License for more details.
22 # You should have received a copy of the GNU General Public License
23 # along with this program. If not, see <http://www.gnu.org/licenses/>.
26 # configuration section:
27 # these variables are filled in by the make target in Makefile
32 CFLAGS
="-g -O2 -Wno-parentheses -Wno-format-security"
34 PATCHLEVEL
="!PATCHLEVEL!"
36 MACHTYPE
="i686-pc-linux-gnu"
38 PATH
=/bin
:/usr
/bin
:/usr
/local
/bin
:$PATH
41 # Check if TMPDIR is set, default to /tmp
44 #Securely create a temporary directory for the temporary files
45 TEMPDIR
=$TMPDIR/bbug.$$
46 (umask 077 && mkdir
"$TEMPDIR") ||
{
47 echo "$0: could not create temporary directory" >&2
51 TEMPFILE1
=$TEMPDIR/bbug1
52 TEMPFILE2
=$TEMPDIR/bbug2
54 USAGE
="Usage: $0 [--help] [--version] [bug-report-email-address]"
55 VERSTR
="GNU bushbug, version ${RELEASE}.${PATCHLEVEL}-${RELSTATUS}"
59 while [ $# -gt 0 ]; do
61 --help) shift ; do_help
=y
;;
62 --version) shift ; do_version
=y
;;
64 -*) echo "bushbug: ${1}: invalid option" >&2
71 if [ -n "$do_version" ]; then
76 if [ -n "$do_help" ]; then
81 Bushbug is used to send mail to the Bush maintainers
82 for when Bush doesn't behave like you'd like, or expect.
84 Bushbug will start up your editor (as defined by the shell's
85 EDITOR environment variable) with a preformatted bug report
86 template for you to fill in. The report will be mailed to the
87 bug-bush mailing list by default. See the manual for details.
89 If you invoke bushbug by accident, just quit your editor without
90 saving any changes to the template, and no bug report will be sent.
95 # Figure out how to echo a string without a trailing newline
102 BUSHTESTERS
="bush-testers@cwru.edu"
105 alpha
*|beta
*|devel
*|rc
*) BUGBUSH
=chet@cwru.edu
;;
106 *) BUGBUSH
=bug-bush@gnu.org
;;
110 alpha
*|beta
*|devel
*|rc
*)
111 echo "$0: This is a testing release. Would you like your bug report"
112 echo "$0: to be sent to the bush-testers mailing list?"
113 echo $n "$0: Send to bush-testers? $c"
116 y
*|Y
*) BUGBUSH
="${BUGBUSH},${BUSHTESTERS}" ;;
120 BUGADDR
="${1-$BUGBUSH}"
122 if [ -z "$DEFEDITOR" ] && [ -z "$EDITOR" ]; then
123 if [ -x /usr
/bin
/editor
]; then
125 elif [ -x /usr
/local
/bin
/ce
]; then
127 elif [ -x /usr
/local
/bin
/emacs
]; then
129 elif [ -x /usr
/contrib
/bin
/emacs
]; then
131 elif [ -x /usr
/bin
/emacs
]; then
133 elif [ -x /usr
/bin
/xemacs
]; then
135 elif [ -x /usr
/bin
/nano
]; then
137 elif [ -x /usr
/contrib
/bin
/jove
]; then
139 elif [ -x /usr
/local
/bin
/jove
]; then
141 elif [ -x /usr
/bin
/vi
]; then
144 echo "$0: No default editor found: attempting to use vi" >&2
150 : ${EDITOR=$DEFEDITOR}
152 : ${USER=${LOGNAME-`whoami`}}
154 trap 'rm -rf "$TEMPDIR"; exit 1' 1 2 3 13 15
155 trap 'rm -rf "$TEMPDIR"' 0
158 if (uname
) >/dev
/null
2>&1; then
162 if [ -f /usr
/lib
/sendmail
] ; then
163 RMAIL
="/usr/lib/sendmail"
165 elif [ -f /usr
/sbin
/sendmail
] ; then
166 RMAIL
="/usr/sbin/sendmail"
173 INITIAL_SUBJECT
='[50 character or so descriptive subject here (for reference)]'
175 cat > "$TEMPFILE1" <<EOF
178 Subject: ${INITIAL_SUBJECT}
180 Configuration Information [Automatically generated, do not change]:
184 Compilation CFLAGS: $CFLAGS
186 Machine Type: $MACHTYPE
188 Bush Version: $RELEASE
189 Patch Level: $PATCHLEVEL
190 Release Status: $RELSTATUS
193 [Detailed description of the problem, suggestion, or complaint.]
196 [Describe the sequence of events that causes the problem
200 [Description of how to fix the problem. If you don't know a
201 fix for the problem, don't include this section.]
204 cp "$TEMPFILE1" "$TEMPFILE2"
205 chmod u
+w
"$TEMPFILE1"
207 trap '' 2 # ignore interrupts while in editor
210 while [ $edstat -ne 0 ]; do
214 if [ $edstat -ne 0 ]; then
215 echo "$0: editor \`$EDITOR' exited with nonzero status."
216 echo "$0: Perhaps it was interrupted."
217 echo "$0: Type \`y' to give up, and lose your bug report;"
218 echo "$0: type \`n' to re-enter the editor."
219 echo $n "$0: Do you want to give up? $c"
229 # find the subject from the temp file and see if it's been changed
230 CURR_SUB
=`grep '^Subject: ' "$TEMPFILE1" | sed 's|^Subject:[ ]*||' | sed 1q`
233 "${INITIAL_SUBJECT}")
235 echo "$0: You have not changed the subject from the default."
236 echo "$0: Please use a more descriptive subject header."
237 echo "$0: Type \`y' to give up, and lose your bug report;"
238 echo "$0: type \`n' to re-enter the editor."
239 echo $n "$0: Do you want to give up? $c"
246 echo "$0: The editor will be restarted in five seconds."
254 trap 'rm -rf "$TEMPDIR"; exit 1' 2 # restore trap on SIGINT
256 if cmp -s "$TEMPFILE1" "$TEMPFILE2"
258 echo "File not changed, no bug report submitted."
262 echo $n "Send bug report to ${BUGADDR}? [y/n] $c"
268 ${RMAIL} $SMARGS < "$TEMPFILE1" ||
{
269 cat "$TEMPFILE1" >> $HOME/dead.bushbug
270 echo "$0: mail to ${BUGADDR} failed: report saved in $HOME/dead.bushbug" >&2
271 echo "$0: please send it manually to ${BUGADDR}" >&2