On 04 Sep 2006, at 12:32, Martin Costabel wrote:
> Benjamin Reed wrote:
>> I did some investigation of the node exists errors, and I think
>> they are
>> completely bogus (at least, while I agree we shouldn't have gotten to
>> that point in the code path in the first place, I believe it is
>> entirely
>> legal to ignore the error).
>>
>> I've done some Data::Dumper debugging, and basically I think what's
>> happening is as it's going through and making the list of packages to
>> investigate for dependencies, it's somehow hitting a package twice.
>> When it's time to add it to the hash of things to check, it says "I
>> already have this in the hash" and it bombs.
>>
>> The stuff that goes into the hash is generated like this:
>>
>> @{$deps->{$dname}}[ PKGNAME, PKGOBJ, PKGVER, OP, FLAG ] = (
>> $dname, Fink::Package->package_by_name($dname),
>> $dp, $OP_INSTALL, 2
>> );
>>
>> ...by the time it comes up, there is no way this information won't
>> always be identical to what's in the hash already.
>
> Hmm, if it were identical, it wouldn't get there at all. There is an
> earlier test
>
> if (exists $deps{$dname} and $deps{$dname}->[PKGVER] == $dp) {
> ...
> next DEPLOOP;
> }
>
> So if it's really the same version, it quits before coming to the
> error.
> The "node exists" error comes from
>
> if ($dp->is_installed()) {
> $dname = $dp->get_name();
> if (exists $deps{$dname}) {
> die "Internal error: node for $dname already exists\n";
> }
>
> So it kicks in only if there is a different version already in the dep
> list, and the version on the dep list that is currently examined
> corresponds to the installed version. As I see it, if you simply
> ignore
> this, you may then hand a conflict to dpkg that it cannot handle.
>
> IIRC, years ago we used to have many more of these "node exists"
> errors,
> and the code was fixed to remove the bogus ones. Now it is extremely
> rare and chances are that if it happens, there is really something
> wrong
> with the dependencies.
>
>> "Fink::Package->package_by_name($dname)" interrogates the index,
>> which
>> is already up-to-date and unchanging by the time this loop is
>> encountered, so at worst, we will be checking postgresql81-dev if it
>> matches the dependencies multiple times.
>>
>> I think the "node exists" die should instead be replaced with "next".
>>
>> Empirical testing with a reproducible error on my dev system implies
>> this is safe, as well. :)
>
> Is this reproducible by others as well?
It has nothing to do with Provides ? (maybe because they are
unversioned ?)
A vague memory is that, if I played a bit too much with Provides, I
easily created such examples...
JF
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Fink-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/fink-devel