[buildd-tools-devel] Bug#570465: Sort apt policy versions by priority, then by version
Modestas Vainius
modestas at vainius.eu
Fri Feb 19 00:43:34 UTC 2010
Package: libsbuild-perl
Version: 0.59.0-1
Severity: wishlist
File: /usr/share/perl5/Sbuild/BuildDepSatisfierBase.pm
Tags: patch
Hello,
(this bug is actually against not-yet-released version 0.59.1-1).
The patch and commit log are below. It applies on the top of the current
buildd/master branch.
Author: Modestas Vainius <modax at debian.org>
Date: Fri Feb 19 02:07:11 2010 +0200
Sort apt policy versions by priority, then by version.
In my opinion, it makes sense to sort package versions by priority first
(versions with greater priority will be prefered over versions with lower
priority if they both satify the dependency). If priority is the same, then
higher versions will be prefered over lower ones (i.e. like previous behaviour
for all versions).
This change allows buildd administrators to configure preferences for multiple
repositories via standard apt_preferences(5) file in the chroot. What is more,
this is similar to how aptitude 0.6 orders solutions in the same tier.
Signed-off-by: Modestas Vainius <modax at debian.org>
diff --git a/lib/Sbuild/BuildDepSatisfierBase.pm b/lib/Sbuild/BuildDepSatisfierBase.pm
index cc170cd..7d6c08d 100644
--- a/lib/Sbuild/BuildDepSatisfierBase.pm
+++ b/lib/Sbuild/BuildDepSatisfierBase.pm
@@ -359,6 +359,7 @@ sub get_apt_policy {
my $builder = $self->get('Builder');
my @interest = @_;
my $package;
+ my $ver;
my %packages;
my $pipe =
@@ -373,9 +374,30 @@ sub get_apt_policy {
$package=$1 if /^([0-9a-z+.-]+):$/;
$packages{$package}->{curversion}=$1 if /^ {2}Installed: ([0-9a-zA-Z-.:~+]*)$/;
$packages{$package}->{defversion}=$1 if /^ {2}Candidate: ([0-9a-zA-Z-.:~+]*)$/;
- push @{$packages{$package}->{versions}}, "$2" if /^ (\*{3}| {3}) ([0-9a-zA-Z-.:~+]*) 0$/;
+ if (/^ (\*{3}| {3}) ([0-9a-zA-Z-.:~+]*) 0$/) {
+ $ver = "$2";
+ push @{$packages{$package}->{versions}}, $ver;
+ }
+ if (/^ {5} *(-?\d+) /) {
+ my $prio = $1;
+ if (!defined $packages{$package}->{priority}{$ver} ||
+ $packages{$package}->{priority}{$ver} < $prio) {
+ $packages{$package}->{priority}{$ver} = $prio;
+ }
+ }
}
close($pipe);
+ # Resort by priority keeping current version order if priority is the same
+ use sort "stable";
+ foreach my $package (keys %packages) {
+ my $p = $packages{$package};
+ if (exists $p->{priority}) {
+ $p->{versions} = [ sort(
+ { -($p->{priority}{$a} <=> $p->{priority}{$b}) } @{$p->{versions}}
+ ) ];
+ }
+ }
+ no sort "stable";
die $self->get_conf('APT_CACHE') . " exit status $?\n" if $?;
return \%packages;
-- System Information:
Debian Release: squeeze/sid
APT prefers unstable
APT policy: (500, 'unstable'), (500, 'testing'), (101, 'experimental')
Architecture: amd64 (x86_64)
Kernel: Linux 2.6.32-2-amd64 (SMP w/1 CPU core)
Locale: LANG=lt_LT.UTF-8, LC_CTYPE=lt_LT.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages libsbuild-perl depends on:
ii adduser 3.112 add and remove users and groups
ii apt 0.7.25.3 Advanced front-end for dpkg
ii dctrl-tools 2.14 Command-line tools to process Debi
ii devscripts 2.10.61 scripts to make the life of a Debi
ii dpkg-dev 1.15.5.6 Debian package development tools
ii exim4 4.71-3 metapackage to ease Exim MTA (v4)
ii exim4-daemon-light [mail-tran 4.71-3 lightweight Exim MTA (v4) daemon
ii libfilesys-df-perl 0.92-3+b1 Module to obtain filesystem disk s
ii perl 5.10.1-11 Larry Wall's Practical Extraction
ii perl-modules 5.10.1-11 Core Perl modules
ii schroot 1.4.0-1 Execute commands in a chroot envir
libsbuild-perl recommends no packages.
libsbuild-perl suggests no packages.
-- no debconf information
More information about the Buildd-tools-devel
mailing list