]> git.lyx.org Git - lyx.git/blob - development/keystest/report_html.sh
Preparation to support translations with python3
[lyx.git] / development / keystest / report_html.sh
1 #!/bin/bash
2 #LT=development/keystest
3 LT=`dirname $0`
4 . $LT/shared_variables.sh
5
6 GEOM=320x200
7 QUALITY=85
8 if [ -z "$KEYCODE_DIR" ]
9 then
10         KEYCODE_DIR=$ROOT_OUTDIR
11 fi
12 #convert -normalize -scale $GEOM -quality $QUALITY $f $GEOM/$f
13
14 UNIQUE_LINE=1
15
16 OUT=$LT/$OUT_NAME/html
17 URL_OF_OUT=http://gmatht.homelinux.net/xp/$OUT_NAME/html/
18 mkdir -p $OUT
19 rm $OUT/index*.html
20 ls $OUT/*.html
21
22 CPP_HTML_DIR_REL=cpp_html
23 CPP_HTML_DIR=$OUT/cpp_html
24
25 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/`
26 BOILER_PLATE=`cd src ; svn info 2>&1 | grep Revision`
27
28 strings $LT/$OUT_NAME/GDB.* > $LT/$OUT_NAME/GDBs 
29 grep "#$UNIQUE_LINE " $LT/$OUT_NAME/GDBs > $LT/$OUT_NAME/list
30 cat $LT/$OUT_NAME/list | sed 's/0x[^ )]*[ )]/.*/g'  | sort | uniq | tee $LT/$OUT_NAME/listuniq
31
32 echo '<html>' >> $OUT/indexreport.html
33
34 list_keycode_files () {
35 #echo for f in  $OUT_NAME/*y/last_crash_sec $OUT_NAME/toreplay/replayed/*y/last_crash_sec
36 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
37 #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
38 do
39         keycode_file=$(echo $f | sed s/last_crash_sec/$(cat $f).KEYCODEpure/)
40         if test -e $keycode_file.replay/last_crash_sec
41         then
42                 f=$keycode_file.replay/last_crash_sec
43                 keycode_file=$(echo $f | sed s/last_crash_sec/$(cat $f).KEYCODEpure/)
44         fi
45         echo $keycode_file
46 done
47 }
48
49 tidy_keycode () {
50 while   read -r k
51 do
52         if [ "$k" = Raiselyx ] 
53         then
54                 echo -n '\[!Raiselyx]'
55         elif  [ "$k" = Loop ] 
56         then
57                 echo -n '\[!Loop]'
58         else
59                 echo -n "$k" | sed 's/^KK: //'
60         fi
61 done
62 }
63
64 html_keycode() {
65           cat "$f_base.KEYCODEpure" | tidy_keycode 
66           echo -n '<font color=gray>'
67           cat "$f_base.KEYCODEpure+" | tidy_keycode 
68           echo -n '</font>'
69
70 }
71
72
73 trac_keycode() {
74           echo -n "'''"
75           cat "$f_base.KEYCODEpure" | tidy_keycode 
76           echo -n "'''"
77           #echo -n '""'
78           #echo -n '<font color=gray>'
79           cat "$f_base.KEYCODEpure+" | tidy_keycode 
80           #echo -n '</font>'
81
82 }
83
84 line2url() {
85         echo "$@" | sed 's/&/%26/g' | sed 's/"/%22/g' | sed 's/#/%23/g' | sed 's/;/%3B/g'
86 }
87
88 text2url() {
89         #echo "$@" | 
90         while read -r L
91         do
92                 #echo -n `echo "$L" | line2url`'%0A'
93                 echo -n `line2url "$L"`'%0A'
94         done
95 }
96
97 report_bug_url () {
98         #http://www.lyx.org/trac/newticket?description=bar%0Abar2&summary=foo%13oo&keywords=crash&version=1.6.5
99         #http://www.lyx.org/trac/newticket?summary=foo%13oo&description=bar%0Abar2&version=1.6.5&keywords=crash
100         #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/`
101         #echo 'http://www.lyx.org/trac/newticket?summary='`line2url "$1"`'&description='`text2url "$2"`'&version='"$LYX_VER"'&keywords=crash'
102         DESC=`get_description | text2url`
103         #DESC=`text2url "$DESC"`
104         if echo $DESC | grep SIGSEGV > /dev/null
105         then
106                 KEYWORDSTR="&keywords=crash"
107         else
108                 if echo $DESC | grep SIGABRT > /dev/null
109                 then
110                         KEYWORDSTR="&keywords=assertion"
111                 elif echo $DESC | grep SIGSEGV > /dev/null
112                 then
113                         KEYWORDSTR="crash"
114                 fi
115         fi
116         echo 'http://www.lyx.org/trac/newticket?summary='`line2url "$TITLE"`"&description=$DESC&version=$LYX_VER$KEYWORDSTR"
117         #echo 'http://www.lyx.org/trac/newticket?description='"$1"'&summary=foo%13oo&keywords=crash&version=1.6.
118 }
119
120 search_bug_url () {
121         #http://www.lyx.org/trac/search?q=Foo%20bar
122         echo 'http://www.lyx.org/trac/search?q='`line2url "$TITLE"`
123 }
124
125 gdb2html() {
126 echo g $g'<br/>'
127 head $g -n 100 | sed 's/&/\&amp;/g' | sed 's/</\&lt;/g' | sed 's/  /\&nbsp /g'  | while read -r l
128 do
129         #c=`echo $l | grep -i -o "at [[:alnum:]./]*:[0-9]*"`
130         #We may want to support slashes later, but we'd have to support browsing
131         #Qt source for that to be useful for LyX
132  
133         c=`echo $l | grep -i -o "at [[:alnum:].]*:[0-9]*"`
134         if [ -z "$c" ]
135         then
136                 echo -- "$l" | sed s/--//
137         else
138                 cpp=`echo "$c" | sed 's/at //' | sed 's/:.*//g'`
139                 #cpp=`basename $cpp`
140                 echo cpp $cpp
141                 lineno=`echo "$c" | sed 's/.*://g'`
142                 echo $cpp,$lineno 1>&2
143                 if [ -e "$CPP_HTML_DIR/$cpp.html" ]
144                 #if true
145                 then
146                         #echo "$l" | sed "s/$c/<a href=$CPP_HTML_DIR_REL\/$cpp.html\#line$lineno>$c<\/a>/"
147                         echo "$l" | sed "s?$c?<a href=$CPP_HTML_DIR_REL\/$cpp.html\#line$lineno>$c<\/a>?"
148                 else
149                         echo "$l"
150                 fi
151         fi
152 done | sed 's/^/<br\/>/'
153 }
154
155 get_description() {
156         echo "Keycodes: "
157         trac_keycode
158         ii=1
159         echo
160         echo To reproduce:
161         cat "$f_base.KEYCODEpure" "$f_base.KEYCODEpure+" | while read -r L
162         do
163                 echo "$ii) ... ($L)" 
164                 ii=$((ii+1))
165         done
166
167         echo
168         echo Arch: `arch`
169         svn_revision $f_base
170         echo '{{{'
171         cat $g
172         echo '}}}'
173         echo
174         echo For more info see the "[[$URL_OF_OUT/$HTML_NAME Keytest Report]]"
175 }
176
177 make_cpp_html() {
178 #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.
179 if ! test -e $ROOT_OUTDIR/html/cpp_html
180 then 
181         (mkdir -p $ROOT_OUTDIR/html/cpp_html/ &&
182         cd $ROOT_OUTDIR/html/cpp_html/ &&
183         for f in `find ../../../src/ -iname '*.cpp' ; find ../../../src/ -iname '*.h'` ; do  g=`basename $f`; c2html -n < $f > $g.html ; echo $f  ; done)
184 fi
185 }
186
187 svn_revision() {
188 #| grep ^Revision | sed s/'Revision: '/r/
189 echo KEYCODE $1 ... `dirname $1` 1>&2
190 cat `dirname $1`/last_crash_sec.info.svn | grep ^Revision
191 echo _KEYCODE $KEYCODE ... 1>&2
192 }
193
194
195
196
197 echo beginning
198 make_cpp_html
199 #for file in `find $LT/$OUT_NAME/ -anewer $LT/$OUT_NAME/html | grep replay/last_crash_sec`
200 #for file in `find $KEYCODE_DIR | grep save/.*KEYCODEpure`
201 #for file in `find $KEYCODE_DIR -anewer oldfile | grep save/.*KEYCODEpure$ | head -n4`
202 #for file in `ls $KEYCODE_DIR/*/final/*KEYCODEpure`
203 #for file in `ls $KEYCODE_DIR/*/final/*/*KEYCODEpure`
204 list_keycode_files
205 echo END OF KEYCODE FILES
206 for file in `list_keycode_files`
207 do
208  echo FILE $file
209  lcs_file=`echo $file | sed 's/save\/.*//g'`last_crash_sec
210  echo last_crash_sec file: $lcs_file
211  SEC2=`cat $lcs_file`
212  SEC=`basename $file | sed s/[.].*$//g`
213  echo SEC .$SEC. .$SEC2.
214  #if [ ! $SEC -eq $SEC2 ]
215  #then
216         #break
217  #fi
218  echo SEC $SEC
219  #f_base=`echo $file | sed s/last_crash_sec/$SEC/g`
220  f_base=`dirname $file`'/'$SEC
221  echo f_base $f_base
222  NUM_KEYCODES=`wc -l < "$f_base.KEYCODEpure"`
223  echo NUM_KEYCODES=$NUM_KEYCODES...
224  if [ "$NUM_KEYCODES" -lt 20 ]  
225  then
226   echo f_base $f_base
227   f=$f_base.GDB
228   echo $f
229   g=$f.short
230   #egrep '([Ii][Nn] .*[:[:alnum:]][:][0-9]*[^0-9]|#0 | signal SIG[^T]| ASSERTION .* VIOLATED IN )' -A9999  <$f >$g
231   egrep '([Ii][Nn] .*[:[:alnum:]][:][0-9]*[^0-9]|#0 | signal SIG[^T]| ASSERTION .* VIOLATED IN )' -A9999  <$f >$g
232   if true
233   then
234         IN_AT=`egrep -o '([Ii][Nn]|at) ([:lower:]* )?[:_[:alnum:]]*(::[:_[:alnum:]]*|:[0-9]*)' <$f | grep -v lyx_exit | grep -v [Aa]ssert | head -n 1  `
235         SIGNAL=`grep -o ' signal SIG[[:alnum:]_]*[, ]' <$g | sed s/[^[:upper:]]//g | head -n 1`
236         TITLE="$SIGNAL $IN_AT"
237         if grep ' ASSERTION .* VIOLATED IN ' $g
238         then
239                 TITLE=`grep -o ' ASSERTION .* VIOLATED IN .*$' $g`
240         fi
241         TITLE_=`echo $TITLE|sed s/[^[:alnum:]]/_/g`
242         INDEX="index.html"
243         HTML_NAME=$SEC.html # name of html report for this bug
244         echo TITLE $TITLE
245         echo INDEX $INDEX
246         echo NEW $INDEX
247         echo '<html>' >> $LT/$OUT_NAME/$INDEX
248         (echo -n "<br/><a href=\"$SEC.html\">$TITLE</a> " 
249         html_keycode 
250         #echo -n " [<a href=\"`search_bug_url`\">search</a>] [<a href=\"`report_bug_url`\">report</a>] <a href=\"$SEC.screenshot.html\">screenshots</a>" 
251         echo -n " [<a href=\"`search_bug_url`\">search</a>] [<a href=\"`report_bug_url`\">report</a>]" 
252         if ls $f_base.s*.png > /dev/null
253         then
254                 echo -n " <a href=\"$SEC.screenshot.html\">screenshots</a>" 
255         fi
256         echo 
257         #echo -n '<br/> '
258         echo ) >> $OUT/indexreport.html
259         echo -n '<br> '>> $LT/$OUT_NAME/$INDEX
260         echo >> $LT/$OUT_NAME/$INDEX
261
262         ( echo '<html>'
263           echo "<title>$TITLE</title>"
264           html_keycode
265           echo "<br/><a href=$SEC.KEYCODE>KEYCODES</a> "
266           echo " <a href=$SEC.KEYCODEpure>pure</a> "
267           echo "<a href=$SEC.GDB>GDB</a>"
268           if ls $f_base.s*.png > /dev/null
269           then
270                  echo "<a href=\"$SEC.screenshot.html\">screenshots</a>" 
271           else
272                  echo '(no screenshots)'
273           fi
274           echo "<br/>"
275          
276         #echo -n '<br/> '
277
278           #echo "<a href=$SEC.GDB.png><img src=$SEC.small.png/></a><br/><br/>"
279           #echo "<a href=$SEC.screenshot.html><img src=$SEC.small.png/></a><br/><br/>"
280           gdb2html
281           (echo ----
282           svn_revision $f_base
283           echo arch `arch`
284           dpkg -l | egrep '(libqt4-dbg|libc6 |libboost-dev )'
285           lsb_release -a) | sed 's/&/\&amp;/g' | sed 's/</\&lt;/g' | sed 's/  /\&nbsp /g' | sed 's/^/<br\/>/'
286         ) > $OUT/$SEC.html
287         echo '<a href="'"$SEC.html"'">'$SEC'</a><br/>' >> $OUT/$INDEX
288         echo '<a href="'"$SEC.html"'">'$SEC'</a><br/>'
289         if [ ! -e $OUT/$SEC.small.png ]
290         then  
291                 convert -normalize -scale $GEOM $f.png $OUT/$SEC.small.png -quality 85
292         fi
293         chmod a+r $f $f.png $f_base.KEYCODE* $f_base.html $OUT/indexreport.html
294         ln $f $f.png $f_base.KEYCODE* $f_base.html $f_base.s*.png  $OUT/
295         if ls $f_base.s*.png 
296         then
297                 $LT/make_screenshot_html.py $OUT $SEC > $OUT/$SEC.screenshot.html
298         fi
299   fi
300  fi
301 done
302 mv $OUT/indexreport.html $OUT/indexreport.html.bak
303 echo "<html>" >> $OUT/indexreport.html
304 echo "<h1>List of bugs found</h1>" >> $OUT/indexreport.html
305 echo '<p>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</p>' >> $OUT/indexreport.html
306 sort -k 2 -t '>' < $OUT/indexreport.html.bak >> $OUT/indexreport.html
307
308 firefox $OUT/indexreport.html
309 #google-chrome $OUT/indexreport.html