Description: Improve logging for multiarch builds
 Fix issue of logging before logs are set up by rearranging code
 forbetter separation of logging from actions.
 .
 sbuild (0.64.3-2) unstable; urgency=medium
 .
   * Ensure foreign-arch logging is correct (Closes: #763635)
Author: Wookey <wookey@debian.org>
Bug-Debian: http://bugs.debian.org/763635
Last-Update: 2014-10-08

--- sbuild-0.64.3.orig/lib/Sbuild/Build.pm
+++ sbuild-0.64.3/lib/Sbuild/Build.pm
@@ -804,6 +804,7 @@ sub fetch_source_files {
     my $pkg = $self->get('Package');
     my $ver = $self->get('OVersion');
     my $host_arch = $self->get('Host Arch');
+    my $resolver = $self->get('Dependency Resolver');
 
     my ($dscarchs, $dscpkg, $dscver, @fetched);
 
@@ -964,8 +965,9 @@ sub fetch_source_files {
     $build_conflicts_indep =~ s/\n\s+/ /g if defined $build_conflicts_indep;
 
 
+    $self->log_subsubsection("Check foreign Arches");
     # Check for cross-arch dependencies
-    # parse $build_depends* for explicit :arch and add the foreign arch, as needed
+    # parse $build_depends* for explicit :arch and add the foreign arches, as needed
     sub get_explicit_arches
     {
         my $visited_deps = pop;
@@ -974,7 +976,7 @@ sub fetch_source_files {
         my %set;
         for my $dep (@deps)
         {
-            # I make sure to break any recursion in the deps data structure
+            # Break any recursion in the deps data structure (is this overkill?)
             next if !defined $dep;
             my $id = ref($dep) ? refaddr($dep) : "str:$dep";
             next if $visited_deps->{$id};
@@ -1008,13 +1010,17 @@ sub fetch_source_files {
     my $added_any_new;
     for my $foreign_arch(@foreign_arches)
     {
-        my $resolver = $self->get('Dependency Resolver');
         $resolver->add_foreign_architecture($foreign_arch);
         $added_any_new = 1;
     }
-    $self->run_chroot_update() if $added_any_new;
 
+    my @keylist=keys %{$resolver->get('Initial Foreign Arches')};
+    $self->log( 'Initial Foreign Architectures: ');
+    $self->log( join ' ', @keylist, "\n");
+    $self->log('Foreign Architectures in build-deps: ');
+    $self->log( join ' ', @foreign_arches, "\n\n");
 
+    $self->run_chroot_update() if $added_any_new;
 
 
 
@@ -1042,6 +1048,7 @@ sub fetch_source_files {
 
     debug("Arch check ok ($host_arch included in $dscarchs)\n");
 
+
     $self->set('Build Depends', $build_depends);
     $self->set('Build Depends Arch', $build_depends_arch);
     $self->set('Build Depends Indep', $build_depends_indep);
@@ -1961,6 +1968,7 @@ sub add_stat {
 
 sub generate_stats {
     my $self = shift;
+    my $resolver = $self->get('Dependency Resolver');
 
     $self->add_stat('Job', $self->get('Job'));
     $self->add_stat('Package', $self->get('Package'));
@@ -1969,6 +1977,10 @@ sub generate_stats {
     $self->add_stat('Machine Architecture', $self->get_conf('ARCH'));
     $self->add_stat('Host Architecture', $self->get('Host Arch'));
     $self->add_stat('Build Architecture', $self->get('Build Arch'));
+    my @keylist=keys %{$resolver->get('Initial Foreign Arches')};
+    push @keylist, keys %{$resolver->get('Added Foreign Arches')};
+    my $foreign_arches = join ' ', @keylist;
+    $self->add_stat('Foreign Architectures', $foreign_arches );
     $self->add_stat('Distribution', $self->get_conf('DISTRIBUTION'));
     $self->add_stat('Space', $self->get('This Space'));
     $self->add_stat('Build-Time',
--- sbuild-0.64.3.orig/lib/Sbuild/ResolverBase.pm
+++ sbuild-0.64.3/lib/Sbuild/ResolverBase.pm
@@ -58,7 +58,7 @@ sub new {
     # Typically set by Sbuild::Build, but not outside a build context.
     $self->set('Host Arch', $self->get_conf('HOST_ARCH'));
     $self->set('Build Arch', $self->get_conf('BUILD_ARCH'));
-    $self->set('Initial Foreign Arches', $self->get_foreign_architectures());
+    $self->set('Initial Foreign Arches', {});
     $self->set('Added Foreign Arches', {});
 
     my $dummy_archive_list_file = $session->get('Location') .
@@ -94,8 +94,8 @@ sub setup {
 	print $F "APT::Install-Recommends false;\n";
 
 	if ($self->get('Host Arch') ne $self->get('Build Arch')) {
-	    print $F "APT::Architecture=".$self->get('Host Arch');
-	    $self->log("Adding APT::Architecture ".$self->get('Host Arch')." to the apt config");
+	    print $F 'APT::Architecture=' . $self->get('Host Arch');
+	    $self->log('Adding APT::Architecture ' . $self->get('Host Arch') . ' to the apt config');
 	}
 	if ($self->get('Split')) {
 	    print $F "Dir \"$chroot_dir\";\n";
@@ -161,8 +161,6 @@ sub get_foreign_architectures {
         return {};
     }
 
-    $self->log("Initial foreign arches: '@existing_foreign_arches'\n");
-
     my %set;
     foreach (@existing_foreign_arches) { $set{$_} = 1; }
     return \%set;
@@ -193,8 +191,9 @@ sub add_foreign_architecture {
         $self->log_error("Failed to set dpkg foreign-architecture config\n");
         return 0;
     }
+    debug("Added foreign arch: $arch\n") if $arch;
+
     $added_foreign_arches->{$arch} = 1;
-    $self->log("Adding dpkg foreign-architecture $arch\n");
     return 1;
 }
 
@@ -223,6 +222,9 @@ sub setup_dpkg {
 
     my $session = $self->get('Session');
 
+    # Record initial foreign arch state so it can be restored
+    $self->set('Initial Foreign Arches', $self->get_foreign_architectures());
+
     if ($self->get('Host Arch') ne $self->get('Build Arch')) {
 	add_foreign_architecture($session, $self->get('Host Arch'))
     }
@@ -738,8 +740,8 @@ sub setup_apt_archive {
 	  USER => 'root',
 	  DIR => '/' });
     if ($?) {
-	$self->log_error("E: Failed to set " . $self->get_conf('BUILD_USER') .
-			 ":sbuild ownership on $dummy_gpghome\n");
+	$self->log_error('E: Failed to set ' . $self->get_conf('BUILD_USER') .
+			 ':sbuild ownership on $dummy_gpghome\n');
 	return 0;
     }
     if (!(-d $dummy_archive_dir || mkdir $dummy_archive_dir, 0775)) {
