Proposal for a new repository layout

Juan Manuel Palacios jmpp at
Wed Apr 25 12:40:37 PDT 2007

On Apr 25, 2007, at 7:25 AM, Paul Guyot wrote:

> On Apr 25, 2007, at 9:02 AM, Ryan Schmidt wrote:
>>> 	I propose we start with those two trees and fill them up as  
>>> necessary, the first one being the existing trunk/dports which  
>>> would *have* to stay in sync with base/branches/release_x_y and  
>>> the second being a testbed for Portfiles that need unreleased  
>>> features and syntax to function (ports would be added to it as  
>>> needed, no need to mirror every single category and port in ports/ 
>>> released if the corresponding Portfile doesn't pack anything  
>>> different). I would like to make clear that our released Vs.  
>>> testing split would be with respect to our *Portfiles* and not to  
>>> the projects we port; that is, emacs and emacs-devel would still  
>>> be in the released tree as long as their Portfiles are in sync  
>>> with MacPorts released code. This is contrary to the a la Fink  
>>> "stable" Vs. "unstable" model, which we all know condemns stable  
>>> to always be incredibly out of date and pushes everyone to use  
>>> the unstable tree, while alerting users their computers could  
>>> catch fire.
>> Having "released" and "testing" ports trees sound like a good idea.
> I disagree. What's the point of putting portfiles in testing?
> Who's going to move them to release when they are ready?
> How installation will pick them?

	The testing ports tree would just be a facility offered by the  
