diff options
Diffstat (limited to 'img/dist/IM/gitlog2imchanges')
| -rwxr-xr-x | img/dist/IM/gitlog2imchanges | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/img/dist/IM/gitlog2imchanges b/img/dist/IM/gitlog2imchanges new file mode 100755 index 00000000..e8cee755 --- /dev/null +++ b/img/dist/IM/gitlog2imchanges @@ -0,0 +1,96 @@ +#!/usr/bin/perl + +=head1 NAME + +gitlog2imchanges - tiny tool to convert Git commit logs to IM's 00changes + +=head1 SYNOPSIS + +git log | gitlog2imchanges > 00changes + +git log --no-merges --decorate | gitlog2imchanges > 00changes + +(Use --no-merges to ignore merge commits. + Use --decorate to show version tags.) + +=head1 SEE ALSO + +IM: + <http://tats.hauN.org/im/> + <http://packages.qa.debian.org/i/im.html> + +=head1 COPYRIGHT + +Copyright (c) 2013 Tatsuya Kinoshita + +Redistribution and use in source and binary forms, with or without +modification, are permitted without restriction, with NO WARRANTY. +You may regard this as a work that is placed in the public domain. + +=cut + +use strict; +use warnings; + +my $PRODUCT = "IM"; +my $OWNER = "Tatsuya Kinoshita <tats>"; + +my $author = ""; my $date = ""; my $comment = ""; +my $version = "xxx"; my $pre_version = ""; + +sub print_entry { + print "* "; + + $comment =~ s/\n([ \t]*\n)+/\n/g; + $comment =~ s/\n+$//; + $comment =~ s/\n/\n /g; + $comment =~ s/^\* //; + print "$comment\n"; + + my $name = $author; + $name =~ s/<([^@]+)@[^>]+>/<$1>/; + if ($name ne $OWNER) { + print "\t$name\n"; + } + + $author = ""; $date = ""; $comment = ""; +} + +while (<>) { + if (/^Author:[ \t]+([^\n]+)/) { + $author = $1; + } elsif (/^Date:[ \t]+(Sun|Mon|Tue|Wed|Thu|Fri|Sat) +(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) +(\d+) +\d+:\d+:\d+ +(\d+)/) { # Assume git log --date=default or --date=local + my $mm = $2; + my $dd = $3; + my $yyyy = $4; + $mm =~ s/Jan/01/; $mm =~ s/Feb/02/; $mm =~ s/Mar/03/; $mm =~ s/Apr/04/; + $mm =~ s/May/05/; $mm =~ s/Jun/06/; $mm =~ s/Jul/07/; $mm =~ s/Aug/08/; + $mm =~ s/Sep/09/; $mm =~ s/Oct/10/; $mm =~ s/Nov/11/; $mm =~ s/Dec/12/; + $dd =~ s/^(\d)$/0$1/; + $date = "$yyyy/$mm/$dd"; + } elsif (/^Date:[ \t]+(\d+-\d+-\d+)/) { # Assume git log --date=short or --date=iso + $date = $1; + $date =~ s!-!/!g; + } elsif (/^Date:[ \t]+(.+)$/) { + $date = $1; + } elsif (/^ (.*)$/) { + $comment .= "$1\n"; + } elsif (/^commit /) { + if ($author && $date) { + &print_entry; + } + if (/\((tag: v\d[^\),]+)[^\)]*\)$/) { + $version = $1; + $version =~ s/tag: v//g; + } + } + if ($version ne $pre_version && $date ne "") { + print "\n" if $pre_version ne ""; + print "$PRODUCT " if $PRODUCT ne ""; + print "$version ($date)\n\n"; + $pre_version = $version; + } +} +if ($author && $date) { + &print_entry; +} |
