OpenPKG CVS Repository
http://cvs.openpkg.org/
____________________________________________________________________________
Server: cvs.openpkg.org Name: Michael van Elst
Root: /e/openpkg/cvs Email: [EMAIL PROTECTED]
Module: openpkg-src Date: 26-Jun-2003 14:04:43
Branch: HEAD Handle: 2003062613044300
Modified files:
openpkg-src/openpkg-tool
openpkg-build.pl
Log:
parse installed dependencies and rely on these to trigger updates to
reverse dependencies
Summary:
Revision Changes Path
1.87 +41 -23 openpkg-src/openpkg-tool/openpkg-build.pl
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: openpkg-src/openpkg-tool/openpkg-build.pl
============================================================================
$ cvs diff -u -r1.86 -r1.87 openpkg-build.pl
--- openpkg-src/openpkg-tool/openpkg-build.pl 26 Jun 2003 11:00:38 -0000 1.86
+++ openpkg-src/openpkg-tool/openpkg-build.pl 26 Jun 2003 12:04:43 -0000 1.87
@@ -420,27 +420,28 @@
#
sub get_installed () {
my(%map);
- my(@l) = run("$RPM --provides -qa");
- my($p);
+ my(@l,$p);
my($nam,$val,%options);
- my($vs,$rec,@provides);
+ my($vs,$rec,@list);
my($name,$version,$release);
+ my($req);
- @provides = ();
+ @l = run("$RPM --provides -qa");
+ @list = ();
foreach (@l) {
- $p = parse_provides($_);
+ next unless $p = parse_provides($_);
# is this an option ?
if (defined $p->{with}) {
$options{$p->{prefix}}->{$p->{with}} = $p->{version};
- push @provides, $p;
+ push @list, $p;
next;
}
# is this a virtual target ?
$vs = vs($p);
if ($vs eq '') {
- push @provides,$p;
+ push @list,$p;
next;
}
@@ -448,7 +449,7 @@
$version = defined $p->{version} ? $p->{version} : '*';
$release = defined $p->{release} ? $p->{release} : '*';
- push(@provides, {
+ push(@list, {
name => $name,
version => $version,
release => $release
@@ -459,18 +460,20 @@
name => $name,
version => $version,
release => $release,
- PROXY => $p->{proxy}
+ PROXY => $p->{proxy},
+ depends => [],
+ keeps => []
};
- foreach (@provides) {
+ foreach (@list) {
push @{$map{$_->{name}}->{vs($_)}}, $rec;
}
- @provides = ();
+ @list = ();
}
- if (@provides) {
- print "# ATTENTION: ",scalar(@provides)," froods found\n"
+ if (@list) {
+ print "# ATTENTION: ",scalar(@list)," froods found\n"
}
#
@@ -485,6 +488,27 @@
}
}
+ @l = run("$RPM --qf '%{NAME} %{VERSION} %{RELEASE}[ .%{REQUIRENAME}
.%{REQUIREFLAGS:depflags} .%{REQUIREVERSION}]\n' -qa");
+ @list = ();
+ foreach (@l) {
+ ($name,$version,$release,$req) = /^(\S+)\s+(\S+)\s+(\S+)\s*(.*?)\s*$/;
+ while ($req =~ /\.(\S+)\s+\.(\S*)\s+\.(\S*)/g) {
+ $p = parse_depends("$1 $2 $3");
+ next if $p->{name} =~ /^rpmlib\(/;
+
+ $vs = vs({ version => $version, release => $release});
+ $p = { cond => '', value => $p };
+ foreach $rec (@{$map{$name}->{$vs}}) {
+ push @{$rec->{depends}}, $p;
+ push @{$rec->{keeps}}, $p;
+ }
+ }
+ }
+
+ if (@list) {
+ print "# ATTENTION: ",scalar(@list)," fnords found\n"
+ }
+
return \%map;
}
@@ -496,7 +520,7 @@
my($env, $i) = @_;
my($r) = $env->{'repository'};
my($pkg, %dep, %dlist, %rev);
- my(@vers,$t,$t1,$t2,$with,$name);
+ my(@vers,$t,$t1,$with,$name);
my($d,$k,%d,$old,%name);
print "# computing reverse dependencies\n";
@@ -509,21 +533,15 @@
}
#
- # get forward dependencies from repository packages
- # but blend in options from installed packages
+ # get forward dependencies from installed packages
#
# dep{a}{b} is true if b depends directly on a
# dlist{a} is list of packages that depend on a
#
- @vers = get_versions($r->{$pkg}, sub { 1; });
+ @vers = get_versions($i->{$pkg}, sub { 1; });
foreach (@vers) {
- foreach $t (@{$r->{$pkg}->{$_}}) {
+ foreach $t (@{$i->{$pkg}->{$_}}) {
$with = get_with($t);
- $t2 = find_target($t->{name}, $i);
- if ($t2) {
- $with = { %$with };
- override_options($with, get_with($t2), '');
- }
$d = target_attribute($t, $env, 'depends', $with);
$k = target_attribute($t, $env, 'keeps', $with);
next unless @$d || @$k;
@@ .
______________________________________________________________________
The OpenPKG Project www.openpkg.org
CVS Repository Commit List [EMAIL PROTECTED]