# New Ticket Created by "Paul Cochrane" # Please include the string: [perl #40544] # in the subject line of all future correspondence about this issue. # <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=40544 >
Hi, This patch adds a test for DOS line endings in text files in the Parrot distribution. Comments welcome, Paul files affected: MANIFEST t/codingstd/line_endings.t
Index: MANIFEST =================================================================== --- MANIFEST (revision 14906) +++ MANIFEST (working copy) @@ -2446,6 +2446,7 @@ t/codingstd/cppcomments.t [] t/codingstd/cuddled_else.t [] t/codingstd/fixme.t [] +t/codingstd/line_endings.t [] t/codingstd/linelength.t [] t/codingstd/perlcritic.t [] t/codingstd/tabs.t [] Index: t/codingstd/line_endings.t =================================================================== --- t/codingstd/line_endings.t (revision 0) +++ t/codingstd/line_endings.t (revision 0) @@ -0,0 +1,92 @@ +#! perl +# Copyright (C) 2006, The Perl Foundation. +# $Id$ + +use strict; +use warnings; + +use lib qw( . lib ../lib ../../lib ); +use Test::More tests => 1; +use ExtUtils::Manifest qw(maniread); +use SVN::Client; + +=head1 NAME + +t/codingstd/line_endings.t - checks for DOS line endings in text files + +=head1 SYNOPSIS + + # test all files + % prove t/codingstd/line_endings.t + + # test specific files + % perl t/codingstd/line_endings.t src/foo.c include/parrot/bar.h + +=head1 DESCRIPTION + +Checks that text files do not have DOS (CRLF) line endings. Instead, they +should have Unix (CR) line endings. + +=head1 SEE ALSO + +L<docs/pdds/pdd07_codingstd.pod> + +=cut + +my @files = @ARGV ? @ARGV : source_files(); +my @dos_files; + +foreach my $file (@files) { + my $buf; + + # slurp in the file + open( my $fh, '<', $file ) + or die "Cannot open '$file' for reading: $!\n"; + { + local $/; + $buf = <$fh>; + } + + # append to the dos_files array if the code matches + push @dos_files => "$file\n" + if $buf =~ m{\r$}m; +} + +ok( !scalar(@dos_files), 'Line endings correct' ) + or diag( "DOS line ending found in " . scalar @dos_files . " files:[EMAIL PROTECTED]" ); + +sub source_files +{ + my $client = SVN::Client->new(); + my $manifest = maniread('MANIFEST'); + my @test_files; + # grab names of files to test (except binary files) + foreach my $filename ( sort keys %$manifest ) { + # try to read the svn:mime-type property of the file + my $prop_ref = $client->propget("svn:mime-type", $filename, "WORKING", 0); + + # if we have no mime-type property set or the mime-type is text/* + # then the file is text (this is the assumption used by subversion) + my $prop = $prop_ref->{$filename}; + # of the mime-type property is undefined, append to the file list + if (!defined $prop) { + push @test_files, $filename; + } + else { + # if we know we have a text file, append it + push @test_files, $filename + if ($prop =~ m{text}); + } + } + + return @test_files; +} + +exit; + +# Local Variables: +# mode: cperl +# cperl-indent-level: 4 +# fill-column: 100 +# End: +# vim: expandtab shiftwidth=4: