Skip to content
Snippets Groups Projects
Commit 00534b8e authored by Alad Wenter's avatar Alad Wenter
Browse files

Depends.pm: remove targets recursively with prune()

parent 6f5321c7
No related branches found
No related tags found
No related merge requests found
......@@ -56,10 +56,11 @@ unless(caller) {
}
# Prune ignored targets
my $removals = prune(\%dag, $opt_ignore);
my @removals = prune(\%dag, $opt_ignore);
if (defined $ENV{'AUR_DEBUG'}) {
say STDERR "$argv0: targets removed: " . join(" ", @{$removals});
#if (defined $ENV{'AUR_DEBUG'}) {
if (scalar @removals) {
say STDERR "$argv0: targets removed: " . join(" ", @removals);
}
# Print remaining dependency pairs as pkgbase
......
......@@ -18,23 +18,23 @@ sub solve {
# Verify dependency requirements
my ($dag, $dag_foreign) = graph($results, $pkgdeps, $pkgmap, $opt_verify, $opt_provides);
my $removals = [];
my @removals = ();
# Remove virtual dependencies from dependency graph (#1063)
if ($opt_provides) {
my @virtual = keys %{$pkgmap};
# XXX: assumes <pkgmap> only contains keys with provides != pkgname
$removals = prune($dag, \@virtual);
@removals = prune($dag, \@virtual);
}
# Remove transitive dependencies for installed targets (#592)
# XXX: prune from $dag_foreign as well?
if (scalar @{$opt_installed}) {
$removals = prune($dag, $opt_installed);
@removals = prune($dag, $opt_installed);
}
# Remove packages no longer in graph from results
if (scalar @{$removals}) {
map { delete $results->{$_} } @{$removals};
if (scalar @removals) {
map { delete $results->{$_} } @removals;
}
# Return $dag for subsequent application of C<prune>
return $results, $dag, $dag_foreign;
......
## 20.3
* `perl`
+ recursively remove targets with `Depends::prune` (#1184)
## 20.2
* `aur-build`
......
......@@ -253,6 +253,10 @@ Parameters:
sub prune {
my ($dag, $installed) = @_;
if (not scalar @{$installed}) {
return ();
}
my @removals;
# Remove reverse dependencies for installed targets
......@@ -265,22 +269,27 @@ sub prune {
}
}
}
for my $dep (keys %{$dag}) {
if (not scalar keys %{$dag->{$dep}}) {
delete $dag->{$dep}; # remove targets that are no longer required
delete $dag->{$dep}; # Remove targets that are no longer required
push(@removals, $dep);
}
my $found = first { $dep eq $_ } @{$installed};
if (defined $found) {
delete $dag->{$dep}; # remove targets that are installed
delete $dag->{$dep}; # Remove targets that are installed
push(@removals, $dep);
}
}
# Remove non-unique elements
@removals = keys %{{ map { $_ => 1 } @removals }};
# Remove dependencies recursively (#1184)
push(@removals, prune($dag, \@removals));
# XXX: return complement dict instead of array
return \@removals;
return @removals;
}
# vim: set et sw=4 sts=4 ft=perl:
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment