Summary
Starting with Drupal core 6.x, branches in the contributions CVS repository will always contain the --N part of the branch name, to remind people that each release series belongs in its own branch.. For example, the repository would prevent maintainers from creating a DRUPAL-6 branch. They would be forced to create a DRUPAL-6--1 branch for the 6.x-1.* release series for their contribution.
Background and motivation
It's been just over 6 months since the new release system went live on d.o (guess we'll have to stop calling it "new" one of these days). One of the only design decisions I was opposed to, but was forced to accept during the implementation of the system, was this special case for the branch name that corresponds with core (e.g. the DRUPAL-5 branch). This design decision continues to haunt me, and continues to confuse our maintainers.
According to the documentation and the release system code, these branches are only to be used for the 1.* release series compatible with the same version of core. So, DRUPAL-5 is supposed to only be for the 5.x-1.* releases of a given contribution. If you start work on a 5.x-2.* series, you're supposed to use a different branch.
The original justification for this special case was based on a few assumptions:
- 2.* and other release branches would be very rare, obscure special cases
- Maintainers were so used to just adding that branch that they'd revolt if they had to change their practice
- Users would be too confused that the same branch of core didn't exist in contrib
- For power users, deploying sites from CVS was the best way to keep their sites up to date, and having different branches for core and contrib would be too much of a burden for them
I'm here to argue that all of those assumptions have been proven wrong by the last 6 months of experience with the release system:
- If you look at the the top downloaded modules, a large number of them have 5.x-2.* or later releases, either as the default downloads, or at least under active development (OG, views, panels, etc).
- Maintainers already have had to under-go some changes in how they manage their code. Many are taking advantage of multiple branches of development for the same version of core, to have a safe place to add new features without tying themselves to an unreleased version of core. If anything, the special case for DRUPAL-5 is confusing and destructive for them (see below), not something that's making their lives easier and less error-prone.
- Given the release system, it seems that our users are used to deploying sites based on official releases whenever possible. When there were no official releases, deploying from CVS made sense, but these days, it seems that's becoming more rare. Also, if there was *only* ever a single branch for core and contrib, it made sense for them to match. But points #1 and #2 are already complicating life for people trying to deploy from CVS, since they can't assume the same branch across all of core and the contribs they care about, anyway. I've certainly seen plenty of evidence in the issue queues of users demanding official releases from reluctant maintainers, not complaining about the specifics of what branches the code lives on in the CVS repo.
- The update_status module has already seen wide-spread adoption, and it's moving into core for D6. I've even worked out a design for a command-line tool that works with update_status.module to upgrade a site via CVS to the latest recommended official releases (regardless of what branches they're on) of all modules you've installed on your site.
Harm done by the existing special case
The special case for DRUPAL-5 is actively confusing people. Since I can't write code to automatically audit every commit and make sure people are committing to the right branch, there's nothing except documentation and expectations to stop people from committing all kinds of things to the DRUPAL-5 branch.
For example, Organic Groups (OG) underwent a long period where Moshe was developing the 5.x-2.*, and then the 5.x-3.* releases, and committing all the patches to both HEAD and DRUPAL-5. So, if a critical security bug was found in the 5.x-1.0 version, it would basically be impossible to release a 5.x-1.1 with *only* the security fix, since the DRUPAL-5 branch is now full of new features that not every OG site could necessarily afford the risk of instability to upgrade to. Luckily, the 5.x-2.* series is now stable (no new features) and the recommended version, and I just helped Moshe make a clean DRUPAL-5--2 branch for this release series that only has the 5.x-2.* code and bug fixes.
What the change would entail
The CVS access control scripts would forbid contrib maintainers from creating a DRUPAL-6 branch. once they port their code to the D6 API, when they're ready to make a stable release, they'd have to create the DRUPAL-6--1 branch for the 6.x-1.* series. The only changes to the extensive handbook documentation would be to simplify them and remove (or at least, deprecate into a "the way we used to do things" section) the text that had to explain this special case. In a few small ways, it would also simplify the patch for moving update_status into D6 core, since it wouldn't need to handle this special case, either.
While I can't control what gets committed to each branch via software, I can enforce what branches get created in the first place. The other good news is that now's the perfect time for this change, since there's no DRUPAL-6 branch anywhere in our repositories yet. Of course, what's done is done, and the current DRUPAL-5 branches would all stay as they are -- nothing that exists now would be renamed or changed, this proposal is simply about D6 and beyond. The other good news is that this is a trivial configuration tweak to the CVS access control scripts -- making this change requires writing no new code.
Normally, I'd list the pros and cons so folks could weigh the decision, but I honestly can't think of a single, legitimate con to this proposal. So, if someone has an objection, let's hear it. Otherwise, I'm planning to make this change to the access control scripts in relatively short time, and then work on updating the CVS documentation in the handbook soon thereafter.
Thanks,
-Derek
Comments
Comment #1
styro commented+1
After using the release system with 3 different 4.7 branches for my project, I can see how other module maintainers have taken advantage of multiple branches much more than anticipated. I think this has been a good thing.
I'm all for the new explicit "one obvious way" approach (very 'Zen of Python' like).
As an aside: I'm guessing there wouldn't be anything in the project module(s) stopping branches starting at something like DRUPAL-6--3 rather than -6--1 , correct? The reason for this possibly silly/redundant question is that the branch number could almost be used as a module version number independently of the Drupal version. eg DRUPAL-5--3 and DRUPAL-6--3 both contain the same featureset written to different Drupal versions, whereas DRUPAL-6--4 contains new features, and the Drupal 7 branches might start from DRUPAL-7--4. I already see some well maintained modules like Panels and Views taking this approach with trying to keep different version numbers roughly comparable across Drupal releases.
Comment #2
dwwI'm guessing there wouldn't be anything in the project module(s) stopping branches starting at something like DRUPAL-6--3 rather than -6--1 , correct?
Right. Nothing stops you from doing this.
Comment #3
pwolanin commented+1 from me if you think it's an improvmenet- this is, in a way, easier to remember anyhow.
Comment #4
Anonymous (not verified) commented+1 for KISS.
Comment #5
moshe weitzman commentedthis proposal is a nice improvement. i was one of those who kept using DRUPAL-5 branch for multiple releases. this policy would make it obvious that this is not proper.
Comment #6
eaton commentedAgreed. I released a couple of my modules in the DRUPAL-5 branch and this makes it obvious that it's not The Right Way.
It is a hassle for those of us who are used to CVS updating an entire copy of /contrib, for a particular branch of Drupal, but in the long run that is less and less helpful. The only REALLY valuable use case for it is grepping all of contrib to see if a core API change will break many modules. ;)
Comment #7
kbahey commentedThis is the part that concerns me.
Right now, I checkout all of the contributions tag DRUPAL-5 in one directory, and do the same for HEAD and DRUPAL-4-7.
For my modules, I tag (but not branch) release tags from that directory (e.g. DRUPAL-5--1-1) and keep going. When the time comes for another release, I tag DRUPAL-5--1-2, then DRUPAL-5--2-1, ...etc.
The reason for going for tags and not branches is less complexity, and if I ever need to checkout a particular previous release, I can specify the tag that corresponds to the release, and can even branch on it if the need arises.
This saves me having a checkout for DRUPAL-5--1-1, DRUPAL-5--1-2, ... and DRUPAL-5--2-1 each in a separate directory.
This proposal has merits of course, and dww feels strongly about it. But it will complicate the scenario above, and N directories will be needed.
Sorry dww (and others who support this), but I am seeing that we are moving towards more complexity for the release system. At least too soon.
Comment #8
dww@kbahey -- sorry, don't take it personally, but you perfectly illustrate the confusion between branches, tags, releases, and release series that this proposal will help clarify. Furthermore, the example of how you're currently (mis)using branches further illustrates why this needs to be fixed. ;)
A) Our CVS repository prohibits you from making a DRUPAL-5--1-1 branch. All official releases are always based on tags. So, you're not special -- everyone makes their official releases from tags, and no one should ever have to check out separate copies of all their release tags. You can always just checkout from a tag if you want the code from a specific release. This has been true since day 0 of the release system. Nothing about the current proposal changes this fact.
B) This part of your message: "and can even branch on it if the need arises" is in fact dangerously wrong. :( Given your example, once you've started adding 5.x-2.* code and release tags (e.g. DRUPAL-5--2-1) to your DRUPAL-5 branch, if you ever need to make a DRUPAL-5--1-3 release, you're screwed. The contrib repo doesn't let you go back and add a DRUPAL-5--1 branch, since that's forbidden, since that's what DRUPAL-5 is for (ugh!). So, if there's a security bug in 5.x-1.2, your users are totally screwed, and must update to your new-feature-filled, unstable 5.x-2.* series, since there's no way (without a HUGE ammount of work) to undo everything you've incorrectly put in DRUPAL-5 branch that really belonged in HEAD or a DRUPAL-5--2 branch.
C) Aside from the fact your use-case is wrong, it's confusing for other people trying to monitor contrib via CVS branches. All the docs and existing conventions (for good reason) tell you that "The DRUPAL-5 branch is for the 5.x-1.* series of any given contribution". However, if maintainers do it your way, if someone wants to check out the latest 5.x-1.* stable code for all of contrib, they're going to be wrong when they get to your modules, since your DRUPAL-5 branch doesn't follow the conventions and is full of 5.x-2.* or even later code.
Please, believe me, this new approach is more simple and most importantly less error-prone than what we have now. There should be no freedom in how you use the branch for your 6.x-1.* code. It should always be for 6.x-1.* code, and nothing else. There should be a 1-to-1 mapping of release series to CVS branches. This proposal achieves that. What we have now is chaos.
The more people try to defend the status quo, the more convinced I am it must be overthrown immediately. ;) I only wish I was more confident and insistent on this point when first rolling out the release system and the DRUPAL-5 branches. Oh well, live and learn.
Comment #9
dww@eaton:
It is a hassle for those of us who are used to CVS updating an entire copy of /contrib, for a particular branch of Drupal, but in the long run that is less and less helpful. The only REALLY valuable use case for it is grepping all of contrib to see if a core API change will break many modules. ;)
Sorry, but this is also not true. ;) Even without this proposal, you can't just checkout DRUPAL-5, grep and learn everything. You also have to checkout DRUPAL-5--2, and perhaps DRUPAL-5--3, too, just to be sure. (You can always stop in over at http://drupal.org/node/97084 (from the CVS handbooks) to see all the existing branches in all of contrib, so you can be sure what exists if you're ever trying an exhaustive search). This proposal doesn't change that (unchangeable) fact. All it does is makes it more deterministic that when you checkout DRUPAL-6--1 you'll be getting the 6.x-1.* stable releases of everything. That's it. Doesn't increase or decrease the number of workspaces you have to checkout if you want to grep. It just makes them more obviously named and easier to navigate. ;)
And if you buy now, you'll also get this amazing set of chef's knives, normally a $50 value... yours absolutely free! ;)
[Apologies to all the international readers who haven't been subjected to terrible U.S. infomercials and who therefore don't get the joke -- I just couldn't resist, given how much I'm sounding like a salesperson in here]. ;)
Comment #10
kbahey commentedI know what tags and branches are as far as CVS is concerned. However, as implemented in Drupal, I could have you enlighten me! I could use another microwave session ...
Glad to hear that it is as simple as the way I am using it, and it would not change.
That was based on the (now faulty) assumption that releases should be branches, and not mere tags. Since that is not a valid way to use it (and I never used it that way), that is a moot point now.
So, all you are proposing is that DRUPAL-6 (for contrib) should be DRUPAL-6--1, and (as happens today for DRUPAL-X) that should be a branch off HEAD, then everything after that would be a tag? That is fine by me. It means I need to do some adjustment to the auto checkout script that I have (since core and contrib have different tags), but that is minor. Up to here, there is no problem.
What I don't like is that DRUPAL-6--2 is forced to be yet another branch, and although its tag is shared with other contrib modules, there is no commonality between them except in name, and we suddenly have lots of branches each in a separate directory for code version DRUPAL-X.
Yes, I can checkout only my module and have N directories for it, for example:
But, 2bits maintain some 24 modules (last I checked), and you can see how this can get out of hand.
I understand the motivation behind having each DRUPAL-X being a branch, but don't want that to be forced on everyone who does not need/like it.
Retroactively branching solves part of this (do it only if/when you need it).
And yes, I tried to reread the proposal(s) and got lost quickly. Part of the problem is that things have a lot of background/domain knowledge that is clear to you, but not to the masses (me being one of them). So, brevity helps. Cliff's notes version if you will for the unwashed masses.
Well, I can understand that, but we are moving into an overly complicated system, and we will pay the price of that down the road in maintenance and flexibility.
Comment #11
dwwDidn't mean to put anyone's head in a microwave. I'm just trying to illustrate the folly of our current approach (to support my proposal to fix it). ;)
Again, I must point out where you're wrong. ;) (And again, please don't take it personally, I mean this with the best possible intentions and good nature).
Nothing forces this. You can use HEAD as your pseudo DRUPAL-6--2 branch until you actually need HEAD for something else. In fact, this is the recommended way I've clearly documented in the CVS handbook:
http://drupal.org/node/17570#HEAD
There are 2 vitally important things in common with the other modules: 1) they're all compatible with 6.x core, and 2) they all have 6.x-2.* as the version numbers. What more do you expect to be in common across different modules? Branches are fundamentally about version numbers (as all of my writings in the CVS handbooks have tried to make clear). They track a given set of changes and correspond with specific release series, that are compatible with a fixed version of core. That's all you know from the branch...
Also, not to nitpick, but given the vast confusion about branches and tags, the fact that branches really are tags is just additional confusion. Please, help the unwashed masses by refering to branches as "branches" and their names as "branch name" (or something), and leaving "tag" out of your vocabulary unless you're talking about a non-branch, regular tag (as all official release tags must be). Make sense?
I have no idea what this means. There aren't suddenly lots of branches. To the extent there are new branches, that's been true since day 0 of the release system, and this has nothing to do with the current proposal. But, this statement makes me think you're not understanding something about how branches work, I just can't figure out what it is. ;) Anyway, if you're objecting to the ability to have multiple branches for the same version of core, a) you're about 1 year too late complaining and b) the facts on the ground prove that this is a wildly popular feature put to great use by many maintainers, and there's no way to go back on that now.
No we're not. We already moved to a more complicated system, back when the "new" release system went into place. It wasn't overly complicated, it was just as complicated as it needed to be to handle all the cases, complexity, and functionality needed in the Drupal development ecosystem. The one part that was overly complicated was this bizzaro special case for the N==1 branch, which is the only thing I'm now attempting to simplify and fix.
Hope that helps.
Re: brevity -- that's what the summary at the very top of the post was supposed to achieve. Not sure how to state it more clearly or shorter than that. I just added all the other stuff as supporting evidence and background if people were unconvinced by the summary. Thought I was being helpful and trying to spread all that domain knowledge, not to confuse. Sorry if i failed at that... ;)
Cheers,
-Derek
Comment #12
killes@www.drop.org commentedI think Derek has successfully answered every possibly question => Make it so!
Comment #13
beginner commenteddww has answered many questions I had about the current implementation. I agree it's crazy we can't issue security releases off an older stable release.
Can you also clarify the following, please?
Can't we branch for each Drupal release (D6, D7, etc.) first THEN branch for each stable release of our modules (DRUPAL-6--1, DRUPAL-6---2)?
Suppose I have the branches:
DRUPAL-6--1
DRUPAL-6--2
DRUPAL-7--1
DRUPAL-7--2
DRUPAL-7--3
... each with their releases (tags DRUPAL-6--1-1, DRUPAL-6--1-2, etc).
If after having released DRUPAL-7--3-0, I want to backport a cool feature from the D7 series of releases to the D6. How do I create a new branch called DRUPAL-6--3 off the top of the D6 branch?
If I understand your proposal, it is not possible
(and until reading this thread, I thought this kind of thing was possible with D5, but I now understand how crazy the system was, so I agree that what's being proposed is an improvement).
Comment #14
beginner commentedHmmm... to answer my own question (and save you a lot of typing), I think this is how we would have to do it:
After having branched DRUPAL-7--3, I would have to clean HEAD and take away all D7 code, and put instead the code from the top of the branch DRUPAL-6--2. Check that in (into HEAD). Backport the feature. Check in. Branch DRUPAL-6--3. Then restore the latest D7 code into HEAD.
Is this how we would have to do it?
It also means we wouldn't be able to check out a D6 branch, and keep up to date with a simple cvs update with the latest stable release compatible with D6.
Is there a reason why we can't two levels of branches?
Comment #15
beginner commentedIs there a reason why we can't have two levels of branches?
Comment #16
dwwTo briefly answer beginner:
a) CVS doesn't care where you create branches from. There's nothing wrong with "nested" branches.
b) So, if you wanted to do what you describe, just checkout the end of your DRUPAL-6--2 branch in to a workspace, and create a DRUPAL-6--3 branch from there.
c) None of this is changed by my proposal. You can do this now, and after I implement.
All I'm asking is to rename "DRUPAL-6" to "DRUPAL-6--1" to drive home the point it's the one and only place for the 6.x-1.* specific code. Everything else remains the same.
Comment #17
eaton commentedAnd this is a GOOD thing. It makes the distinction explicit and obvious and helps avoid a LOT of confusion. It's a happy thing.
I've ported VotingAPI to Drupal 6 already, and I'm confused about where I should put it, branch-wise. Let's make DRUPAL-6--1 official! ;)
Comment #18
merlinofchaos commentedI agree with dww. +1 to nixing DRUPAL-6 branch in favor of DRUPAL-6--1 branch.
kbahey: I understand the problem you're pointing out about trying to check out all of contrib. All I can say is that yes, about a year ago we made it much more difficult to just have a checkout of all of contrib, because each individual module within contrib can be branched a few different ways. I think dww's cvs_deploy.module can help alleviate that somewhat, by taking some of the burden off of you for figuring out what is checked out where.
But the fact remains that yes, the --2 and --3 branches took a feature away from you and gave a feature to me. However, I desperately, desperately needed that feature in order to maintain my modules properly. So when you say it makes maintenance harder, I disagree with you there; for me, it makes maintenance easier. What it makes harder is tracking. And IMO that's less important.
Comment #19
eaton commentedAs someone who's going to be rolling out multiple versions of a couple modules for multiple versions of Drupal, I can say wholeheartedly that the annoyance of not being able to check out all of contrib in one swoop is outweighed by the clarity of the maintenance tasks. w00t.
Comment #20
owen barton commentedWhile I share Khalid's pain of not being able to (mostly) do straight checkouts and updates on the drupal-5 branch, I can see how getting everyone to manage their contributions in the same way is an excellent idea. Let's get a script working to checkout/update the latest stable or dev-branch releases - http://drupal.org/node/124661.
I support this!
Comment #21
beginner commentedThanks dww for your answer. I must have tried the wrong way, but I'l try again in the future.
Everybody seems to support your proposal (even Killes above), so go ahead! :)
DRUPAL-6--N branches make sense.
Comment #22
beginner commentedActually, my request for clarification was on topic, and was another symptom of the confusion that dww talks about.
looking at my notes, I was doing:
cvs tag -b DRUPAL-5then within this branch, the following would fail:
cvs tag -b DRUPAL-5--1-0hence my questions above.
I had read the documentation many times, and it's very possible I misunderstood bits of it. But never mind that.
Now, if I understand the reply I got, I would be able to do:
cvs tag -b DRUPAL-6then within this branch, I would do the following:
cvs tag -b DRUPAL-6--1finally, within that latter branch, I would create a release tag:
cvs tag DRUPAL-6--1-0It is much more logical.
Comment #23
dww@beginner: sorry, not quite. ;)
That's because DRUPAL-5--1-0 is a release tag, not a branch. -b == branch. Our particular repository is configured to prevent people from adding branches that have names like "DRUPAL-5--1-0" to prevent confusion and errors.
No. My proposal (please read the summary again) is to make it impossible to ever add the DRUPAL-6 branch anywhere in contrib. You must use DRUPAL-6--1 if you want a branch for your 6.x-1.* specific code.
Right. Once you've ported your code (presumably in HEAD) to the D6 core API, you'd do those 2 steps to a) make a branch for the 6.x-1.* series, and b) make the official 6.x-1.0 release.
My point about nested branches being ok is that much later, say you've ported HEAD to the D7 API, and you've even got a DRUPAL-7--1 branch, but then you decide to add some new features for the D6 version, and you want to create a DRUPAL-6--2 branch. At this point, it's totally allowed (and recommended) to do this:
cvs co -r DRUPAL-6--1 contributions/modules/foo
cd contributions/modules/foo
cvs tag -b DRUPAL-6--2
cvs update -r DRUPAL-6--2
Now, you've got a branch (and workspace) for 6.x-2.* specific code, based on the latest 6.x-1.* specific code. It just so happens that this branch is "nested", and was created off the end of the DRUPAL-6--1 branch, instead of HEAD, but neither CVS nor our CVS access control scripts care about this technical detail. At this point, you can still do bug fixes on the DRUPAL-6--1 branch and make other releases for 6.x-1.*, and you can work on new features in the DRUPAL-6--2 branch for your 6.x-2.* series, and you can continue to do whatever you want in DRUPAL-7--1 for D7-specific code, etc, etc.
Does that all make sense now?
p.s. There's probably a lot of wisdom represented in my replies to this thread that should be harvested and folded into our CVS handbook pages. Anyone up for that task?
Comment #24
kbahey commentedSorry for coming late to this.
dww, I am not upset. I like the microwave. Good for headaches!
What I meant is this:
Currently, I start with DRUPAL-5 as a branch (not a tag). I am fine with this, since HEAD is isolated now. Ignore HEAD for now.
Now I decide to make a release. I created DRUPAL-5--1-0. Then I make some API changes, and want to have DRUPAL-5--2-0. I thought that DRUPAL-5--1 and DRUPAL-5--2 have to be branches, not just tags.
Your new proposal (correct me again) forces them to be branches (not just tags). Is that not so?
Right now, I am using -5--1 and -5--2 as tags, and will only branches if I need to go back and make changes in -5--1. Until then, I don't want to branch them (too many sandboxes!).
I meant too many sandboxes (checkouts of a branch tag), one for each branch, for each module. If DRUPAL-5 is the branch, and everything below it (-5--1, -5--2, ...etc.) are mere tags, I don't need a sandbox for each of them. If they are branches, I need a sandbox for each, which gets too unwieldy.
I am not against branching on the same version of core. I am against "forcing" the MAJOR part of DRUPAL-CORE--MAJOR-* to be a branch (as opposed to a non-branch tag). If it is optional, I would not care. The motivation is to limit the number of sandboxes I need to manage.
In the scenario I prefer (no forced branching), I can just leave the old branch the way it is, and only branch it if I need to.
So, off HEAD, I do:
cvs tag -b DRUPAL-5 (now I have a 5.x branch).
...
cvs tag DRUPAL-5--1-0 (first stable release, no branching ...)
...
cvs tag DRUPAL-5--2-0 (API changes, no branching still ...)
...
cvs tag DRUPAL-5--2-1 (Fix or feature)
...
cvs tag DRUPAL-5--3-0 (API changes, no branching still ...)
Something happens and now I want to branch -5--2 off the tag I created for 5--2-1, say a security fix.
cvs rtag -r DRUPAL-5--2-1 -b DRUPAL-5--2-2 (or some other suffix)
Until I need the branch, I don't need the branch.
So, if you are not forcing branches within the same core compat, go ahead and do what you want.
The complexity I am talking about is that X has to be a branch, but Y must not be, ...etc. This is complexity. Part of it is necessary, part of it may not be so.
@merlinofchaos: I have not tried out cvs deploy, since for clients I always install from tarballs now, ever since update_status started working. It is manageable this way and has a new feature (notification of updates, ...etc).
Comment #25
dww@kbahey: You haven't been able to work like that since the release sytem went into effect. ;)
In an ideal world, where *only* people who understood revision control, branching, merging, etc, were allowed to have CVS accounts and touch the contrib repo, what you describe would be just fine with me. If I could just trust that everyone would get it right all the time, this would be perfectly reasonable. Unfortunately, the reality is that probably less than 10% of the people using Drupal's CVS actually understand it. :( Therefore, one of the things that I've been doing ever since I came around the project was trying to idiot-proof our repo to protect ourselves from the 90%. The first task was locking down tagging and committing to people authorized to do so per-project. Then, came the release system....
The whole premise of the release system is that offical releases are based on tags, and development snapshots are based on branches. Ever since the release system went live, the xcvs-taginfo.php script (which validates any attempted cvs tag or cvs rtag operation) has a set of regular expressions that must match before a tag or branch is created. It is *impossible* to make DRUPAL-5--2 a regular tag. It *must* be a branch. This was to help stem the flood of CVS support issues that came in when people made a DRUPAL-4-7 tag (not branch), and then tried to commit bug fixes to it. :( I spent *HOURS* helping people understand why this didn't work, converting tags into branches for them, etc, etc. So, the repo now prevents this practice entirely. This has been true for about 8 months, and is unchanged by the current proposal.
Similarly, you cannot make "DRUPAL-5--2-2" a branch. That's impossible. Our repo prevents it. That is what an official release tag looks like, so it must be a non-branch tag. Again, this has been true for 8 months, and is unchanged by the current proposal. Moreover, you can't make a "DRUPAL-5--1" branch, since that's what the bizzaro special case called "DRUPAL-5" is for... It would be the height of confusion if we allowed both DRUPAL-5 and DRUPAL-5--1, since DRUPAL-5 has always been a special case. This special case SUCKS, and has caused much confusion and grief, which is why I want to kill it.
So, all of your objections to this thread are really objections to how the release system works, so again, you're about 9 months too late in raising these objections. ;)
Also, keep in mind that the release node pointing to your "DRUPAL-5" branch is always called "5.x-1.x-dev". So, given the example you lay out, that release node is wrong, the moment you started adding your 5.x-2.* specific code to your DRUPAL-5 branch. This confuses your poor users, and makes things non-deterministic and confusing for everyone involved. This non-determinism is what I want to change. If the release system, docs, common practice/convention, etc, all say "DRUPAL-5 is for 5.x-1.x-dev", then that's what maintainers should do. There should always be a 1-to-1 mapping between any branches or tags you create, and the corresponding version numbers those are associated with. If you want to work on a "branch" without maintaining extra branches, make a bunch of official release tags, change release series, etc, etc, and only branch when needed, use HEAD (and keep editing the release node pointing to HEAD to have the right version string at all times to reflect reality). HEAD is already a special case in CVS, so, we leverage that fact. Users should use official releases, based on tags, and CVS doesn't care if the tag was created on HEAD or another branch. But once you make a branch off of HEAD, you should always know exactly what version of the code lives on that branch.
All I want to do is rename DRUPAL-6 to DRUPAL-6--1, everything else remains the same.
Comment #26
dwwOne last point: re: "I meant too many sandboxes (checkouts of a branch tag), one for each branch, for each module."
That's silly. All you need is one "workspace" (checkout) for each branch:
E.g.:
drupal/cvs/5/
drupal/cvs/5--2/
drupal/cvs/5--3/
drupal/cvs/6--1/
drupal/cvs/6--2/
...
all modules that have been branched for any particular version will be included. you don't need separate workspaces for each branch for each module...
Comment #27
kbahey commentedSince that is the only change (effectively a rename of DRUPAL-CORE for contrib to DRUPAL-CORE-MAJOR), then go ahead and do it.
Everything else remains the same.
Comment #28
dwwExcellent, glad you see the wisdom in the change. ;) The *only* reason I haven't just gone off to implement it yet is that Dries specifically asked me to wait until he replied.
/me twiddles thumbs. ;)
(I know he's busy, but it'd really be nice to wrap this up, make the change, document it, and open the gates for D6-related branches in contrib).
Comment #29
dries commentedI read through the issue, and I'm OK with it. It makes sense. Sorry for the delay getting back to you guys. Move on with it! :)
Comment #30
dwwExcellent, thanks!
Setting to "needs work" to represent the fact that I've gotta update some docs and actually change the underlying regexp configuration. Probably monday or tuesday this will go live with a note to the devel list and a forum post.
Yay, progress. ;)
Comment #31
dwwWith eaton's help, the following handbook pages are now updated:
http://drupal.org/handbook/cvs/quickstart
http://drupal.org/handbook/cvs/branches-and-tags/contributions
http://drupal.org/node/17570
The necessary changes to the xcvs-* configuration files for the contrib repo are now committed to the private repo, and installed on d.o. Sending email to devel about this right now, so I'm marking this issue fixed.
Comment #32
dwwComment #33
(not verified) commented