Problems with +CONTENTS being messed up by pkg_delete -f

Stephen Montgomery-Smith stephen at
Wed Jul 18 21:32:18 UTC 2007

If you "pkg_delete -f" a package and then install the port again (but 
after it has been bumped up a version), then the +CONTENTS of ports that 
require the original port will be incorrect.  This apparently messes up 
programs like portmanager.  There is a sense in which one should never do 
"pkg_delete -f" and expect /var/db/pkg to keep its integrety - on the 
other hand this is exactly what "make deinstall" does.

My feeling is that the integrety of /var/db/pkg should be maintained 
across a "make deinstall" and subsequent "make install" of a bumped 
version of the port.

This is my suggestion.  When a "pkg_delete -f" is executed, it looks 
through +REQUIRED_BY of the port it is going to delete, and modifies the 
+CONTENTS file of each of them, replacing lines like
@pkgdep xineramaproto-1.1.2
@comment DEPORIGIN:x11/xineramaproto

to maybe something like
@comment DELDEPORIGIN:x11/xineramaproto

("deleted dependency origin").  A subsequent "make install" of 
x11/xineramaproto should look through the +CONTENTS of all entries in 
/var/db/pkg and change these lines to something like

@pkgdep xineramaproto-1.1.3
@comment DEPORIGIN:x11/xineramaproto

A further benefit of this approach is that one could also accurately 
reconstruct the +REQUIRED_BY of the port just reinstalled - right now this 
is left empty and thus inaccurate.

What do you guys think?  I know I could write the code for this quite 
quickly, but I want some feedback before I work on it.


More information about the freebsd-ports mailing list