#!/bin/bash #LT=development/keystest LT=`dirname $0` . $LT/shared_variables.sh GEOM=320x200 QUALITY=85 if [ -z "$KEYCODE_DIR" ] then KEYCODE_DIR=$ROOT_OUTDIR fi #convert -normalize -scale $GEOM -quality $QUALITY $f $GEOM/$f UNIQUE_LINE=1 OUT=$LT/$OUT_NAME/html URL_OF_OUT=http://gmatht.homelinux.net/xp/$OUT_NAME/html/ mkdir -p $OUT rm $OUT/index*.html ls $OUT/*.html CPP_HTML_DIR_REL=cpp_html CPP_HTML_DIR=$OUT/cpp_html LYX_VER=`src/lyx -version 2>&1 | head -n1 | sed s/^LyX\ // | sed s/\ .*// | sed s/1svn/0/ | sed s/2svn/1/ | sed s/3svn/2/ | sed s/4svn/3/ | sed s/5svn/4/ | sed s/6svn/5/ | sed s/7svn/6/ | sed s/8svn/7/ | sed s/9svn/8/` BOILER_PLATE=`cd src ; svn info 2>&1 | grep Revision` strings $LT/$OUT_NAME/GDB.* > $LT/$OUT_NAME/GDBs grep "#$UNIQUE_LINE " $LT/$OUT_NAME/GDBs > $LT/$OUT_NAME/list cat $LT/$OUT_NAME/list | sed 's/0x[^ )]*[ )]/.*/g' | sort | uniq | tee $LT/$OUT_NAME/listuniq echo '' >> $OUT/indexreport.html list_keycode_files () { #echo for f in $OUT_NAME/*y/last_crash_sec $OUT_NAME/toreplay/replayed/*y/last_crash_sec for f in $OUT_NAME/*y/last_crash_sec $OUT_NAME/toreplay/replayed/*y/last_crash_sec $OUT_NAME/toreproduce/replayed/*y/last_crash_sec $OUT_NAME/toreplay/*y/last_crash_sec $OUT_NAME/toreplay/final/*y/last_crash_sec #for f in $OUT_NAME/*y/*y/last_crash_sec $OUT_NAME/toreplay/replayed/*y/*y/last_crash_sec $OUT_NAME/toreplay/*y/*y/last_crash_sec $OUT_NAME/toreplay/final/*y/last_crash_sec do keycode_file=$(echo $f | sed s/last_crash_sec/$(cat $f).KEYCODEpure/) if test -e $keycode_file.replay/last_crash_sec then f=$keycode_file.replay/last_crash_sec keycode_file=$(echo $f | sed s/last_crash_sec/$(cat $f).KEYCODEpure/) fi echo $keycode_file done } tidy_keycode () { while read -r k do if [ "$k" = Raiselyx ] then echo -n '\[!Raiselyx]' elif [ "$k" = Loop ] then echo -n '\[!Loop]' else echo -n "$k" | sed 's/^KK: //' fi done } html_keycode() { cat "$f_base.KEYCODEpure" | tidy_keycode echo -n '' cat "$f_base.KEYCODEpure+" | tidy_keycode echo -n '' } trac_keycode() { echo -n "'''" cat "$f_base.KEYCODEpure" | tidy_keycode echo -n "'''" #echo -n '""' #echo -n '' cat "$f_base.KEYCODEpure+" | tidy_keycode #echo -n '' } line2url() { echo "$@" | sed 's/&/%26/g' | sed 's/"/%22/g' | sed 's/#/%23/g' | sed 's/;/%3B/g' } text2url() { #echo "$@" | while read -r L do #echo -n `echo "$L" | line2url`'%0A' echo -n `line2url "$L"`'%0A' done } report_bug_url () { #http://www.lyx.org/trac/newticket?description=bar%0Abar2&summary=foo%13oo&keywords=crash&version=1.6.5 #http://www.lyx.org/trac/newticket?summary=foo%13oo&description=bar%0Abar2&version=1.6.5&keywords=crash #ver=`echo $3 | sed s/1svn/0/ | sed s/2svn/1/ | sed s/3svn/2/ | sed s/4svn/3/ | sed s/5svn/4/ | sed s/6svn/5/ | sed s/7svn/6/ | sed s/8svn/7/ | sed s/9svn/8/` #echo 'http://www.lyx.org/trac/newticket?summary='`line2url "$1"`'&description='`text2url "$2"`'&version='"$LYX_VER"'&keywords=crash' DESC=`get_description | text2url` #DESC=`text2url "$DESC"` if echo $DESC | grep SIGSEGV > /dev/null then KEYWORDSTR="&keywords=crash" else if echo $DESC | grep SIGABRT > /dev/null then KEYWORDSTR="&keywords=assertion" elif echo $DESC | grep SIGSEGV > /dev/null then KEYWORDSTR="crash" fi fi echo 'http://www.lyx.org/trac/newticket?summary='`line2url "$TITLE"`"&description=$DESC&version=$LYX_VER$KEYWORDSTR" #echo 'http://www.lyx.org/trac/newticket?description='"$1"'&summary=foo%13oo&keywords=crash&version=1.6. } search_bug_url () { #http://www.lyx.org/trac/search?q=Foo%20bar echo 'http://www.lyx.org/trac/search?q='`line2url "$TITLE"` } gdb2html() { echo g $g'
' head $g -n 100 | sed 's/&/\&/g' | sed 's/&2 if [ -e "$CPP_HTML_DIR/$cpp.html" ] #if true then #echo "$l" | sed "s/$c/$c<\/a>/" echo "$l" | sed "s?$c?$c<\/a>?" else echo "$l" fi fi done | sed 's/^//' } get_description() { echo "Keycodes: " trac_keycode ii=1 echo echo To reproduce: cat "$f_base.KEYCODEpure" "$f_base.KEYCODEpure+" | while read -r L do echo "$ii) ... ($L)" ii=$((ii+1)) done echo echo Arch: `arch` svn_revision $f_base echo '{{{' cat $g echo '}}}' echo echo For more info see the "[[$URL_OF_OUT/$HTML_NAME Keytest Report]]" } make_cpp_html() { #This is ugly. At the moment all bug reports in the same set reference the same files, which could lead to confusion if they are from differnt versions of lyx. Do not mix different versions until this is fixed. However we may not want to "fix" this when it may be better to always use a new outdir for each version and just reproduce the old bugs so they don't get lost. if ! test -e $ROOT_OUTDIR/html/cpp_html then (mkdir -p $ROOT_OUTDIR/html/cpp_html/ && cd $ROOT_OUTDIR/html/cpp_html/ && for f in `find ../../../src/ -iname '*.cpp' ; find ../../../src/ -iname '*.h'` ; do g=`basename $f`; c2html -n < $f > $g.html ; echo $f ; done) fi } svn_revision() { #| grep ^Revision | sed s/'Revision: '/r/ echo KEYCODE $1 ... `dirname $1` 1>&2 cat `dirname $1`/last_crash_sec.info.svn | grep ^Revision echo _KEYCODE $KEYCODE ... 1>&2 } echo beginning make_cpp_html #for file in `find $LT/$OUT_NAME/ -anewer $LT/$OUT_NAME/html | grep replay/last_crash_sec` #for file in `find $KEYCODE_DIR | grep save/.*KEYCODEpure` #for file in `find $KEYCODE_DIR -anewer oldfile | grep save/.*KEYCODEpure$ | head -n4` #for file in `ls $KEYCODE_DIR/*/final/*KEYCODEpure` #for file in `ls $KEYCODE_DIR/*/final/*/*KEYCODEpure` list_keycode_files echo END OF KEYCODE FILES for file in `list_keycode_files` do echo FILE $file lcs_file=`echo $file | sed 's/save\/.*//g'`last_crash_sec echo last_crash_sec file: $lcs_file SEC2=`cat $lcs_file` SEC=`basename $file | sed s/[.].*$//g` echo SEC .$SEC. .$SEC2. #if [ ! $SEC -eq $SEC2 ] #then #break #fi echo SEC $SEC #f_base=`echo $file | sed s/last_crash_sec/$SEC/g` f_base=`dirname $file`'/'$SEC echo f_base $f_base NUM_KEYCODES=`wc -l < "$f_base.KEYCODEpure"` echo NUM_KEYCODES=$NUM_KEYCODES... if [ "$NUM_KEYCODES" -lt 20 ] then echo f_base $f_base f=$f_base.GDB echo $f g=$f.short #egrep '([Ii][Nn] .*[:[:alnum:]][:][0-9]*[^0-9]|#0 | signal SIG[^T]| ASSERTION .* VIOLATED IN )' -A9999 <$f >$g egrep '([Ii][Nn] .*[:[:alnum:]][:][0-9]*[^0-9]|#0 | signal SIG[^T]| ASSERTION .* VIOLATED IN )' -A9999 <$f >$g if true then IN_AT=`egrep -o '([Ii][Nn]|at) ([:lower:]* )?[:_[:alnum:]]*(::[:_[:alnum:]]*|:[0-9]*)' <$f | grep -v lyx_exit | grep -v [Aa]ssert | head -n 1 ` SIGNAL=`grep -o ' signal SIG[[:alnum:]_]*[, ]' <$g | sed s/[^[:upper:]]//g | head -n 1` TITLE="$SIGNAL $IN_AT" if grep ' ASSERTION .* VIOLATED IN ' $g then TITLE=`grep -o ' ASSERTION .* VIOLATED IN .*$' $g` fi TITLE_=`echo $TITLE|sed s/[^[:alnum:]]/_/g` INDEX="index.html" HTML_NAME=$SEC.html # name of html report for this bug echo TITLE $TITLE echo INDEX $INDEX echo NEW $INDEX echo '' >> $LT/$OUT_NAME/$INDEX (echo -n "
$TITLE " html_keycode #echo -n " [search] [report] screenshots" echo -n " [search] [report]" if ls $f_base.s*.png > /dev/null then echo -n " screenshots" fi echo #echo -n '
' echo ) >> $OUT/indexreport.html echo -n '
'>> $LT/$OUT_NAME/$INDEX echo >> $LT/$OUT_NAME/$INDEX ( echo '' echo "$TITLE" html_keycode echo "
KEYCODES " echo " pure " echo "GDB" if ls $f_base.s*.png > /dev/null then echo "screenshots" else echo '(no screenshots)' fi echo "
" #echo -n '
' #echo "

