git.shiar.nl
/
barcat.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
include total, min, avg, max in stat details
[barcat.git]
/
barcat
diff --git
a/barcat
b/barcat
index 6d5610996a00f7b7c614d67a26956ac162fe2ff4..785df753eb73b8354f941ac6ae639afdeafa87de 100755
(executable)
--- a/
barcat
+++ b/
barcat
@@
-21,7
+21,7
@@
GetOptions(\%opt,
eval {
local $_ = $_[1];
$opt{anchor} = /^[0-9]+$/ ? qr/(?:\S*\h+){$_}\K/ : qr/$_/;
eval {
local $_ = $_[1];
$opt{anchor} = /^[0-9]+$/ ? qr/(?:\S*\h+){$_}\K/ : qr/$_/;
- } or die
"$@ for option $_[0]\n"
;
+ } or die
$@ =~ s/(?: at .+)?$/ for option $_[0]/r
;
},
'human-readable|H!',
'interval|t:i',
},
'human-readable|H!',
'interval|t:i',
@@
-47,6
+47,7
@@
GetOptions(\%opt,
);
},
'markers|m=s',
);
},
'markers|m=s',
+ 'stat|s!',
'unmodified|u!',
'width|w=i',
'usage|h' => sub { podexit() },
'unmodified|u!',
'width|w=i',
'usage|h' => sub { podexit() },
@@
-56,8
+57,9
@@
GetOptions(\%opt,
$opt{width} ||= $ENV{COLUMNS} || 80;
$opt{color} //= -t *STDOUT; # enable on tty
$opt{trim} *= $opt{width} / 100 if $opt{trimpct};
$opt{width} ||= $ENV{COLUMNS} || 80;
$opt{color} //= -t *STDOUT; # enable on tty
$opt{trim} *= $opt{width} / 100 if $opt{trimpct};
-$opt{units} =
$opt{'human-readable'} && ['', qw( k M G T P E Z Y y z a f p n μ m )]
;
+$opt{units} =
[split //, ' kMGTPEZYyzafpnμm'] if $opt{'human-readable'}
;
$opt{anchor} //= qr/\A/;
$opt{anchor} //= qr/\A/;
+$opt{'value-length'} = 6 if $opt{units};
if (defined $opt{interval}) {
$opt{interval} ||= 1;
if (defined $opt{interval}) {
$opt{interval} ||= 1;
@@
-90,12
+92,16
@@
while (readline) {
$SIG{INT} = 'DEFAULT';
$SIG{INT} = 'DEFAULT';
+my @order;
+
sub show_lines {
state $nr = $opt{hidemin} ? $opt{hidemin} - 1 : 0;
@lines and @lines > $nr or return;
sub show_lines {
state $nr = $opt{hidemin} ? $opt{hidemin} - 1 : 0;
@lines and @lines > $nr or return;
+@lines or return;
+@lines > $nr or return unless $opt{hidemin};
-
my
@order = sort { $b <=> $a } grep { length } @values;
+@order = sort { $b <=> $a } grep { length } @values;
my $maxval = $opt{hidemax} ? max @values[0 .. $opt{hidemax} - 1] : $order[0];
my $minval = min $order[-1], 0;
my $lenval = $opt{'value-length'} // max map { length } @order;
my $maxval = $opt{hidemax} ? max @values[0 .. $opt{hidemax} - 1] : $order[0];
my $minval = min $order[-1], 0;
my $lenval = $opt{'value-length'} // max map { length } @order;
@@
-129,14
+135,21
@@
if ($opt{markers} // 1 and $size > 0) {
}
}
}
}
+@lines > $nr or return if $opt{hidemin};
+
sub sival {
my $unit = int(log($_[0]) / log(1000) - ($_[0] < 1));
sub sival {
my $unit = int(log($_[0]) / log(1000) - ($_[0] < 1));
- sprintf "%3.1f%1s", $_[0] / 1000 ** $unit,
- $#{$opt{units}} >> 1 < abs $unit ? "e$unit" : $opt{units}->[$unit];
+ my $float = $_[0] !~ /^ (?: 0*\.)? [0-9]{1,3} $/x;
+ sprintf('%*.*f%*s',
+ $float ? 5 : 3, $float, # length and tenths
+ $_[0] / 1000 ** $unit, # number
+ $float ? 0 : 3, # unit size
+ $#{$opt{units}} >> 1 < abs $unit ? "e$unit" : $opt{units}->[$unit]
+ );
}
while ($nr <= $#lines) {
}
while ($nr <= $#lines) {
- $nr >= $opt{hidemax} and last if $opt{hidemax};
+ $nr >= $opt{hidemax} and last if
defined
$opt{hidemax};
my $val = $values[$nr];
if (length $val) {
my $color = !$opt{color} ? 0 :
my $val = $values[$nr];
if (length $val) {
my $color = !$opt{color} ? 0 :
@@
-157,6
+170,15
@@
while ($nr <= $#lines) {
}
show_lines();
}
show_lines();
+if ($opt{stat}) {
+ my $total = sum @order;
+ printf '%s total', $total;
+ printf ' in %d values', scalar @values;
+ printf ' (%s min, %*.*f avg, %s max)',
+ $order[-1], 0, 2, $total / @order, $order[0];
+ say '';
+}
+
__END__
=head1 NAME
__END__
=head1 NAME
@@
-200,6
+222,7
@@
for example I<-f'(\d+)'> for the first digits anywhere.
Format values using SI unit prefixes,
turning long numbers like I<12356789> into I<12.4M>.
Also changes an exponent I<1.602176634e-19> to I<160.2z>.
Format values using SI unit prefixes,
turning long numbers like I<12356789> into I<12.4M>.
Also changes an exponent I<1.602176634e-19> to I<160.2z>.
+Short integers are aligned but kept without decimal point.
=item -t, --interval[=<seconds>]
=item -t, --interval[=<seconds>]
@@
-254,6
+277,10
@@
or 68% of all entries.
=back
=back
+=item -s, --stat
+
+Total statistics after all data.
+
=item -u, --unmodified
Do not strip leading whitespace.
=item -u, --unmodified
Do not strip leading whitespace.
@@
-325,9
+352,9
@@
Git statistics, such commit count by year:
git log --pretty=%ci | cut -b-4 | uniq -c | barcat
git log --pretty=%ci | cut -b-4 | uniq -c | barcat
-Or the
most frequent authors
:
+Or the
top 3 most frequent authors with statistics over all
:
- git shortlog -sn | barcat -L3
+ git shortlog -sn | barcat -L3
-s
Latency history:
Latency history: