Package: sbuild
Version: 0.59.1-1
Severity: wishlist
Tags: patch
Currently a cloned schroot is always purged, which makes debugging build
failures impossible. The attached patch keeps the session, if
PURGE_BUILD_DIRECTORY or PURGE_BUILD_DEPS is set to 'successful' and the
build failes.
The attached patch is against current git HEAD
361d275e9bf200f3bdacd78b7ecf267847d20a18
Jan-Marek Glogowski
commit e39bf2f5ab939304524347042c01d3a87fccf7ef
Author: Jan-Marek Glogowski <glo...@fbihome.de>
Date: Mon Jan 18 10:31:54 2010 +0100
Don't always purge cloned session
If PURGE_BUILD_DIRECTORY or PURGE_BUILD_DEPS is set to 'successful'
and the build fails, keep the cloned session for inspection and
mention the session id to use "schroot -c <id> -e" to close the
session.
diff --git a/lib/Sbuild/Build.pm b/lib/Sbuild/Build.pm
index 2cb5b4a..cccdce2 100644
--- a/lib/Sbuild/Build.pm
+++ b/lib/Sbuild/Build.pm
@@ -229,6 +229,7 @@ sub run {
$chroot_info = Sbuild::ChrootInfoSudo->new($self->get('Config'));
}
+ my $end_session = 1;
my $session = $chroot_info->create($self->get_conf('DISTRIBUTION'),
$self->get_conf('CHROOT'),
$self->get_conf('ARCH'));
@@ -392,37 +393,52 @@ sub run {
}
cleanup_packages:
- # Purge package build directory
- if ($self->get_conf('PURGE_BUILD_DIRECTORY') eq 'always' ||
- ($self->get_conf('PURGE_BUILD_DIRECTORY') eq 'successful' &&
- $self->get_status() eq 'successful')) {
- $self->log("Purging " . $self->get('Chroot Build Dir') . "\n");
- my $bdir = $self->get('Session')->strip_chroot_path($self->get('Chroot Build Dir'));
- $self->get('Session')->run_command(
- { COMMAND => ['rm', '-rf', $bdir],
- USER => 'root',
- CHROOT => 1,
- PRIORITY => 0,
- DIR => '/' });
- }
-
- # Purge installed packages
- if (defined ($session->get('Session Purged')) &&
- $session->get('Session Purged') == 1) {
- $self->log("Not removing build depends: cloned chroot in use\n");
+ my $purge_build_directory =
+ ($self->get_conf('PURGE_BUILD_DIRECTORY') eq 'always' ||
+ ($self->get_conf('PURGE_BUILD_DIRECTORY') eq 'successful' &&
+ $self->get_status() eq 'successful')) ? 1 : 0;
+ my $purge_build_deps =
+ ($self->get_conf('PURGE_BUILD_DEPS') eq 'always' ||
+ ($self->get_conf('PURGE_BUILD_DEPS') eq 'successful' &&
+ $self->get_status() eq 'successful')) ? 1 : 0;
+ my $is_cloned_session = (defined ($session->get('Session Purged')) &&
+ $session->get('Session Purged') == 1) ? 1 : 0;
+
+ # Purge non-cloned session
+ if ($is_cloned_session) {
+ $self->log("Not cleaning session: cloned chroot in use\n");
+ $end_session = 0
+ if ($purge_build_directory == 0 || $purge_build_deps == 0);
} else {
- if ($self->get_conf('PURGE_BUILD_DEPS') eq 'always' ||
- ($self->get_conf('PURGE_BUILD_DEPS') eq 'successful' &&
- $self->get_status() eq 'successful')) {
+ if ($purge_build_directory) {
+ # Purge package build directory
+ $self->log("Purging " . $self->get('Chroot Build Dir') . "\n");
+ my $bdir = $self->get('Session')->strip_chroot_path($self->get('Chroot Build Dir'));
+ $self->get('Session')->run_command(
+ { COMMAND => ['rm', '-rf', $bdir],
+ USER => 'root',
+ CHROOT => 1,
+ PRIORITY => 0,
+ DIR => '/' });
+ }
+
+ if ($purge_build_deps) {
+ # Removing dependencies
$self->get('Dependency Resolver') && $self->get('Dependency Resolver')->uninstall_deps();
} else {
$self->log("Not removing build depends: as requested\n");
}
}
$self->get('Dependency Resolver') && $self->get('Dependency Resolver')->remove_srcdep_lock_file();
+
cleanup_close:
- # End chroot session
- $session->end_session();
+ if ($end_session == 1) {
+ # End chroot session
+ $session->end_session();
+ }
+ else {
+ $self->log("Keeping session: " . $session->get('Session ID') . "\n");
+ }
$session = undef;
$self->set('Session', $session);