On Saturday 22 January 2005 16:20 CET Chris Gianelloni wrote:
> On Sat, 2005-01-22 at 01:12 -0600, Daniel Goller wrote:
> > do i have to meddle in an eclass to be able to point out that one
> > version that is never constand used by many versions of ebuilds cant be
> > a good thing? im not sure what it is you are after here
>
> Funny.  Over on the games team, we have a single eclass that we use for
> pretty much everything, and we haven't had problems like this.  In fact,
> it greatly simplifies our lives, being 4 developers that maintain
> several hundred packages.  The simple rule is that we don't commit
> things that will break the tree.  If we are forced to make changes that
> could break the tree, then we change the affected packages and revision
> bump it after doing extensive testing.

I have not completely followed this discussion and actually don't want to 
get too much involved in it either.  But I noticed that what you wrote 
above is actually an argument *for* (some kind of) versioned eclasses.


An example:
I've got that great binary only game games-foo/foobar-1.0 installed.  Works 
great for me.  Now there's a new version foobar-1.1 available and you 
create an ebuild for it.  Very cool, but while you did so, you also did 
(for some reason or another) some tree-breaking change to the games.eclass.  
A few weeks later there's another new version foobar-1.2 for which you also 
create a new ebuild.

At that point I decide to upgrade from foobar-1.0 to foobar-1.2 because that 
one might fix that very nasty bug I encountered.  But alas! after the 
upgrade the game is broken because beginning with foobar-1.1 the game 
doesn't work with my binary-only Radeon 10001 driver.  Ok, no problem, 
foobar-1.0 is still in the tree, I can package-mask everything >1.0 and go 
back to that version.

But since you changed the games.eclass, the foobar-1.0.ebuild is now b0rked.  
And such I can't play foobar anymore.  If you had created a games-r2.eclass 
and used that one for foobar-1.1 and later, everything would still work 
fine.


Somebody noted that eclasses are like libs and must stay "binary 
compatible" (as far as one can say that with a bunch of bash functions) to 
the old versions.  So with the current version-less concept you have no way 
to do *ever* tree-breaking changes to an eclass, even if you revision-bump 
all affected ebuilds.

OTOH is Daniel's proposal a bit overkill in my eyes.  A single integer 
version number would be enough to circumvent the problems.  All eclasses 
would start at version v=1 and if you really need to do a BIC change to the 
eclass, you bump it to v++ and use that one starting from there.  BC 
changes don't affect the version at all.  Old versions could be purged from 
the tree after, say, one year after the last ebuild which uses that version 
is gone from the tree.

Somebody else said that he uses some special code paths in some classes to 
cope with certain ebuilds.  Removing any of those would also be a BIC 
change of the eclass and required a version bump.


Ok, some much for my 2cents, as I said I don't really want to get too 
involved in this discussion (for me everything worked fine till now with 
the current concept but I rarely downgrade apps, at least not ones which 
rely on complicated eclasses).

Cheers,
Malte

-- 
[SGT] Simon G. Tatham: "How to Report Bugs Effectively"
      <http://www.chiark.greenend.org.uk/~sgtatham/bugs.html>
[ESR] Eric S. Raymond: "How To Ask Questions The Smart Way"
      <http://www.catb.org/~esr/faqs/smart-questions.html>

--
[email protected] mailing list

Reply via email to