Sergey Petrunya <pser...@askmonty.org> writes: > At file:///home/psergey/dev/maria-5.1-table-elim-r11-gcov/ > > ------------------------------------------------------------ > revno: 2747 > revision-id: pser...@askmonty.org-20090825150255-46i5gvl2ctd0jcm2 > parent: pser...@askmonty.org-20090825145915-rxwmfczgqe69r5ju > committer: Sergey Petrunya <pser...@askmonty.org> > branch nick: maria-5.1-table-elim-r11-gcov > timestamp: Tue 2009-08-25 18:02:55 +0300 > message: > Gcov support improvements > - add process-gcov-annotations.pl script that processes .gcov files > according to purecov annotations in source code > - add --gcov-src-dir=subdir option to mysql-test-run so that one can > do gcov processing only for source files in a certain directory.
Nice additions! > === modified file 'mysql-test/lib/mtr_gcov.pl' > --- a/mysql-test/lib/mtr_gcov.pl 2009-04-25 09:04:38 +0000 > +++ b/mysql-test/lib/mtr_gcov.pl 2009-08-25 15:02:55 +0000 > @@ -62,6 +64,7 @@ > $dir_reported= 1; > } > system("$gcov $f 2>>$start_dir/$gcov_err >>$start_dir/$gcov_msg"); > + system("perl $basedir/mysql-test/lib/process-purecov-annotations.pl > $f.gcov"); Better do something like this: system("perl", "$basedir/mysql-test/lib/process-purecov-annotations.pl", "$f.gcov"); as it is robust to spaces and other shell metachars in the data. > === added file 'mysql-test/lib/process-purecov-annotations.pl' > --- a/mysql-test/lib/process-purecov-annotations.pl 1970-01-01 00:00:00 > +0000 > +++ b/mysql-test/lib/process-purecov-annotations.pl 2009-08-25 15:02:55 > +0000 > + # Besides purecov annotations, also remove uncovered code mark from cases > + # like the following: > + # > + # -: 211:*/ > + # -: 212:class Field_value : public Value_dep > + # #####: 213:{ > + # -: 214:public: > + # > + # I have no idea why would gcov think there is uncovered code there Maybe generated default constructor, destructor, or the like that was not run? > + # > + my @arr= split(/:/, $line); > + if ($skipping || $line =~ /purecov: *(inspected|deadcode)/ || > + $arr[2] =~ m/^{ */) Note that m/^{ */ matches the same lines as m/^{/. Maybe you intended to use m/^{ *$/ to require the line to be empty except for a starting brace? Or else just use m/^{/. > + { > + # Change '####' to '-'. > + $arr[0] =~ s/#####/ -/g; > + $line= join(":", @arr); > + } > + print OUT $line; > + } > + close(IN); > + close(OUT); > + system("cat $out_file_name > $in_file_name"); > + system("rm $out_file_name"); system("mv", "-f", $out_file_name, $in_file_name); (or cp / rm with multi-argument system()). > === modified file 'mysql-test/mysql-test-run.pl' > --- a/mysql-test/mysql-test-run.pl 2009-06-22 08:06:35 +0000 > +++ b/mysql-test/mysql-test-run.pl 2009-08-25 15:02:55 +0000 > @@ -169,6 +169,7 @@ > our $opt_mem= $ENV{'MTR_MEM'}; > > our $opt_gcov; > +our $opt_gcov_src_dir; Don't you need to initialise to empty string '' to avoid a warning with undefined value? (Or maybe getopt handles it?). - Kristian. _______________________________________________ Mailing list: https://launchpad.net/~maria-developers Post to : maria-developers@lists.launchpad.net Unsubscribe : https://launchpad.net/~maria-developers More help : https://help.launchpad.net/ListHelp