I just noticed that I'd been sending personal replies to each and every one of the replies I got - sorry about that. Anyway, after Nicolas' suggestion, I moved the script into the contrib directory and removed it from the Makefile, having the following patch as net effect. This is also available through git at git://vlinder.landheer-cieslak.com/git/git.git#topic/git-log-changelog As for difference wrt git2cl: * less complicated * less dependencies * short hash for the commits are output in the change log * git-changelog calls git-log with the proper parameters itself (no need for the user to call it with a given set of parameters). rlc diff --git a/contrib/git-changelog/git-changelog.perl b/contrib/git-changelog/git-changelog.perl new file mode 100755 index 0000000..bffa1ab --- /dev/null +++ b/contrib/git-changelog/git-changelog.perl @@ -0,0 +1,68 @@ +#!/usr/bin/perl -w + +use strict; + +sub fetch_log { + my $command='git log --pretty=format:"%ai|%an|%h|%s" '; + foreach (@_) { + $command .= ' ' . $_; + } + $command .= " |"; + my $fh; + open $fh, $command + or die "Failed to fetch logs"; + # logs are presented as lines in which fields are separated by pipes. + # the fields are the date in ISO format (so the date as we want it extends to the + # first space), the name of the author, the abbreviated SHA1 hash and the subject line + my $date_time; + my $date; + my $cruft; + my $author; + my $hash; + my $subject; + my $prev_date=""; + my @cache; # a cache of the changes for the current date (i.e. while $prev_date eq $date) + my %entry; # a cache entry; $entry{'author'} is the entry and @$entry{'changes'} are the changes for the author in question + while (<$fh>) { + ($date_time, $author, $hash, $subject) = split(/\|/); + ($date, $cruft) = split(/\s/, $date_time, 2); + chomp $author; + + if ($date ne $prev_date) + { + foreach (@cache) + { + # print out the line with the date and the author + my $changes = $_->{'changes'}; + print "\n" . $prev_date . "\t" . $_->{'author'} . "\n" if ($#{$changes} != -1); + foreach (@{$changes}) + { + print "\t" . $_->{'hash'} . ': ' . $_->{'subject'}; + } + } + $prev_date = $date; + @cache = (); + } + # try to find an entry with the same author in the cache + my $found = -1; + my $i; + for ($i = 0; $i <= $#cache && $found == -1; $i++) + { + if ($cache[$i]->{'author'} eq $author) + { + $found = $i; + } + } + if ($found == -1) + { + my $changes = (); + push @cache, { 'author', $author, 'changes', $changes }; + $found = $#cache; + } + push @{$cache[$found]->{'changes'}}, { 'hash', $hash, 'subject', $subject }; + } +} + +fetch_log @ARGV; + + -- Ronald Landheer-Cieslak Software Architect http://www.landheer-cieslak.com/ New White Paper: "Three Good Reasons to Plan Ahead" - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html