[buildd-tools-devel] Bug#631060: Bug#631060: Bug#631060: Bug#631060: sbuild: Please highlight lintian failures
Roger Leigh
rleigh at codelibre.net
Sun Jun 19 21:36:52 UTC 2011
On Sun, Jun 19, 2011 at 09:06:02PM +0100, Roger Leigh wrote:
> On Sun, Jun 19, 2011 at 09:54:07PM +0200, Cyril Brulebois wrote:
> > Roger Leigh <rleigh at codelibre.net> (19/06/2011):
> > > I've committed a patch for this onto git master. Lintian passes are
> > > highlighted in green, failures in red.
> >
> > Thanks.
> >
> > > If there are any other parts of the build log you would like
> > > highlighting in the same way, it's just a list of regexes in
> > > Sbuild::Build::open_build_log that are checked in the logger
> > > process.
> >
> > It might be a good idea to highlight packages not targetting unstable
> > (remember ifupdown? :p), so some random colour for the “Distribution:
> > experimental” (and others), maybe?
>
> That would be very useful. It's easy enough to get the
> distribution from the changelog and check if it's different.
> Passing it to the logger process will be a little harder
> though--it's a coprocess which receives the output from
> sbuild, dpkg-buildpackage and all their child processes,
> and then sends it on to the logfile, terminal etc.
> I'll have to consider how best to pass the information over
> since we don't know at the time the logger is started.
diff --git a/NEWS b/NEWS
index 4f2967c..4cffeb1 100644
--- a/NEWS
+++ b/NEWS
@@ -9,7 +9,11 @@ configuration.
* Major changes in 0.62.4:
- None.
+ 1) The distribution in the build summary is coloured yellow if it
+ does not match the distribution in the changelog. This is to
+ indicate that there may be a potential problem, such as
+ potentially uploading a package intended for experimental to
+ unstable by building for unstable by accident.
* Major changes in 0.62.3:
diff --git a/debian/changelog b/debian/changelog
index 82dc0ae..f5be697 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -3,8 +3,13 @@ sbuild (0.62.4-1) unstable; urgency=low
* New release.
* Failing lintian checks are highlighted in red, and passes in
green (Closes: #631060).
+ * The distribution in the build summary is coloured yellow if it
+ does not match the distribution in the changelog. This is to
+ indicate that there may be a potential problem, such as
+ potentially uploading a package intended for experimental to
+ unstable by building for unstable by accident.
- -- Roger Leigh <rleigh at debian.org> Sun, 19 Jun 2011 20:41:35 +0100
+ -- Roger Leigh <rleigh at debian.org> Sun, 19 Jun 2011 22:34:01 +0100
sbuild (0.62.3-1) unstable; urgency=low
diff --git a/lib/Sbuild/Build.pm b/lib/Sbuild/Build.pm
index 8ec7684..d31c1e1 100644
--- a/lib/Sbuild/Build.pm
+++ b/lib/Sbuild/Build.pm
@@ -473,6 +473,17 @@ sub run_chroot_session {
DIR => $session->get('Location') . "/build"));
$self->set('Build Dir', $session->strip_chroot_path($self->get('Chroot Build Dir')));
+
+ # Log colouring
+ $self->build_log_colour('red', '^E: ');
+ $self->build_log_colour('yellow', '^W: ');
+ $self->build_log_colour('green', '^I: ');
+ $self->build_log_colour('red', '^Status:');
+ $self->build_log_colour('green', '^Status: successful$');
+ $self->build_log_colour('red', '^Lintian:');
+ $self->build_log_colour('green', '^Lintian: pass$');
+
+ # Log filtering
my $filter;
$filter = $self->get('Build Dir') . '/' . $self->get('DSC Dir');
$filter =~ s;^/;;;
@@ -483,6 +494,7 @@ sub run_chroot_session {
$filter = $session->get('Location');
$filter =~ s;^/;;;
$self->build_log_filter($filter , 'CHROOT');
+
# Need tempdir to be writable and readable by sbuild group.
$self->check_abort();
$session->run_command(
@@ -1335,6 +1347,28 @@ sub build {
}
}
+ my $pipe = $self->get('Session')->pipe_command(
+ { COMMAND => ['dpkg-parsechangelog'],
+ USER => $self->get_conf('BUILD_USER'),
+ PRIORITY => 0,
+ DIR => $self->get('Session')->strip_chroot_path($dscdir) });
+ my $clog = do { local $/; <$pipe> };
+ close($pipe);
+ if ($?) {
+ $self->log("FAILED [dpkg-parsechangelog died]\n");
+ return 0;
+ }
+
+ my ($name) = $clog =~ /^Source:\s*(.*)$/m;
+ my ($version) = $clog =~ /^Version:\s*(.*)$/m;
+ my ($dists) = $clog =~ /^Distribution:\s*(.*)$/m;
+ my ($urgency) = $clog =~ /^Urgency:\s*(.*)$/m;
+ my ($date) = $clog =~ /^Date:\s*(.*)$/m;
+ if ($dists ne $self->get_conf('DISTRIBUTION')) {
+ $self->build_log_colour('yellow',
+ "^Distribution: " . $self->get_conf('DISTRIBUTION') . "\$");
+ }
+
if ($self->get_conf('BIN_NMU') || $self->get_conf('APPEND_TO_VERSION')) {
if (!$self->get_conf('MAINTAINER_NAME')) {
Sbuild::Exception::Build->throw(error => "No maintainer specified.",
@@ -1347,23 +1381,6 @@ sub build {
my $text = do { local $/; <F> };
close( F );
- my $pipe = $self->get('Session')->pipe_command(
- { COMMAND => ['dpkg-parsechangelog'],
- USER => $self->get_conf('BUILD_USER'),
- PRIORITY => 0,
- DIR => $self->get('Session')->strip_chroot_path($dscdir) });
- my $clog = do { local $/; <$pipe> };
- close($pipe);
- if ($?) {
- $self->log("FAILED [dpkg-parsechangelog died]\n");
- return 0;
- }
-
- my ($name) = $clog =~ /^Source:\s*(.*)$/m;
- my ($version) = $clog =~ /^Version:\s*(.*)$/m;
- my ($dists) = $clog =~ /^Distribution:\s*(.*)$/m;
- my ($urgency) = $clog =~ /^Urgency:\s*(.*)$/m;
- my ($date) = $clog =~ /^Date:\s*(.*)$/m;
my $NMUversion = $self->get('Version');
if (!open( F, ">$dscdir/debian/changelog" )) {
@@ -1585,9 +1602,9 @@ sub build {
$self->get('Build End Time')-$self->get('Build Start Time'));
$self->write_stats('install-download-time',
$self->get('Install End Time')-$self->get('Install Start Time'));
- my $date = strftime("%Y%m%d-%H%M",localtime($self->get('Build End Time')));
+ my $finish_date = strftime("%Y%m%d-%H%M",localtime($self->get('Build End Time')));
$self->log_sep();
- $self->log("Build finished at $date\n");
+ $self->log("Build finished at $finish_date\n");
my @space_files = ("$dscdir");
@@ -2051,6 +2068,16 @@ sub build_log_filter {
}
}
+sub build_log_colour {
+ my $self = shift;
+ my $regex = shift;
+ my $colour = shift;
+
+ if ($self->get_conf('LOG_COLOUR')) {
+ $self->log($self->get('COLOUR_PREFIX') . $colour . ':' . $regex . "\n");
+ }
+}
+
sub open_build_log {
my $self = shift;
@@ -2058,6 +2085,8 @@ sub open_build_log {
my $filter_prefix = '__SBUILD_FILTER_' . $$ . ':';
$self->set('FILTER_PREFIX', $filter_prefix);
+ my $colour_prefix = '__SBUILD_COLOUR_' . $$ . ':';
+ $self->set('COLOUR_PREFIX', $colour_prefix);
my $filename = $self->get_conf('LOG_DIR') . '/' .
$self->get('Package_SVersion') . '-' .
@@ -2105,8 +2134,10 @@ sub open_build_log {
my $verbose = $self->get_conf('VERBOSE');
my $log_colour = $self->get_conf('LOG_COLOUR');
my @filter = ();
+ my @colour = ();
my ($text, $replacement);
my $filter_regex = "^$filter_prefix(.*):(.*)\$";
+ my $colour_regex = "^$colour_prefix(.*):(.*)\$";
my @ignore = ();
while (<STDIN>) {
@@ -2117,6 +2148,11 @@ sub open_build_log {
$replacement = "«$replacement»";
push (@filter, [$text, $replacement]);
$_ = "I: NOTICE: Log filtering will replace '$text' with '$replacement'\n";
+ } elsif (m/$colour_regex/) {
+ my ($colour, $regex);
+ ($colour,$regex)=($1,$2);
+ push (@colour, [$colour, $regex]);
+ $_ = "I: NOTICE: Log colouring will colour '$regex' in $colour\n";
} else {
# Filter out any matching patterns
foreach my $pattern (@filter) {
@@ -2136,13 +2172,11 @@ sub open_build_log {
if ($nolog || $verbose) {
if (-t $saved_stdout && $log_colour) {
my $colour = 'reset';
- $colour = 'red' if (m/^E: /);
- $colour = 'yellow' if (m/^W: /);
- $colour = 'green' if (m/^I: /);
- $colour = 'red' if (m/^Status:/);
- $colour = 'green' if (m/^Status: successful$/);
- $colour = 'red' if (m/^Lintian:/);
- $colour = 'green' if (m/^Lintian: pass$/);
+ foreach my $pattern (@colour) {
+ if (m/$$pattern[0]/) {
+ $colour = $$pattern[1];
+ }
+ }
print $saved_stdout color $colour;
}
diff --git a/lib/Sbuild/Conf.pm b/lib/Sbuild/Conf.pm
index da3cad1..e9be547 100644
--- a/lib/Sbuild/Conf.pm
+++ b/lib/Sbuild/Conf.pm
@@ -362,6 +362,13 @@ sub setup ($) {
DEFAULT => 1,
HELP => 'Filter variable strings from log messages such as the chroot name and build directory'
},
+ 'LOG_COLOUR' => {
+ TYPE => 'BOOL',
+ VARNAME => 'log_colour',
+ GROUP => 'Logging options',
+ DEFAULT => 1,
+ HELP => 'Colour log messages such as critical failures, warnings and sucess'
+ },
'LOG_DIR_AVAILABLE' => {
TYPE => 'BOOL',
GROUP => '__INTERNAL',
--
.''`. Roger Leigh
: :' : Debian GNU/Linux http://people.debian.org/~rleigh/
`. `' Printing on GNU/Linux? http://gutenprint.sourceforge.net/
`- GPG Public Key: 0x25BFB848 Please GPG sign your mail.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.alioth.debian.org/pipermail/buildd-tools-devel/attachments/20110619/cc812d14/attachment.pgp>
More information about the Buildd-tools-devel
mailing list