xcat-core/perl-xCAT/xCAT/Enabletrace.pm
2011-12-04 13:04:58 +00:00

54 lines
1.2 KiB
Perl

#!/usr/bin/env perl
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
package xCAT::Enabletrace;
use Filter::Util::Call;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(loadtrace filter);
sub loadtrace{
my (undef, $filename) = caller();
my (%args) = (
filename => $filename,
inside => 0,
lineno => 0,
);
filter_add(bless \%args);
}
sub filter {
my ($self) = @_;
my $line= filter_read();
$self->{lineno}++;
# deal with EOF/error first
if ($line<= 0) {
if ($self->{inside}) {
die "Do not find the END of the trace block. [$self->{filename}:$self->{lineno}]";
}
return $line;
}
if ($self->{inside}) {
if (/^\s*##\s*TRACE_BEGIN/ ) {
die "The trace block is nested. [$self->{filename}:$self->{lineno}]";
} elsif (/^\s*##\s*TRACE_END/) {
$self->{inside} = 0;
} else {
# remove the #.. at the begin of the line
s/^\s*#+//;
}
} elsif ( /^\s*##\s*TRACE_BEGIN/ ) {
$self->{inside} = 1;
} elsif ( /^\s*##\s*TRACE_END/ ) {
die "Do not see the BEGIN of the trace block. [$self->{filename}:$self->{lineno}]";
} elsif ( /^\s*##\s*TRACE_LINE/ ) {
s/^\s*##\s*TRACE_LINE//;
}
return $line;
}
1;