source: ProjectBuilder/devel/pb/lib/ProjectBuilder/Changelog.pm@ 473

Last change on this file since 473 was 473, checked in by Bruno Cornec, 16 years ago

Working announce action for pb

File size: 5.4 KB
Line 
1#!/usr/bin/perl -w
2#
3# ProjectBuilder Changelog module
4# Changelog management subroutines brought by the the Project-Builder project
5#
6# $Id$
7#
8# Copyright B. Cornec 2007
9# Provided under the GPL v2
10
11package ProjectBuilder::Changelog;
12
13use strict 'vars';
14use Data::Dumper;
15use English;
16use Date::Manip;
17use POSIX qw(strftime);
18use lib qw (lib);
19use ProjectBuilder::Base;
20use ProjectBuilder::Conf;
21
22# Inherit from the "Exporter" module which handles exporting functions.
23
24use Exporter;
25
26# Export, by default, all the functions into the namespace of
27# any code which uses this module.
28
29our @ISA = qw(Exporter);
30our @EXPORT = qw(pb_changelog);
31
32=pod
33
34=head1 NAME
35
36ProjectBuilder::Changelog, part of the project-builder.org - module dealing with changelog management
37
38=head1 DESCRIPTION
39
40This modules provides generic functions suitable for changelog management for project-builder.org
41
42=head1 USAGE
43
44=over 4
45
46=item B<pb_changelog>
47
48Function that generates the changelog used in build files, or for announcements (web, mailing-list, ...)
49
50It takes up to 9 parameters:
51The first parameter is the type of the distribution.
52The second parameter is the package name generated.
53The third parameter is the version of the package.
54The fourth parameter is the tag of the package.
55The fifth parameter is the suffix of the package.
56The sixth parameter is now unused.
57The seventh parameter is the file descriptor on which to write the changelog content.
58The eighth parameter is a flag in the configuration file indicating whether we want changelog expansion or not.
59The nineth parameter is the potential changelog file pbcl.
60
61=cut
62
63sub pb_changelog {
64
65my $dtype = shift;
66my $pkg = shift;
67my $pbver = shift;
68my $pbtag = shift;
69my $dsuf = shift;
70my $path = shift;
71my $OUTPUT = shift;
72my $doit = shift;
73my $chglog = shift || undef;
74
75my $log = "";
76
77# For date handling
78$ENV{LANG}="C";
79
80if ((not (defined $dtype)) || ($dtype eq "") ||
81 (not (defined $pkg)) || ($pkg eq "") ||
82 (not (defined $pbver)) || ($pbver eq "") ||
83 (not (defined $pbtag)) || ($pbtag eq "") ||
84 (not (defined $dsuf)) || ($dsuf eq "") ||
85 (not (defined $path)) || ($path eq "") ||
86 (not (defined $OUTPUT)) || ($OUTPUT eq "") ||
87 (not (defined $doit)) || ($doit eq "")) {
88 print $OUTPUT "\n";
89 return;
90}
91
92if (((not defined $chglog) || (! -f $chglog)) && ($doit eq "yes")) {
93 #pb_log(2,"No ChangeLog file ($chglog) for $pkg\n";
94 print $OUTPUT "\n";
95 return;
96}
97
98my $date;
99my $ndate;
100my $n2date;
101my $ver;
102my $ver2;
103my ($pbpackager) = pb_conf_get("pbpackager");
104
105if (not defined $pbpackager->{$ENV{'PBPROJ'}}) {
106 $pbpackager->{$ENV{'PBPROJ'}} = "undefined\@noproject.noorg";
107}
108
109# If we don't need to do it, or don't have it fake something
110if (((not defined $chglog) || (! -f $chglog)) && ($doit ne "yes")) {
111 my @date = pb_get_date();
112 $date = strftime("%Y-%m-%d", @date);
113 $ndate = &UnixDate($date,"%a", "%b", "%d", "%Y");
114 $n2date = &UnixDate($date,"%a, %d %b %Y %H:%M:%S %z");
115 if (($dtype eq "rpm") || ($dtype eq "fc")) {
116 $ver2 = "$pbver-$pbtag$dsuf";
117 print $OUTPUT "* $ndate $pbpackager->{$ENV{'PBPROJ'}} $ver2\n";
118 print $OUTPUT "- Updated to $pbver\n";
119 }
120 if ($dtype eq "deb") {
121 print $OUTPUT "$pkg ($pbver) unstable; urgency=low\n";
122 print $OUTPUT "\n";
123 print $OUTPUT " -- $pbpackager->{$ENV{'PBPROJ'}} $n2date\n\n\n";
124 }
125 return;
126}
127
128open(INPUT,"$chglog") || die "Unable to open $chglog (read)";
129
130# Skip first 4 lines
131my $tmp = <INPUT>;
132$tmp = <INPUT>;
133$tmp = <INPUT>;
134if ($dtype eq "announce") {
135 chomp($tmp);
136 print $OUTPUT "$tmp<br>\n";
137}
138$tmp = <INPUT>;
139if ($dtype eq "announce") {
140 chomp($tmp);
141 print $OUTPUT "$tmp<br>\n";
142}
143
144my $first=1;
145
146# Handle each block separated by newline
147while (<INPUT>) {
148 ($ver, $date) = split(/ /);
149 $ver =~ s/^v//;
150 chomp($date);
151 $date =~ s/\(([0-9-]+)\)/$1/;
152 #pb_log(2,"**$date**\n";
153 $ndate = UnixDate($date,"%a", "%b", "%d", "%Y");
154 $n2date = UnixDate($date,"%a, %d %b %Y %H:%M:%S %z");
155 #pb_log(2,"**$ndate**\n";
156
157 if (($dtype eq "rpm") || ($dtype eq "fc")) {
158 if ($ver !~ /-/) {
159 if ($first eq 1) {
160 $ver2 = "$ver-$pbtag$dsuf";
161 $first=0;
162 } else {
163 $ver2 = "$ver-1$dsuf";
164 }
165 } else {
166 $ver2 = "$ver$dsuf";
167 }
168 print $OUTPUT "* $ndate $pbpackager->{$ENV{'PBPROJ'}} $ver2\n";
169 print $OUTPUT "- Updated to $ver\n";
170 }
171 if ($dtype eq "deb") {
172 print $OUTPUT "$pkg ($ver) unstable; urgency=low\n";
173 print $OUTPUT "\n";
174 }
175
176 $tmp = <INPUT>;
177 while ($tmp !~ /^$/) {
178 if ($dtype eq "deb") {
179 $tmp =~ s/^- //;
180 print $OUTPUT " * $tmp";
181 } elsif ($dtype eq "rpm") {
182 print $OUTPUT "$tmp";
183 } else {
184 chomp($tmp);
185 print $OUTPUT "$tmp<br>\n";
186 }
187 last if (eof(INPUT));
188 $tmp = <INPUT>;
189 }
190 print $OUTPUT "\n";
191
192 if ($dtype eq "deb") {
193 # Cf: http://www.debian.org/doc/debian-policy/ch-source.html#s-dpkgchangelog
194 print $OUTPUT " -- $pbpackager->{$ENV{'PBPROJ'}} $n2date\n\n\n";
195 }
196
197 last if (eof(INPUT));
198 last if ($dtype eq "announce");
199}
200close(INPUT);
201}
202
203
204=back
205
206=head1 WEB SITES
207
208The main Web site of the project is available at L<http://www.project-builder.org/>. Bug reports should be filled using the trac instance of the project at L<http://trac.project-builder.org/>.
209
210=head1 USER MAILING LIST
211
212None exists for the moment.
213
214=head1 AUTHORS
215
216The Project-Builder.org team L<http://trac.project-builder.org/> lead by Bruno Cornec L<mailto:bruno@project-builder.org>.
217
218=head1 COPYRIGHT
219
220Project-Builder.org is distributed under the GPL v2.0 license
221described in the file C<COPYING> included with the distribution.
222
223=cut
224
2251;
Note: See TracBrowser for help on using the repository browser.