project to developers who, like you, develop new features in trunk  
and/or bug fixes and, naturally, want and need to test them in  
Portfiles. Such Portfiles break an MP installation based on released  
code as we've seen one too many times already, so we can't have them  
in the shipping ("released") ports tree as they are useless there.  
Here's where my "testing" tree proposal comes in, it's name (or  
whatever is more descriptive of its purpose) being simply a label  
claiming "these portfiles are meant to work with trunk, so don't  
complain if you get errors". As I explained in my original message,  
this tree would not be some kind of Secret Service Agent keeping a  
detailed eye on each of our Portfiles (that is, "not another road  
block to get things into users hands"), some kind of prerequisite  
every single Portfile would have to meet and go through before being  
considered "stable" and moved to the "released" tree after some  
approval is granted.... no, not at all, not at all what I meant.

	On the contrary, consider "testing" as a tree open to our entire  
developer community for testing MacPorts itself, putting in Portfiles  
therein whatever you want and need, thus lifting every single  
restriction you may ever encounter with Portfiles in "released". We  
would not ship the "testing" tree by default, just make it available  
for those knowledgeable enough to configure their sources to fetch  
it. We would not (or at least that's not my intent) hold Portfiles in  
"testing" with different (newer) versions for the project they  
install with respect to the corresponding Portfile in "released", the  
difference between the trees simply being the features each Portfile  
sports: emacs and emacs-devel would both be in "released" as long as  
they both work with a released version of MP; one of them, whichever,  
could be duplicated into the "testing" tree to test a new *MacPorts*  
feature. I can't stress this enough, this is not an a la Fink  
"stable" Vs. "unstable" trees proposal.

	Also, the "testing" tree would not mirror "released" either with  
respect to every single category and portdir in the latter, they  
would simply be created in the former as needed. If you want to test  
a new MP feature in one of your Portfiles you would be free to do  
whatever you need in the "testing", and otherwise there would be no  
need to add it there, it would simply live in "released", as every  
single other Portfile.

	In short, "released" is our existing dports tree renamed, "testing"  
is where anyone would be free to play in an open fashion. If you keep  
a local tree to play with new features in trunk, your testing would  
be limited to you and anyone you send your development Portfiles to;  
if you put them in dports things break, as they already have; if you  
make them available to everyone through an alternate tree where you  
can feel free to play as you like, wouldn't that, at least  
potentially, translate into wider testing?

	To put it in other words, nothing of what we now have would  
change..... I'm just proposing we *also* offer something new, an  
alternate and public tree for the purpose of testing new MP features  
and syntax.

> Releases are already a big pain, which explains why we have them so  
> infrequently.

	Not recently,we've done 4 releases in less than a month. I am aware  
I personally wasn't too convinced about it in the first place, but I  
didn't oppose it either and your point that we could/should do more  
frequent releases was proven.

> Making this more pain will only make things worse.

	Nothing of what I am proposing here slows down the release process  
in any way. As already explained, the "testing" tree is not a  
requirement our Portfiles have to go through to only then cascade  
down into "released", so why would it make things worse?

> I think we should postpone the versioning of the Portfile APIs and  
> condition it to the existence of a remote repository (through mpwa  
> for example).

	The versioning of the API is something that could help us in many  
ways, I believe, but I agree this could be a different thread and  
that it could be postponed for various reasons (though I don't  
understand the ones you explain here). As for mpwa, I admit that I  
haven't done my homework in looking into it, but other than that I  
don't have a single idea about its roadmap. Tomorrow? Next month?  
MacPorts 2.0? What I'm proposing is something simple and easy that  
can help us *now* solve a problem we've had for long.

> And until we have continuous integration, I'm in favor of simply  
> dropping the very idea of releases.

	As I said at one point already, I get the feeling you forget what a  
pain the days of users using ToT were, how reduced our user base was  
because of that among other reasons and how difficult providing  
support was. I have to be adamant about this, I am completely opposed  
to the idea of dropping releases. Do we need to streamline our  
release process even further....? Yes, I agree and I would like to  
see it happen. Should someone quicker than me step in to do releases?  
I wouldn't be opposed to that... and, in fact, wasn't, as James  
already did. Dropping releases as some kind of panacea for our  
problems? Couldn't disagree more!

> The 1.4.x series show that base/ is globally extremely stable, that  
> major failures are introduced by active developers who are able to  
> fix them very quickly. It also proved how wrong the release  
> candidate workflow is.

	I disagree that the release candidate workflow is "wrong". That it  
doesn't serve us in the best way possible because we don't have a  
large enough testing community? I agree to that, but that does not  
mean the workflow is inherently flawed. Hey, testing MacPorts is in  
itself a difficult task, as it implies to some extent testing as many  
ports as possible, and that's a problem we're still to solve, albeit  
a somewhat different one.

> Active users who might test release candidates and trunk/ do not  
> run 10.3 (this means that testing time is infinite), while we are  
> able to fix bugs in base/ and ship fixes within 48 hours (this  
> means the update time is epsilon).

	Testing on Panther is difficult and a pain, yes. I was practically  
the only 10.3 committer and tester and, unfortunately, not any longer  
because I recently upgraded to Tiger. I'm getting the feeling we'll  
need to start thinking about dropping Panther support sooner than  
latero, as many Open Source projects already have. This is, however,  
a different problem, I believe.

> And I definitely do not understand the interest of changing the  
> repository layout, except for the joy of requiring every developer  
> who has uncommitted code to move their files and fix their code  
> manually to adapt to the new layout and names.

	trunk/base makes no sense for us, that's an svn adaptation of  
something we inherited from the old cvs layout that does not apply  
any longer. We're only versioning base, not our ports nor www nor  
docs, so why have all that in trunk? It's confusing at best. I say  
pull 'em out of there and put them elsewhere, as already suggested.  
We'd end up having only trunk/base, but then again, we're only  
versioning base! So why have {trunk,branches,tags} only for base?  
Makes more sense to have base/{trunk,branches,tags}, thus emphasizing  
base is the only thing we version. Am I an order freak? Yes, I am,  
that's no secret. But then again, I think we can all agree order is  
only beneficial. Can we envision the need of ever versioning anything  
else? Yes? OK, lets keep trunk/{base,something_else} and  
{branches,tags} parallel to trunk. If not... what's the use of the  
now somewhat gratuitous extra (and loner) "base" directory inside  
trunk to get to our sources? I don't see it.

	No, my motivation is not disturbing developers simply for the joy of  
it, not by far.

> Juan, I realize that I'm just proposing to simply cancel most of  
> your job within the project. And I realize this is partly why you  
> are so reluctant from dropping releases

	You are assuming that, I did not say nor imply that anywhere, and  
you're wrong. I am reluctant to dropping releases for a myriad of  
other, valid, reasons.

> you consider your job as the member of portmgr responsible for  
> releases is to be conservative against us, the liberal developers.

	One of my responsibilities is to insure our shipping product meets  
at least some quality standard, not to counterbalance anyone per se.

> Well, from my liberal developer's point of view, your contribution  
> to the project is mostly beyond this perceived job and your GSoC  
> proposal seemed much more useful for the project than this new  
> repository layout idea. But this is just my opinion, and I do not  
> mean to dictate anyone's behavior.

	I do not either, I appreciate highly all the work you do for the  
project and would never try to block or oppose it. On the contrary,  
what I'm trying here is to find better ways to streamline the  
workflow for our entire developer community, within certain  
parameters (as open as possible) that allow us to ensure necessary  
traits like quality control, versioning base being one of them.

> Paul


PS: Indexing the "testing" tree is a secondary problem that can be  
solved easily with minor tweaks to the script.

More information about the macports-dev mailing list