Skip to content

Commit

Permalink
Merge pull request #11632 from mlschroe/master
Browse files Browse the repository at this point in the history
[backend] use SCCs for the cycle handling code
  • Loading branch information
mlschroe committed Sep 17, 2021
2 parents f63871c + a543431 commit 82b67f0
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 5 deletions.
23 changes: 18 additions & 5 deletions src/backend/BSSched/Checker.pm
Original file line number Diff line number Diff line change
Expand Up @@ -805,8 +805,19 @@ sub expandandsort {
# now sort
print " sorting ".@$packs." packages\n";
my @cycles;
my @sccs;
delete $ctx->{'sccs'};
if (@$packs > 1) {
if (defined &BSSolv::depsort2) {
if (defined(&BSSolv::depsort2) && defined(&BSSolv::setdepsortsccs)) {
BSSolv::setdepsortsccs(2);
@$packs = BSSolv::depsort2(\%pdeps, $ctx->{'dep2src'}, \%pkg2src, \@cycles, @$packs);
BSSolv::setdepsortsccs(0);
if (@cycles) {
push @sccs, shift @cycles while @cycles && @{$cycles[0]};
shift @cycles;
}
$ctx->{'sccs'} = \@sccs;
} elsif (defined &BSSolv::depsort2) {
@$packs = BSSolv::depsort2(\%pdeps, $ctx->{'dep2src'}, \%pkg2src, \@cycles, @$packs);
} else {
@$packs = emulate_depsort2(\%pdeps, $ctx->{'dep2src'}, \%pkg2src, \@cycles, @$packs);
Expand Down Expand Up @@ -835,12 +846,14 @@ sub expandandsort {
for (values %pkg2src) {
$prunedsubpacks{$_} = $subpacks->{$_} if $subpacks->{$_};
}
BSUtil::store("$gdst/.:depends", "$gdst/:depends", {
my $depends = {
'pkgdeps' => \%pdeps,
'subpacks' => \%prunedsubpacks,
'pkg2src' => \%pkg2src,
'cycles' => \@cycles,
});
};
$depends->{'cycles'} = \@cycles if @cycles;
$depends->{'sccs'} = \@sccs if @sccs;
BSUtil::store("$gdst/.:depends", "$gdst/:depends", $depends);
%prunedsubpacks = ();
# remove old entries again
for (keys %pkgdisabled) {
Expand Down Expand Up @@ -954,7 +967,7 @@ sub checkpkgs {
$ctx->{'unfinished'} = \%unfinished;

# now build cychash mapping packages to all other cycle members
for my $cyc (@{$ctx->{'cycles'} || []}) {
for my $cyc (@{$ctx->{'sccs'} || $ctx->{'cycles'} || []}) {
next if @$cyc < 2; # just in case
my @c = map {@{$cychash{$_} || [ $_ ]}} @$cyc;
@c = BSUtil::unify(sort(@c));
Expand Down
3 changes: 3 additions & 0 deletions src/backend/BSXML.pm
Original file line number Diff line number Diff line change
Expand Up @@ -721,6 +721,9 @@ our $builddepinfo = [
[[ 'cycle' =>
[ 'package' ],
]],
[[ 'scc' =>
[ 'package' ],
]],
];

our $event = [
Expand Down
6 changes: 6 additions & 0 deletions src/backend/bs_repserver
Original file line number Diff line number Diff line change
Expand Up @@ -3384,6 +3384,12 @@ sub getbuilddepinfo {
my @cycles = map {{'package' => $_}} @{$depends->{'cycles'} || []};
my $res = { 'package' => \@res, };
$res->{'cycle'} = \@cycles if @cycles;
if (@{$depends->{'sccs'} || []}) {
my @sccs = @{$depends->{'sccs'} || []};
@$_ = sort @$_ for @sccs;
@sccs = sort {$a->[0] cmp $b->[0]} @sccs;
$res->{'sccs'} = [ map {{'package' => $_}} @sccs ];
}
return ($res, $BSXML::builddepinfo);
}

Expand Down

0 comments on commit 82b67f0

Please sign in to comment.