home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / mysql / scripts / mysqlbug < prev    next >
Text File  |  2008-04-17  |  10KB  |  404 lines

  1. #!/bin/sh
  2. # Copyright (C) 2000-2002, 2004 MySQL AB
  3. # This program is free software; you can redistribute it and/or modify
  4. # it under the terms of the GNU General Public License as published by
  5. # the Free Software Foundation; version 2 of the License.
  6. # This program is distributed in the hope that it will be useful,
  7. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  8. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9. # GNU General Public License for more details.
  10. # You should have received a copy of the GNU General Public License
  11. # along with this program; if not, write to the Free Software
  12. # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  13.  
  14. # Create a bug report and mail it to the mysql mailing list
  15. # Based on glibc bug reporting script.
  16.  
  17. echo "Finding system information for a MySQL bug report"
  18.  
  19. VERSION="@VERSION@@MYSQL_SERVER_SUFFIX@"
  20. COMPILATION_COMMENT="@COMPILATION_COMMENT@"
  21. BUGmysql="mysql@lists.mysql.com"
  22. # This is set by configure
  23. COMP_ENV_INFO="CC='@CC@'  CFLAGS='@CFLAGS@'  CXX='@CXX@'  CXXFLAGS='@CXXFLAGS@'  LDFLAGS='@LDFLAGS@'  ASFLAGS='@ASFLAGS@'"
  24. CONFIGURE_LINE="@CONF_COMMAND@"
  25.  
  26. LIBC_INFO=""
  27. for pat in /lib/libc.* /lib/libc-* /usr/lib/libc.* /usr/lib/libc-*
  28. do
  29.     TMP=`ls -l $pat 2>/dev/null`
  30.     if test $? = 0
  31.     then
  32.       LIBC_INFO="$LIBC_INFO
  33. $TMP"
  34.     fi
  35. done
  36.  
  37. PATH=../client:$PATH:/bin:/usr/bin:/usr/local/bin
  38. export PATH
  39.  
  40. BUGADDR=${1-$BUGmysql}
  41. ENVIRONMENT=`uname -a`
  42.  
  43. : ${USER=${LOGNAME-`whoami`}}
  44.  
  45. COMMAND=`echo $0|sed 's%.*/\([^/]*\)%\1%'`
  46.  
  47. # Try to create a secure tmpfile
  48. umask 077
  49. TEMPDIR=/tmp/mysqlbug-$$
  50. mkdir $TEMPDIR || (echo "can not create directory in /tmp, aborting"; exit 1;)
  51. TEMP=${TEMPDIR}/mysqlbug
  52.  
  53. trap 'rm -f $TEMP $TEMP.x; rmdir $TEMPDIR; exit 1' 1 2 3 13 15
  54. trap 'rm -f $TEMP $TEMP.x; rmdir $TEMPDIR' 0
  55.  
  56. # How to read the passwd database.
  57. PASSWD="cat /etc/passwd"
  58.  
  59. if test -f /usr/lib/sendmail
  60. then
  61.   MAIL_AGENT="/usr/lib/sendmail -oi -t"
  62. elif test -f /usr/sbin/sendmail
  63. then
  64.   MAIL_AGENT="/usr/sbin/sendmail -oi -t"
  65. else
  66.   MAIL_AGENT="rmail $BUGmysql"
  67. fi
  68.  
  69. # Figure out how to echo a string without a trailing newline
  70. N=`echo 'hi there\c'`
  71. case "$N" in
  72.   *c)    ECHON1='echo -n' ECHON2= ;;
  73.   *)    ECHON1=echo ECHON2='\c' ;;
  74. esac
  75.  
  76. # Find out the name of the originator of this PR.
  77. if test -n "$NAME" 
  78. then
  79.   ORIGINATOR="$NAME"
  80. elif test -f $HOME/.fullname
  81. then
  82.   ORIGINATOR="`sed -e '1q' $HOME/.fullname`"
  83. else
  84.   # Must use temp file due to incompatibilities in quoting behavior
  85.   # and to protect shell metacharacters in the expansion of $LOGNAME
  86.   $PASSWD | grep "^$LOGNAME:" | awk -F: '{print $5}' | sed -e 's/,.*//' > $TEMP
  87.   ORIGINATOR="`cat $TEMP`"
  88.   rm -f $TEMP
  89. fi
  90.  
  91. if test -n "$ORGANIZATION"
  92. then
  93.   if test -f "$ORGANIZATION"
  94.   then
  95.     ORGANIZATION="`cat $ORGANIZATION`"
  96.   fi
  97. else
  98.   if test -f $HOME/.organization
  99.   then
  100.     ORGANIZATION="`cat $HOME/.organization`"
  101.   elif test -f $HOME/.signature
  102.   then
  103.     ORGANIZATION=`sed -e "s/^/  /" $HOME/.signature; echo ">"`
  104.   fi
  105. fi
  106.  
  107. PATH_DIRS=`echo $PATH | sed -e 's/^:/. /' -e 's/:$/ ./' -e 's/::/ . /g' -e 's/:/ /g' `
  108.  
  109. which_1 ()
  110. {
  111.   for cmd
  112.   do
  113.     # Absolute path ?. 
  114.     if expr "x$cmd" : "x/" > /dev/null
  115.     then
  116.       echo "$cmd"
  117.       exit 0
  118.     else
  119.       for d in $PATH_DIRS
  120.       do
  121.     file="$d/$cmd"
  122.     if test -x "$file" -a ! -d "$file"
  123.     then
  124.       echo "$file"
  125.       exit 0
  126.     fi
  127.       done
  128.     fi
  129.   done
  130.   exit 1
  131. }
  132.  
  133. change_editor ()
  134. {
  135.   echo "You can change editor by setting the environment variable VISUAL."
  136.   echo "If your shell is a bourne shell (sh) do"
  137.   echo "VISUAL=your_editors_name; export VISUAL"
  138.   echo "If your shell is a C shell (csh) do"
  139.   echo "setenv VISUAL your_editors_name"
  140. }
  141.  
  142. # If they don't have a preferred editor set, then use emacs
  143. if test -z "$VISUAL"
  144. then
  145.   if test -z "$EDITOR"
  146.   then
  147.     # Honor debian sensible-editor
  148.     if test -x "/usr/bin/sensible-editor"
  149.     then
  150.       EDIT=/usr/bin/sensible-editor
  151.     else
  152.       EDIT=emacs
  153.     fi
  154.   else
  155.     EDIT="$EDITOR"
  156.   fi
  157. else
  158.   EDIT="$VISUAL"
  159. fi
  160.  
  161. #which_1 $EDIT
  162. used_editor=`which_1 $EDIT`
  163.  
  164. echo "test -x $used_editor"
  165. if test -x "$used_editor"
  166. then
  167.   echo "Using editor $used_editor";
  168.   change_editor
  169.   sleep 2
  170. else
  171.   echo "Could not find a text editor. (tried $EDIT)"
  172.   change_editor
  173.   exit 1
  174. fi
  175.  
  176. # Find out some information.
  177. SYSTEM=`( test -f /bin/uname  && /bin/uname -a ) || \
  178.         ( test -f /usr/bin/uname  && /usr/bin/uname -a ) || echo ""`
  179. ARCH=`test -f /bin/arch  && /bin/arch`
  180. MACHINE=`test -f /bin/machine  && /bin/machine`
  181. FILE_PATHS=
  182.  
  183. for cmd in perl make gmake gcc cc
  184. do
  185.   file=`which_1 $cmd`
  186.   if test $? = 0
  187.   then
  188.     if test $cmd = "gcc"
  189.     then
  190.       GCC_INFO=`$file -v 2>&1`
  191.     elif test $cmd = "perl"
  192.     then
  193.       PERL_INFO=`$file -v | grep -i version 2>&1`
  194.     fi
  195.     FILE_PATHS="$FILE_PATHS $file"
  196.   fi
  197. done
  198.  
  199. admin=`which_1 mysqladmin`
  200. MYSQL_SERVER=
  201. if test -x "$admin"
  202. then
  203.   MYSQL_SERVER=`$admin version 2> /dev/null`
  204.   if test "$?" = "1"
  205.   then
  206.     MYSQL_SERVER=""
  207.   fi
  208. fi
  209.  
  210. SUBJECT_C="[50 character or so descriptive subject here (for reference)]"
  211. ORGANIZATION_C='<organization of PR author (multiple lines)>'
  212. LICENCE_C='[none | licence | email support | extended email support ]'
  213. SYNOPSIS_C='<synopsis of the problem (one line)>'
  214. SEVERITY_C='<[ non-critical | serious | critical ] (one line)>'
  215. PRIORITY_C='<[ low | medium | high ] (one line)>'
  216. CLASS_C='<[ sw-bug | doc-bug | change-request | support ] (one line)>'
  217. RELEASE_C='<release number or tag (one line)>'
  218. ENVIRONMENT_C='<machine, os, target, libraries (multiple lines)>'
  219. DESCRIPTION_C='<precise description of the problem (multiple lines)>'
  220. HOW_TO_REPEAT_C='<code/input/activities to reproduce the problem (multiple lines)>'
  221. FIX_C='<how to correct or work around the problem, if known (multiple lines)>'
  222.  
  223.  
  224. cat > $TEMP <<EOF
  225. SEND-PR: -*- send-pr -*-
  226. SEND-PR: Lines starting with \`SEND-PR' will be removed automatically, as
  227. SEND-PR: will all comments (text enclosed in \`<' and \`>').
  228. SEND-PR:
  229. From: ${USER}
  230. To: ${BUGADDR}
  231. Subject: $SUBJECT_C
  232.  
  233. >Description:
  234.     $DESCRIPTION_C
  235. >How-To-Repeat:
  236.     $HOW_TO_REPEAT_C
  237. >Fix:
  238.     $FIX_C
  239.  
  240. >Submitter-Id:    <submitter ID>
  241. >Originator:    ${ORIGINATOR}
  242. >Organization:
  243. ${ORGANIZATION- $ORGANIZATION_C}
  244. >MySQL support: $LICENCE_C
  245. >Synopsis:    $SYNOPSIS_C
  246. >Severity:    $SEVERITY_C
  247. >Priority:    $PRIORITY_C
  248. >Category:    mysql
  249. >Class:        $CLASS_C
  250. >Release:    mysql-${VERSION} ($COMPILATION_COMMENT)
  251. `test -n "$MYSQL_SERVER" && echo ">Server: $MYSQL_SERVER"`
  252. >C compiler:    @CC_VERSION@
  253. >C++ compiler:  @CXX_VERSION@
  254. >Environment:
  255.     $ENVIRONMENT_C
  256. `test -n "$SYSTEM"  && echo "System: $SYSTEM"`
  257. `test -n "$ARCH"  && echo "Architecture: $ARCH"`
  258. `test -n "$MACHINE"  && echo "Machine: $MACHINE"`
  259. `test -n "$FILE_PATHS"  && echo "Some paths: $FILE_PATHS"`
  260. `test -n "$GCC_INFO"  && echo "GCC: $GCC_INFO"`
  261. `test -n "$COMP_ENV_INFO"  && echo "Compilation info: $COMP_ENV_INFO"`
  262. `test -n "$LIBC_INFO"  && echo "LIBC: $LIBC_INFO"`
  263. `test -n "$CONFIGURE_LINE"  && echo "Configure command: $CONFIGURE_LINE"`
  264. `test -n "$PERL_INFO"  && echo "Perl: $PERL_INFO"`
  265. EOF
  266.  
  267. chmod u+w $TEMP
  268. cp $TEMP $TEMP.x
  269.  
  270. eval $EDIT $TEMP
  271.  
  272. if cmp -s $TEMP $TEMP.x
  273. then
  274.   echo "File not changed, no bug report submitted."
  275.   mv -f $TEMP /tmp/failed-mysql-bugreport
  276.   echo "The raw bug report exists in /tmp/failed-mysql-bugreport"
  277.   echo "If you use this remember that the first lines of the report are now a lie.."
  278.   exit 1
  279. fi
  280.  
  281. #
  282. #       Check the enumeration fields
  283.  
  284. # This is a "sed-subroutine" with one keyword parameter
  285. # (with workaround for Sun sed bug)
  286. #
  287. SED_CMD='
  288. /$PATTERN/{
  289. s|||
  290. s|<.*>||
  291. s|^[     ]*||
  292. s|[     ]*$||
  293. p
  294. q
  295. }'
  296.  
  297.  
  298. while :; do
  299.   CNT=0
  300.  
  301.   #
  302.   # 1) Severity
  303.   #
  304.   PATTERN=">Severity:"
  305.   SEVERITY=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
  306.   case "$SEVERITY" in
  307.     ""|non-critical|serious|critical) CNT=`expr $CNT + 1` ;;
  308.     *)  echo "$COMMAND: \`$SEVERITY' is not a valid value for \`Severity'."
  309.   esac
  310.   #
  311.   # 2) Priority
  312.   #
  313.   PATTERN=">Priority:"
  314.   PRIORITY=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
  315.   case "$PRIORITY" in
  316.     ""|low|medium|high) CNT=`expr $CNT + 1` ;;
  317.     *)  echo "$COMMAND: \`$PRIORITY' is not a valid value for \`Priority'."
  318.   esac
  319.   #
  320.   # 3) Class
  321.   #
  322.   PATTERN=">Class:"
  323.   CLASS=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
  324.   case "$CLASS" in
  325.     ""|sw-bug|doc-bug|change-request|support) CNT=`expr $CNT + 1` ;;
  326.     *)  echo "$COMMAND: \`$CLASS' is not a valid value for \`Class'."
  327.   esac
  328.  
  329.   #
  330.   # 4) Synopsis
  331.   #
  332.   VALUE=`grep "^>Synopsis:" $TEMP | sed 's/>Synopsis:[     ]*//'`
  333.   case "$VALUE" in
  334.     "$SYNOPSIS_C")  echo "$COMMAND: \`$VALUE' is not a valid value for \`Synopsis'." ;;
  335.     *) CNT=`expr $CNT + 1` 
  336.   esac
  337.  
  338.   test $CNT -lt 4  &&
  339.     echo "Errors were found with the problem report."
  340.  
  341.  
  342.   #       Check if subject of mail was changed, if not, use Synopsis field
  343.   #
  344.   subject=`grep "^Subject" $TEMP| sed 's/^Subject:[     ]*//'`
  345.   if [ X"$subject" = X"$SUBJECT_C" -o X"$subject" = X"$SYNOPSIS_C" ]; then
  346.     subject=`grep Synopsis $TEMP | sed 's/>Synopsis:[     ]*//'`
  347.     sed "s/^Subject:[     ]*.*/Subject: $subject/" $TEMP > $TEMP.tmp
  348.     mv -f $TEMP.tmp $TEMP
  349.   fi
  350.  
  351.   while :; do
  352.     $ECHON1 "a)bort, e)dit or s)end? $ECHON2"
  353.     read input
  354.     case "$input" in
  355.       a*)
  356.     echo "$COMMAND: problem report saved in $HOME/dead.mysqlbug."
  357.     cat $TEMP >> $HOME/dead.mysqlbug
  358.         xs=1; exit
  359.         ;;
  360.       e*)
  361.         eval $EDIT $TEMP
  362.         continue 2
  363.         ;;
  364.       s*)
  365.         break 2
  366.         ;;
  367.     esac
  368.   done
  369. done
  370. #
  371. #       Remove comments and send the problem report
  372. #       (we have to use patterns, where the comment contains regex chars)
  373. #
  374. # /^>Originator:/s;$ORIGINATOR;;
  375. sed  -e "
  376. /^SEND-PR:/d
  377. /^>Organization:/,/^>[A-Za-z-]*:/s;$ORGANIZATION_C;;
  378. /^>Confidential:/s;<.*>;;
  379. /^>Synopsis:/s;$SYNOPSIS_C;;
  380. /^>Severity:/s;<.*>;;
  381. /^>Priority:/s;<.*>;;
  382. /^>Class:/s;<.*>;;
  383. /^>Release:/,/^>[A-Za-z-]*:/s;$RELEASE_C;;
  384. /^>Environment:/,/^>[A-Za-z-]*:/s;$ENVIRONMENT_C;;
  385. /^>Description:/,/^>[A-Za-z-]*:/s;$DESCRIPTION_C;;
  386. /^>How-To-Repeat:/,/^>[A-Za-z-]*:/s;$HOW_TO_REPEAT_C;;
  387. /^>Fix:/,/^>[A-Za-z-]*:/s;$FIX_C;;
  388. " $TEMP > $TEMP.x
  389.  
  390. if $MAIL_AGENT < $TEMP.x
  391. then
  392.   echo "$COMMAND: problem report sent"
  393.   xs=0; exit
  394. else
  395.   echo "$COMMAND: mysterious mail failure, report not sent."
  396.   echo "$COMMAND: problem report saved in $HOME/dead.mysqlbug."
  397.   cat $TEMP >> $HOME/dead.mysqlbug
  398. fi
  399.  
  400. exit 0
  401.