65 строки
1.4 KiB
Perl
Executable File
65 строки
1.4 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
#: reindex.pl
|
|
#: reindex .t files for Test::Base based test files
|
|
#: Copyright (c) 2006 Agent Zhang
|
|
#: 2006-04-27 2006-05-09
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
#use File::Copy;
|
|
use Getopt::Std;
|
|
|
|
my %opts;
|
|
getopts('hb:', \%opts);
|
|
if ($opts{h} or ! @ARGV) {
|
|
die "Usage: reindex [-b 0] t/*.t\n";
|
|
}
|
|
|
|
my $init = $opts{b};
|
|
$init = 1 if not defined $init;
|
|
|
|
my @files = map glob, @ARGV;
|
|
for my $file (@files) {
|
|
next if -d $file or $file !~ /\.t_?$/;
|
|
reindex($file);
|
|
}
|
|
|
|
sub reindex {
|
|
my $file = $_[0];
|
|
open my $in, $file or
|
|
die "Can't open $file for reading: $!";
|
|
my @lines;
|
|
my $counter = $init;
|
|
my $changed;
|
|
while (<$in>) {
|
|
s/\r$//;
|
|
my $num;
|
|
s/ ^ === \s+ TEST \s+ (\d+)/$num=$1; "=== TEST " . $counter++/xie;
|
|
next if !defined $num;
|
|
if ($num != $counter-1) {
|
|
$changed++;
|
|
}
|
|
} continue {
|
|
push @lines, $_;
|
|
}
|
|
close $in;
|
|
my $text = join '', @lines;
|
|
$text =~ s/(?x) \n+ === \s+ TEST/\n\n\n\n=== TEST/ixsg;
|
|
$text =~ s/__(DATA|END)__\n+=== TEST/__${1}__\n\n=== TEST/;
|
|
#$text =~ s/\n+$/\n\n/s;
|
|
if (! $changed and $text eq join '', @lines) {
|
|
warn "reindex: $file:\tskipped.\n";
|
|
return;
|
|
}
|
|
#File::Copy::copy( $file, "$file.bak" );
|
|
open my $out, "> $file" or
|
|
die "Can't open $file for writing: $!";
|
|
binmode $out;
|
|
print $out $text;
|
|
close $out;
|
|
|
|
warn "reindex: $file:\tdone.\n";
|
|
}
|
|
|