On Tue, Sep 25, 2012 at 08:58:07PM +0200, Micha?? G??rny wrote:
> On Tue, 25 Sep 2012 14:47:33 -0400
> Ian Stakenvicius <a...@gentoo.org> wrote:
> 
> > Based on the above I do expect the reference implementation would also
> > need to change.  I expect, for instance, that the PM's
> > metadata-handling would need to occur as normal even though none of
> > the package's phase functions would run, that is, *DEPEND
> > (realistically RDEPEND as that should be the only one affected here,
> > maybe PDEPEND too) and USE/PKGUSE would get updated.  Since portage
> > would not be re-emerging the package from the tree the original ebuild
> > would remain.
> 
> Yes, unless I'm missing something that's the intent. I will re-read
> and update the GLEP a bit sometime this week.

There's a fairly strong user interaction component here, along w/ 
potential nastyness for ebuilds (the proposal assume that a flag will 
be toggable in all cases within an ebuild if IUSE_RUNTIME specified; I 
guarantee instances where that fails can be found in the tree if a 
basic audit was done).  Additionally, this *is* useless if it's done 
in a form the UI an't display/handle; Ciaran may bitch about 
REQUIRED_USE's UI (which I knew going in was going to be 
problematic, just to be clear), but he's right on that front.

Additionally, this needs to be thought out how it'll interact with 
eclasses; what stacking, etc.  It doesn't cover the basics there to 
say the least.

Pretty much, this needs an implementation, partial conversion of the 
tree to demonstrate it.

Just to prove that fricking point; if you had tried implementing this, 
a full investigation of what's involved alone, you'd have spotted that 
the core of the proposal is based on a wrong assumption.

Portage doesn't write unfinalized DEPEND/RDEPEND/PDEPEND to the VDB.  

Literally, USE=-x RDEPEND="x? ( dev-util/diffball )", the RDEPEND in 
the vdb is going to be "".

The retort is "meh, that's minor"; the fact this was missed doesn't 
inspire confidence; further, aside from the fact that writing 
finalized deps to the VDB ie, an accurate form of the deps- they're 
locked at that point, a smart PM can take advantage of that to avoid 
reading USE/IUSE till it's needed.  This has measurable speed impact; 
if in doubt, rebuild a tree without it- that little trick I came up 
with first in pkgcore and it works on two fronts; 1) parsing is 
quicker, less nodes/smaller tree, 2) a smart PM can lazy load the 
USE/IUSE for performance gain.  This is why portage/pkgcore were 
intentionally modified to do this; paludis may do it, haven't looked.

My views, if the council is sane they'll slap it back down stating 
"prove it's a viable solution"; regardless of my views of the proposal 
(that it's the wrong way to solve it), it's not ready for an actual 
vote since approving it without actually verifying it could work makes 
things fucktons worse.


> > I expect, as a corollary to this, that a rebuild would be necessary if
> > (on-disk-IUSE_RUNTIME xor in-ebuild-IUSE_RUNTIME) was non-empty
> > (--newuse) or resulted in any flags that are in USE
> > (--reinstall=changed-use).  IMO this would be necessary to ensure the
> > local ebuild copy and all related metadata for it gets updated in vdb.
> 
> I think that's a common package manager logic and it's out of scope
> of the GLEP.

Portage doesn't do physical updates last I saw- if it did, well, 
that's fairly dangerous.  Only thing stored in the VDB is the ebuild 
and the environment dump, and the environment dump is what's ran from.

You cannot sanely pick part the dump and try to intermix current 
ebuilds; rephrasing, I'll kick in the head anyone who tries that.

We used to do that shit; it broke, frequently.  Env saving took a long 
time to get landed across the board- doing what you're proposing the 
PM should do breaks those guarantess and is a step back on that front 
alone.  Basically, not happening, if it is, a series of bugs need 
filing.

What portage does is that if it sees an ebuild in the tree that 
matches, it uses the deps from the tree; that's wholy different from 
what you think is happening in the vdb.

Additionally, portage is the only PM that does this; the rest of the 
PMs treat the vdb ebuild as a constant- without extreme care, or some 
form of insane deptree comparison, you can't just swap in what a new 
ebuild has and expect it to work in all cases.

~harring

Reply via email to