@@ -13,31 +13,28 @@ my $argv0 = 'depends';
1313sub solve {
1414 my ($targets , $types , $callback , $opt_verify , $opt_provides , $opt_installed ) = @_ ;
1515
16- # Retrieve AUR results (JSON -> dict -> extract depends -> repeat until none)
16+ # Retrieve AUR information
1717 my ($results , $pkgdeps , $pkgmap ) = recurse($targets , $types , $callback );
1818
1919 # Verify dependency requirements
2020 my ($dag , $dag_foreign ) = graph($results , $pkgdeps , $pkgmap , $opt_verify , $opt_provides );
21- my @removals = ();
21+
22+ # Targets to be removed from the graph
23+ my @to_prune ;
2224
2325 # Remove virtual dependencies from dependency graph (#1063)
24- if ($opt_provides ) {
25- my @virtual = keys %{$pkgmap };
26+ push @to_prune , keys %{$pkgmap } if $opt_provides ;
2627
27- # XXX: assumes <pkgmap> only contains keys with provides != pkgname
28- @removals = prune($dag , \@virtual );
29- }
3028 # Remove transitive dependencies for installed targets (#592)
31- # XXX: prune from $dag_foreign as well?
32- if (scalar @{$opt_installed }) {
33- @removals = prune($dag , $opt_installed );
34- }
35- # Remove packages no longer in graph from results
36- if (scalar @removals ) {
37- map { delete $results -> {$_ } } @removals ;
29+ push @to_prune , @{$opt_installed } if $opt_installed && @{$opt_installed };
30+
31+ if (@to_prune ) {
32+ my @removed = prune($dag , \@to_prune ); # mutates $dag
33+ delete @{$results }{@removed }; # drop from results
3834 }
39- # Return $dag for subsequent application of C<prune>
40- return $results , $dag , $dag_foreign ;
35+
36+ # Possible further pruning by the caller
37+ return ($results , $dag , $dag_foreign );
4138}
4239
4340# tsv output for usage with aur-sync (aurutils <=10)
0 commit comments