Subject: Re: proof of concept pkg upgrading tool
To: None <tech-pkg@netbsd.org>
From: Martijn van Buul <martijnb@atlas.ipv6.stack.nl>
List: tech-pkg
Date: 09/08/2005 07:58:41
It occurred to me that Geert Hendrickx wrote in gmane.os.netbsd.devel.packages:
> That's easy to solve.  The essential thing is the ordering, and apparantly
> it's not ok yet.  

I don't claim to be a python expert, but judging by looking at the code, it 
seems that the dependency chain is built "bottom-up" using the +REQUIRED_BY
files in /var/db, and not using the contents of the pkgsrc dir. There appears
to be some code to inspect the pkgsrc dir, but it isn't called, probably 
because of speed considerations. Reading a file from /var/db is much faster
than calling 'make show-var VARNAME=DEPENDS', especially since every package
is inspected several times since there doesn't appear to be any caching of 
this data. There are several reasons why this isn't the most ideal 
solution:

1) It assumes that /var/db/pkg/*/+REQUIRED_BY is valid, but unfortunately
   this is cannot be guaranteed, especially when 'make replace' has ever
   been used, as it effectively zaps the +REQUIRED_BY files. You probably
   replaced pcre yourself at some point, and didn't update kdelibs afterwards.

   You could get around this by inspecting +CONTENTS as well, since this 
   provides the required dependencies for a given package, but it's 
   probably harder to parse.

2) It ignores newly introduced dependencies, since the dependency chain is
   built based on the dependencies of the previous, outdated, package. If
   a new version of a package needs additional dependencies, these will
   be ignored.

3) Similiarly, changes to /etc/mk.conf are ignored.