Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 18 Jul 2007 15:56:49 -0500 (CDT)
From:      Stephen Montgomery-Smith <stephen@math.missouri.edu>
To:        ports@freebsd.org, hackers@freebsd.org
Subject:   Problems with +CONTENTS being messed up by pkg_delete -f
Message-ID:  <20070718154452.B3091@math.missouri.edu>

next in thread | raw e-mail | index | archive | help

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.

Stephen




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070718154452.B3091>