my $color_author = 'magenta';
-my $format = '%h' . '%x00' # abbreviated commit hash
+my $format = '%x00' # separator from --graph
+ . '%h' . '%x00' # abbreviated commit hash
. '%at' . '%x00' # author date
. '%an' . '%x00' # author name
. '%s' . '%x00' # subject
while (my $line = <$fh>) {
# History graph line.
- if ($line =~ m{^([|/\\ ]+)$}) {
+ if ($line =~ m{^([|/\\_ ]+)$}) {
print colored($line, $color_graph);
next;
}
# Commit line.
- $line =~ /^([ *|]+) (.+)\x00(.+)\x00(.+)\x00(.+)\x00(.*)$/ or die;
+ $line =~ /^([ *|]+)\x00(.+)\x00(.+)\x00(.+)\x00(.+)\x00(.*)$/
+ or die $line;
my $prefix = $1;
my $hash = colored($2, $color_hash);
my $date = POSIX::strftime('%Y-%m-%d', localtime($3));
# Color "graph".
$prefix =~ s/\|/colored($&, $color_graph)/ge;
- # Strip leading whitespace.
+ # Strip leading whitespace and braces.
$refs =~ s/^\s+//;
+ $refs =~ tr/()//d;
- printf "%s %s %s %s %s %s\n",
- $prefix, $hash, $date, $author, $message, $refs;
+ # Color refs.
+ $refs = join colored(', ', $color_ref_sep), map {
+ my $color;
+ if ($_ eq 'HEAD') {
+ $color = $color_ref_head;
+ } elsif (m{/}) {
+ $color = $color_ref_reference;
+ } else {
+ $color = $color_ref_branch;
+ }
+ colored($_, $color);
+ } split /, /, $refs;
+
+ if ($refs ne '') {
+ $refs = ' '
+ . colored('(', $color_ref_sep)
+ . $refs
+ . colored(')', $color_ref_sep);
+ }
+
+ printf "%s %s %s %s%s %s\n",
+ $prefix, $hash, $date, $author, $refs, $message;
}
close $fh or die $!;