> > Anyway I shouldn't have brought up the subject, this is way off
> > topic.
> 
> I don't think so - how we organize ourselves is very much on topic.

For what it's worth, I'd weigh in that what Yuval's proposing for the layout
seems to make sense to me. The layout I'm accustomed to is akin to:

root/
        tags/
                0.7.0/
                0.7.1/
                0.8.0/
                0.8.1/
                0.8.2/
        branches/
                0.7/
                0.8/
        dev/
                feature-a/
                feature-b/
                feature-c/
        trunk/

The process I'm most accustomed to with SVN is:

1) Main development happens in trunk
        a) ... except when it involves significant rewrites or experimental
features, which begin in dev branches first

2) Trunk is "ideally" kept compliable for nightlies - This is more about
quality control than anything. Trunk being in an unstable state for more
than a day or two often creates more headache, and suggests the feature may
have been better beginning in a branch.

3) When certain objectives are met (either certain functionality goals being
in place, or general timing), trunk is branched into a candidate branch

4) The branch is stabilized (which should already be so, more or less), with
RCs coming from it.

5) A release is made from that branch when it is agreed to be stabilized.
Optionally, it is tagged as well (which is more for convenience than
anything - Again, it's "cheap", and allows you to instantly find/browse the
code for that release)
        a) Changes from that branch may either be periodically merged back
into trunk during stabilization, or it may wait until the end.

6) Where do you put ongoing maintenance? There are several philosophies to
this approach:
        a) The fixes start in the oldest "maintained" branch, and are
successively merged forward through the branches. This is generally easy
because each successive version is based on the code that preceded it, so
there may not be as many conflicts. I've seen this on several commercial
projects - You generally only have conflicts when merging old->new and new
was rewritten.
        b) The fixes start in trunk, and are then (back-)ported to the
various branches. This ensures that the fix for each branch is correct for
each branch, but runs the risk of conflicts because newer code may have been
substantially altered/refactored, and working backwards may not always be
easy. Depending on the nature of the bug/fix, this may ensure better quality
(by ensuring every fix is  appropriate for each branch, rather than just
straight merging), but may introduce more complexity (every merge conflicts
from new->old if new was rewritten)
        c) Fixes only go into trunk. The maint branches are treated more
like tags/stabilizers than statements of product "versions". Major
development happens out in dev branches.

I've seen b) used frequently in cases where there are issues of
API/compatibility. You want to keep the API stable for consumers of it,
while at the same time, you want to fix bugs/security holes. PHP is an
example of this.

However, given that Hugin isn't really exposing APIs, and versioning of the
project files themselves is largely a non-issue because they rarely change
and is fairly standard, it sounds like c) is the better approach.

The challenge in deciding how to do "step 6" is, in my mind, largely
dependent on what you define a "minor" version to be. The question is: "What
is the difference between Hugin 0.8.0, 0.8.1, and 0.9.0?" Does 0.8.1 *only*
address bugs and will never introduce new features? Then maybe a or b are
the best approaches. Is Hugin 0.7.0 still "supported" when 0.8.0 is
released, meaning bug fixes still need to make it in and a Hugin 0.7.1 is
eventually released? Then again, maybe a or b are the best approaches. Or is
the difference between 0.8.0, 0.8.1, and 0.9.0 that "some" new features are
introduced between 0.8.0 and 0.8.1 (in addition to bug fixes), but that a
longer-term rewrite of some core piece along with major new features is
0.9.0. If that's the case, then I'd say c probably sounds the most
manageable, and it sounds the most akin to how the current dev lifecycle is.

The question about versioning doesn't disappear by using a date-based
alternative. In fact, I'd wager the date-based approach loses some of
utility in communicating to people what the differences between "A and B"
are. After all, "Major.Minor.Rev" is a well understood paradigm, even if
there is significant debate over what is "major" and what is "minor".
Date-based just communicates that X is newer than Y, but that doesn't
necessarily mean "better" or more "stable". It also depends heavily on
having a well-defined roadmap so you have an understanding of what can/will
and cannot/will not make a particular release. Look at Ubuntu, the numerous
meetings held for steering to maintain the 6-month active release and 2-year
LTS release schedule, and you start to think Hugin is not quite there yet :)

Equally part of the conversation seems to be "What constitutes a release?"
Is it goal/milestone driven, that the release is ready when features X, Y,
and Z are finalized and stabilized? Is it date driven, such that you get
whatever features can be brought in/stabilized in a x-Month period? Or is it
on island timing, where a release is ready "when it's ready" and it contains
"what it should"? All are perfectly viable and respectable answers, but each
approach will have impact on the file structure and versioning in big ways.

Regardless though, structurally, it seems to make sense to separate out the
"branched for historical but not changes should be made" from the "branched
for maint/stabilization" and the "branched for feature development" and
trunk. This would seem to solve Bruno's concern over an svn up on a branch
dir adding hundreds of megs, especially if someone's primary concern is with
stabilizing a branch rather than poking and prodding on some
latest-and-greatest feature-branch.


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"hugin and other free panoramic software" group.
A list of frequently asked questions is available at: 
http://wiki.panotools.org/Hugin_FAQ
To post to this group, send email to hugin-ptx@googlegroups.com
To unsubscribe from this group, send email to 
hugin-ptx-unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/hugin-ptx
-~----------~----~----~----~------~----~------~--~---

Reply via email to