" #echo "

" gdb2html (echo ---- svn_revision $f_base echo arch `arch` dpkg -l | egrep '(libqt4-dbg|libc6 |libboost-dev )' lsb_release -a) | sed 's/&/\&/g' | sed 's//' ) > $OUT/$SEC.html echo ''$SEC'
' >> $OUT/$INDEX echo ''$SEC'
' if [ ! -e $OUT/$SEC.small.png ] then convert -normalize -scale $GEOM $f.png $OUT/$SEC.small.png -quality 85 fi chmod a+r $f $f.png $f_base.KEYCODE* $f_base.html $OUT/indexreport.html ln $f $f.png $f_base.KEYCODE* $f_base.html $f_base.s*.png $OUT/ if ls $f_base.s*.png then $LT/make_screenshot_html.py $OUT $SEC > $OUT/$SEC.screenshot.html fi fi fi done mv $OUT/indexreport.html $OUT/indexreport.html.bak echo "" >> $OUT/indexreport.html echo "

List of bugs found

" >> $OUT/indexreport.html echo '

Please, do not "report" bugs without searching for them first. Also make sure to fill out the "To reproduce" section before pressing the "Create ticket" button

' >> $OUT/indexreport.html sort -k 2 -t '>' < $OUT/indexreport.html.bak >> $OUT/indexreport.html firefox $OUT/indexreport.html #google-chrome $OUT/indexreport.html