checkpatch: colorize output to terminal
Add optional colors to make seeing message types a bit easier. The default is to show them on a tty. Inspired by Linux commits 57230297116fa ("checkpatch: colorize output to terminal") and 737c0767758b ("checkpatch: change format of --color argument to --color[=WHEN]"). Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
This commit is contained in:
parent
c182b61996
commit
1db4269f34
@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
use Term::ANSIColor qw(:constants);
|
||||||
|
|
||||||
my $P = $0;
|
my $P = $0;
|
||||||
$P =~ s@.*/@@g;
|
$P =~ s@.*/@@g;
|
||||||
@ -26,6 +27,7 @@ my $tst_only;
|
|||||||
my $emacs = 0;
|
my $emacs = 0;
|
||||||
my $terse = 0;
|
my $terse = 0;
|
||||||
my $file = undef;
|
my $file = undef;
|
||||||
|
my $color = "auto";
|
||||||
my $no_warnings = 0;
|
my $no_warnings = 0;
|
||||||
my $summary = 1;
|
my $summary = 1;
|
||||||
my $mailback = 0;
|
my $mailback = 0;
|
||||||
@ -64,6 +66,8 @@ Options:
|
|||||||
is all off)
|
is all off)
|
||||||
--test-only=WORD report only warnings/errors containing WORD
|
--test-only=WORD report only warnings/errors containing WORD
|
||||||
literally
|
literally
|
||||||
|
--color[=WHEN] Use colors 'always', 'never', or only when output
|
||||||
|
is a terminal ('auto'). Default is 'auto'.
|
||||||
-h, --help, --version display this help and exit
|
-h, --help, --version display this help and exit
|
||||||
|
|
||||||
When FILE is - read standard input.
|
When FILE is - read standard input.
|
||||||
@ -72,6 +76,14 @@ EOM
|
|||||||
exit($exitcode);
|
exit($exitcode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Perl's Getopt::Long allows options to take optional arguments after a space.
|
||||||
|
# Prevent --color by itself from consuming other arguments
|
||||||
|
foreach (@ARGV) {
|
||||||
|
if ($_ eq "--color" || $_ eq "-color") {
|
||||||
|
$_ = "--color=$color";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
GetOptions(
|
GetOptions(
|
||||||
'q|quiet+' => \$quiet,
|
'q|quiet+' => \$quiet,
|
||||||
'tree!' => \$tree,
|
'tree!' => \$tree,
|
||||||
@ -89,6 +101,8 @@ GetOptions(
|
|||||||
|
|
||||||
'debug=s' => \%debug,
|
'debug=s' => \%debug,
|
||||||
'test-only=s' => \$tst_only,
|
'test-only=s' => \$tst_only,
|
||||||
|
'color=s' => \$color,
|
||||||
|
'no-color' => sub { $color = 'never'; },
|
||||||
'h|help' => \$help,
|
'h|help' => \$help,
|
||||||
'version' => \$help
|
'version' => \$help
|
||||||
) or help(1);
|
) or help(1);
|
||||||
@ -144,6 +158,16 @@ if (!$chk_patch && !$chk_branch && !$file) {
|
|||||||
die "One of --file, --branch, --patch is required\n";
|
die "One of --file, --branch, --patch is required\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($color =~ /^always$/i) {
|
||||||
|
$color = 1;
|
||||||
|
} elsif ($color =~ /^never$/i) {
|
||||||
|
$color = 0;
|
||||||
|
} elsif ($color =~ /^auto$/i) {
|
||||||
|
$color = (-t STDOUT);
|
||||||
|
} else {
|
||||||
|
die "Invalid color mode: $color\n";
|
||||||
|
}
|
||||||
|
|
||||||
my $dbg_values = 0;
|
my $dbg_values = 0;
|
||||||
my $dbg_possible = 0;
|
my $dbg_possible = 0;
|
||||||
my $dbg_type = 0;
|
my $dbg_type = 0;
|
||||||
@ -371,7 +395,9 @@ if ($chk_branch) {
|
|||||||
close($FILE);
|
close($FILE);
|
||||||
$vname = substr($hash, 0, 12) . ' (' . $git_commits{$hash} . ')';
|
$vname = substr($hash, 0, 12) . ' (' . $git_commits{$hash} . ')';
|
||||||
if ($num_patches > 1 && $quiet == 0) {
|
if ($num_patches > 1 && $quiet == 0) {
|
||||||
print "$i/$num_patches Checking commit $vname\n";
|
my $prefix = "$i/$num_patches";
|
||||||
|
$prefix = BLUE . BOLD . $prefix . RESET if $color;
|
||||||
|
print "$prefix Checking commit $vname\n";
|
||||||
$vname = "Patch $i/$num_patches";
|
$vname = "Patch $i/$num_patches";
|
||||||
} else {
|
} else {
|
||||||
$vname = "Commit " . $vname;
|
$vname = "Commit " . $vname;
|
||||||
@ -1181,14 +1207,23 @@ sub possible {
|
|||||||
my $prefix = '';
|
my $prefix = '';
|
||||||
|
|
||||||
sub report {
|
sub report {
|
||||||
if (defined $tst_only && $_[0] !~ /\Q$tst_only\E/) {
|
my ($level, $msg) = @_;
|
||||||
|
if (defined $tst_only && $msg !~ /\Q$tst_only\E/) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
my $line = $prefix . $_[0];
|
|
||||||
|
|
||||||
$line = (split('\n', $line))[0] . "\n" if ($terse);
|
my $output = '';
|
||||||
|
$output .= BOLD if $color;
|
||||||
|
$output .= $prefix;
|
||||||
|
$output .= RED if $color && $level eq 'ERROR';
|
||||||
|
$output .= MAGENTA if $color && $level eq 'WARNING';
|
||||||
|
$output .= $level . ':';
|
||||||
|
$output .= RESET if $color;
|
||||||
|
$output .= ' ' . $msg . "\n";
|
||||||
|
|
||||||
push(our @report, $line);
|
$output = (split('\n', $output))[0] . "\n" if ($terse);
|
||||||
|
|
||||||
|
push(our @report, $output);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -1196,13 +1231,13 @@ sub report_dump {
|
|||||||
our @report;
|
our @report;
|
||||||
}
|
}
|
||||||
sub ERROR {
|
sub ERROR {
|
||||||
if (report("ERROR: $_[0]\n")) {
|
if (report("ERROR", $_[0])) {
|
||||||
our $clean = 0;
|
our $clean = 0;
|
||||||
our $cnt_error++;
|
our $cnt_error++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sub WARN {
|
sub WARN {
|
||||||
if (report("WARNING: $_[0]\n")) {
|
if (report("WARNING", $_[0])) {
|
||||||
our $clean = 0;
|
our $clean = 0;
|
||||||
our $cnt_warn++;
|
our $cnt_warn++;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user