From c562dc485ccb58feaef30289a661d17b116be171 Mon Sep 17 00:00:00 2001 From: Tony Finch Date: Fri, 27 Mar 2015 15:27:06 +0000 Subject: [PATCH] Simpler log parser --- git-graph | 38 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/git-graph b/git-graph index d9bd62d..897ba13 100755 --- a/git-graph +++ b/git-graph @@ -9,26 +9,19 @@ use Term::ReadKey; $0 =~ s{^.*/([^/]+)$}{$1}; -sub stop { exit 1; } # because 'die' uses a weird exit status -sub wail { warn "$0: @_\n"; } -sub fail { wail @_; stop; } -sub fale { fail "@_: $!"; } - my %opt; GetOptions(\%opt, qw{ cancel|c overlay|o stack|s -}) or stop; +}) or exit 1; $opt{stack} = 1 unless $opt{cancel} or $opt{overlay}; my @terminal = GetTerminalSize; -my $width = $terminal[0] - 10; +my $width = $terminal[0] - 11; my $height = $terminal[1]; -my @log = qx{git log --pretty=format:%ct --no-merges --shortstat --since='$height days ago'}; - my %add; my %del; @@ -36,21 +29,18 @@ my $addmax = 0; my $delmax = 0; my $canmax = 0; -while (@log) { - my $date = shift @log; - my $stat = shift @log; - my $blank = shift @log; - fail "bad blank line $blank" - unless not defined $blank or $blank eq "\n"; - fail "truncated git log output" - unless defined $date and defined $stat; - chomp ($date, $stat); - $date =~ m{^[0-9]{10}$} or fail "bad timestamp $date"; - $date = int ($date / 86400); - $stat =~ m{^\ \d+\ files?\ changed - (?:,\ (\d+)\ insertion[s()+]+)? - (?:,\ (\d+)\ deletion[s()-]+)?$}x - or fail "bad stats $stat"; +my $date; + +for (qx{git log --pretty=format:%ct --shortstat --since='$height days ago'}) { + next if m{^\s*$}; + if (m{^(\d{10})\n$}) { + $date = int ($1 / 86400); + next; + } + m{^\ \d+\ files?\ changed + (?:,\ (\d+)\ insertion[s()+]+)? + (?:,\ (\d+)\ deletion[s()-]+)?$}x + or die "$0: bad stats $_"; my ($add,$del) = ($1 || 0, $2 || 0); $add{$date} += $add; $del{$date} += $del; -- 2.19.1.240.g7d280c7607