git-graph: allow user to adjust horizontal scale
authorTony Finch <dot@dotat.at>
Thu, 23 Apr 2015 16:23:28 +0000 (17:23 +0100)
committerTony Finch <dot@dotat.at>
Thu, 23 Apr 2015 16:23:28 +0000 (17:23 +0100)
git-graph

index f6c3ca1..278e424 100755 (executable)
--- a/git-graph
+++ b/git-graph
@@ -15,6 +15,7 @@ GetOptions(\%opt, qw{
        height|h=i
        overlay|o
        stack|s
+       width|w=i
 }) or exit 1;
 
 $opt{overlay} = 1 unless $opt{cancel} or $opt{stack};
@@ -51,7 +52,8 @@ for (qx{git log --pretty=format:%ct --shortstat --since='$height days ago'}) {
        $canmax = $can if $canmax < $can;
 }
 
-my $max = $opt{cancel} ? $canmax :
+my $max = $opt{width} ? $opt{width} :
+    $opt{cancel} ? $canmax :
     $opt{stack} ? $addmax + $delmax :
     $addmax > $delmax ? $addmax : $delmax;
 my $scale = $width / $max;
@@ -81,10 +83,16 @@ for my $date ($today - $height .. $today) {
        }
        my $greg = strftime "%b %d %w", localtime $date * 86400;
        $greg =~ s{(\d)$}{substr "sMTWTFs", $1, 1}e;
-       printf "$greg \e[33m%s\e[32m%s\e[31m%s\e[0m\n",
+       my $line = sprintf "$greg \e[33m%s\e[32m%s\e[31m%s\e[0m\n",
            "#" x ($mod && 1 + $mod * $scale),
            "+" x ($add && 1 + $add * $scale),
            "-" x ($del && 1 + $del * $scale);
+       if (length $line > $width) {
+               $line = sprintf "## %d ##\e[32m++ %d ++\e[31m-- %d --\e[0m\n",
+                   $mod, $add, $del;
+               $line = "$greg \e[33m" . "#"x($width + 16 - length $line) . $line;
+       }
+       print $line;
 }
 printf "         \e[33m#\e[0m <- %-8.1f %s %8d ->\n",
     1/$scale, " " x ($width - 25), $max;