]> granicus.if.org Git - curl/commitdiff
log2changes: first version of the git log to CHANGES conversion script
authorDaniel Stenberg <daniel@haxx.se>
Sat, 19 Jun 2010 21:08:34 +0000 (23:08 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Sat, 19 Jun 2010 21:08:34 +0000 (23:08 +0200)
$ git log --pretty=fuller --no-color --date=short | ./log2changes.pl

Of course, limiting the log output with a range like with
"[tag]..HEAD" appended can be very useful too.

log2changes.pl [new file with mode: 0755]

diff --git a/log2changes.pl b/log2changes.pl
new file mode 100755 (executable)
index 0000000..53e0057
--- /dev/null
@@ -0,0 +1,59 @@
+#!/usr/bin/perl
+
+# git log --pretty=fuller --no-color --date=short
+
+my @mname = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+             'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' );
+
+sub nicedate {
+    my ($date)=$_;
+
+    if($date =~ /(\d\d\d\d)-(\d\d)-(\d\d)/) {
+        return sprintf("%d %s %4d", $3, $mname[$2-1], $1);
+    }
+    return $date;
+}
+
+my $line;
+while(<STDIN>) {
+    my $l = $_;
+
+    if($l =~/^commit (.*)/) {
+        $co = $1;
+    }
+    elsif($l =~ /^Author: *(.*) +</) {
+        $a = $1;
+    }
+    elsif($l =~ /^Commit: *(.*) +</) {
+        $c = $1;
+    }
+    elsif($l =~ /^CommitDate: (.*)/) {
+        $date = nicedate($1);
+    }
+    elsif($l =~ /^(    )(.*)/) {
+        my $extra;
+        if($a ne $c) {
+            $extra=sprintf("\n- [%s brought this change]\n\n  ", $a);
+        }
+        else {
+            $extra="\n- ";
+        }
+        if($co ne $oldco) {
+            if($c ne $oldc) {
+                print "\n$c ($date)$extra";
+            }
+            else {
+                print "$extra";
+            }
+            $line =0;
+        }
+
+        $oldco = $co;
+        $oldc = $c;
+        $olddate = $date;
+        if($line++) {
+            print "  ";
+        }
+        print $2."\n";
+    }
+}