Mercurial > hg > buildtools
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 |
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 |