Mercurial > hg > buildtools
view mkchangelog @ 0:d72d5d73b93a
Added Autopoop and mkchangelog.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 22 Apr 2008 14:31:44 +0300 |
parents | |
children |
line wrap: on
line source
#!/usr/bin/perl -w use strict; my $HG = "hg"; my $argc = ($#ARGV + 1); print STDERR "mkchangelog v0.1 (C) 2008 Matti 'ccr' Hamalainen\n"; die("Usage: mkchangelog [revision]\n". "Assumes latest tagged revision if no revision given." ) unless ($argc <= 1); my $startrev = ""; if ($argc >= 1) { $startrev = shift; } ### Parse tag information my $hgcmd = "$HG tags"; open(PIIPPU, '-|', $hgcmd) or die("Cannot execute $hgcmd\n"); my %tags = (); my $gottags = 0; while (<PIIPPU>) { chop; if (/^(\S+)\s+(\d+):(.+)$/) { $tags{$2} = $1; $gottags = 1; } } close PIIPPU; die("No Mercurial tags data found, quitting.\n") unless ($gottags); ### Do shit if ($startrev eq "") { foreach my $i (sort { $a <=> $b } keys %tags) { if ($tags{$i} ne "tip") { $startrev = $i; } } } my $revcmd; my $therevs = "tip:$startrev"; if ($startrev ne "") { $revcmd = "-r $therevs"; print STDERR "Getting log for revisions $therevs ...\n"; } else { $revcmd = ""; $therevs = "ALL"; print STDERR "Getting log for all revisions ...\n"; } ### Parse log $hgcmd = "$HG log -M -v -f $revcmd --template '\@\$REV:#rev#:#node|short#:#files#\$\@\n#desc#\n\@\$END\$\@\n'"; open(PIIPPU, '-|', $hgcmd) or die("Cannot execute $hgcmd\n"); my %log = (); my %loghash = (); my %revhash = (); my %filehash = (); my %rmref = (); my $isdesc = 0; my $rev = -1; my $hash = ""; my $text = ""; my $gotrevs = 0; my $files = ""; while (<PIIPPU>) { chop; if (/^\@\$REV:(\d+):([0-9a-f]{12}):(.*)\$\@$/) { $rev = $1; $hash = $2; $files = $3; $text = ""; $isdesc = 1; $gotrevs = 1; } elsif (/^\@\$END\$\@$/) { die("lol\n") unless ($isdesc); $isdesc = 0; $filehash{$rev} = $files; $log{$rev} = $text; $loghash{$hash} = $rev; $revhash{$rev} = $hash; } elsif ($isdesc) { $text .= $_." "; } else { print STDERR "? $_\n"; } } close PIIPPU; die("No Mercurial revision data found? How odd... quitting.\n") unless ($gotrevs); ### my %hide = (); foreach my $i (sort { $a <=> $b } keys %log) { if ($log{$i} =~ /Backed out changeset ([0-9a-f]{12})/) { my $href = $1; if (defined($loghash{$href})) { $hide{$i} = 1; $rmref{$href} = $revhash{$i}; } } } my $s = "ChangeLog between revisions $therevs"; print "$s\n"; print "=" x length($s) . "\n\n"; foreach my $i (sort { $a <=> $b } keys %log) { my $href = $revhash{$i}; if (!defined($rmref{$href}) && !defined($hide{$i})) { my @foo = split(/\s+/,$filehash{$i}); my $n = $#foo + 1; if ($n > 3) { $n = 3; } print "- $log{$i} [".($#foo + 1).": "; for (my $k = 0; $k < $n; $k++) { print $foo[$k]; print " " unless ($k+1 == $n); } print " ..." unless ($#foo <= $n); print "]\n"; } }