maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #00833
Re: Rev 2747: Gcov support improvements in file:///home/psergey/dev/maria-5.1-table-elim-r11-gcov/
Sergey Petrunya <psergey@xxxxxxxxxxxx> writes:
> At file:///home/psergey/dev/maria-5.1-table-elim-r11-gcov/
>
> ------------------------------------------------------------
> revno: 2747
> revision-id: psergey@xxxxxxxxxxxx-20090825150255-46i5gvl2ctd0jcm2
> parent: psergey@xxxxxxxxxxxx-20090825145915-rxwmfczgqe69r5ju
> committer: Sergey Petrunya <psergey@xxxxxxxxxxxx>
> 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.
Follow ups
References