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

Last change on this file since 916 was 916, checked in by Bruno Cornec, 14 years ago
  • Improves Debian support by a/ allowing PBDESC to be used in control file with space prepended. b/ prepend 0 to non digit versions such as devel. c/ creating debian pbfilter files for PBDEBSTD and PBDEBCOMP macros used in control.
  • Uses pbtag for ebuild and pkg packages
  • Improves pb Solaris pkgs
  • Improves pb Debian pkgs (only some warnings remaining for lintian)
  • Adds a PBSUMMARY macro and use it. Now also generated for newproj.
File size: 5.5 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 3 parameters:
51The first parameter is the %pb hash containing packge info
52The second parameter is the file descriptor on which to write the changelog content.
53The third parameter is a flag in the configuration file indicating whether we want changelog expansion or not.
54
55=cut
56
57sub pb_changelog {
58
59my $pb = shift;
60my $dtype = $pb->{'dtype'};
61my $pbrealpkg = $pb->{'realpkg'};
62my $pbver = $pb->{'ver'};
63my $pbtag = $pb->{'tag'};
64my $pbsuf = $pb->{'suf'};
65my $OUTPUT = shift;
66my $doit = shift;
67my $chglog = $pb->{'chglog'} || undef;
68
69my $log = "";
70
71# For date handling
72$ENV{LANG}="C";
73
74if ((not (defined $dtype)) || ($dtype eq "") ||
75 (not (defined $pbrealpkg)) || ($pbrealpkg eq "") ||
76 (not (defined $pbver)) || ($pbver eq "") ||
77 (not (defined $pbtag)) || ($pbtag eq "") ||
78 (not (defined $pbsuf)) || ($pbsuf eq "") ||
79 (not (defined $OUTPUT)) || ($OUTPUT eq "") ||
80 (not (defined $doit)) || ($doit eq "")) {
81 print $OUTPUT "\n";
82 return;
83}
84
85if (((not defined $chglog) || (! -f $chglog)) && ($doit eq "yes")) {
86 #pb_log(2,"No ChangeLog file ($chglog) for $pbrealpkg\n";
87 print $OUTPUT "\n";
88 return;
89}
90
91my $date;
92my $ndate;
93my $n2date;
94my $ver;
95my $ver2;
96my ($pbpackager) = pb_conf_get("pbpackager");
97
98if (not defined $pbpackager->{$ENV{'PBPROJ'}}) {
99 $pbpackager->{$ENV{'PBPROJ'}} = "undefined\@noproject.noorg";
100}
101
102my @date = pb_get_date();
103# If we don't need to do it, or don't have it fake something
104if (((not defined $chglog) || (! -f $chglog)) && ($doit ne "yes")) {
105 $date = strftime("%Y-%m-%d", @date);
106 $ndate = &UnixDate($date,"%a", "%b", "%d", "%Y");
107 $n2date = &UnixDate($date,"%a, %d %b %Y %H:%M:%S %z");
108 if (($dtype eq "rpm") || ($dtype eq "fc")) {
109 $ver2 = "$pbver-$pbtag";
110 print $OUTPUT "* $ndate $pbpackager->{$ENV{'PBPROJ'}} $ver2\n";
111 print $OUTPUT "- Updated to $pbver\n";
112 }
113 if ($dtype eq "deb") {
114 if ($pbver !~ /^[0-9]/) {
115 # dpkg-deb doesn't accept non digit versions.
116 # Prepending 0 in order to make updates easy hopefully
117 $pbver =~ s/^/0/;
118 }
119 print $OUTPUT "$pbrealpkg ($pbver-$pbtag) unstable; urgency=low\n";
120 print $OUTPUT " * Updated to $pbver\n";
121 print $OUTPUT " -- $pbpackager->{$ENV{'PBPROJ'}} $n2date\n\n\n";
122 }
123 return;
124}
125
126open(INPUT,"$chglog") || die "Unable to open $chglog (read)";
127
128# Skip first 4 lines
129my $tmp = <INPUT>;
130$tmp = <INPUT>;
131$tmp = <INPUT>;
132if ($dtype eq "announce") {
133 chomp($tmp);
134 print $OUTPUT "$tmp<br>\n";
135}
136$tmp = <INPUT>;
137if ($dtype eq "announce") {
138 chomp($tmp);
139 print $OUTPUT "$tmp<br>\n";
140}
141
142my $first=1;
143
144# Handle each block separated by newline
145while (<INPUT>) {
146 ($ver, $date) = split(/ /);
147 $ver =~ s/^v//;
148 chomp($date);
149 $date =~ s/\(([0-9-]+)\)/$1/;
150 pb_log(3,"**Date:$date**\n");
151 $ndate = UnixDate($date,"%a", "%b", "%d", "%Y");
152 $n2date = UnixDate($date,"%a, %d %b %Y %H:%M:%S %z");
153 pb_log(3,"**nDate:$ndate**\n");
154
155 pb_log(3,"**Ver:$ver**\n");
156 if ($ver !~ /-/) {
157 if ($first eq 1) {
158 $ver2 = "$ver-$pbtag";
159 $first = 0;
160 } else {
161 $ver2 = "$ver-1";
162 }
163 } else {
164 $ver2 = $ver;
165 }
166 pb_log(3,"**Ver2:$ver2**\n");
167
168 if (($dtype eq "rpm") || ($dtype eq "fc")) {
169 print $OUTPUT "* $ndate $pbpackager->{$ENV{'PBPROJ'}} $ver2\n";
170 print $OUTPUT "- Updated to $ver\n";
171 }
172 if ($dtype eq "deb") {
173 if ($ver2 !~ /^[0-9]/) {
174 # dpkg-deb doesn't accept non digit versions.
175 # Prepending 0 in order to make updates easy hopefully
176 $ver2 =~ s/^/0/;
177 }
178 print $OUTPUT "$pbrealpkg ($ver2) unstable; urgency=low\n";
179 print $OUTPUT "\n";
180 }
181
182 $tmp = <INPUT>;
183 while ($tmp !~ /^$/) {
184 if ($dtype eq "deb") {
185 $tmp =~ s/^- //;
186 print $OUTPUT " * $tmp";
187 } elsif ($dtype eq "rpm") {
188 print $OUTPUT "$tmp";
189 } else {
190 chomp($tmp);
191 print $OUTPUT "$tmp<br>\n";
192 }
193 last if (eof(INPUT));
194 $tmp = <INPUT>;
195 }
196 print $OUTPUT "\n";
197
198 if ($dtype eq "deb") {
199 # Cf: http://www.debian.org/doc/debian-policy/ch-source.html#s-dpkgchangelog
200 print $OUTPUT " -- $pbpackager->{$ENV{'PBPROJ'}} $n2date\n\n\n";
201 }
202
203 last if (eof(INPUT));
204 last if ($dtype eq "announce");
205}
206close(INPUT);
207}
208
209
210=back
211
212=head1 WEB SITES
213
214The 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/>.
215
216=head1 USER MAILING LIST
217
218None exists for the moment.
219
220=head1 AUTHORS
221
222The Project-Builder.org team L<http://trac.project-builder.org/> lead by Bruno Cornec L<mailto:bruno@project-builder.org>.
223
224=head1 COPYRIGHT
225
226Project-Builder.org is distributed under the GPL v2.0 license
227described in the file C<COPYING> included with the distribution.
228
229=cut
230
2311;
Note: See TracBrowser for help on using the repository browser.