Proposal for a new repository layout
Juan Manuel Palacios
jmpp at macports.org
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
-jmpp
PS: Indexing the "testing" tree is a secondary problem that can be
solved easily with minor tweaks to the IndexRegen.sh script.
More information about the macports-dev
mailing list