{ short => "O", arg => \$list_order,
code => sub {
die "Bad ordering character\n"
- if $list_order !~ /^[PSpsncbCW]+$/;
+ if $list_order !~ /^[PSpsncbCWT]+$/;
} },
message => { short => "m", arg => \$fail_reason },
# database is deprecated, use arch instead.
}
}
+if ($distribution eq 'any-priv') {
+ $privmode = 'yes';
+ $distribution = 'any';
+}
+if ($distribution eq 'any-unpriv') {
+ $privmode = 'no';
+ $distribution = 'any';
+}
+
my $schema_suffix = '';
$recorduser //= (not -t and $user =~ /^buildd_/);
if (isin( $op_mode, qw(list info)) && $distribution !~ /security/ && !$recorduser && !($privmode eq 'yes')) {
$op_mode = $category ? "set-failed" : "set-building"
if !$op_mode; # default operation
$distribution ||= "sid";
-if ($distribution eq 'any-priv') {
- $privmode = 'yes';
- $distribution = 'any';
-}
-if ($distribution eq 'any-unpriv') {
- $privmode = 'no';
- $distribution = 'any';
-}
undef $distribution if $distribution eq 'any';
if ($distribution) {
my @dists = split(/[, ]+/, $distribution);
sub sort_list_func {
my $map_funcs = {
- 'C' => ['<=>', sub { return (-1) * $_[0]->{'calprio'}; }],
- 'W' => ['<=>', sub { return (-1) * $_[0]->{'state_days'}; }],
- 'P' => ['<=>', sub { return (-1) * $_[0]->{'buildpri'}; }],
+ 'C' => ['<->', sub { return $_[0]->{'calprio'}; }],
+ 'W' => ['<->', sub { return $_[0]->{'state_days'}; }],
+ 'P' => ['<->', sub { return $_[0]->{'buildpri'}; }],
'p' => ['<=>', sub { return $prioval{$_[0]->{'priority'}}; }],
's' => ['<=>', sub { return $sectval{$_[0]->{'section'}}; }],
'n' => ['cmp', sub { return $_[0]->{'package'}; }],
'c' => ['<=>', sub { return ($_[0]->{'notes'} =~ /^(out-of-date|partial)/) ? 0: ($_[0]->{'notes'} =~ /^uncompiled/) ? 2 : 1; }],
'f' => ['<=>', sub { return $catval{ $_[0]->{'failed_category'} ? $_[0]->{'failed_category'}: "none" }; }],
'S' => ['<=>', sub { return $prioval{$_[0]->{'priority'}} > $prioval{'standard'}; }],
+ 'T' => ['<->', sub { return $_[0]->{'state_time'} % 86400;} ], # Fractions of a day
};
foreach my $letter (split( //, $list_order )) {
my $r;
+ $r = &{$map_funcs->{$letter}[1]}($b) <=> &{$map_funcs->{$letter}[1]}($a) if $map_funcs->{$letter}[0] eq '<->';
$r = &{$map_funcs->{$letter}[1]}($a) <=> &{$map_funcs->{$letter}[1]}($b) if $map_funcs->{$letter}[0] eq '<=>';
$r = &{$map_funcs->{$letter}[1]}($a) cmp &{$map_funcs->{$letter}[1]}($b) if $map_funcs->{$letter}[0] eq 'cmp';
return $r if $r != 0;
my $scale = $priomap->{'waitingdays'}->{'scale'} || 1;
$pkg->{'calprio'} += $days * $scale;
+ my $btime = max($pkg->{'anytime'}, $pkg->{'successtime'});
+ my $bhours = defined($btime) ? int($btime/3600) : ($priomap->{'buildhours'}->{'default'} || 2);
+ $bhours = $priomap->{'buildhours'}->{'min'} if $priomap->{'buildhours'}->{'min'} and $bhours < $priomap->{'buildhours'}->{'min'};
+ $bhours = $priomap->{'buildhours'}->{'max'} if $priomap->{'buildhours'}->{'max'} and $bhours > $priomap->{'buildhours'}->{'max'};
+ $scale = $priomap->{'buildhours'}->{'scale'} || 1;
+ $pkg->{'calprio'} -= $bhours * $scale;
+
$pkg->{'calprio'} += $pkg->{'permbuildpri'} if $pkg->{'permbuildpri'};
$pkg->{'calprio'} += $pkg->{'buildpri'} if $pkg->{'buildpri'};
'failed_category' => 'Failed-Category', 'notes' => 'Notes',
'distribution' => 'Distribution', 'old_failed' => 'Old-Failed',
'permbuildpri' => 'PermBuildPri', 'rel' => 'Rel',
- 'calprio' => 'CalculatedPri', 'state_days' => 'State-Days',
+ 'calprio' => 'CalculatedPri', 'state_days' => 'State-Days', 'state_time' => 'State-Time',
'successtime' => 'Success-build-time',
'anytime' => 'Build-time',
'extra_depends' => 'Extra-Dependencies',
sub get_readonly_source_info {
my $name = shift;
# SELECT FLOOR(EXTRACT('epoch' FROM age(localtimestamp, '2010-01-22 23:45')) / 86400) -- change to that?
- my $q = "SELECT rel, priority, state_change, permbuildpri, section, buildpri, failed, state, binary_nmu_changelog, bd_problem, version, package, distribution, installed_version, notes, failed_category, builder, old_failed, previous_state, binary_nmu_version, depends, extract(days from date_trunc('days', now() - state_change)) as state_days"
+ my $q = "SELECT rel, priority, state_change, permbuildpri, section, buildpri, failed, state, binary_nmu_changelog, bd_problem, version, package, distribution, installed_version, notes, failed_category, builder, old_failed, previous_state, binary_nmu_version, depends, extract(days from date_trunc('days', now() - state_change)) as state_days, floor(extract(epoch from now()) - extract(epoch from state_change)) as state_time"
. ", (SELECT max(build_time) FROM ".pkg_history_table_name()." WHERE pkg_history.package = packages.package AND pkg_history.distribution = packages.distribution AND result = 'successful') AS successtime"
. ", (SELECT max(build_time) FROM ".pkg_history_table_name()." WHERE pkg_history.package = packages.package AND pkg_history.distribution = packages.distribution ) AS anytime"
. ", extra_depends, extra_conflicts"
sub get_source_info {
my $name = shift;
return get_readonly_source_info($name) if $simulate;
- my $pkg = $dbh->selectrow_hashref('SELECT *, extract(days from date_trunc(\'days\', now() - state_change)) as state_days FROM ' .
+ my $pkg = $dbh->selectrow_hashref('SELECT *, extract(days from date_trunc(\'days\', now() - state_change)) as state_days, floor(extract(epoch from now()) - extract(epoch from state_change)) as state_time FROM ' .
table_name() . ' WHERE package = ? AND distribution = ?' .
' FOR UPDATE',
undef, $name, $distribution);
sub get_all_source_info {
my %options = @_;
- my $q = "SELECT rel, priority, state_change, permbuildpri, section, buildpri, failed, state, binary_nmu_changelog, bd_problem, version, package, distribution, installed_version, notes, failed_category, builder, old_failed, previous_state, binary_nmu_version, depends, extract(days from date_trunc('days', now() - state_change)) as state_days"
+ my $q = "SELECT rel, priority, state_change, permbuildpri, section, buildpri, failed, state, binary_nmu_changelog, bd_problem, version, package, distribution, installed_version, notes, failed_category, builder, old_failed, previous_state, binary_nmu_version, depends, extract(days from date_trunc('days', now() - state_change)) as state_days, floor(extract(epoch from now()) - extract(epoch from state_change)) as state_time"
# . ", (SELECT max(build_time) FROM ".pkg_history_table_name()." WHERE pkg_history.package = packages.package AND pkg_history.distribution = packages.distribution AND result = 'successful') AS successtime"
# . ", (SELECT max(build_time) FROM ".pkg_history_table_name()." WHERE pkg_history.package = packages.package AND pkg_history.distribution = packages.distribution ) AS anytime"
. ", successtime.build_time as successtime, anytime.build_time as anytime, extra_depends, extra_conflicts"