cache even more stuff.
avoid half the computation in conflicts. allows to specify packing-lists directly.
This commit is contained in:
parent
4041514197
commit
5d80851387
@ -1,6 +1,6 @@
|
|||||||
#! /usr/bin/perl
|
#! /usr/bin/perl
|
||||||
|
|
||||||
# $OpenBSD: find-plist-issues,v 1.4 2005/12/12 13:37:21 espie Exp $
|
# $OpenBSD: find-plist-issues,v 1.5 2006/02/12 16:33:35 espie Exp $
|
||||||
# Copyright (c) 2000-2005
|
# Copyright (c) 2000-2005
|
||||||
# Marc Espie. All rights reserved.
|
# Marc Espie. All rights reserved.
|
||||||
# Redistribution and use in source and binary forms, with or without
|
# Redistribution and use in source and binary forms, with or without
|
||||||
@ -141,29 +141,39 @@ package main;
|
|||||||
my $cache = {};
|
my $cache = {};
|
||||||
my $cache2 = {};
|
my $cache2 = {};
|
||||||
my @available = ();
|
my @available = ();
|
||||||
|
my $conflicts_cache = {};
|
||||||
|
|
||||||
sub find_a_conflict
|
sub find_a_conflict
|
||||||
{
|
{
|
||||||
my ($conflicts, $deps, $pkg, $pkg2) = @_;
|
my ($conflicts, $deps, $pkg, $pkg2) = @_;
|
||||||
return 0 if $pkg2 eq $pkg;
|
return 0 if $pkg2 eq $pkg;
|
||||||
|
my $h = "$pkg/$pkg2";
|
||||||
|
if (defined $conflicts_cache->{$h}) {
|
||||||
|
return $conflicts_cache->{$h};
|
||||||
|
}
|
||||||
|
|
||||||
if (defined $conflicts->{$pkg} && $conflicts->{$pkg}->conflicts_with($pkg2)) {
|
if (defined $conflicts->{$pkg} &&
|
||||||
|
$conflicts->{$pkg}->conflicts_with($pkg2)) {
|
||||||
|
$conflicts_cache->{$h} = 1;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (defined $deps->{$pkg}) {
|
if (defined $deps->{$pkg}) {
|
||||||
for my $dep (@{$deps->{$pkg}}) {
|
for my $dep (@{$deps->{$pkg}}) {
|
||||||
if (find_a_conflict($conflicts, $deps, $dep, $pkg2)) {
|
if (find_a_conflict($conflicts, $deps, $dep, $pkg2)) {
|
||||||
|
$conflicts_cache->{$h} = 1;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (defined $deps->{$pkg2}) {
|
if (defined $deps->{$pkg2}) {
|
||||||
for my $dep (@{$deps->{$pkg2}}) {
|
for my $dep (@{$deps->{$pkg2}}) {
|
||||||
if (find_a_conflict($conflicts, $deps, $pkg, $dep)) {
|
if (find_a_conflict($conflicts, $deps, $pkg, $dep)) {
|
||||||
|
$conflicts_cache->{$h} = 1;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$conflicts_cache->{$h} = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,7 +193,7 @@ sub compute_conflicts
|
|||||||
my $keepit = 0;
|
my $keepit = 0;
|
||||||
|
|
||||||
for my $pkg2 (@$l) {
|
for my $pkg2 (@$l) {
|
||||||
next if $pkg eq $pkg2;
|
next if $pkg le $pkg2;
|
||||||
if (!(find_a_conflict($conflicts, $deps, $pkg, $pkg2) ||
|
if (!(find_a_conflict($conflicts, $deps, $pkg, $pkg2) ||
|
||||||
find_a_conflict($conflicts, $deps, $pkg2, $pkg))) {
|
find_a_conflict($conflicts, $deps, $pkg2, $pkg))) {
|
||||||
$keepit = 1;
|
$keepit = 1;
|
||||||
@ -302,7 +312,7 @@ my $conflicts={};
|
|||||||
my $dephash={};
|
my $dephash={};
|
||||||
my $db = {};
|
my $db = {};
|
||||||
my $mtree = {};
|
my $mtree = {};
|
||||||
our ($opt_d, $opt_v, $opt_C, $opt_D);
|
our ($opt_d, $opt_v, $opt_C, $opt_D, $opt_f);
|
||||||
|
|
||||||
sub handle_plist
|
sub handle_plist
|
||||||
{
|
{
|
||||||
@ -331,9 +341,9 @@ sub handle_file
|
|||||||
handle_plist($plist);
|
handle_plist($plist);
|
||||||
}
|
}
|
||||||
|
|
||||||
set_usage('find-all-conflicts [-vCD] [-d plist_dir] [pkgname ...]');
|
set_usage('find-all-conflicts [-vCDf] [-d plist_dir] [pkgname ...]');
|
||||||
try {
|
try {
|
||||||
getopts('d:vCD');
|
getopts('d:vCDf');
|
||||||
} catchall {
|
} catchall {
|
||||||
Usage($_);
|
Usage($_);
|
||||||
};
|
};
|
||||||
@ -373,9 +383,13 @@ push(@available, map { s,.*/,,; s/\.tgz$//; } @pkgs);
|
|||||||
|
|
||||||
for my $pkgname (@ARGV) {
|
for my $pkgname (@ARGV) {
|
||||||
print STDERR "$pkgname\n";
|
print STDERR "$pkgname\n";
|
||||||
my $plist = OpenBSD::PackageLocator->grabPlist($pkgname);
|
if ($opt_f) {
|
||||||
next unless $plist;
|
handle_file($pkgname);
|
||||||
handle_plist($plist);
|
} else {
|
||||||
|
my $plist = OpenBSD::PackageLocator->grabPlist($pkgname);
|
||||||
|
next unless $plist;
|
||||||
|
handle_plist($plist);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
print "File problems:\n";
|
print "File problems:\n";
|
||||||
|
Loading…
Reference in New Issue
Block a user