This file is indexed.

/usr/share/perl5/Sbuild/AspcudResolver.pm is in libsbuild-perl 0.67.0-2ubuntu7.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# ResolverBase.pm: build library for sbuild
# Copyright © 2005      Ryan Murray <rmurray@debian.org>
# Copyright © 2005-2008 Roger Leigh <rleigh@debian.org>
# Copyright © 2008      Simon McVittie <smcv@debian.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see
# <http://www.gnu.org/licenses/>.
#
#######################################################################

package Sbuild::AspcudResolver;

use strict;
use warnings;

use Sbuild::Base;
use Sbuild::ResolverBase;

BEGIN {
    use Exporter ();
    our (@ISA, @EXPORT);

    @ISA = qw(Exporter Sbuild::ResolverBase);

    @EXPORT = qw();
}

sub new {
    my $class = shift;
    my $conf = shift;
    my $session = shift;
    my $host = shift;

    my $self = $class->SUPER::new($conf, $session, $host);
    bless($self, $class);

    return $self;
}

sub install_deps {
    my $self = shift;
    my $name = shift;
    my $cross = shift;
    my @pkgs = @_;

    my $status = 0;
    my $session = $self->get('Session');
    my $dummy_pkg_name = 'sbuild-build-depends-' . $name. '-dummy';

    # Call functions to setup an archive to install dummy package.
    return 0 unless ($self->setup_apt_archive($dummy_pkg_name, @pkgs));
    return 0 unless (!$self->update_archive());

    $self->log_subsection("Install $name build dependencies (aspcud-based resolver)");
    #install aspcud first:
    my (@aspcud_installed_packages, @aspcud_removed_packages);
    if (!$self->run_apt('-y', \@aspcud_installed_packages, \@aspcud_removed_packages, 'install', 'apt-cudf', 'aspcud')) {
	$self->log_warning('Could not install aspcud!');
	goto cleanup;
    }
    $self->set_installed(@aspcud_installed_packages);
    $self->set_removed(@aspcud_removed_packages);

    # Install the dummy package
    my (@instd, @rmvd);
    $self->log("Installing build dependencies\n");
    my @apt_args = ("-yf", \@instd, \@rmvd);
    push @apt_args, 'install', $dummy_pkg_name;

    # It follows an explanation of the choice of the
    # APT::Solver::aspcud::Preferences setting
    #
    # Since it is assumed that the chroot only contains a base system and
    # build-essential, from which we assume that no package shall be removed,
    # we first minimize the number of removed packages. This means that if
    # there exist solutions that do not remove any packages, then those will
    # be evaluated further. The second optimization criteria is to minimize
    # the number of changed packages. This will take care that no packages of
    # the base system are unnecessarily upgraded to their versions from
    # experimental. It will also avoid any solutions that do need upgrades to
    # the experimental versions and keep the upgrades to a minimum if an
    # upgrade is strictly required. The third criteria minimizes the number of
    # new packages the solution installs. Here it can happen that installing a
    # dependency from experimental instead of unstable will lead to less new
    # packages. But this should only happen if the package in unstable depends
    # on more additional packages compared to the same package in
    # experimental. If the solutions are otherwise equal then as the last
    # criteria, the number of packages from experimental will be minimized by
    # maximizing the sum of the apt-pin values. Since packages from unstable
    # have a higher pin value than those in experimental, this should prefer
    # packages from unstable except if the solution from unstable is so large
    # compared to the one in experimental that their sum of pin values is
    # larger in which case the solution in experimental will be preferred.
    push @apt_args, '--solver',  'aspcud', '-o', 'APT::Solver::Strict-Pinning=false', '-o', 'APT::Solver::aspcud::Preferences=-removed,-changed,-new,+sum(solution,apt-pin)';

    if (!$self->run_apt(@apt_args)) {
	$self->log("Package installation failed\n");
	if (defined ($self->get('Session')->get('Session Purged')) &&
	    $self->get('Session')->get('Session Purged') == 1) {
	    $self->log("Not removing build depends: cloned chroot in use\n");
	} else {
	    $self->set_installed(@instd);
	    $self->set_removed(@rmvd);
	    goto package_cleanup;
	}
	return 0;
    }
    $self->set_installed(@instd);
    $self->set_removed(@rmvd);
    $status = 1;

  package_cleanup:
    if ($status == 0) {
	if (defined ($session->get('Session Purged')) &&
	    $session->get('Session Purged') == 1) {
	    $self->log("Not removing installed packages: cloned chroot in use\n");
	} else {
	    $self->uninstall_deps();
	}
    }

  cleanup:
    $self->cleanup_apt_archive();

    return $status;
}

1;