187 lines
3.0 KiB
Perl
Executable File
187 lines
3.0 KiB
Perl
Executable File
#!/usr/local/bin/perl
|
|
|
|
use strict;
|
|
use warnings;
|
|
use Getopt::Long;
|
|
use Git::PunchCard;
|
|
use Term::ANSIColor;
|
|
use Text::Table;
|
|
|
|
sub help{
|
|
&version;
|
|
|
|
print '
|
|
punchcard-git [<dir>]
|
|
|
|
--version Display the version.
|
|
--help Display this help info.
|
|
|
|
If no directory is specified, the current one is used.
|
|
';
|
|
|
|
exit;
|
|
}
|
|
|
|
sub version{
|
|
print "punchcard-git v. 0.0.1\n";
|
|
}
|
|
|
|
my @colors=(
|
|
'WHITE',
|
|
'BRIGHT_WHITE',
|
|
'BLUE',
|
|
'BRIGHT_BLUE',
|
|
'GREEN',
|
|
'BRIGHT_GREEN',
|
|
'CYAN',
|
|
'BRIGHT_CYAN',
|
|
'YELLOW',
|
|
'BRIGHT_YELLOW',
|
|
'MAGENTA',
|
|
'BRIGHT_MAGENTA',
|
|
'RED',
|
|
'BRIGHT_RED'
|
|
);
|
|
|
|
my @days=(
|
|
'Sun',
|
|
'Mon',
|
|
'Tue',
|
|
'Wed',
|
|
'Thu',
|
|
'Fri',
|
|
'Sat',
|
|
);
|
|
|
|
my @hours=(
|
|
'00',
|
|
'01',
|
|
'02',
|
|
'03',
|
|
'04',
|
|
'05',
|
|
'06',
|
|
'07',
|
|
'08',
|
|
'09',
|
|
'10',
|
|
'11',
|
|
'12',
|
|
'13',
|
|
'14',
|
|
'15',
|
|
'16',
|
|
'17',
|
|
'18',
|
|
'19',
|
|
'20',
|
|
'21',
|
|
'22',
|
|
'23',
|
|
);
|
|
|
|
my $help;
|
|
my $version;
|
|
|
|
GetOptions(
|
|
'help' => \$help,
|
|
'version' => \$version,
|
|
);
|
|
|
|
if ($version){
|
|
&version;
|
|
exit;
|
|
}
|
|
|
|
if ($help){
|
|
&help;
|
|
}
|
|
|
|
my $gpc=Git::PunchCard->new;
|
|
$gpc->dir( $ARGV[0] );
|
|
if ( $gpc->error ){
|
|
exit $gpc->error;
|
|
}
|
|
|
|
my $table=Text::Table->new(
|
|
'',
|
|
'00',
|
|
'01',
|
|
'02',
|
|
'03',
|
|
'04',
|
|
'05',
|
|
'06',
|
|
'07',
|
|
'08',
|
|
'09',
|
|
'10',
|
|
'11',
|
|
'12',
|
|
'13',
|
|
'14',
|
|
'15',
|
|
'16',
|
|
'17',
|
|
'18',
|
|
'19',
|
|
'20',
|
|
'21',
|
|
'22',
|
|
'23',
|
|
'Total',
|
|
'Max',
|
|
'Avg',
|
|
'Min'
|
|
);
|
|
|
|
my $card=$gpc->get_card;
|
|
my @data;
|
|
|
|
foreach my $day ( @days ){
|
|
my @line;
|
|
|
|
push( @line, $day );
|
|
|
|
foreach my $hour ( @hours ){
|
|
my $color_to_use=13*($card->{$day}{$hour}/$card->{max});
|
|
push( @line, color($colors[$color_to_use]).$card->{$day}{$hour}.color('WHITE') );
|
|
}
|
|
|
|
my $min_color=13*($card->{$day}{min}/$card->{max});
|
|
my $average_color=13*($card->{$day}{average}/$card->{max});
|
|
my $max_color=13*($card->{$day}{max}/$card->{max});
|
|
|
|
push( @line, $card->{$day}{total}.color('WHITE') );
|
|
push( @line, color($colors[$max_color]).$card->{$day}{max}.color('WHITE') );
|
|
push( @line, color($colors[$average_color]).sprintf('%.1f',$card->{$day}{average}).color('WHITE') );
|
|
push( @line, color($colors[$min_color]).$card->{$day}{min}.color('WHITE') );
|
|
|
|
push( @data, \@line );
|
|
}
|
|
|
|
$table->load( @data );
|
|
|
|
my $min_color=13*($card->{min}/$card->{max});
|
|
my $average_color=13*($card->{average}/$card->{max});
|
|
|
|
print $table.
|
|
"\nTotal: ".$card->{total}.
|
|
"\nMax=".color($colors[13]).$card->{max}.color('WHITE').
|
|
"\nAverage=".color($colors[$average_color]).sprintf("%.1f",$card->{average}).color('WHITE').
|
|
"\nMin=".color($colors[$min_color]).$card->{min}.color('WHITE')."\n";
|
|
|
|
=head1 NAME
|
|
|
|
punchard-git - Generate a punchard plot for git commits.
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
punchard-git [<dir>]
|
|
|
|
=head1 ARGUMENTS
|
|
|
|
If <dir> is not specified, then the current directoy will be used.
|
|
|
|
=cut
|