annotate mkchangelog @ 0:d72d5d73b93a

Added Autopoop and mkchangelog.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 22 Apr 2008 14:31:44 +0300
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1 #!/usr/bin/perl -w
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2 use strict;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
3 my $HG = "hg";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
4
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
5 my $argc = ($#ARGV + 1);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
6 print STDERR "mkchangelog v0.1 (C) 2008 Matti 'ccr' Hamalainen\n";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
7 die("Usage: mkchangelog [revision]\n".
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
8 "Assumes latest tagged revision if no revision given."
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
9 ) unless ($argc <= 1);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
10 my $startrev = "";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
11 if ($argc >= 1) { $startrev = shift; }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
12
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
13
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
14 ### Parse tag information
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
15 my $hgcmd = "$HG tags";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
16 open(PIIPPU, '-|', $hgcmd) or die("Cannot execute $hgcmd\n");
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
17 my %tags = ();
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
18 my $gottags = 0;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
19 while (<PIIPPU>) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
20 chop;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
21 if (/^(\S+)\s+(\d+):(.+)$/) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
22 $tags{$2} = $1;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
23 $gottags = 1;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
24 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
25 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
26 close PIIPPU;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
27
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
28 die("No Mercurial tags data found, quitting.\n") unless ($gottags);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
29
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
30 ### Do shit
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
31 if ($startrev eq "") {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
32 foreach my $i (sort { $a <=> $b } keys %tags) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
33 if ($tags{$i} ne "tip") { $startrev = $i; }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
34 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
35 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
36
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
37 my $revcmd;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
38 my $therevs = "tip:$startrev";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
39 if ($startrev ne "") {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
40 $revcmd = "-r $therevs";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
41 print STDERR "Getting log for revisions $therevs ...\n";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
42 } else {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
43 $revcmd = "";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
44 $therevs = "ALL";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
45 print STDERR "Getting log for all revisions ...\n";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
46 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
47
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
48 ### Parse log
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
49 $hgcmd = "$HG log -M -v -f $revcmd --template '\@\$REV:#rev#:#node|short#:#files#\$\@\n#desc#\n\@\$END\$\@\n'";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
50 open(PIIPPU, '-|', $hgcmd) or die("Cannot execute $hgcmd\n");
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
51 my %log = ();
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
52 my %loghash = ();
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
53 my %revhash = ();
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
54 my %filehash = ();
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
55 my %rmref = ();
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
56 my $isdesc = 0;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
57 my $rev = -1;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
58 my $hash = "";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
59 my $text = "";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
60 my $gotrevs = 0;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
61 my $files = "";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
62 while (<PIIPPU>) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
63 chop;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
64 if (/^\@\$REV:(\d+):([0-9a-f]{12}):(.*)\$\@$/) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
65 $rev = $1;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
66 $hash = $2;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
67 $files = $3;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
68 $text = "";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
69 $isdesc = 1;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
70 $gotrevs = 1;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
71 } elsif (/^\@\$END\$\@$/) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
72 die("lol\n") unless ($isdesc);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
73 $isdesc = 0;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
74 $filehash{$rev} = $files;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
75 $log{$rev} = $text;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
76 $loghash{$hash} = $rev;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
77 $revhash{$rev} = $hash;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
78 } elsif ($isdesc) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
79 $text .= $_." ";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
80 } else {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
81 print STDERR "? $_\n";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
82 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
83 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
84 close PIIPPU;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
85
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
86 die("No Mercurial revision data found? How odd... quitting.\n") unless ($gotrevs);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
87
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
88 ###
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
89 my %hide = ();
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
90 foreach my $i (sort { $a <=> $b } keys %log) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
91 if ($log{$i} =~ /Backed out changeset ([0-9a-f]{12})/) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
92 my $href = $1;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
93 if (defined($loghash{$href})) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
94 $hide{$i} = 1;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
95 $rmref{$href} = $revhash{$i};
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
96 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
97 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
98 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
99
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
100 my $s = "ChangeLog between revisions $therevs";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
101 print "$s\n";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
102 print "=" x length($s) . "\n\n";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
103
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
104 foreach my $i (sort { $a <=> $b } keys %log) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
105 my $href = $revhash{$i};
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
106 if (!defined($rmref{$href}) && !defined($hide{$i})) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
107 my @foo = split(/\s+/,$filehash{$i});
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
108 my $n = $#foo + 1;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
109 if ($n > 3) { $n = 3; }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
110
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
111 print "- $log{$i} [".($#foo + 1).": ";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
112 for (my $k = 0; $k < $n; $k++) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
113 print $foo[$k];
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
114 print " " unless ($k+1 == $n);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
115 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
116 print " ..." unless ($#foo <= $n);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
117 print "]\n";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
118 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
119 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
120