App-NDTools
view release on metacpan or search on metacpan
lib/App/NDTools/NDDiff.pm view on Meta::CPAN
$self->print_term_header(@{$hdrs});
if (
$self->{OPTS}->{show} and
my @errs = Struct::Diff::valid_diff($diff)
) {
while (@errs) {
my ($path, $type) = splice @errs, 0, 2;
log_error { "$type " . path2str($path) };
}
die_fatal "Diff validation failed", 1;
}
unless ($self->{OPTS}->{quiet}) {
$self->diff_term($diff) if ($self->{OPTS}->{ofmt} eq 'term');
$self->dump($diff);
}
$self->{status} = 8
unless (not keys %{$diff} or exists $diff->{U});
}
}
die_info "All done, no difference found", 0 unless ($self->{status});
die_info "Difference found", 8;
}
sub load {
my $self = shift;
my @data = $self->load_struct($_[0], $self->{OPTS}->{ifmt});
# array used to indicate absent value for grep result
@data = $self->grep($self->{OPTS}->{grep}, $data[0])
if (@{$self->{OPTS}->{grep}});
if (@data and ref $data[0]) {
map { path($data[0], $_, delete => 1) } @{$self->{OPTS}->{ignore}}
}
return \@data;
}
sub print_brief_block {
my ($self, $path, $status) = @_;
$status = 'D' if ($status eq 'N');
print $self->{OPTS}->{term}->{sign}->{$status} . $COLOR{U} .
path2str([splice @{$path}, 0, -1]) . $COLOR{reset} .
$COLOR{"B$status"} . path2str($path) . $COLOR{reset} . "\n";
}
sub print_term_block {
my ($self, $value, $path, $status) = @_;
log_trace { "'" . path2str($path) . "' ($status)" };
my @lines;
my $dsign = $self->{OPTS}->{term}->{sign}->{$status};
my $indent = $self->{OPTS}->{term}->{indt};
# diff for path
if (@{$path} and my @delta = path_delta($self->{'hdr_path'}, $path)) {
$self->{'hdr_path'} = [@{$path}];
my $s = $self->{OPTS}->{pretty} ? @{$path} - @delta : 0;
while ($s < @{$path}) {
my $line = $indent x $s . path2str([$path->[$s]]);
if (($status eq 'A' or $status eq 'R') and $s == $#{$path}) {
$line = $COLOR{"B$status"} . $dsign . $line . $COLOR{reset};
} else {
substr($line, 0, 0, $indent);
}
push @lines, $line;
$s++;
}
}
# diff for value
push @lines, $self->term_value_diff($value, $status, $indent x @{$path});
print join("\n", @lines) . "\n";
}
sub print_term_header {
my ($self, @names) = @_;
if ($self->{TTY} and not $self->{OPTS}->{quiet}) {
print $COLOR{head} .
(@names == 1 ? "!!! $names[0]" : "--- $names[0]\n+++ $names[1]") .
$COLOR{reset}. "\n";
}
}
sub term_value_diff {
my ($self, $value, $status, $indent) = @_;
return $self->term_value_diff_text($value, $indent)
if ($status eq 'T');
return $self->term_value_diff_default($value, $status, $indent);
}
sub term_value_diff_default {
my ($self, $value, $status, $indent) = @_;
my @out;
$value = $JSON->pretty($self->{OPTS}->{pretty})->encode($value)
unless (is_number($value));
for my $line (split($/, $value)) {
substr($line, 0, 0, $self->{OPTS}->{term}->{sign}->{$status} . $indent);
push @out, $COLOR{$status} . $line . $COLOR{reset};
}
return @out;
}
sub term_value_diff_text {
my ($self, $diff, $indent) = @_;
my (@hdr, $lines, @out, $pfx, $sfx, $status);
$sfx = $COLOR{reset};
while (@{$diff}) {
($status, $lines) = splice @{$diff}, 0, 2;
$pfx = $COLOR{$status} . $self->{OPTS}->{term}->{sign}->{$status} .
$indent;
( run in 0.811 second using v1.01-cache-2.11-cpan-71847e10f99 )