trinity-devel@lists.pearsoncomputing.net

Message: previous - next
Month: October 2014

Re: [trinity-devel] Using branches in the future development (was Re: [trinity-devel] R14 hard freeze for RC1)

From: Michele Calgaro <michele.calgaro@...>
Date: Wed, 15 Oct 2014 13:23:33 +0900
On 2014/10/15 12:12 PM, Slávek Banko wrote:
> On Wednesday 15 of October 2014 04:30:15 Michele Calgaro wrote:
>> 2) about freezing, development and v14.0.x
>> Tim, is it possible to create a GIT branch for v14.0.0 so that we can
>> keep pushing patches *not to be in v14.0.0* to the main trunk? The main
>> question here is actually "how are we going to maintain the v14.0.x
>> branch when v14.0.0 has been release and the main trunk will be for
>> v14.1.0"?
>>
>>
>> Cheers
>>     Michele
>
> This raises the question of the use of branches in the further
> development. There are several options:
>
> 1) One extreme - do not use branches at all.
>
> = R14.0.0 === R14.0.1 === R14.0.2 === R14.1.0 === R14.1.1 === R14.2.0 === R15.0.0
>
> I assume that the experience from the maintenance branch
> v3.5.13-sru excludes this option.
>
>
> 2) Create a branches for the minor/"feature" revisions:
>
>                       __R14.1.1___R14.1.2___R14.1.3
>                      /
>                     /                       __R15.0.1
>                    /                       /
> = R14.0.0 === R14.1.0 === R14.2.0 === R15.0.0 === R15.1.0
>        \                       \
>         \                       \__R14.2.1___R14.2.2
>          \
>           \__R14.0.1___R14.0.2___R14.0.3
>
>
> 3) Create a branches for the major/"abi" revisions and
> 'sub' branches for minor/"feature" revisions:
>
>                          ___R15.1.0___R15.1.1
>                         /
>                        /__R15.0.1___R15.0.2
>                       /
> = R14.0.0 ====== R15.0.0 ====== R16.0.0
>        \
>         \__R14.0.1___R14.0.2___R14.0.3
>          \
>           \__R14.1.0___R14.1.1___R14.1.2
>            \
>             \__R14.2.0___R14.2.1
>
>
> Based on the existing experience for me seems optimal option 2). In any
> case, I suggest to not create a 'tags' for rc versions - solely for the
> final releases, to avoid unnecessarily large number of tags.
>
> The second question is "when is the time" to create a branch. As I
> mentioned earlier, nightly-builds are designed to build on 'master'
> branch. When we create new branch, then nightly-builds should start
> with version numbers corresponding to the new target version - for
> example, 14.1.0~preXXX. Thus, if a new branch will be created now -
> with RC1, then I assume that this is the moment for me to start
> worry about the preparation of stable-builds in my ppa.
>
> I note: for some time I maintain 'preliminary-stable-builds' on my
> mirror. At the same time I have already prepared PPA to maintain
> 'stable-builds' on the build-farm. That is to say, that I am ready
> to maintain maintanance releases R14.0.x.
>
> What is your opinion - when is the time to create branch and start
> the 'maintanance mode'?
>
Hi Slavek,
thanks for spending the time to write such a detail email. It summarizes 
very well my thoughts as well.

Option 3) would be the best choice if we had a clear roadmap for what to 
do in the future releases and more developers, since it would allow to 
work on v15.0.0, v14.x.y and maintanin v14.0.x at the same time.
Given the amount of resources that we have, I think that option 2) is 
the most viable choice.

Regarding the time of branching, my view is that we should first rework 
the nightly-building process to allow to choose which branch to build 
from. This is in view of future builds of v14.0.x when the main trunk 
will be on v14.1.0.
If we change the building process as explained, then the time of branch 
is "now". We create a branch for v14.0.x, which will contain v14.0.0 and 
all subsequent maintenance releases. Then we create a sub-branch v14.0.0 
that will contain only v14.0.0.
I do not see the need to use tags for RC1, RC2 if we use this method.
In pictures:

  == Main trunk --> work can continue for v14.1.0
       \
        \__R14.0.x --> work can continue for v14.0.x,
            \         patches can be pushed any time but will
             \        not go into v14.0.0
              \
               \__R14.0.0  --> branch for v14.0.0. When we want to
                               build RC1, instruct the nightly-build
                               process to build from here. Later do
                               the same for RC2 and for the final
                               v14.0.0 release.


At later stage, we will create sub branches for v14.0.1, v14.0.2 and so 
on. Given that branches in GIT are cheap and that changes can easily be 
merged from trunk or from the R14.0.x sub-trunk, this should be a 
reasonable working solution.
Plus if one day we decide to do so, we can easily switch to option 3: we 
just create the v14.x.y sub branch.

Just my 2 cents.

Cheers
   Michele