GNU bug report logs - #11153
change automake branching policy: dispensing with the 'branch-X.Y' branches in the future

Previous Next

Package: automake;

Reported by: Stefano Lattarini <stefano.lattarini <at> gmail.com>

Date: Mon, 2 Apr 2012 16:14:01 UTC

Severity: wishlist

Done: Stefano Lattarini <stefano.lattarini <at> gmail.com>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 11153 in the body.
You can then email your comments to 11153 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-automake <at> gnu.org:
bug#11153; Package automake. (Mon, 02 Apr 2012 16:14:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Stefano Lattarini <stefano.lattarini <at> gmail.com>:
New bug report received and forwarded. Copy sent to bug-automake <at> gnu.org. (Mon, 02 Apr 2012 16:14:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Stefano Lattarini <stefano.lattarini <at> gmail.com>
To: "automake-patches <at> gnu.org" <automake-patches <at> gnu.org>
Cc: bug-automake <at> gnu.org
Subject: change automake branching policy: dispensing with the 'branch-X.Y'
	branches in the future
Date: Mon, 02 Apr 2012 18:13:03 +0200
Severity: wishlist
thanks

Hello Automakers.

After some real hand-on experience with the current branching policy
of Automake, I'm convinced the presence of the 'branch-X.Y' branches
is just an annoyance and a source of confusion, and that a better policy
would be to simply have a 'maint' branch (where to cut maintenance
 releases directly from), a master branch (where maint is to be kept
regularly merged into, and from which the next major release is to be
derived at last), and possibly topic branches (only when needed, and
better if they are short-lived).  Maybe we could also re-add the 'next'
branch to serve as common ground for feature merging and testing, but
than can be done in a second time (and only if the need arise).

When a major release is done, the master branch is to be merged into
the maint branch, and then a "new" master branch created stemming
from the resulting commit.

WDYT?  If you agree, I can apply the change below to HACKING, and
implement the new branching policy starting from the Automke 1.12
release.

Regards,
  Stefano

-*-*-*-

diff --git a/HACKING b/HACKING
index 29c0e4a..b34cee6 100644
--- a/HACKING
+++ b/HACKING
@@ -103,37 +103,22 @@
   latest stable version of Autoconf installed and available early
   in your PATH.

-* The git tree currently carries a number of branches: master for the
-  current development, and release branches named branch-X.Y.  The maint
-  branch serves as common ground for both master and the active release
-  branches.  Changes intended for both should be applied to maint, which
-  should then be merged to release branches and master, of course after
-  suitable testing.  It is advisable to merge only after a set of related
-  commits have been applied.
-
-* Example work flow for patches to maint:
-
-  # 1. Checkout the "maint" branch:
-  git checkout maint
-
-  # 2. Apply the patch(es) with "git am" (or create them with $EDITOR):
-  git am -3 0*.patch
-  # 2a. Run required tests, if any ...
-
-  # 3. Merge maint into branch-1.11:
-  git checkout branch-1.11
-  git merge maint
-  # 3a. Run required tests, if any ...
-
-  # 4. Redo steps 3 and 3a for master:
-  git checkout master
-  git merge maint
-  # testing ...
-
-  # 5. Push the maint and master branches:
-  git push --dry-run origin maint branch-1.11 master
-  # if all seems ok, then actually push:
-  git push origin maint branch-1.11 master
+* The Automake git tree currently carries two basic branches: 'master' for
+  the current development, and 'maint' for maintenance and bug fixes.  The
+  maint branch should be kept regularly merged into the master branch.
+  It is advisable to merge only after a set of related commits have been
+  applied, to avoid introducing too much noise in the history.
+
+* There may be a number of longer-lived feature branches for new
+  developments.  They should be based off of a common ancestor of all
+  active branches to which the feature should or might be merged later.
+  in the future, we might introduce a special branch named 'next' that
+  may serve as common ground for feature merging and testing, should
+  they not be ready for master yet.
+
+* When a major release is done, the master branch is to be merged into
+  the maint branch, and then a "new" master branch created stemming
+  from the resulting commit.

 * When fixing a bug (especially a long-standing one), it may be useful
   to commit the fix to a new temporary branch based off the commit that
@@ -141,12 +126,6 @@
   the active branches descending from the buggy commit.  This offers a
   simple way to fix the bug consistently and effectively.

-* There may be a number of longer-lived feature branches for new developments.
-  They should be based off of a common ancestor of all active branches to
-  which the feature should or might be merged later.  The next branch may
-  serve as common ground for feature merging and testing, should they not
-  be ready for master yet.
-
 * For merges from branches other than maint, prefer 'git merge --log' over
   plain 'git merge', so that a later 'git log' gives an indication of which
   actual patches were merged even when they don't appear early in the list.




Information forwarded to bug-automake <at> gnu.org:
bug#11153; Package automake. (Mon, 02 Apr 2012 18:15:01 GMT) Full text and rfc822 format available.

Message #8 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Peter Rosin <peda <at> lysator.liu.se>
To: Stefano Lattarini <stefano.lattarini <at> gmail.com>
Cc: bug-automake <at> gnu.org
Subject: Re: change automake branching policy: dispensing with the 'branch-X.Y'
	branches in the future
Date: Mon, 02 Apr 2012 20:14:28 +0200
On 2012-04-02 18:13, Stefano Lattarini wrote:
> Severity: wishlist
> thanks
> 
> Hello Automakers.
> 
> After some real hand-on experience with the current branching policy
> of Automake, I'm convinced the presence of the 'branch-X.Y' branches
> is just an annoyance and a source of confusion, and that a better policy
> would be to simply have a 'maint' branch (where to cut maintenance
>  releases directly from), a master branch (where maint is to be kept
> regularly merged into, and from which the next major release is to be
> derived at last), and possibly topic branches (only when needed, and
> better if they are short-lived).  Maybe we could also re-add the 'next'
> branch to serve as common ground for feature merging and testing, but
> than can be done in a second time (and only if the need arise).
> 
> When a major release is done, the master branch is to be merged into
> the maint branch, and then a "new" master branch created stemming
> from the resulting commit.

I think what you are proposing is better described as dropping the
maint branch and doing development of features for both the stable
series as well as the pending major release directly on the stable
branch.  When you wish to make a new release you simply make sure
you have merged the latest branch-x.y into master, then create a new
branch-x.<y+1> or branch-<x+1>.0 from where the current master is
and you're done.

> WDYT?  If you agree, I can apply the change below to HACKING, and
> implement the new branching policy starting from the Automke 1.12
> release.

Consider what will happen if you don't have maint branches, and need to
release security updates for both the 1.11 and 1.12 branches as well as
having the security fixes available on master.  If you have all the
release-related commits as ancestors to the security fix (which you will
with this scheme), you will have to resolve inevitable merge conflicts
(or cherry-pick, ick).  If you instead have a maint branch related to
each release series, you should be able to make the real change on the
oldest such maintenance branch and then merge it into the more modern
maintenance branches, plus master, then merge the respective maintenance
branches into the release branches (branch-1.11) before cutting the
releases addressing the security problem.

I think it's immensely more clean to have the current dual maint and
branch-1.11 approach for each expected bug-fix series.  When 1.12 is
released, maint should probably move along with it and a maint-1.11
can be created when needed, if a security fix is ever needed for the
1.11 series.  Hopefully, we will not need a maint-1.11, but such things
are as they are...

Either that, or you'd need to do dummy merges from branch-x.y into
master after the release-related commits just to avoid future merge
conflicts, but dummy merges are ugly in my opinion.  And branches are
cheap.

I think we have learned not to merge new features past the maintenance
branch (i.e. directly into the release branch) so I'm pretty confident
that that particular problem will not resurface even if we do keep the
maintenance branch.

So, I'm voting for keeping both maint and branch-x.y.

Cheers,
Peter




Information forwarded to bug-automake <at> gnu.org:
bug#11153; Package automake. (Mon, 02 Apr 2012 18:48:01 GMT) Full text and rfc822 format available.

Message #11 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Jim Meyering <jim <at> meyering.net>
To: Stefano Lattarini <stefano.lattarini <at> gmail.com>
Cc: bug-automake <at> gnu.org, "automake-patches <at> gnu.org" <automake-patches <at> gnu.org>
Subject: Re: change automake branching policy: dispensing with the
	'branch-X.Y' branches in the future
Date: Mon, 02 Apr 2012 20:47:16 +0200
Stefano Lattarini wrote:
...
> WDYT?  If you agree, I can apply the change below to HACKING, and
> implement the new branching policy starting from the Automke 1.12
> release.

I agree.
IMHO, you won't go wrong following git.git's example.

> diff --git a/HACKING b/HACKING
...
> +* The Automake git tree currently carries two basic branches: 'master' for
> +  the current development, and 'maint' for maintenance and bug fixes.  The
> +  maint branch should be kept regularly merged into the master branch.
> +  It is advisable to merge only after a set of related commits have been
> +  applied, to avoid introducing too much noise in the history.
> +
> +* There may be a number of longer-lived feature branches for new
> +  developments.  They should be based off of a common ancestor of all
> +  active branches to which the feature should or might be merged later.
> +  in the future, we might introduce a special branch named 'next' that
> +  may serve as common ground for feature merging and testing, should
> +  they not be ready for master yet.

reorder slightly:

  they not yet be ready for master.


> +* When a major release is done, the master branch is to be merged into

Does this convey your meaning?

  After making a major release, the master branch is to be merged into

> +  the maint branch, and then a "new" master branch created stemming
> +  from the resulting commit.
>
>  * When fixing a bug (especially a long-standing one), it may be useful
>    to commit the fix to a new temporary branch based off the commit that
> @@ -141,12 +126,6 @@
>    the active branches descending from the buggy commit.  This offers a
>    simple way to fix the bug consistently and effectively.
>
> -* There may be a number of longer-lived feature branches for new developments.
> -  They should be based off of a common ancestor of all active branches to
> -  which the feature should or might be merged later.  The next branch may
> -  serve as common ground for feature merging and testing, should they not
> -  be ready for master yet.
> -
>  * For merges from branches other than maint, prefer 'git merge --log' over
>    plain 'git merge', so that a later 'git log' gives an indication of which
>    actual patches were merged even when they don't appear early in the list.




Information forwarded to bug-automake <at> gnu.org:
bug#11153; Package automake. (Mon, 02 Apr 2012 19:44:02 GMT) Full text and rfc822 format available.

Message #14 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Stefano Lattarini <stefano.lattarini <at> gmail.com>
To: Peter Rosin <peda <at> lysator.liu.se>
Cc: bug-automake <at> gnu.org, 11153 <at> debbugs.gnu.org,
	"automake-patches <at> gnu.org" <automake-patches <at> gnu.org>
Subject: Re: bug#11153: change automake branching policy: dispensing with
	the 'branch-X.Y' branches in the future
Date: Mon, 02 Apr 2012 21:42:26 +0200
Hi Peter, thanks for the feedback.  But I fear we have a misunderstanding
here.  See below.

On 04/02/2012 08:14 PM, Peter Rosin wrote:
> On 2012-04-02 18:13, Stefano Lattarini wrote:
>> Severity: wishlist
>> thanks
>>
>> Hello Automakers.
>>
>> After some real hand-on experience with the current branching policy
>> of Automake, I'm convinced the presence of the 'branch-X.Y' branches
>> is just an annoyance and a source of confusion, and that a better policy
>> would be to simply have a 'maint' branch (where to cut maintenance
>>  releases directly from), a master branch (where maint is to be kept
>> regularly merged into, and from which the next major release is to be
>> derived at last), and possibly topic branches (only when needed, and
>> better if they are short-lived).  Maybe we could also re-add the 'next'
>> branch to serve as common ground for feature merging and testing, but
>> than can be done in a second time (and only if the need arise).
>>
>> When a major release is done, the master branch is to be merged into
>> the maint branch, and then a "new" master branch created stemming
>> from the resulting commit.
> 
> I think what you are proposing is better described as dropping the
> maint branch and doing development of features for both the stable
> series as well as the pending major release directly on the stable
> branch.
>
Absolutely not.  In 'maint' will go bugfixes, minor new features
(with low protability of regressions), and possibly new warnings for
obsoleted features (that might be removed when we pass to a future
"major" version).  In master will go "bigger" new feature, non-trivial
refactorings, and backward-incompatible changes (after their coming
has been duly announced and prepared in 'maint' and/or in earlier
releases).

This is basically the situation we have today, but without the extra
indirections and possibility of confusion (i.e., another 'msvc'-style
mess will be made less likely).

> When you wish to make a new release you simply make sure
> you have merged the latest branch-x.y into master, then create a new
> branch-x.<y+1> or branch-<x+1>.0 from where the current master is
> and you're done.
>
You mean that if we have just released automake 1.13, the release
1.13.1 should be cut from master?  That is absolutely *not* what I
want to do.  Sorry if I didn't explain myself clearly enough.

>> WDYT?  If you agree, I can apply the change below to HACKING, and
>> implement the new branching policy starting from the Automke 1.12
>> release.
> 
> Consider what will happen if you don't have maint branches,
>
> [SNIP]
>
I snip mostly of the rest of your arguments, now that it is clear
I still *want* to have a maint branch.

> I think it's immensely more clean to have the current dual maint and
> branch-1.11 approach for each expected bug-fix series.
>
Here I don't follow you.  Why are not 'maint' a 'master' enough exactly?

> When 1.12 is released, maint should probably move along with it
>
Yes, and a "new" master created, from which 1.13 will be finally derived.

> and a maint-1.11 can be created when needed, if a security fix is ever
> needed for the 1.11 series.
>
Agreed.  But we don't need this branch right away, since the last commit
in the 'maint' of the 1.11.x series will be properly tagged, so we can
easily access need and create a bug-fix branch out of it if and when the
need arises.

> Hopefully, we will not need a maint-1.11, but such things
> are as they are...
>
OK, so it sounds like we are in violent agreement in this matter.

> Either that, or you'd need to do dummy merges from branch-x.y into
> master after the release-related commits just to avoid future merge
> conflicts, but dummy merges are ugly in my opinion.  And branches are
> cheap.
>
Tags even more -- you don't pay them with the risk of confusion.

> I think we have learned not to merge new features past the maintenance
> branch (i.e. directly into the release branch)
>
Huh?  That *exactly* what should happen most of the time!  It's the
AM_PROG_AR situation that was an unusual case, in that we didn't want
the delay in the 1.12 release to keep this useful and low-risk feature
as "vaporware" for even more time -- so we merged it into the
maintenance branch.

Regards,
  Stefano




Information forwarded to bug-automake <at> gnu.org:
bug#11153; Package automake. (Mon, 02 Apr 2012 19:44:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-automake <at> gnu.org:
bug#11153; Package automake. (Mon, 02 Apr 2012 19:56:02 GMT) Full text and rfc822 format available.

Message #20 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Stefano Lattarini <stefano.lattarini <at> gmail.com>
To: Jim Meyering <jim <at> meyering.net>
Cc: bug-automake <at> gnu.org, 11153 <at> debbugs.gnu.org, automake-patches <at> gnu.org
Subject: Re: bug#11153: change automake branching policy: dispensing with
	the 'branch-X.Y' branches in the future
Date: Mon, 02 Apr 2012 21:54:59 +0200
Hi Jim.

On 04/02/2012 08:47 PM, Jim Meyering wrote:
> Stefano Lattarini wrote:
> ...
>> WDYT?  If you agree, I can apply the change below to HACKING, and
>> implement the new branching policy starting from the Automke 1.12
>> release.
>
> I agree.
> IMHO, you won't go wrong following git.git's example.
>
Glad you agree.

As for your nits you've pointed out: I've fixed them both.

Thanks,
  Stefano




Information forwarded to bug-automake <at> gnu.org:
bug#11153; Package automake. (Mon, 02 Apr 2012 19:56:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-automake <at> gnu.org:
bug#11153; Package automake. (Mon, 02 Apr 2012 22:02:02 GMT) Full text and rfc822 format available.

Message #26 received at 11153 <at> debbugs.gnu.org (full text, mbox):

From: Peter Rosin <peda <at> lysator.liu.se>
To: Stefano Lattarini <stefano.lattarini <at> gmail.com>
Cc: 11153 <at> debbugs.gnu.org, automake-patches <at> gnu.org
Subject: Re: bug#11153: change automake branching policy: dispensing with
	the 'branch-X.Y' branches in the future
Date: Tue, 03 Apr 2012 00:01:26 +0200
On 2012-04-02 21:42, Stefano Lattarini wrote:
> Hi Peter, thanks for the feedback.  But I fear we have a misunderstanding
> here.  See below.
> 
> On 04/02/2012 08:14 PM, Peter Rosin wrote:
>> On 2012-04-02 18:13, Stefano Lattarini wrote:
>>> Severity: wishlist
>>> thanks
>>>
>>> Hello Automakers.
>>>
>>> After some real hand-on experience with the current branching policy
>>> of Automake, I'm convinced the presence of the 'branch-X.Y' branches
>>> is just an annoyance and a source of confusion, and that a better policy
>>> would be to simply have a 'maint' branch (where to cut maintenance
>>>  releases directly from), a master branch (where maint is to be kept
>>> regularly merged into, and from which the next major release is to be
>>> derived at last), and possibly topic branches (only when needed, and
>>> better if they are short-lived).  Maybe we could also re-add the 'next'
>>> branch to serve as common ground for feature merging and testing, but
>>> than can be done in a second time (and only if the need arise).
>>>
>>> When a major release is done, the master branch is to be merged into
>>> the maint branch, and then a "new" master branch created stemming
>>> from the resulting commit.
>>
>> I think what you are proposing is better described as dropping the
>> maint branch and doing development of features for both the stable
>> series as well as the pending major release directly on the stable
>> branch.
>>
> Absolutely not.  In 'maint' will go bugfixes, minor new features
> (with low protability of regressions), and possibly new warnings for
> obsoleted features (that might be removed when we pass to a future
> "major" version).  In master will go "bigger" new feature, non-trivial
> refactorings, and backward-incompatible changes (after their coming
> has been duly announced and prepared in 'maint' and/or in earlier
> releases).

Ok, you didn't understand what I meant with dropping maint instead of
release.  My bad.  I think the rest is just follow-up-confusion
resulting from that misunderstanding.  I'll try to explain what I
mean again...

I think we should do exactly as you describe above.  However, for the
class of changes that are related to the actual release from maint we
should not use the maint branch, and therefore we need three branches.
I.e. we should not commit, to maint, exactly those changes that we do
not want on master but still want in the maintenance releases.
E.g. we will *never* want the change bumping the version from 1.12.3 to
1.12.4 on master.  Now, if we do not have both maint and branch-1.12,
we will have to jump through hoops to not get those changes into master
when we next merge maint into master.

I see two alternatives if there is no branch-1.12 (but see below,
near the end, when I think of a third option with short-lived branches)

1. resolve the merge conflicts, and hope that all changes that
   we don't want on master really do result in conflicts so that
   we don't neglect to fix them up in the merge.
2. merge from maint into master before the release-related commits
   and then do a dummy merge (--strategy=ours) afterwards so that
   the changes are ignored when we do a real merge later.  And
   hope that no real changes have weaseled their way into the "release
   window" between the pre-release merge and the dummy post-release
   merge.

I just happen to think those hoops are a worse cure than the disease
(an extra branch) they are targeting.  I.e., I think that maintenance
releases should happen from a separate branch from maint, so that
maint always merges as cleanly as possible into master.  That separate
branch is branch-x.y.  I fail to see what is wrong with the current
setup.

So, how do you intend to jump through the hoops described above
without the extra branch?

I only see one argument for killing the third branch, and that is the
msvc confusion.  And yes, we did make a mess of it with the msvc branch,
but we have learned and will not be so easily duped into pulling in
changes in branch-x.y without going via the maint branch the next time
we have the urge to merge a topic-branch with code suitable for master
into a maintenance release.

> This is basically the situation we have today, but without the extra
> indirections and possibility of confusion (i.e., another 'msvc'-style
> mess will be made less likely).

I think we have learned that lesson, I don't think we will mess up like
that again.  I therefore do not think it's a valid argument for killing
the third branch.

>> When you wish to make a new release you simply make sure
>> you have merged the latest branch-x.y into master, then create a new
>> branch-x.<y+1> or branch-<x+1>.0 from where the current master is
>> and you're done.
>>
> You mean that if we have just released automake 1.13, the release
> 1.13.1 should be cut from master?  That is absolutely *not* what I
> want to do.  Sorry if I didn't explain myself clearly enough.

That's of course not what I meant.  Make that "When you wish to
make a new release-series".  I.e. when you have released 1.14.5 and
want to release 1.15 (or 2.0 or whatever else non-maintenance).

>>> WDYT?  If you agree, I can apply the change below to HACKING, and
>>> implement the new branching policy starting from the Automke 1.12
>>> release.
>>
>> Consider what will happen if you don't have maint branches,
>>
>> [SNIP]
>>
> I snip mostly of the rest of your arguments, now that it is clear
> I still *want* to have a maint branch.

I don't agree that it's a maint branch if you include the commits
related to the release on it.  By doing that, you have a release
branch that is not suitable for merging into master in the way that
a maintenance branch would be.

>> I think it's immensely more clean to have the current dual maint and
>> branch-1.11 approach for each expected bug-fix series.
>>
> Here I don't follow you.  Why are not 'maint' a 'master' enough exactly?

See above.

>> When 1.12 is released, maint should probably move along with it
>>
> Yes, and a "new" master created, from which 1.13 will be finally derived.

No, you need never create a new master, that's not a sane view of
what happens.  It's saner to view it as if you branch off
whatever you need from master to make the major releases.

>> and a maint-1.11 can be created when needed, if a security fix is ever
>> needed for the 1.11 series.
>>
> Agreed.  But we don't need this branch right away, since the last commit
> in the 'maint' of the 1.11.x series will be properly tagged, so we can
> easily access need and create a bug-fix branch out of it if and when the
> need arises.

Yes, but that's no argument for killing the current three branch system.

>> Hopefully, we will not need a maint-1.11, but such things
>> are as they are...
>>
> OK, so it sounds like we are in violent agreement in this matter.

We agree on most things, but not on the thing you want to do, namely
kill one of the three branches.

>> Either that, or you'd need to do dummy merges from branch-x.y into
>> master after the release-related commits just to avoid future merge
>> conflicts, but dummy merges are ugly in my opinion.  And branches are
>> cheap.
>>
> Tags even more -- you don't pay them with the risk of confusion.
> 
>> I think we have learned not to merge new features past the maintenance
>> branch (i.e. directly into the release branch)
>>
> Huh?  That *exactly* what should happen most of the time!  It's the
> AM_PROG_AR situation that was an unusual case, in that we didn't want
> the delay in the 1.12 release to keep this useful and low-risk feature
> as "vaporware" for even more time -- so we merged it into the
> maintenance branch.

No, we merged it into the release branch.  We only merged it into
the maintenance branch later.




*time passes*

Hmmm, do you perhaps mean to create short-lived branches based on
maint for each release?

I.e. approximately this, I'm sure I'm missing some detail...

# time for major release
git checkout master
git merge maint
git checkout maint
git branch maint-1.11    # in case we happen to need it later
git merge master         # fast-forward, no commit needed
git branch release-1.12
git checkout release-1.12
# do version number bumps etc on release-1.12
git tag v1.12
git checkout master
git branch -D release-1.12
# time passes
# time for minor release
git checkout maint
git branch release-1.12.1
git checkout release-1.12.1
# do version number bumps etc on release-1.12.1
git tag v1.12.1
git checkout maint
git branch -D release-1.12.1

In that case, that works for me and all objections dropped, and
sorry for not getting it right away...

Cheers,
Peter




Information forwarded to bug-automake <at> gnu.org:
bug#11153; Package automake. (Wed, 04 Apr 2012 09:51:02 GMT) Full text and rfc822 format available.

Message #29 received at 11153 <at> debbugs.gnu.org (full text, mbox):

From: Stefano Lattarini <stefano.lattarini <at> gmail.com>
To: Peter Rosin <peda <at> lysator.liu.se>
Cc: 11153 <at> debbugs.gnu.org, automake-patches <at> gnu.org
Subject: Re: bug#11153: change automake branching policy: dispensing with
	the 'branch-X.Y' branches in the future
Date: Wed, 04 Apr 2012 11:50:17 +0200
On 04/03/2012 12:01 AM, Peter Rosin wrote:
>
> [SNIP]
>
> I'll try to explain what I mean again...
> 
> I think we should do exactly as you describe above.  However, for the
> class of changes that are related to the actual release from maint
>
Changes which, actually, consist just in *bumping a version number* in
NEWS and in the AC_INIT invocation in configure (in our current setup
at least).

> we shouldn't use the maint branch, and therefore we need three branches.
> I.e. we should not commit, to maint, exactly those changes that we do
> not want on master but still want in the maintenance releases.
> E.g. we will *never* want the change bumping the version from 1.12.3 to
> 1.12.4 on master.  Now, if we do not have both maint and branch-1.12,
> we will have to jump through hoops to not get those changes into master
> when we next merge maint into master.
>
No, we will just have a merge conflict on the version number -- that is
very trivial to solve.  I don't think introducing an extra branch just to
avoiding this slight and seldom-occurring annoyance would be warranted.

> I see two alternatives if there is no branch-1.12 (but see below,
> near the end, when I think of a third option with short-lived branches)
> 
> 1. resolve the merge conflicts, and hope that all changes that
>    we don't want on master really do result in conflicts so that
>    we don't neglect to fix them up in the merge.
>
The point is that *we want all the changes of the maintenance branch to
be merged master*.  That is basically what we have today, and it seems
to me it has worked out pretty well (apart from the msvc mess-up, but
that happened *exactly* because we didn't have the maintenance branch
truly merged into master for a while -- causing all sort of useless
conflicts and divergences and confusion).

> 2. merge from maint into master before the release-related commits
>    and then do a dummy merge (--strategy=ours) afterwards so that
>    the changes are ignored when we do a real merge later.  And
>    hope that no real changes have weaseled their way into the "release
>    window" between the pre-release merge and the dummy post-release
>    merge.
>
Again, the only changes a release-related commit should do is to bump
the version number in configure.ac and NEWS; there's hardly a way for
any real change to "weasel its way" into master this way, no?

> I just happen to think those hoops are a worse cure than the disease
> (an extra branch) they are targeting.  I.e., I think that maintenance
> releases should happen from a separate branch from maint, so that
> maint always merges as cleanly as possible into master.  That separate
> branch is branch-x.y.  I fail to see what is wrong with the current
> setup.
>
Basically, we have a dead-weight branch (branch-1.11) whose only
difference from maint is the version number in configure.in (and, at
the moment, some extra differences in NEWS, which are just a further
source of confusion and possible errors).

> So, how do you intend to jump through the hoops described above
> without the extra branch?
>
I don't, because there are no real hoops to jump through IMHO -- more
likely a single step to be climbed up and down once every time we do a
maintenance release (so, once a month at most, counting beta releases
as well).

> I only see one argument for killing the third branch, and that is the
> msvc confusion.  And yes, we did make a mess of it with the msvc branch,
> but we have learned and will not be so easily duped into pulling in
> changes in branch-x.y without going via the maint branch the next time
> we have the urge to merge a topic-branch with code suitable for master
> into a maintenance release.
>
So, if any "meaty" change for the maintenance branch 'branch-X.Y' is to
pass for 'maint' first -- what is the point of having this 'branch-X.Y'?
It's just dead weight.

>> This is basically the situation we have today, but without the extra
>> indirections and possibility of confusion (i.e., another 'msvc'-style
>> mess will be made less likely).
> 
> I think we have learned that lesson, I don't think we will mess up like
> that again.  I therefore do not think it's a valid argument for killing
> the third branch.
>
The real reason I have to want to kill the third branch is that it's
utterly useless with our current git setup.

>
> [SMALL SNIP]
>
>> I snip mostly of the rest of your arguments, now that it is clear
>> I still *want* to have a maint branch.
> 
> I don't agree that it's a maint branch if you include the commits
> related to the release on it.  By doing that, you have a release
> branch that is not suitable for merging into master in the way that
> a maintenance branch would be.
>
I still don't understand why it isn't suitable...  surely not because
we'll have to solve the spurious merge conflict in the version number
once a month, right?

>>> I think it's immensely more clean to have the current dual maint and
>>> branch-1.11 approach for each expected bug-fix series.
>>>
>> Here I don't follow you.  Why are not 'maint' a 'master' enough exactly?
> 
> See above.
> 
>>> When 1.12 is released, maint should probably move along with it
>>>
>> Yes, and a "new" master created, from which 1.13 will be finally derived.
> 
> No, you need never create a new master, that's not a sane view of
> what happens.
>
Let me explain in more details what I meant by "creating a new master branch".
With my proposed setup, just after the (say) 1.12 major release ,you merge
master into maint, bump the version number on both master (to 1.12a) and
maint (to 1.12.1a), re-merge maint into master (fixing the spurious conflict
on the version number), and christen this new state of master as the "new
master branch".

> It's saner to view it as if you branch off whatever you need from master
> to make the major releases.
>
I'd rather follow the example of git.git, which cuts the releases directly
from the 'master' and 'maint' branch:

  $ cd ~/src/git && git log maint

  commit cb2ed324fc917db0b79d7b1f3756575ffa5f70d5
  Author: Junio C Hamano <gitster <at> pobox.com>
  Date:   Mon Apr 2 13:07:58 2012 -0700

      Git 1.7.9.6

      Signed-off-by: Junio C Hamano <gitster <at> pobox.com>

  commit b52ab19d91015ebd6bebc83a82b2c3d64b948b36
  Merge: b8939b2 d387868
  Author: Junio C Hamano <gitster <at> pobox.com>
  Date:   Mon Apr 2 12:56:35 2012 -0700

      Merge branch 'jc/maint-merge-autoedit' into maint

      * jc/maint-merge-autoedit:
        merge: backport GIT_MERGE_AUTOEDIT support

  commit b8939b2b3abaa99c18bf57251cd2828b89ac38c5
  Author: Heiko Voigt <hvoigt <at> hvoigt.net>
  Date:   Thu Mar 29 09:21:22 2012 +0200

      string-list: document that string_list_insert() inserts unique strings

      Signed-off-by: Heiko Voigt <hvoigt <at> hvoigt.net>
      Signed-off-by: Junio C Hamano <gitster <at> pobox.com>

  commit 8ced9c90a28f6abc80dc5ad4cf7921c2322c0bb0
  Author: Junio C Hamano <gitster <at> pobox.com>
  Date:   Mon Mar 26 12:23:34 2012 -0700

      Git 1.7.9.5

      Signed-off-by: Junio C Hamano <gitster <at> pobox.com>

  ...

>
> [SNIP]
>
>>> I think we have learned not to merge new features past the maintenance
>>> branch (i.e. directly into the release branch)
>>>
>> Huh?  That *exactly* what should happen most of the time!  It's the
>> AM_PROG_AR situation that was an unusual case, in that we didn't want
>> the delay in the 1.12 release to keep this useful and low-risk feature
>> as "vaporware" for even more time -- so we merged it into the
>> maintenance branch.
> 
> No, we merged it into the release branch.  We only merged it into
> the maintenance branch later.
>
Yes, that's what I meant, sorry for the confusion.  But then again, if
we should merge any change in maint before placing it in branch-1.11 (as
we do today, not willing to repeat the msvc error): what is the point of
branch-1.11?

> 
> *time passes*
> 
> Hmmm, do you perhaps mean to create short-lived branches based on
> maint for each release?
>
> [SNIP]
>
This too would be a viable solution, and I indeed thought about it,
but it seems overkill to me.  So no, that's not what I meant, and
you had not misunderstood me.

Regards,
  Stefano




Information forwarded to bug-automake <at> gnu.org:
bug#11153; Package automake. (Wed, 04 Apr 2012 10:57:01 GMT) Full text and rfc822 format available.

Message #32 received at 11153 <at> debbugs.gnu.org (full text, mbox):

From: Peter Rosin <peda <at> lysator.liu.se>
To: Stefano Lattarini <stefano.lattarini <at> gmail.com>
Cc: 11153 <at> debbugs.gnu.org, automake-patches <at> gnu.org
Subject: Re: bug#11153: change automake branching policy: dispensing with
	the 'branch-X.Y' branches in the future
Date: Wed, 04 Apr 2012 12:55:51 +0200
On 2012-04-04 11:50, Stefano Lattarini wrote:
> On 04/03/2012 12:01 AM, Peter Rosin wrote:
>>
>> [SNIP]
>>
>> I'll try to explain what I mean again...
>>
>> I think we should do exactly as you describe above.  However, for the
>> class of changes that are related to the actual release from maint
>>
> Changes which, actually, consist just in *bumping a version number* in
> NEWS and in the AC_INIT invocation in configure (in our current setup
> at least).

Ok, we'll have to agree to disagree then.  I just know that I hate those
version conflicts in other (proprietary) git repos I'm using.  But since
I'm probably not going to have to deal with it anyway, I guess that as
long as you're happy with it, I'm sure it's going to work out..

BTW, your log of the maint branch in git.git does not show how they
handle the version merge conflicts (or if they merge maint into master
at all, I have zero knowledge of how git uses their maint branch).

Cheers,
Peter




Information forwarded to bug-automake <at> gnu.org:
bug#11153; Package automake. (Wed, 04 Apr 2012 11:40:01 GMT) Full text and rfc822 format available.

Message #35 received at 11153 <at> debbugs.gnu.org (full text, mbox):

From: Stefano Lattarini <stefano.lattarini <at> gmail.com>
To: Peter Rosin <peda <at> lysator.liu.se>
Cc: 11153 <at> debbugs.gnu.org, automake-patches <at> gnu.org
Subject: Re: bug#11153: change automake branching policy: dispensing with
	the 'branch-X.Y' branches in the future
Date: Wed, 04 Apr 2012 13:38:41 +0200
On 04/04/2012 12:55 PM, Peter Rosin wrote:
> On 2012-04-04 11:50, Stefano Lattarini wrote:
>> On 04/03/2012 12:01 AM, Peter Rosin wrote:
>>>
>>> [SNIP]
>>>
>>> I'll try to explain what I mean again...
>>>
>>> I think we should do exactly as you describe above.  However, for the
>>> class of changes that are related to the actual release from maint
>>>
>> Changes which, actually, consist just in *bumping a version number* in
>> NEWS and in the AC_INIT invocation in configure (in our current setup
>> at least).
> 
> Ok, we'll have to agree to disagree then.
>
That's fine, I just wanted to be sure there were no misunderstandings nor
incomprehension.

> I just know that I hate those
> version conflicts in other (proprietary) git repos I'm using.  But since
> I'm probably not going to have to deal with it anyway, I guess that as
> long as you're happy with it, I'm sure it's going to work out..
>
OK, thanks.  Too bad I couldn't win you over to my side though.

And anyway, if it turns out my expectation about these version conflicts are
overly optimistic, we can revert to the old branch setup from 1.13 onwards (or
even implement you suggestion about "a temporary branch for each release").

> BTW, your log of the maint branch in git.git does not show how they
> handle the version merge conflicts
>
I'm not sure about this either; we might end up asking them some day ...

> (or if they merge maint into master at all,
>
Yes they do, as easily shown by gitk.

> I have zero knowledge of how git uses their maint branch).
>
For more info, you might take a look at the "REPOSITORIES, BRANCHES AND
DOCUMENTATION" section of:

  <http://git-blame.blogspot.it/p/note-from-maintainer.html>

Regards,
  Stefano




Information forwarded to bug-automake <at> gnu.org:
bug#11153; Package automake. (Wed, 11 Apr 2012 15:49:01 GMT) Full text and rfc822 format available.

Message #38 received at 11153 <at> debbugs.gnu.org (full text, mbox):

From: Stefano Lattarini <stefano.lattarini <at> gmail.com>
To: Peter Rosin <peda <at> lysator.liu.se>
Cc: 11153 <at> debbugs.gnu.org, automake-patches <at> gnu.org
Subject: Re: bug#11153: change automake branching policy: dispensing with
	the 'branch-X.Y' branches in the future
Date: Wed, 11 Apr 2012 17:47:41 +0200
[Message part 1 (text/plain, inline)]
On 04/04/2012 01:38 PM, Stefano Lattarini wrote:
> On 04/04/2012 12:55 PM, Peter Rosin wrote:
>
>> Ok, we'll have to agree to disagree then.
>>
> That's fine, I just wanted to be sure there were no misunderstandings nor
> incomprehension.
> 
I've pushed the attached patch to 'master' now.  I will wait to close this
report until Automake 1.12 is released and the new branching/merging policy
is in place though.

Regards,
  Stefano
[0001-hacking-described-new-branching-policy-for-1.12-an-l.patch (text/x-diff, attachment)]

Reply sent to Stefano Lattarini <stefano.lattarini <at> gmail.com>:
You have taken responsibility. (Wed, 25 Apr 2012 21:33:01 GMT) Full text and rfc822 format available.

Notification sent to Stefano Lattarini <stefano.lattarini <at> gmail.com>:
bug acknowledged by developer. (Wed, 25 Apr 2012 21:33:02 GMT) Full text and rfc822 format available.

Message #43 received at 11153-done <at> debbugs.gnu.org (full text, mbox):

From: Stefano Lattarini <stefano.lattarini <at> gmail.com>
To: "automake-patches <at> gnu.org" <automake-patches <at> gnu.org>
Cc: 11153-done <at> debbugs.gnu.org
Subject: Re: bug#11153: change automake branching policy: dispensing with
	the 'branch-X.Y' branches in the future
Date: Wed, 25 Apr 2012 23:31:21 +0200
I've now implemented the proposed branching setup, with the following steps:

 - I have removed the old and outdated 'next' branch (which was an
   ancestor of the current 'master').

 - I have removed the 'branch-1.11' branch (whose tip pointed at
   the commit tagged by tag 'v1.11.5').

 - Now that 1.12 is out, I've merged master into maint (with a non
   fast-forward merge to keep this action visible in git history);

 - I have updated the version number in maint to 1.12.0a;

 - I have merged this new maint into master;

 - Finally, I have updated the version number in master to 1.12a.

I'm thus closing this bug report.  Let's hope the new policy will work
out for the best!

Thanks,
  Stefano




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Thu, 24 May 2012 11:24:03 GMT) Full text and rfc822 format available.

This bug report was last modified 13 years and 33 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.