[crossfire] 2.0 release, was Re: Code restructuring
Mark Wedel
mwedel at sonic.net
Sun Jul 23 01:27:16 CDT 2006
Yann Chachkoff wrote:
> Le vendredi 21 juillet 2006 07:37, Mark Wedel a écrit :
> Now, you could say that "there is no way to be sure that the server works
> before trying it"; I'd answer to this that (1) we developers are supposed to
> do at least some rough beta testing and (2) nothing prevents us to set a
> single beta-testing server clearly flagged as such to get player's feedback
> and spot what could have been missed during development.
I don't think any developers writes code with known bugs (at least I hope not).
while some bugs are pretty obvious if good testing was done, some are less
obvious (occur on specific map due to specific setting of flags on objects,
etc), but can still be very severe.
So I think it is fairly likely that with major changes being made, there will
be some number of bugs. A beta server fixes this, presuming you can get enough
players on the beta to test it. That's a big unknown at this point.
>> At the same time, the number of changes in the stable branch will
>> probably be a lot less, so perhaps not as much an issue for servers to keep
>> up to date on that.
>>
> Not really - there could be several minor releases, each made with a
> relatively short lifecycle (in the order of two-three months, maybe) that
> could potentially include a lot of new stuff; the point is that during each
> major, no huge, breaking change could occur, so the evolution would be rather
> smooth for the server maintainers. They'd also benefit from having releases
> that would be more solid than they're now - we currently make no bugfixes
> outisde of the CVS itself, forcing them to use the potentially unstable CVS
> content to get the fixes.
Right - I don't think anyone right now is arguably against having the head be
bleeding edge and aimed for the next major release and another (or multiple)
stable branches.
The question is what goes into the stable branch. By its nature, everything
has to go into the head branch (presuming the change is still applicable). But
the scope of changes for the minor releases in the stable branch probably
shouldn't be too big.
> Well, that's part of teamworking. Coding is just the last part of the
> process - the design phase, which includes the various discussions, seems at
> least as important to me, if not more.
There have certainly been cases where things were put in without any such
discussion, and I would have liked to have seen some.
And the question also becomes what level of changes require design documents?
Just the major feature? Any feature beyond some scope (which would need to be
defined?) The danger can become that code is submitted/committed that should
perhaps have a design document but there wasn't one. Suppose a patch is
submitted without a design document? Do we just say 'no design document, do
commit?' That may be the right thing to say, but also probably isn't going to
make developers very happy.
I do think design discussions should be done. But in doing so, I think some
rules need to be formulated for when a document is or is not needed (and we have
to be careful about code submissions - we don't necessarily want to reject them
out of hand, but at the same time, we don't want to accept code that doesn't
meet standards).
I think also it may be best if all the major features go through design
discussions even if there isn't anyone that is necessarily going to work on them.
I know that for me personally, there are times when I am unexpectedly ready to
do some coding. However, if it is going to take 2 weeks to get input from a
design document I write tonight, then 2 weeks from I may not have the time or
inclination. So there needs to be something that people can just pick up when
ready.
I usually try to get around this by putting things out for discussion even
when I know I don't have time right now to work on them, on the basis that when
I do have time, all discussion is done. Problem then is it can be a very long
time before I ever get to it, and if enough time passes, original discussion may
not be relevant.
>> The only reason I can see of doing that is if there are going to be micro
>> releases as well as minor releases (2.1.1 released after 2.2.0).
>>
> There would be. Suppose that we release a 'stable' 2.1.0 version, put into its
> own CVS branch. Now, somebody finds a couple bugs that we correct. We'd then
> update the released package, numbering it 2.1.1, so that people understand
> this is a fix of 2.1 rather than a version with new features.
> Note that CVS-wise, I do not suggest sub-branching 2.1 into 2.1.0, 2.1.1, etc;
> that's unnecessary overkill.
But then how do you cover the case like this:
2.1.0 released.
someone puts back some signficant change to stable branch.
critical bug is discovered, fix is made, but a 2.1.1 release is needed a week
after 2.1.0
One can release 2.1.1 from the stable branch (just like I do now), but that
would also include the significant change, which then confuses the numbering
scheme (suppose that change is signficant enough that it would be enough by
itself to bump the number up to 2.2.0)
Do we just release 2.2.0? I suppose that is fine, but then maybe gets
confusing if you release 2.2.0 a week after 2.1.0?
> As I said, I am not suggesting to do such micro-branches. Why would you need
> to ? Just put the bugfix both in the head and in the last minor revision
> branch (2.1, 2.2, etc). Then repackage the latest minor branch CVS and mark
> it with an increased revision number (I suppose that practically, we'd not
> want to repackage each time a bug is fixed - this could be done each time a
> critical bug has been fixed, or on a weekly basis, provided that stuff got
> fixed during the week).
> So in my proposal, you only have to fix things at two places: the last minor
> revision branch, and the head.
So it sounds like you have a branch for each minor release then? Where do
those branches come from?
I think that all the 2.x minor releases have to start from the same main head
- 2.0.0.
But I'm not sure that makes things easier - it seems then you get this situation:
2.0 release.
branch for 2.1 is made based on 2.0
2.1 is released, branch for 2.2 made based on 2.0
This new branch now needs to be synchronized up for all the 2.1 changes. And
changes for 2.1.1 will also need to be synced up.
And so on for 2.3, 2.4, etc.
That seems to make it more complicated than having a stable-2-x branch and
then if necessary making a new branch for micro releases.
I think also with what you suggest, the version numbering of files could get
really confusing (and/or because of the merging, being able to do diffs and see
what was specifically changed in a release becomes more difficult.
I really don't want to have to have 3-4 different CVS trees around to be able
to figure out exactly when something changed and what the code looked like
before then.
Maybe that isn't what you are suggesting, but from reading your e-mail, that
seems to suggest how you are suggesting to do revisions.
> I can see two likely cases that can happen:
> - Either a player finds a bug; then, the bug is first spotted in the last
> minor branch, and that's where the developer will fix it. Then, it will get
> fixed in the head, provided that it is still relevant;
> - Either the dev working on the head spots a bug there. Then, it is his/her
> responsability to immediately check if the bug exists in the latest stable
> release as well; then, fix in both.
Yes - I agree that is the correct process.
> Note that in most cases, it shouldn't be a big overload of work, as the latest
> stable branch wouldn't be very far away from the head content.
I don't see that being the case - if the head branch has been worked on for 1
year with numberous code re-orgs, I'd expect the stable branch (for say 2.5) to
look quite different.
Unless you are suggesting that minor releases are branched from the current
head code, eg:
2.0 release.
branch for 2.1 is made based on 2.0
2.1 is released, branch for 2.2 made based on current head code
2.2 is released, branch for 2.3 made based on current head code
If that is the model, then that really isn't any different than what we do
right now, which means by the time 3.0 is really released, it won't look that
much different than the last previous minor release, since the code for that
previous minor released was based on code pretty close to the 3.0 release code.
I guess I'm just confused on what you are suggesting for how the minor
releases are made/branched from.
More information about the crossfire
mailing list