octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: stable vs. experimental archive


From: Robert T. Short
Subject: Re: stable vs. experimental archive
Date: Wed, 22 Apr 2009 09:25:05 -0700
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.21) Gecko/20090402 SeaMonkey/1.1.16

John W. Eaton wrote:
On 22-Apr-2009, Jaroslav Hajek wrote:

| Given the apparently somewhat less active developer base of Octave, I
| think we can aim for something a bit simpler, and maybe more
| collaborative.
| Let's just have "main" and "stable", with all active developers having
| access to both "main" and "stable".
| | When someone fixes a bug, he pushes the fix to "stable". When he/she
| makes a new feature, improvement or whatever, he pushes it to "main".
| If it's highly experimental, he'll develop it in a separate repo, and
| then it will be merged (for big projects) or rebased in main.
| "Main" will often pull from "stable" and merge, to get the bugfixes.
| Anyone is allowed to do it any time.
| Once per time, stable will pull from "main" and merge, to get new
| features once they become somewhat tested and agreed upon. This should
| happen only after discussion.
| | > Bugfixes are pushed to -stable, then pulled and merged to
| >  mainline. No new features are going to stable, mainline is pushed to
| >  stable after each release.
| | OK, that matches my model above.

I'm not sure how well this will work in practice for us.  I posted it
as a possibility, without really thinking about it too much.  Some
problems I see with it are things like

  A major change in the main branch (like the symbol table changes I
  applied after 3.0, or the recent switch to a tree-walker
  interpreter) will mean that a bug in those parts of Octave will need
  to be fixed in completely different ways in the two branches.  So
  pulling and merging will not be trivial in those cases.

  Without some discipline in what is added to the main branch, we will
  still be in a state where what is in the main archive can't be
  released.

I think I would prefer the following structure, which is mostly like
what we have now:

  A set of experimental archives that can be used for doing whatever.
  I don't care who hosts these, but we can link to them on a
  developers page on the Octave web site.  Although links for these
  may appear on the Octave web site, these archives are not "official"
  Octave project archives.

  A main development archive.  Releases are made from this archive.
  Periodically, we have feature freezes, which should not last too
  long, but are necessary to stabilize for release.  Changes to this
  archive should only be patches that are relatively safe, or have
  been fairly well tested.  We should try to keep this in a state
  such that releases are possible most any time, or at least with only
  a short feature freeze period.

  A stable branch for the current stable release.  The only changes
  that should be applied are for regressions or documentation errors.
  These branches may be kept as internal branches of the main archive
  instead of being separate archives (if we choose that, then I guess
  I would like to reattach your 3.0.x branch into the main archive on
  savannah).

The main change here is elevating the awareness of other experimental
archives, and using them for the real development work.  It's up to
the people working with those archives to synchronize with main, and
to export patches for the main archive that will apply cleanly.  I
know this will be slightly more work than just pulling from other
archives, but I would really prefer keeping the main archive history
relatively uncluttered, primarily because then it is easier for me to
see that the changes that are going in are ones that we actually want,
that they don't include some extra experimental baggage, and that they
don't have unintended consequences (like wiping out someone's previous
changes).  If I just pull from some other archive, how am I to know
that I'm not picking up some extra garbage along with the changes I
want?

If you think that requiring a relatively clean history is a bad idea,
can you explain why having a cluttered history in the main archive is
a good thing?  I just don't see it.  Faster, wilder development in the
primary public archive is not necessarily a good thing.

| > If we have other archives that are used for experimental features,
| > then I think we have a better chance of keeping the main archive in a
| > state that can be released at almost any time.  But doing that
| > requires some discipline, and not just pulling in random changes from
| > experimental archives as soon as they have been committed.
| | Yes. Every main -> stable pull must be announced and discussed.
| stable -> main pulls are allowed any time.

Do stable -> main pulls always make sense?  We tend to have situtions
like the symbol table or interpreter changes that cause the two
branches to diverge.  It seems to me that pulling would not be
appropriate in those cases.

jwe



I actually get a little concerned about pulling from the development branch to the stable branch at all. It seems to me that such activity will destabilize the stable branch.

Two ways around this, perhaps.

1. Periodically (and fairly often) freeze the development branch for new features. Go into a bug-fix mode, but don't allow any new features. This is a little hard on those that don't have many bugs in their code, but those folks can maintain their own experimental branch until the stable version is retired and is replaced by the frozen development version. I think this is kind of what you said above.

2. Freeze the development branch periodically into a "testing" branch. Allow the development branch to proceed with new features. Only major, critical bug fixes get applied to the stable branch after a freeze and the testing branch gets any and all bug fixes but no feature upgrades. This is a model that I have used in commercial systems, and it works pretty well. More versions to apply bug fixes to is a pain, but probably manageable. Once the testing branch is stable, retire the old stable branch. One big difference between the stuff I have done and the octave model is that I always insist on a lot of regression testing to make sure bugs get eliminated and stay eliminated, but that is really a matter of discipline on the part of the programmer.

I actually have several local repositories that I consider experimental. I play around, add debug code, whatever, but don't feel at all guilty about trashing the whole thing. I see no reason to even make these publicly available at all. However if someone wants to play around with something serious lik (e.g. making octave multithreaded or some such), then a public repository would be valuable so more people can see what is going on, contribute, etc.

Bob
--
Robert T. Short
PhaseLocked Systems


reply via email to

[Prev in Thread] Current Thread [Next in Thread]