Ticket #234: parrot.manifest.coverage.excerpt.txt

File parrot.manifest.coverage.excerpt.txt, 37.5 KB (added by jkeenan, 6 years ago)

Parrot::Manifest: excerpt of coverage analysis on 'make manifest_tests'

Line 
1Reading database from /home/jimk/work/parrot/cover_db
2
3
4------------------------------------------ ------ ------ ------ ------ ------
5File                                         stmt   bran   cond    sub  total
6------------------------------------------ ------ ------ ------ ------ ------
7...
8lib/Parrot/Manifest.pm                       87.7   79.2   66.7   85.0   84.5
9------------------------------------------ ------ ------ ------ ------ ------
10
11
12lib/Parrot/Manifest.pm
13
14line  err   stmt   bran   cond    sub   code
151                                       # $Id: Manifest.pm 35590 2009-01-15 13:32:00Z bernhard $
162                                       # Copyright (C) 2007, The Perl Foundation.
173                                       
184                                       package Parrot::Manifest;
195              5                    5   use strict;
20               5                       
21               5                       
226              5                    5   use warnings;
23               5                       
24               5                       
257              5                    5   use Carp;
26               5                       
27               5                       
288                                       
299                                       sub new {
3010             5                    5       my $class   = shift;
3111             5                            my $argsref = shift;
3212                                     
3313             5                            my $self = bless( {}, $class );
3414                                     
3515    ***      5     50                     my %data = (
36                    100                 
37                    100                 
38      ***            50                 
3916                                              id         => '$' . 'Id$',
4017                                              time       => scalar gmtime,
4118                                              cmd        => -d '.svn' ? 'svn' : 'svk',
4219                                              script     => $argsref->{script},
4320                                              file       => $argsref->{file}      ? $argsref->{file}      : q{MANIFEST},
4421                                              skip       => $argsref->{skip}      ? $argsref->{skip}      : q{MANIFEST.SKIP},
4522                                              gitignore  => $argsref->{gitignore} ? $argsref->{gitignore} : q{.gitignore},
4623                                          );
4724                                     
4825             5                            my $status_output_ref = [qx($data{cmd} status -v)];
4926                                     
5027                                          # grab the versioned resources:
5128             5                            my @versioned_files;
5229             5                            my @dirs;
5330             5                            my @versioned_output = grep !/^[?D]/, @{$status_output_ref};
54               5                       
5531             5                            for my $line (@versioned_output) {
5632         21205                                my @line_info = split( /\s+/, $line );
5733                                     
5834                                              # the file is the last item in the @line_info array
5935         21205                                my $filename = $line_info[-1];
6036         21205                                $filename =~ s/\\/\//g;
6137                                     
6238                                              # ignore .svn, blib directories;
6339                                              # ignore ports/ directories, as that information does not need to be
6440                                              # in tarball releases
6541         21205    100                         next if $filename =~ m[/\.svn|^blib|^ports];
6642         21075    100                         if ( -d $filename ) {
6743          3030                                    push @dirs, $filename;
6844                                              }
6945                                              else {
7046         18045                                    push @versioned_files, $filename;
7147                                              }
7248                                          }
7349             5                            $data{dirs}            = \@dirs;
7450             5                            $data{versioned_files} = \@versioned_files;
7551                                     
7652                                          # initialize the object from the prepared values (Damian, p. 98)
7753             5                            %$self = %data;
7854                                     
7955             5                            return $self;
8056                                      }
8157                                     
8258                                      sub prepare_manifest {
8359             3                    3       my $self = shift;
8460                                     
8561             3                            my %manifest_lines;
8662             3                            for my $file ( @{ $self->{versioned_files} } ) {
87               3                       
8863         10827                                $manifest_lines{$file} = _get_manifest_entry($file);
8964                                          }
9065                                     
9166             3                            return \%manifest_lines;
9267                                      }
9368                                     
9469                                      sub determine_need_for_manifest {
9570             4                    4       my $self               = shift;
9671             4                            my $proposed_files_ref = shift;
9772                                     
9873             4    100                     return 1 unless -f $self->{file};
9974                                     
10075             2                            my $current_files_ref        = $self->_get_current_files();
10176             2                            my $different_patterns_count = 0;
10277             2                            foreach my $cur ( keys %{$current_files_ref} ) {
103               2                       
10478    ***   7212     50                         $different_patterns_count++ unless $proposed_files_ref->{$cur};
10579                                          }
10680             2                            foreach my $pro ( keys %{$proposed_files_ref} ) {
107               2                       
10881          7218    100                         $different_patterns_count++ unless $current_files_ref->{$pro};
10982                                          }
11083                                     
11184             2    100                     $different_patterns_count ? return 1 : return;
11285                                      }
11386                                     
11487                                      my $text_file_coda = <<'CODA';
11588                                      # Local variables:
11689                                      #   mode: text
11790                                      #   buffer-read-only: t
11891                                      # End:
11992                                      CODA
12093                                     
12194                                      sub print_manifest {
12295             2                    2       my $self               = shift;
12396             2                            my $manifest_lines_ref = shift;
12497                                     
12598             2                            my $print_str          = <<"END_HEADER";
12699                                      # ex: set ro:
127100                                     # $self->{id}
128101                                     #
129102                                     # generated by $self->{script} $self->{time} UT
130103                                     #
131104                                     # See tools/dev/install_files.pl for documentation on the
132105                                     # format of this file.
133106                                     # See docs/submissions.pod on how to recreate this file after SVN
134107                                     # has been told about new or deleted files.
135108                                     END_HEADER
136109                                     
137110            2                            for my $k ( sort keys %{$manifest_lines_ref} ) {
138               2                       
139111         7218                                $print_str .= sprintf "%- 59s %s\n", ( $k, $manifest_lines_ref->{$k} );
140112                                         }
141113            2                            $print_str .= $text_file_coda;
142114   ***      2     50                     open my $MANIFEST, '>', $self->{file}
143115                                             or croak "Unable to open $self->{file} for writing";
144116            2                            print $MANIFEST $print_str;
145117   ***      2     50                     close $MANIFEST or croak "Unable to close $self->{file} after writing";
146118                                     
147119            2                            return 1;
148120                                     }
149121                                     
150122                                     sub _get_manifest_entry {
151123        10827                10827       my $file    = shift;
152124                                     
153125        10827                            my $special = _get_special();
154126        10827                            my $loc     = '[]';
155127        10827                            for ($file) {
156128   ***  10827    100     66                  $loc =
157                    100                 
158                    100                 
159                    100                 
160                    100                 
161                    100                 
162                    100                 
163                    100                 
164                    100                 
165                    100                 
166      ***            50                 
167                    100                 
168                    100                 
169129                                                   exists( $special->{$_} ) ? $special->{$_}
170130                                                 : !m[/]                    ? '[]'
171131                                                 : m[^LICENSE/]             ? '[main]doc'
172132                                                 : m[^docs/]                ? '[main]doc'
173133                                                 : m[^editor/]              ? '[devel]'
174134                                                 : m[^examples/]            ? '[main]doc'
175135                                                 : m[^include/]             ? '[main]include'
176136                                                 : ( m[^languages/(\w+)/] and $1 ne 'conversion' ) ? "[$1]"
177137                                                 : m[^lib/]        ? '[devel]'
178138                                                 : m[^runtime/]    ? '[library]'
179139                                                 : m[^tools/docs/] ? '[devel]'
180140                                                 : m[^tools/dev/]  ? '[devel]'
181141                                                 : m[^(apps/\w+)/] ? "[$1]"
182142                                                 :                   '[]';
183143                                         }
184144                                     
185145        10827                            return $loc;
186146                                     }
187147                                     
188148                                     sub _get_special {
189149        10827                10827       my %special = qw(
190150                                             LICENSE                                         [main]doc
191151                                             NEWS                                            [devel]doc
192152                                             PBC_COMPAT                                      [devel]doc
193153                                             PLATFORMS                                       [devel]doc
194154                                             README                                          [devel]doc
195155                                             README.win32.pod                                [devel]doc
196156                                             README.win32.pod                                [devel]doc
197157                                             RESPONSIBLE_PARTIES                             [main]doc
198158                                             TODO                                            [main]doc
199159                                             parrot-config                                   [main]bin
200160                                             docs/compiler_faq.pod                           [devel]doc
201161                                             docs/configuration.pod                          [devel]doc
202162                                             docs/debug.pod                                  [devel]doc
203163                                             docs/dev/dod.pod                                [devel]doc
204164                                             docs/dev/events.pod                             [devel]doc
205165                                             docs/dev/fhs.pod                                [devel]doc
206166                                             docs/dev/infant.pod                             [devel]doc
207167                                             docs/dev/pmc_freeze.pod                         [devel]doc
208168                                             examples/sdl/anim_image.pir                     [devel]
209169                                             examples/sdl/anim_image_dblbuf.pir              [devel]
210170                                             examples/sdl/blue_font.pir                      [devel]
211171                                             examples/sdl/blue_rect.pir                      [devel]
212172                                             examples/sdl/bounce_parrot_logo.pir             [devel]
213173                                             examples/sdl/lcd/clock.pir                      [devel]
214174                                             examples/sdl/move_parrot_logo.pir               [devel]
215175                                             examples/sdl/parrot_small.png                   [devel]
216176                                             examples/sdl/raw_pixels.pir                     [devel]
217177                                             languages/t/harness                             []
218178                                             runtime/parrot/dynext/README                    [devel]doc
219179                                             runtime/parrot/include/DWIM.pir                 [devel]doc
220180                                             runtime/parrot/include/README                   [devel]doc
221181                                             src/call_list.txt                               [devel]doc
222182                                             src/ops/ops.num                                 [devel]
223183                                             tools/build/ops2c.pl                            [devel]
224184                                             tools/build/ops2pm.pl                           [devel]
225185                                             tools/build/pbc2c.pl                            [devel]
226186                                             tools/build/revision_c.pl                       [devel]
227187                                             src/vtable.tbl                                  [devel]
228188                                         );
229189                                     
230190        10827                            return \%special;
231191                                     }
232192                                     
233193                                     sub _get_current_files {
234194            2                    2       my $self          = shift;
235195                                     
236196            2                            my %current_files;
237197   ***      2     50                     open my $FILE, "<", $self->{file}
238198                                             or die "Unable to open $self->{file} for reading";
239199            2                            while ( my $line = <$FILE> ) {
240200         7236                                chomp $line;
241201                                     
242202         7236    100                         next if $line =~ /^\s*$/o;
243203                                     
244204         7234    100                         next if $line =~ /^#/o;
245205                                     
246206         7212                                my ($file) = split /\s+/, $line;
247207         7212                                $current_files{ $file }++;
248208                                         }
249209   ***      2     50                     close $FILE or die "Unable to close $self->{file} after reading";
250210                                     
251211            2                            return \%current_files;
252212                                     }
253213                                     
254214                                     sub prepare_manifest_skip {
255215            3                    3       my $self      = shift;
256216                                     
257217            3                            my $ignores_ref = $self->_get_ignores();
258218                                     
259219            3                            return $self->_compose_manifest_skip($ignores_ref);
260220                                     }
261221                                     
262222                                     sub prepare_gitignore {
263223   ***      0                    0       my $self      = shift;
264224                                     
265225   ***      0                            my $ignores_ref = $self->_get_ignores();
266226                                     
267227   ***      0                            return $self->_compose_gitignore($ignores_ref);
268228                                     }
269229                                     
270230                                     sub determine_need_for_manifest_skip {
271231            4                    4       my $self      = shift;
272232            4                            my $print_str = shift;
273233                                     
274234            4    100                     if ( !-f $self->{skip} ) {
275235            2                                return 1;
276236                                         }
277237                                         else {
278238            2                                my $current_skips_ref        = $self->_get_current_skips();
279239            2                                my $proposed_skips_ref       = _get_proposed_skips($print_str);
280240            2                                my $different_patterns_count = 0;
281241            2                                foreach my $cur ( keys %{$current_skips_ref} ) {
282               2                       
283242   ***   3081     50                             $different_patterns_count++ unless $proposed_skips_ref->{$cur};
284243                                             }
285244            2                                foreach my $pro ( keys %{$proposed_skips_ref} ) {
286               2                       
287245         3086    100                             $different_patterns_count++ unless $current_skips_ref->{$pro};
288246                                             }
289247                                     
290248            2    100                         $different_patterns_count ? return 1 : return;
291249                                         }
292250                                     }
293251                                     
294252                                     sub print_manifest_skip {
295253            2                    2       my $self      = shift;
296254            2                            my $print_str = shift;
297255                                     
298256   ***      2     50                     open my $MANIFEST_SKIP, '>', $self->{skip}
299257                                             or die "Unable to open $self->{skip} for writing";
300258            2                            $print_str .= $text_file_coda;
301259            2                            print $MANIFEST_SKIP $print_str;
302260   ***      2     50                     close $MANIFEST_SKIP
303261                                             or die "Unable to close $self->{skip} after writing";
304262                                     
305263            2                            return 1;
306264                                     }
307265                                     
308266                                     sub print_gitignore {
309267   ***      0                    0       my $self      = shift;
310268   ***      0                            my $print_str = shift;
311269                                     
312270   ***      0      0                     open my $GITIGNORE, '>', $self->{gitignore}
313271                                             or die "Unable to open $self->{gitignore} for writing";
314272   ***      0                            $print_str .= $text_file_coda;
315273   ***      0                            print $GITIGNORE $print_str;
316274   ***      0      0                     close $GITIGNORE
317275                                             or die "Unable to close $self->{gitignore} after writing";
318276                                     
319277   ***      0                            return 1;
320278                                     }
321279                                     
322280                                     sub _get_ignores {
323281            3                    3       my $self      = shift;
324282                                     
325283            3                            my $svnignore = `$self->{cmd} propget svn:ignore @{ $self->{dirs} }`;
326               3                       
327284                                     
328285                                         # cope with trailing newlines in svn:ignore output
329286            3                            $svnignore =~ s/\n{3,}/\n\n/g;
330287            3                            my %ignores;
331288            3                            my @ignore = split( /\n\n/, $svnignore );
332289            3                            foreach (@ignore) {
333290          528                                my @cnt = m/( - )/g;
334291          528    100                         if ($#cnt) {
335292           36                                    my @a = split /\n(?=(?:.*?) - )/, $_;
336293           36                                    foreach (@a) {
337294           81                                        m/^\s*(.*?) - (.+)/sm;
338295   ***     81     50                                 $ignores{$1} = $2 if $2;
339296                                                 }
340297                                             }
341298                                             else {
342299          492                                    m/^(.*) - (.+)/sm;
343300          492    100                             $ignores{$1} = $2 if $2;
344301                                             }
345302                                         }
346303                                     
347304            3                            return \%ignores;
348305                                     }
349306                                     
350307                                     sub _compose_gitignore {
351308   ***      0                    0       my $self        = shift;
352309   ***      0                            my $ignores_ref = shift;
353310                                     
354311   ***      0                            my $print_str  = <<"END_HEADER";
355312                                     # ex: set ro:
356313                                     # $self->{id}
357314                                     # generated by $self->{script} $self->{time} UT
358315                                     #
359316                                     # This file should contain a transcript of the svn:ignore properties
360317                                     # of the directories in the Parrot subversion repository.
361318                                     # The .gitignore file is a convenience for developers  working with git-svn.
362319                                     # See http://www.kernel.org/pub/software/scm/git/docs/gitignore.html for the
363320                                     # format of this file.
364321                                     #
365322                                     END_HEADER
366323                                     
367324   ***      0                            foreach my $directory ( sort keys %{$ignores_ref} ) {
368      ***      0                       
369325   ***      0                                my $dir = $directory;
370326   ***      0                                $dir =~ s!\\!/!g;
371327   ***      0                                $print_str .= "# generated from svn:ignore of '$dir/'\n";
372328   ***      0                                foreach ( sort split /\n/, $ignores_ref->{$directory} ) {
373329   ***      0      0                             $print_str .=
374330                                                     ( $dir ne '.' )
375331                                                     ? "/$dir/$_\n"
376332                                                     : "/$_\n";
377333                                             }
378334                                         }
379335                                     
380336   ***      0                            return $print_str;
381337                                     }
382338                                     
383339                                     sub _compose_manifest_skip {
384340            3                    3       my $self       = shift;
385341            3                            my $ignore_ref = shift;
386342                                     
387343            3                            my %ignore     = %{$ignore_ref};
388               3                       
389344            3                            my $print_str  = <<"END_HEADER";
390345                                     # ex: set ro:
391346                                     # $self->{id}
392347                                     # generated by $self->{script} $self->{time} UT
393348                                     #
394349                                     # This file should contain a transcript of the svn:ignore properties
395350                                     # of the directories in the Parrot subversion repository. (Needed for
396351                                     # distributions or in general when svn is not available).
397352                                     # See docs/submissions.pod on how to recreate this file after SVN
398353                                     # has been told about new generated files.
399354                                     #
400355                                     # Ignore the SVN directories
401356                                     \\B\\.svn\\b
402357                                     
403358                                     # debian/ should not go into release tarballs
404359                                     ^debian\$
405360                                     ^debian/
406361                                     END_HEADER
407362                                     
408363            3                            foreach my $directory ( sort keys %ignore ) {
409364          570                                my $dir = $directory;
410365          570                                $dir =~ s!\\!/!g;
411366          570                                $print_str .= "# generated from svn:ignore of '$dir/'\n";
412367          570                                foreach ( sort split /\n/, $ignore{$directory} ) {
413368         2316                                    s/\./\\./g;
414369         2316                                    s/\*/.*/g;
415370         2316    100                             $print_str .=
416371                                                     ( $dir ne '.' )
417372                                                     ? "^$dir/$_\$\n^$dir/$_/\n"
418373                                                     : "^$_\$\n^$_/\n";
419374                                             }
420375                                         }
421376                                     
422377            3                            return $print_str;
423378                                     }
424379                                     
425380                                     sub _get_current_skips {
426381            2                    2       my $self          = shift;
427382                                     
428383            2                            my %current_skips;
429384   ***      2     50                     open my $SKIP, "<", $self->{skip}
430385                                             or die "Unable to open $self->{skip} for reading";
431386            2                            while ( my $line = <$SKIP> ) {
432387         3498                                chomp $line;
433388         3498    100                         next if $line =~ /^\s*$/o;
434389         3496    100                         next if $line =~ /^#/o;
435390         3089                                $current_skips{$line}++;
436391                                         }
437392   ***      2     50                     close $SKIP or die "Unable to close $self->{skip} after reading";
438393                                     
439394            2                            return \%current_skips;
440395                                     }
441396                                     
442397                                     sub _get_proposed_skips {
443398            2                    2       my $print_str      = shift;
444399                                     
445400            2                            my @proposed_lines = split /\n/, $print_str;
446401            2                            my %proposed_skips = ();
447402            2                            for my $line (@proposed_lines) {
448403         3500    100                         next if $line =~ /^\s*$/o;
449404         3498    100                         next if $line =~ /^#/o;
450405         3094                                $proposed_skips{$line}++;
451406                                         }
452407                                     
453408            2                            return \%proposed_skips;
454409                                     }
455410                                     
456411                                     1;
457412                                     
458413                                     #################### DOCUMENTATION ####################
459414                                     
460415                                     =head1 NAME
461416                                     
462417                                     Parrot::Manifest - Re-create MANIFEST and MANIFEST.SKIP
463418                                     
464419                                     =head1 SYNOPSIS
465420                                     
466421                                         use Parrot::Manifest;
467422                                     
468423                                         $mani = Parrot::Manifest->new($0);
469424                                     
470425                                         $manifest_lines_ref = $mani->prepare_manifest();
471426                                         $need_for_files     = $mani->determine_need_for_manifest($manifest_lines_ref);
472427                                         $mani->print_manifest($manifest_lines_ref) if $need_for_files;
473428                                     
474429                                         $print_str     = $mani->prepare_manifest_skip();
475430                                         $need_for_skip = $mani->determine_need_for_manifest_skip($print_str);
476431                                         $mani->print_manifest_skip($print_str) if $need_for_skip;
477432                                     
478433                                         $print_str     = $mani->prepare_gitignore();
479434                                         $mani->print_gitignore($print_str) if $need_for_skip;
480435                                     
481436                                     =head1 SEE ALSO
482437                                     
483438                                     F<tools/dev/mk_manifest_and_skip.pl>.
484439                                     
485440                                     =head1 AUTHOR
486441                                     
487442                                     James E. Keenan (jkeenan@cpan.org) refactored code from earlier versions of
488443                                     F<tools/dev/mk_manifest_and_skip.pl>.
489444                                     
490445                                     =head1 LICENSE
491446                                     
492447                                     This is free software which you may distribute under the same terms as Perl
493448                                     itself.
494449                                     
495450                                     =cut
496451                                     
497452                                     # Local Variables:
498453                                     #   mode: cperl
499454                                     #   cperl-indent-level: 4
500455                                     #   fill-column: 100
501456                                     # End:
502457                                     # vim: expandtab shiftwidth=4:
503
504
505Branches
506--------
507
508line  err      %   true  false   branch
509----- --- ------ ------ ------   ------
51015    ***     50      5      0   -d '.svn' ? :
511             100      1      4   $$argsref{'file'} ? :
512             100      1      4   $$argsref{'skip'} ? :
513      ***     50      0      5   $$argsref{'gitignore'} ? :
51441           100    130  21075   if $filename =~ m[/\.svn|^blib|^ports]
51542           100   3030  18045   if (-d $filename) { }
51673           100      2      2   unless -f $$self{'file'}
51778    ***     50      0   7212   unless $$proposed_files_ref{$cur}
51881           100      6   7212   unless $$current_files_ref{$pro}
51984           100      1      1   $different_patterns_count ? :
520114   ***     50      0      2   unless open my $MANIFEST, '>', $$self{'file'}
521117   ***     50      0      2   unless close $MANIFEST
522128          100     21   3726   m[^(apps/\w+)/] ? :
523             100    117   3747   m[^tools/dev/] ? :
524             100      9   3864   m[^tools/docs/] ? :
525             100    276   3873   m[^runtime/] ? :
526             100    429   4149   m[^lib/] ? :
527             100   4590   4578   m[^languages/(\w+)/] && $1 ne 'conversion' ? :
528             100    210   9168   m[^include/] ? :
529             100    930   9378   m[^examples/] ? :
530             100     39  10308   m[^editor/] ? :
531             100    339  10347   m[^docs/] ? :
532      ***     50      0  10686   m[^LICENSE/] ? :
533             100     48  10686   !m[/] ? :
534             100     93  10734   exists $$special{$_} ? :
535197   ***     50      0      2   unless open my $FILE, '<', $$self{'file'}
536202          100      2   7234   if $line =~ /^\s*$/o
537204          100     22   7212   if $line =~ /^#/o
538209   ***     50      0      2   unless close $FILE
539234          100      2      2   if (not -f $$self{'skip'}) { }
540242   ***     50      0   3081   unless $$proposed_skips_ref{$cur}
541245          100      5   3081   unless $$current_skips_ref{$pro}
542248          100      1      1   $different_patterns_count ? :
543256   ***     50      0      2   unless open my $MANIFEST_SKIP, '>', $$self{'skip'}
544260   ***     50      0      2   unless close $MANIFEST_SKIP
545270   ***      0      0      0   unless open my $GITIGNORE, '>', $$self{'gitignore'}
546274   ***      0      0      0   unless close $GITIGNORE
547291          100     36    492   if ($#cnt) { }
548295   ***     50     81      0   if $2
549300          100    489      3   if $2
550329   ***      0      0      0   $dir ne '.' ? :
551370          100   2130    186   $dir ne '.' ? :
552384   ***     50      0      2   unless open my $SKIP, '<', $$self{'skip'}
553388          100      2   3496   if $line =~ /^\s*$/o
554389          100    407   3089   if $line =~ /^#/o
555392   ***     50      0      2   unless close $SKIP
556403          100      2   3498   if $line =~ /^\s*$/o
557404          100    404   3094   if $line =~ /^#/o
558
559
560Conditions
561----------
562
563and 3 conditions
564
565line  err      %     !l  l&&!r   l&&r   expr
566----- --- ------ ------ ------ ------   ----
567128   ***     66   4578      0   4590   m[^languages/(\w+)/] && $1 ne 'conversion'
568
569
570Covered Subroutines
571-------------------
572
573Subroutine                       Count Location                 
574-------------------------------- ----- --------------------------
575BEGIN                                5 lib/Parrot/Manifest.pm:5 
576BEGIN                                5 lib/Parrot/Manifest.pm:6 
577BEGIN                                5 lib/Parrot/Manifest.pm:7 
578_compose_manifest_skip               3 lib/Parrot/Manifest.pm:340
579_get_current_files                   2 lib/Parrot/Manifest.pm:194
580_get_current_skips                   2 lib/Parrot/Manifest.pm:381
581_get_ignores                         3 lib/Parrot/Manifest.pm:281
582_get_manifest_entry              10827 lib/Parrot/Manifest.pm:123
583_get_proposed_skips                  2 lib/Parrot/Manifest.pm:398
584_get_special                     10827 lib/Parrot/Manifest.pm:149
585determine_need_for_manifest          4 lib/Parrot/Manifest.pm:70
586determine_need_for_manifest_skip     4 lib/Parrot/Manifest.pm:231
587new                                  5 lib/Parrot/Manifest.pm:10
588prepare_manifest                     3 lib/Parrot/Manifest.pm:59
589prepare_manifest_skip                3 lib/Parrot/Manifest.pm:215
590print_manifest                       2 lib/Parrot/Manifest.pm:95
591print_manifest_skip                  2 lib/Parrot/Manifest.pm:253
592
593Uncovered Subroutines
594---------------------
595
596Subroutine                       Count Location                 
597-------------------------------- ----- --------------------------
598_compose_gitignore                   0 lib/Parrot/Manifest.pm:308
599prepare_gitignore                    0 lib/Parrot/Manifest.pm:223
600print_gitignore                      0 lib/Parrot/Manifest.pm:267
601
602