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

Reply via email to