Re: [DISCUSS][PROPOSAL] git workflow

2014-07-29 Thread Sam Schmit
Hey guys,

I totally agree that going with a git workflow is the best way forward:

*  Having developers branch off of development onto a bugfix/feature
branch to add or fix something in cloudstack, and controlling the merge
back into development.
*  Using a release branch off of development in order to prepare a
release candidate branch.  Hotfix branches can be made off of a release
branch to fix any final issues.
*  Standard gitflow would then have the release branch merge into master,
which would contain only release-ready versions of the code.

I've followed this project workflow for several projects, and it seems to
work well.  Once we get everyone accustomed to this, I think it will
improve everyone's ability to follow along with what is happening in the
project, and will help project coordinators keep control of the overall
direction.

Sam





On Mon, Jul 28, 2014 at 11:03 AM, Rohit Yadav rohit.ya...@shapeblue.com
wrote:

 Hi,

 It took me sometime to go through all the 58 emails on this thread.
 I suggest we need to adapt gitflow to our git workflow. I liked the
 summary Rajani suggested here: http://markmail.org/message/
 2642ilfajkpshnfn

 Let's continue the discussion in the new thread now:
 http://markmail.org/message/zf5yt47jqq3auswo

 Regards.


 Rajani Karuturi wrote:

 branches will be deleted after the release or hotfix if you use the
 git-flow commands.

 This would be the flow for a hotfix:
 1. branch off from the release tag on master. in this case it would be
 release/4.4.0
 2. commit the fixes in hotfix/4.4.1
 3. do the release
 4. merge to develop
 5. merge to master and update tags
 6. delete hotfix branch

 But, I agree that there can be a problem when we wish to do 4.4.2 if we
 delete the hotfix branch

 may be we should use git-flow support instead of hotfix which doesn’t
 delete the branch
 http://stackoverflow.com/a/16866118/201514

 ~Rajani



 On 25-Jul-2014, at 12:31 pm, Daan Hooglanddaan.hoogl...@gmail.com
  wrote:

  Rightful question Erik,

 Rajani mentioned that release branches will be deleted. This will only
 happen once the release is no longer supported. Any hotfix branch will
 still have to merged on that (and master possibly) until we stop
 supporting that branch.

 On the other hand you can branch from any commit.

 btw 4.4.1 is a bad example of you as we will still maintain that
 without gitflow. But it is valid for for instance 4.5.2 or 5.0.1.

 On Fri, Jul 25, 2014 at 8:04 AM, Erik Weberterbol...@gmail.com  wrote:

 This is out of my git league, but how do you handle minor versions that
 way?

 Assuming 4.8.0 is the latest stable release and HEAD on master.

 Then you want to release 4.4.1.

 First of all can you develop bugfixes for 4.4 along the way, when both
 develop and master HEAD might be hugely different?

 Second, can you commit  behind HEAD? You don't want the 4.4.1 release
 instead of 4.8.0 to be HEAD

 Someone might have good solutions to this, but if not I would propose to
 keep the release branches for future bugfixes.

 Erik
 25. juli 2014 06:02 skrev Rajani Karuturirajani.karut...@citrix.com
 følgende:

  On 24-Jul-2014, at 10:25 pm, Mike Tutkowskimike.tutkowski@
 solidfire.com
 wrote:

  I believe I agree with these steps.

 A couple questions:

 Is 'master' simply always going to be equal to what's the most recent
 version of the code that's in production?

 I think so. master will always be at the latest release and all the
 previous releases properly tagged. The release branches would be
 deleted
 once release is done.

  Also, would 'develop' be for 4.6 code then and 4.5 code would go
 directly
 into RELEASE-4.5?

  Yes. 4.6 work should be done on develop branch and any 4.5 bug fixes
 should be done on the 4.5 branch.



 ~Rajani


  On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi
 rajani.karut...@citrix.com  wrote:

  Hi Daan,
 here is what i propose:

 1. rename 'master' to 'develop’
 2. branch a new 'master' from '4.4’
 3. branch 'RELEASE-4.5' from the develop
 4. merge 'RELEASE-4.5' to master once the release voting is done.

 RELEASE-4.6 branch should be off develop as all the feature branches

 would

 be merged there before freeze for 4.6 and would be merged to master
 when
 the release is voted.

 The other question I have is in the step:4. how are we going to
 manage
 fixes to 4.5 post branch cut?  ( assuming no features as the freeze
 is

 done)

 ~Rajani



 On 24-Jul-2014, at 11:52 am, Daan Hooglanddaan.hoogl...@gmail.com
 wrote:

  Mike, Rajani,

 Sebastien's point was that the current 4.4 is the closest we have
 to a
 releasable branch. I don't mind enting on master but it will require
 more fixing. In general all of this will require some RM work of all
 committers. Please ammend my little proposal if you will.

 On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi
 rajani.karut...@citrix.com  wrote:

 I agree with mike. I think we should start 4.5 from where master is

 now

 Also create a develop branch from master and 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-29 Thread Nate Gordon
I just got caught up on this. My apologies for the delay.

I think that we are very much on the right track and that we are right to
deviate from the normal gitflow concept around the maintenance versions.
Since we will in theory have a 4.5.1 after 4.6.0 is released, there will be
some level of concurrent release management occurring. I also agree that
4.4.x is probably an overly difficult area to start this new process. The
git foo that Leo pulled out is impressive and certainly shows the sheer
pain that would be incurred by taking that path. I'm sure the transition
won't be trivial, but we don't need to make it any harder than we have to.

Thanks

-Nate


On Tue, Jul 29, 2014 at 10:00 AM, Sam Schmit sam.sch...@appcore.com wrote:

 Hey guys,

 I totally agree that going with a git workflow is the best way forward:

 *  Having developers branch off of development onto a bugfix/feature
 branch to add or fix something in cloudstack, and controlling the merge
 back into development.
 *  Using a release branch off of development in order to prepare a
 release candidate branch.  Hotfix branches can be made off of a release
 branch to fix any final issues.
 *  Standard gitflow would then have the release branch merge into master,
 which would contain only release-ready versions of the code.

 I've followed this project workflow for several projects, and it seems to
 work well.  Once we get everyone accustomed to this, I think it will
 improve everyone's ability to follow along with what is happening in the
 project, and will help project coordinators keep control of the overall
 direction.

 Sam





 On Mon, Jul 28, 2014 at 11:03 AM, Rohit Yadav rohit.ya...@shapeblue.com
 wrote:

  Hi,
 
  It took me sometime to go through all the 58 emails on this thread.
  I suggest we need to adapt gitflow to our git workflow. I liked the
  summary Rajani suggested here: http://markmail.org/message/
  2642ilfajkpshnfn
 
  Let's continue the discussion in the new thread now:
  http://markmail.org/message/zf5yt47jqq3auswo
 
  Regards.
 
 
  Rajani Karuturi wrote:
 
  branches will be deleted after the release or hotfix if you use the
  git-flow commands.
 
  This would be the flow for a hotfix:
  1. branch off from the release tag on master. in this case it would be
  release/4.4.0
  2. commit the fixes in hotfix/4.4.1
  3. do the release
  4. merge to develop
  5. merge to master and update tags
  6. delete hotfix branch
 
  But, I agree that there can be a problem when we wish to do 4.4.2 if we
  delete the hotfix branch
 
  may be we should use git-flow support instead of hotfix which doesn’t
  delete the branch
  http://stackoverflow.com/a/16866118/201514
 
  ~Rajani
 
 
 
  On 25-Jul-2014, at 12:31 pm, Daan Hooglanddaan.hoogl...@gmail.com
   wrote:
 
   Rightful question Erik,
 
  Rajani mentioned that release branches will be deleted. This will only
  happen once the release is no longer supported. Any hotfix branch will
  still have to merged on that (and master possibly) until we stop
  supporting that branch.
 
  On the other hand you can branch from any commit.
 
  btw 4.4.1 is a bad example of you as we will still maintain that
  without gitflow. But it is valid for for instance 4.5.2 or 5.0.1.
 
  On Fri, Jul 25, 2014 at 8:04 AM, Erik Weberterbol...@gmail.com
  wrote:
 
  This is out of my git league, but how do you handle minor versions
 that
  way?
 
  Assuming 4.8.0 is the latest stable release and HEAD on master.
 
  Then you want to release 4.4.1.
 
  First of all can you develop bugfixes for 4.4 along the way, when both
  develop and master HEAD might be hugely different?
 
  Second, can you commit  behind HEAD? You don't want the 4.4.1 release
  instead of 4.8.0 to be HEAD
 
  Someone might have good solutions to this, but if not I would propose
 to
  keep the release branches for future bugfixes.
 
  Erik
  25. juli 2014 06:02 skrev Rajani Karuturi
 rajani.karut...@citrix.com
  følgende:
 
   On 24-Jul-2014, at 10:25 pm, Mike Tutkowskimike.tutkowski@
  solidfire.com
  wrote:
 
   I believe I agree with these steps.
 
  A couple questions:
 
  Is 'master' simply always going to be equal to what's the most
 recent
  version of the code that's in production?
 
  I think so. master will always be at the latest release and all the
  previous releases properly tagged. The release branches would be
  deleted
  once release is done.
 
   Also, would 'develop' be for 4.6 code then and 4.5 code would go
  directly
  into RELEASE-4.5?
 
   Yes. 4.6 work should be done on develop branch and any 4.5 bug
 fixes
  should be done on the 4.5 branch.
 
 
 
  ~Rajani
 
 
   On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi
  rajani.karut...@citrix.com  wrote:
 
   Hi Daan,
  here is what i propose:
 
  1. rename 'master' to 'develop’
  2. branch a new 'master' from '4.4’
  3. branch 'RELEASE-4.5' from the develop
  4. merge 'RELEASE-4.5' to master once the release voting is done.
 
  RELEASE-4.6 branch should be off develop 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-28 Thread Rohit Yadav

Hi,

It took me sometime to go through all the 58 emails on this thread.
I suggest we need to adapt gitflow to our git workflow. I liked the
summary Rajani suggested here: http://markmail.org/message/2642ilfajkpshnfn

Let's continue the discussion in the new thread now:
http://markmail.org/message/zf5yt47jqq3auswo

Regards.


Rajani Karuturi wrote:

branches will be deleted after the release or hotfix if you use the git-flow 
commands.

This would be the flow for a hotfix:
1. branch off from the release tag on master. in this case it would be 
release/4.4.0
2. commit the fixes in hotfix/4.4.1
3. do the release
4. merge to develop
5. merge to master and update tags
6. delete hotfix branch

But, I agree that there can be a problem when we wish to do 4.4.2 if we delete 
the hotfix branch

may be we should use git-flow support instead of hotfix which doesn’t delete 
the branch
http://stackoverflow.com/a/16866118/201514

~Rajani



On 25-Jul-2014, at 12:31 pm, Daan Hooglanddaan.hoogl...@gmail.com  wrote:


Rightful question Erik,

Rajani mentioned that release branches will be deleted. This will only
happen once the release is no longer supported. Any hotfix branch will
still have to merged on that (and master possibly) until we stop
supporting that branch.

On the other hand you can branch from any commit.

btw 4.4.1 is a bad example of you as we will still maintain that
without gitflow. But it is valid for for instance 4.5.2 or 5.0.1.

On Fri, Jul 25, 2014 at 8:04 AM, Erik Weberterbol...@gmail.com  wrote:

This is out of my git league, but how do you handle minor versions that way?

Assuming 4.8.0 is the latest stable release and HEAD on master.

Then you want to release 4.4.1.

First of all can you develop bugfixes for 4.4 along the way, when both
develop and master HEAD might be hugely different?

Second, can you commit  behind HEAD? You don't want the 4.4.1 release
instead of 4.8.0 to be HEAD

Someone might have good solutions to this, but if not I would propose to
keep the release branches for future bugfixes.

Erik
25. juli 2014 06:02 skrev Rajani Karuturirajani.karut...@citrix.com
følgende:


On 24-Jul-2014, at 10:25 pm, Mike Tutkowskimike.tutkow...@solidfire.com
wrote:


I believe I agree with these steps.

A couple questions:

Is 'master' simply always going to be equal to what's the most recent
version of the code that's in production?

I think so. master will always be at the latest release and all the
previous releases properly tagged. The release branches would be deleted
once release is done.


Also, would 'develop' be for 4.6 code then and 4.5 code would go directly
into RELEASE-4.5?


Yes. 4.6 work should be done on develop branch and any 4.5 bug fixes
should be done on the 4.5 branch.



~Rajani



On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi
rajani.karut...@citrix.com  wrote:


Hi Daan,
here is what i propose:

1. rename 'master' to 'develop’
2. branch a new 'master' from '4.4’
3. branch 'RELEASE-4.5' from the develop
4. merge 'RELEASE-4.5' to master once the release voting is done.

RELEASE-4.6 branch should be off develop as all the feature branches

would

be merged there before freeze for 4.6 and would be merged to master when
the release is voted.

The other question I have is in the step:4. how are we going to manage
fixes to 4.5 post branch cut?  ( assuming no features as the freeze is

done)

~Rajani



On 24-Jul-2014, at 11:52 am, Daan Hooglanddaan.hoogl...@gmail.com
wrote:


Mike, Rajani,

Sebastien's point was that the current 4.4 is the closest we have to a
releasable branch. I don't mind enting on master but it will require
more fixing. In general all of this will require some RM work of all
committers. Please ammend my little proposal if you will.

On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi
rajani.karut...@citrix.com  wrote:

I agree with mike. I think we should start 4.5 from where master is

now

Also create a develop branch from master and continue future work for

4.6 there.

I am not clear on how the release branches are going to be maintained.
Are we saying we would create 4.5-RELEASE branch which is essentially

same as our current -FORWARD branch and continue cherry-picking?

I would prefer merges to cherry-picks.
Also, I think we should allow committers to commit to the RELEASE

branch after discussing about it on dev@ and have RM closely monitor

them.

Any commit intended for 4.5 RELEASE should be checked in after

discussion in the 4.5 Release branch and then merged to develop branch.


~Rajani



On 24-Jul-2014, at 1:14 am, Mike Tutkowski

mike.tutkow...@solidfire.com  wrote:

Per earlier e-mails, I don't think we want to start 4.5 where 4.4

left

off

and then merge features from develop into 4.5.

Why don't we instead start 4.5 where master is now with the

assumption

that

since we are past Feature Freeze for 4.5 that master is stable

enough?


On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland

daan.hoogl...@gmail.com

wrote:


so to start formulate 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-25 Thread Erik Weber
This is out of my git league, but how do you handle minor versions that way?

Assuming 4.8.0 is the latest stable release and HEAD on master.

Then you want to release 4.4.1.

First of all can you develop bugfixes for 4.4 along the way, when both
develop and master HEAD might be hugely different?

Second, can you commit  behind HEAD? You don't want the 4.4.1 release
instead of 4.8.0 to be HEAD

Someone might have good solutions to this, but if not I would propose to
keep the release branches for future bugfixes.

Erik
25. juli 2014 06:02 skrev Rajani Karuturi rajani.karut...@citrix.com
følgende:

 On 24-Jul-2014, at 10:25 pm, Mike Tutkowski mike.tutkow...@solidfire.com
 wrote:

  I believe I agree with these steps.
 
  A couple questions:
 
  Is 'master' simply always going to be equal to what's the most recent
  version of the code that's in production?

 I think so. master will always be at the latest release and all the
 previous releases properly tagged. The release branches would be deleted
 once release is done.

 
  Also, would 'develop' be for 4.6 code then and 4.5 code would go directly
  into RELEASE-4.5?
 

 Yes. 4.6 work should be done on develop branch and any 4.5 bug fixes
 should be done on the 4.5 branch.



 ~Rajani


 
  On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi 
  rajani.karut...@citrix.com wrote:
 
 
  Hi Daan,
  here is what i propose:
 
  1. rename 'master' to 'develop’
  2. branch a new 'master' from '4.4’
  3. branch 'RELEASE-4.5' from the develop
  4. merge 'RELEASE-4.5' to master once the release voting is done.
 
  RELEASE-4.6 branch should be off develop as all the feature branches
 would
  be merged there before freeze for 4.6 and would be merged to master when
  the release is voted.
 
  The other question I have is in the step:4. how are we going to manage
  fixes to 4.5 post branch cut?  ( assuming no features as the freeze is
 done)
 
  ~Rajani
 
 
 
  On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com
  wrote:
 
  Mike, Rajani,
 
  Sebastien's point was that the current 4.4 is the closest we have to a
  releasable branch. I don't mind enting on master but it will require
  more fixing. In general all of this will require some RM work of all
  committers. Please ammend my little proposal if you will.
 
  On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi
  rajani.karut...@citrix.com wrote:
  I agree with mike. I think we should start 4.5 from where master is
 now
  Also create a develop branch from master and continue future work for
  4.6 there.
 
  I am not clear on how the release branches are going to be maintained.
  Are we saying we would create 4.5-RELEASE branch which is essentially
  same as our current -FORWARD branch and continue cherry-picking?
 
  I would prefer merges to cherry-picks.
  Also, I think we should allow committers to commit to the RELEASE
  branch after discussing about it on dev@ and have RM closely monitor
 them.
  Any commit intended for 4.5 RELEASE should be checked in after
  discussion in the 4.5 Release branch and then merged to develop branch.
 
 
  ~Rajani
 
 
 
  On 24-Jul-2014, at 1:14 am, Mike Tutkowski 
  mike.tutkow...@solidfire.com wrote:
 
  Per earlier e-mails, I don't think we want to start 4.5 where 4.4
 left
  off
  and then merge features from develop into 4.5.
 
  Why don't we instead start 4.5 where master is now with the
 assumption
  that
  since we are past Feature Freeze for 4.5 that master is stable
 enough?
 
 
  On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland 
  daan.hoogl...@gmail.com
  wrote:
 
  so to start formulate a proposal:
 
  all work shall be done in a new branch (it is advisable to prefix
 your
  branches with your id)
  when working, features will be cherry-picked/merged into the release
  branch they are for and next into master.
  hotfixes will be done in branchname-hotfixes
 
  as transition we will
 
  rename 'master' to 'develop'
  branch a new 'master' from '4.4'
  branch '4.5' from the new 'master'
  merge any features from the new 'develop' to '4.5' and 'master'
 
 
 
  On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen 
 run...@gmail.com
 
  wrote:
 
  On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com
 
  wrote:
 
 
  On Jul 23, 2014, at 12:21 PM, Nate Gordon 
 nate.gor...@appcore.com
  wrote:
 
  Let me ask the question, why have master be develop and a release
  branch be
  master? If we are going to follow gitflow, why not just stick
  with
  the
  norm? If master is the development branch, it might not be
 stable.
  I
  think
  the goal here is that we have an obvious stable branch. Anyone
  could
  come
  check out master and have the latest useable.
 
  I am in favor of following the norm, so ideally master should be
 our
  stable branch (agreed).
 
  The issue is with the transition.
 
  Our latest releasable product is the 4.4 branch (4.4.0 tag), so
  ideally
  we could start a stable branch of this tag and build up bug fix
  releases
  all the way 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-25 Thread Daan Hoogland
Rightful question Erik,

Rajani mentioned that release branches will be deleted. This will only
happen once the release is no longer supported. Any hotfix branch will
still have to merged on that (and master possibly) until we stop
supporting that branch.

On the other hand you can branch from any commit.

btw 4.4.1 is a bad example of you as we will still maintain that
without gitflow. But it is valid for for instance 4.5.2 or 5.0.1.

On Fri, Jul 25, 2014 at 8:04 AM, Erik Weber terbol...@gmail.com wrote:
 This is out of my git league, but how do you handle minor versions that way?

 Assuming 4.8.0 is the latest stable release and HEAD on master.

 Then you want to release 4.4.1.

 First of all can you develop bugfixes for 4.4 along the way, when both
 develop and master HEAD might be hugely different?

 Second, can you commit  behind HEAD? You don't want the 4.4.1 release
 instead of 4.8.0 to be HEAD

 Someone might have good solutions to this, but if not I would propose to
 keep the release branches for future bugfixes.

 Erik
 25. juli 2014 06:02 skrev Rajani Karuturi rajani.karut...@citrix.com
 følgende:

 On 24-Jul-2014, at 10:25 pm, Mike Tutkowski mike.tutkow...@solidfire.com
 wrote:

  I believe I agree with these steps.
 
  A couple questions:
 
  Is 'master' simply always going to be equal to what's the most recent
  version of the code that's in production?

 I think so. master will always be at the latest release and all the
 previous releases properly tagged. The release branches would be deleted
 once release is done.

 
  Also, would 'develop' be for 4.6 code then and 4.5 code would go directly
  into RELEASE-4.5?
 

 Yes. 4.6 work should be done on develop branch and any 4.5 bug fixes
 should be done on the 4.5 branch.



 ~Rajani


 
  On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi 
  rajani.karut...@citrix.com wrote:
 
 
  Hi Daan,
  here is what i propose:
 
  1. rename 'master' to 'develop’
  2. branch a new 'master' from '4.4’
  3. branch 'RELEASE-4.5' from the develop
  4. merge 'RELEASE-4.5' to master once the release voting is done.
 
  RELEASE-4.6 branch should be off develop as all the feature branches
 would
  be merged there before freeze for 4.6 and would be merged to master when
  the release is voted.
 
  The other question I have is in the step:4. how are we going to manage
  fixes to 4.5 post branch cut?  ( assuming no features as the freeze is
 done)
 
  ~Rajani
 
 
 
  On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com
  wrote:
 
  Mike, Rajani,
 
  Sebastien's point was that the current 4.4 is the closest we have to a
  releasable branch. I don't mind enting on master but it will require
  more fixing. In general all of this will require some RM work of all
  committers. Please ammend my little proposal if you will.
 
  On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi
  rajani.karut...@citrix.com wrote:
  I agree with mike. I think we should start 4.5 from where master is
 now
  Also create a develop branch from master and continue future work for
  4.6 there.
 
  I am not clear on how the release branches are going to be maintained.
  Are we saying we would create 4.5-RELEASE branch which is essentially
  same as our current -FORWARD branch and continue cherry-picking?
 
  I would prefer merges to cherry-picks.
  Also, I think we should allow committers to commit to the RELEASE
  branch after discussing about it on dev@ and have RM closely monitor
 them.
  Any commit intended for 4.5 RELEASE should be checked in after
  discussion in the 4.5 Release branch and then merged to develop branch.
 
 
  ~Rajani
 
 
 
  On 24-Jul-2014, at 1:14 am, Mike Tutkowski 
  mike.tutkow...@solidfire.com wrote:
 
  Per earlier e-mails, I don't think we want to start 4.5 where 4.4
 left
  off
  and then merge features from develop into 4.5.
 
  Why don't we instead start 4.5 where master is now with the
 assumption
  that
  since we are past Feature Freeze for 4.5 that master is stable
 enough?
 
 
  On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland 
  daan.hoogl...@gmail.com
  wrote:
 
  so to start formulate a proposal:
 
  all work shall be done in a new branch (it is advisable to prefix
 your
  branches with your id)
  when working, features will be cherry-picked/merged into the release
  branch they are for and next into master.
  hotfixes will be done in branchname-hotfixes
 
  as transition we will
 
  rename 'master' to 'develop'
  branch a new 'master' from '4.4'
  branch '4.5' from the new 'master'
  merge any features from the new 'develop' to '4.5' and 'master'
 
 
 
  On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen 
 run...@gmail.com
 
  wrote:
 
  On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com
 
  wrote:
 
 
  On Jul 23, 2014, at 12:21 PM, Nate Gordon 
 nate.gor...@appcore.com
  wrote:
 
  Let me ask the question, why have master be develop and a release
  branch be
  master? If we are going to follow gitflow, why not just stick
  with
 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-25 Thread Daan Hoogland
I went on and read the comments in
http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html

It contains a big warning on using gitflow that has been between my
lines in this thread all along. Git flow is not going to solve our
problem. It is a discipline that is captured in it that will save us.
Please everybody educate yourselves on the subject. If we are going to
get along as a community we need to get this right. We'll be able to
support old releases and make new ones just like we dream. gitflow
wont give us that by itself.

Daan (sounding desperate and impatient but being eager)

On Fri, Jul 25, 2014 at 9:01 AM, Daan Hoogland daan.hoogl...@gmail.com wrote:
 Rightful question Erik,

 Rajani mentioned that release branches will be deleted. This will only
 happen once the release is no longer supported. Any hotfix branch will
 still have to merged on that (and master possibly) until we stop
 supporting that branch.

 On the other hand you can branch from any commit.

 btw 4.4.1 is a bad example of you as we will still maintain that
 without gitflow. But it is valid for for instance 4.5.2 or 5.0.1.

 On Fri, Jul 25, 2014 at 8:04 AM, Erik Weber terbol...@gmail.com wrote:
 This is out of my git league, but how do you handle minor versions that way?

 Assuming 4.8.0 is the latest stable release and HEAD on master.

 Then you want to release 4.4.1.

 First of all can you develop bugfixes for 4.4 along the way, when both
 develop and master HEAD might be hugely different?

 Second, can you commit  behind HEAD? You don't want the 4.4.1 release
 instead of 4.8.0 to be HEAD

 Someone might have good solutions to this, but if not I would propose to
 keep the release branches for future bugfixes.

 Erik
 25. juli 2014 06:02 skrev Rajani Karuturi rajani.karut...@citrix.com
 følgende:

 On 24-Jul-2014, at 10:25 pm, Mike Tutkowski mike.tutkow...@solidfire.com
 wrote:

  I believe I agree with these steps.
 
  A couple questions:
 
  Is 'master' simply always going to be equal to what's the most recent
  version of the code that's in production?

 I think so. master will always be at the latest release and all the
 previous releases properly tagged. The release branches would be deleted
 once release is done.

 
  Also, would 'develop' be for 4.6 code then and 4.5 code would go directly
  into RELEASE-4.5?
 

 Yes. 4.6 work should be done on develop branch and any 4.5 bug fixes
 should be done on the 4.5 branch.



 ~Rajani


 
  On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi 
  rajani.karut...@citrix.com wrote:
 
 
  Hi Daan,
  here is what i propose:
 
  1. rename 'master' to 'develop’
  2. branch a new 'master' from '4.4’
  3. branch 'RELEASE-4.5' from the develop
  4. merge 'RELEASE-4.5' to master once the release voting is done.
 
  RELEASE-4.6 branch should be off develop as all the feature branches
 would
  be merged there before freeze for 4.6 and would be merged to master when
  the release is voted.
 
  The other question I have is in the step:4. how are we going to manage
  fixes to 4.5 post branch cut?  ( assuming no features as the freeze is
 done)
 
  ~Rajani
 
 
 
  On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com
  wrote:
 
  Mike, Rajani,
 
  Sebastien's point was that the current 4.4 is the closest we have to a
  releasable branch. I don't mind enting on master but it will require
  more fixing. In general all of this will require some RM work of all
  committers. Please ammend my little proposal if you will.
 
  On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi
  rajani.karut...@citrix.com wrote:
  I agree with mike. I think we should start 4.5 from where master is
 now
  Also create a develop branch from master and continue future work for
  4.6 there.
 
  I am not clear on how the release branches are going to be maintained.
  Are we saying we would create 4.5-RELEASE branch which is essentially
  same as our current -FORWARD branch and continue cherry-picking?
 
  I would prefer merges to cherry-picks.
  Also, I think we should allow committers to commit to the RELEASE
  branch after discussing about it on dev@ and have RM closely monitor
 them.
  Any commit intended for 4.5 RELEASE should be checked in after
  discussion in the 4.5 Release branch and then merged to develop branch.
 
 
  ~Rajani
 
 
 
  On 24-Jul-2014, at 1:14 am, Mike Tutkowski 
  mike.tutkow...@solidfire.com wrote:
 
  Per earlier e-mails, I don't think we want to start 4.5 where 4.4
 left
  off
  and then merge features from develop into 4.5.
 
  Why don't we instead start 4.5 where master is now with the
 assumption
  that
  since we are past Feature Freeze for 4.5 that master is stable
 enough?
 
 
  On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland 
  daan.hoogl...@gmail.com
  wrote:
 
  so to start formulate a proposal:
 
  all work shall be done in a new branch (it is advisable to prefix
 your
  branches with your id)
  when working, features will be cherry-picked/merged into the release
  

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-25 Thread Rajani Karuturi
branches will be deleted after the release or hotfix if you use the git-flow 
commands.

This would be the flow for a hotfix:
1. branch off from the release tag on master. in this case it would be 
release/4.4.0 
2. commit the fixes in hotfix/4.4.1
3. do the release
4. merge to develop
5. merge to master and update tags
6. delete hotfix branch

But, I agree that there can be a problem when we wish to do 4.4.2 if we delete 
the hotfix branch

may be we should use git-flow support instead of hotfix which doesn’t delete 
the branch
http://stackoverflow.com/a/16866118/201514

~Rajani



On 25-Jul-2014, at 12:31 pm, Daan Hoogland daan.hoogl...@gmail.com wrote:

 Rightful question Erik,
 
 Rajani mentioned that release branches will be deleted. This will only
 happen once the release is no longer supported. Any hotfix branch will
 still have to merged on that (and master possibly) until we stop
 supporting that branch.
 
 On the other hand you can branch from any commit.
 
 btw 4.4.1 is a bad example of you as we will still maintain that
 without gitflow. But it is valid for for instance 4.5.2 or 5.0.1.
 
 On Fri, Jul 25, 2014 at 8:04 AM, Erik Weber terbol...@gmail.com wrote:
 This is out of my git league, but how do you handle minor versions that way?
 
 Assuming 4.8.0 is the latest stable release and HEAD on master.
 
 Then you want to release 4.4.1.
 
 First of all can you develop bugfixes for 4.4 along the way, when both
 develop and master HEAD might be hugely different?
 
 Second, can you commit  behind HEAD? You don't want the 4.4.1 release
 instead of 4.8.0 to be HEAD
 
 Someone might have good solutions to this, but if not I would propose to
 keep the release branches for future bugfixes.
 
 Erik
 25. juli 2014 06:02 skrev Rajani Karuturi rajani.karut...@citrix.com
 følgende:
 
 On 24-Jul-2014, at 10:25 pm, Mike Tutkowski mike.tutkow...@solidfire.com
 wrote:
 
 I believe I agree with these steps.
 
 A couple questions:
 
 Is 'master' simply always going to be equal to what's the most recent
 version of the code that's in production?
 
 I think so. master will always be at the latest release and all the
 previous releases properly tagged. The release branches would be deleted
 once release is done.
 
 
 Also, would 'develop' be for 4.6 code then and 4.5 code would go directly
 into RELEASE-4.5?
 
 
 Yes. 4.6 work should be done on develop branch and any 4.5 bug fixes
 should be done on the 4.5 branch.
 
 
 
 ~Rajani
 
 
 
 On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi 
 rajani.karut...@citrix.com wrote:
 
 
 Hi Daan,
 here is what i propose:
 
 1. rename 'master' to 'develop’
 2. branch a new 'master' from '4.4’
 3. branch 'RELEASE-4.5' from the develop
 4. merge 'RELEASE-4.5' to master once the release voting is done.
 
 RELEASE-4.6 branch should be off develop as all the feature branches
 would
 be merged there before freeze for 4.6 and would be merged to master when
 the release is voted.
 
 The other question I have is in the step:4. how are we going to manage
 fixes to 4.5 post branch cut?  ( assuming no features as the freeze is
 done)
 
 ~Rajani
 
 
 
 On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com
 wrote:
 
 Mike, Rajani,
 
 Sebastien's point was that the current 4.4 is the closest we have to a
 releasable branch. I don't mind enting on master but it will require
 more fixing. In general all of this will require some RM work of all
 committers. Please ammend my little proposal if you will.
 
 On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi
 rajani.karut...@citrix.com wrote:
 I agree with mike. I think we should start 4.5 from where master is
 now
 Also create a develop branch from master and continue future work for
 4.6 there.
 
 I am not clear on how the release branches are going to be maintained.
 Are we saying we would create 4.5-RELEASE branch which is essentially
 same as our current -FORWARD branch and continue cherry-picking?
 
 I would prefer merges to cherry-picks.
 Also, I think we should allow committers to commit to the RELEASE
 branch after discussing about it on dev@ and have RM closely monitor
 them.
 Any commit intended for 4.5 RELEASE should be checked in after
 discussion in the 4.5 Release branch and then merged to develop branch.
 
 
 ~Rajani
 
 
 
 On 24-Jul-2014, at 1:14 am, Mike Tutkowski 
 mike.tutkow...@solidfire.com wrote:
 
 Per earlier e-mails, I don't think we want to start 4.5 where 4.4
 left
 off
 and then merge features from develop into 4.5.
 
 Why don't we instead start 4.5 where master is now with the
 assumption
 that
 since we are past Feature Freeze for 4.5 that master is stable
 enough?
 
 
 On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland 
 daan.hoogl...@gmail.com
 wrote:
 
 so to start formulate a proposal:
 
 all work shall be done in a new branch (it is advisable to prefix
 your
 branches with your id)
 when working, features will be cherry-picked/merged into the release
 branch they are for and next into master.
 hotfixes will 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-25 Thread Daan Hoogland
On Fri, Jul 25, 2014 at 1:16 PM, Rajani Karuturi
rajani.karut...@citrix.com wrote:
 may be we should use git-flow support instead of hotfix which doesn’t delete 
 the branch


Good call Rajani

-- 
Daan


Re: [DISCUSS][PROPOSAL] git workflow

2014-07-25 Thread Erik Weber
That seems to handle my concern :-)

Erik
25. juli 2014 13:16 skrev Rajani Karuturi rajani.karut...@citrix.com
følgende:

 branches will be deleted after the release or hotfix if you use the
 git-flow commands.

 This would be the flow for a hotfix:
 1. branch off from the release tag on master. in this case it would be
 release/4.4.0
 2. commit the fixes in hotfix/4.4.1
 3. do the release
 4. merge to develop
 5. merge to master and update tags
 6. delete hotfix branch

 But, I agree that there can be a problem when we wish to do 4.4.2 if we
 delete the hotfix branch

 may be we should use git-flow support instead of hotfix which doesn’t
 delete the branch
 http://stackoverflow.com/a/16866118/201514

 ~Rajani



 On 25-Jul-2014, at 12:31 pm, Daan Hoogland daan.hoogl...@gmail.com
 wrote:

  Rightful question Erik,
 
  Rajani mentioned that release branches will be deleted. This will only
  happen once the release is no longer supported. Any hotfix branch will
  still have to merged on that (and master possibly) until we stop
  supporting that branch.
 
  On the other hand you can branch from any commit.
 
  btw 4.4.1 is a bad example of you as we will still maintain that
  without gitflow. But it is valid for for instance 4.5.2 or 5.0.1.
 
  On Fri, Jul 25, 2014 at 8:04 AM, Erik Weber terbol...@gmail.com wrote:
  This is out of my git league, but how do you handle minor versions that
 way?
 
  Assuming 4.8.0 is the latest stable release and HEAD on master.
 
  Then you want to release 4.4.1.
 
  First of all can you develop bugfixes for 4.4 along the way, when both
  develop and master HEAD might be hugely different?
 
  Second, can you commit  behind HEAD? You don't want the 4.4.1 release
  instead of 4.8.0 to be HEAD
 
  Someone might have good solutions to this, but if not I would propose to
  keep the release branches for future bugfixes.
 
  Erik
  25. juli 2014 06:02 skrev Rajani Karuturi rajani.karut...@citrix.com
 
  følgende:
 
  On 24-Jul-2014, at 10:25 pm, Mike Tutkowski 
 mike.tutkow...@solidfire.com
  wrote:
 
  I believe I agree with these steps.
 
  A couple questions:
 
  Is 'master' simply always going to be equal to what's the most recent
  version of the code that's in production?
 
  I think so. master will always be at the latest release and all the
  previous releases properly tagged. The release branches would be
 deleted
  once release is done.
 
 
  Also, would 'develop' be for 4.6 code then and 4.5 code would go
 directly
  into RELEASE-4.5?
 
 
  Yes. 4.6 work should be done on develop branch and any 4.5 bug fixes
  should be done on the 4.5 branch.
 
 
 
  ~Rajani
 
 
 
  On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi 
  rajani.karut...@citrix.com wrote:
 
 
  Hi Daan,
  here is what i propose:
 
  1. rename 'master' to 'develop’
  2. branch a new 'master' from '4.4’
  3. branch 'RELEASE-4.5' from the develop
  4. merge 'RELEASE-4.5' to master once the release voting is done.
 
  RELEASE-4.6 branch should be off develop as all the feature branches
  would
  be merged there before freeze for 4.6 and would be merged to master
 when
  the release is voted.
 
  The other question I have is in the step:4. how are we going to
 manage
  fixes to 4.5 post branch cut?  ( assuming no features as the freeze
 is
  done)
 
  ~Rajani
 
 
 
  On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com
  wrote:
 
  Mike, Rajani,
 
  Sebastien's point was that the current 4.4 is the closest we have
 to a
  releasable branch. I don't mind enting on master but it will require
  more fixing. In general all of this will require some RM work of all
  committers. Please ammend my little proposal if you will.
 
  On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi
  rajani.karut...@citrix.com wrote:
  I agree with mike. I think we should start 4.5 from where master is
  now
  Also create a develop branch from master and continue future work
 for
  4.6 there.
 
  I am not clear on how the release branches are going to be
 maintained.
  Are we saying we would create 4.5-RELEASE branch which is
 essentially
  same as our current -FORWARD branch and continue cherry-picking?
 
  I would prefer merges to cherry-picks.
  Also, I think we should allow committers to commit to the RELEASE
  branch after discussing about it on dev@ and have RM closely monitor
  them.
  Any commit intended for 4.5 RELEASE should be checked in after
  discussion in the 4.5 Release branch and then merged to develop
 branch.
 
 
  ~Rajani
 
 
 
  On 24-Jul-2014, at 1:14 am, Mike Tutkowski 
  mike.tutkow...@solidfire.com wrote:
 
  Per earlier e-mails, I don't think we want to start 4.5 where 4.4
  left
  off
  and then merge features from develop into 4.5.
 
  Why don't we instead start 4.5 where master is now with the
  assumption
  that
  since we are past Feature Freeze for 4.5 that master is stable
  enough?
 
 
  On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland 
  daan.hoogl...@gmail.com
  wrote:
 
  so to start formulate 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-24 Thread Daan Hoogland
Mike, Rajani,

Sebastien's point was that the current 4.4 is the closest we have to a
releasable branch. I don't mind enting on master but it will require
more fixing. In general all of this will require some RM work of all
committers. Please ammend my little proposal if you will.

On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi
rajani.karut...@citrix.com wrote:
 I agree with mike. I think we should start 4.5 from where master is now
 Also create a develop branch from master and continue future work for 4.6 
 there.

 I am not clear on how the release branches are going to be maintained.
 Are we saying we would create 4.5-RELEASE branch which is essentially same as 
 our current -FORWARD branch and continue cherry-picking?

 I would prefer merges to cherry-picks.
 Also, I think we should allow committers to commit to the RELEASE branch 
 after discussing about it on dev@ and have RM closely monitor them.
 Any commit intended for 4.5 RELEASE should be checked in after discussion in 
 the 4.5 Release branch and then merged to develop branch.


 ~Rajani



 On 24-Jul-2014, at 1:14 am, Mike Tutkowski mike.tutkow...@solidfire.com 
 wrote:

 Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off
 and then merge features from develop into 4.5.

 Why don't we instead start 4.5 where master is now with the assumption that
 since we are past Feature Freeze for 4.5 that master is stable enough?


 On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com
 wrote:

 so to start formulate a proposal:

 all work shall be done in a new branch (it is advisable to prefix your
 branches with your id)
 when working, features will be cherry-picked/merged into the release
 branch they are for and next into master.
 hotfixes will be done in branchname-hotfixes

 as transition we will

 rename 'master' to 'develop'
 branch a new 'master' from '4.4'
 branch '4.5' from the new 'master'
 merge any features from the new 'develop' to '4.5' and 'master'



 On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com
 wrote:

 On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com
 wrote:


 On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com
 wrote:

 Let me ask the question, why have master be develop and a release
 branch be
 master? If we are going to follow gitflow, why not just stick with
 the
 norm? If master is the development branch, it might not be stable. I
 think
 the goal here is that we have an obvious stable branch. Anyone could
 come
 check out master and have the latest useable.

 I am in favor of following the norm, so ideally master should be our
 stable branch (agreed).

 The issue is with the transition.

 Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally
 we could start a stable branch of this tag and build up bug fix releases
 all the way to 4.5 from there.

 But all features for 4.5 are already in master.

 So if we create a 'develop' branch of master and stabilize 'master'
 then develop is now started from a stable tag (4.4.0).


 *not* started from a stable tag, and merges will be tricky, no ?

 So what's the best way to flip ? There is most likely some git magic
 that can we do.


 The new git workflow and the transition process need to be part of a
 proposal that we get consensus on.

 getting there :)

 -seb


 Also, I'm struggling to understand the benefit of cherry-pick. If you
 completely squash history, you lose a tremendous amount of context,
 which I
 use extensively to figure out why a bug is the way it is. Only knowing
 that
 the branch was merged at a given point in time doesn't give any
 context.
 Seeing the individual commit history of the branch helps to preserve
 the
 rationale for why the code was written the way it was. In theory if
 every
 change starts out as a branch (feature, hotfix, release), then why not
 just
 merge the branch once it is in a good and acceptable state?

 I also agree with Mike that this will have to be a transition over
 time. It
 will take some time to clean up master to the point where it can be
 considered a solid stable branch. Possibly as part of the 4.5 release.


 On Wed, Jul 23, 2014 at 10:51 AM, Sebastien Goasguen run...@gmail.com

 wrote:


 On Jul 23, 2014, at 11:38 AM, daan Hoogland daan.hoogl...@gmail.com
 wrote:

 Sebastien,

 It seems we can do what you are calling for is creating a branch
 called 'release'. We can merge back into that branch from 4.4,
 master,
 4.3. I would like to see people that want a feature or bug fix in a
 branch make a fork of that branch and when that fork is working do a
 cherry-pick. The -forward concept is now used for that but it is
 broken because more then for one piece of work there are commits on
 it. This caused me conflicts during the release. Especially painfull
 as not all was intended to get into the release. We can create this
 'release' branch now on the basis of 4.4 and start pulling in
 changes.

 Yes, that's what I am 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-24 Thread Erik Weber
24. juli 2014 06:28 skrev Rajani Karuturi rajani.karut...@citrix.com
følgende:

 I agree with mike. I think we should start 4.5 from where master is now
 Also create a develop branch from master and continue future work for 4.6
there.

 I am not clear on how the release branches are going to be maintained.
 Are we saying we would create 4.5-RELEASE branch which is essentially
same as our current -FORWARD branch and continue cherry-picking?

After feature freeze or whenever it's decided to finish a release you
create a branch called release-version, e.g. release-4.6.

From then on 'develop' focus is on 4.7 or whatever the next version is
called.

Whenever something gets merged to release-4.6 it should also get merged to
develop.

 I would prefer merges to cherry-picks.

A lot of the point in this workflow is visibility / traceability, so
merging should really be the way we work

 Also, I think we should allow committers to commit to the RELEASE branch
after discussing about it on dev@ and have RM closely monitor them.

If code is merged instead of cherry-picked it is easier to see / trace what
has happened , and potentially revert.

It is important though that RM's job isn't made much more difficult to
manage .

Erik

 Any commit intended for 4.5 RELEASE should be checked in after discussion
in the 4.5 Release branch and then merged to develop branch.


 ~Rajani



 On 24-Jul-2014, at 1:14 am, Mike Tutkowski mike.tutkow...@solidfire.com
wrote:

  Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left
off
  and then merge features from develop into 4.5.
 
  Why don't we instead start 4.5 where master is now with the assumption
that
  since we are past Feature Freeze for 4.5 that master is stable enough?
 
 
  On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com

  wrote:
 
  so to start formulate a proposal:
 
  all work shall be done in a new branch (it is advisable to prefix your
  branches with your id)
  when working, features will be cherry-picked/merged into the release
  branch they are for and next into master.
  hotfixes will be done in branchname-hotfixes
 
  as transition we will
 
  rename 'master' to 'develop'
  branch a new 'master' from '4.4'
  branch '4.5' from the new 'master'
  merge any features from the new 'develop' to '4.5' and 'master'
 
 
 
  On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com
  wrote:
 
  On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com
  wrote:
 
 
  On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com
  wrote:
 
  Let me ask the question, why have master be develop and a release
  branch be
  master? If we are going to follow gitflow, why not just stick with
  the
  norm? If master is the development branch, it might not be stable. I
  think
  the goal here is that we have an obvious stable branch. Anyone could
  come
  check out master and have the latest useable.
 
  I am in favor of following the norm, so ideally master should be our
  stable branch (agreed).
 
  The issue is with the transition.
 
  Our latest releasable product is the 4.4 branch (4.4.0 tag), so
ideally
  we could start a stable branch of this tag and build up bug fix
releases
  all the way to 4.5 from there.
 
  But all features for 4.5 are already in master.
 
  So if we create a 'develop' branch of master and stabilize 'master'
  then develop is now started from a stable tag (4.4.0).
 
 
  *not* started from a stable tag, and merges will be tricky, no ?
 
  So what's the best way to flip ? There is most likely some git magic
  that can we do.
 
 
  The new git workflow and the transition process need to be part of a
  proposal that we get consensus on.
 
  getting there :)
 
  -seb
 
 
  Also, I'm struggling to understand the benefit of cherry-pick. If
you
  completely squash history, you lose a tremendous amount of context,
  which I
  use extensively to figure out why a bug is the way it is. Only
knowing
  that
  the branch was merged at a given point in time doesn't give any
  context.
  Seeing the individual commit history of the branch helps to preserve
  the
  rationale for why the code was written the way it was. In theory if
  every
  change starts out as a branch (feature, hotfix, release), then why
not
  just
  merge the branch once it is in a good and acceptable state?
 
  I also agree with Mike that this will have to be a transition over
  time. It
  will take some time to clean up master to the point where it can be
  considered a solid stable branch. Possibly as part of the 4.5
release.
 
 
  On Wed, Jul 23, 2014 at 10:51 AM, Sebastien Goasguen 
run...@gmail.com
 
  wrote:
 
 
  On Jul 23, 2014, at 11:38 AM, daan Hoogland 
daan.hoogl...@gmail.com
  wrote:
 
  Sebastien,
 
  It seems we can do what you are calling for is creating a branch
  called 'release'. We can merge back into that branch from 4.4,
  master,
  4.3. I would like to see people that want a feature or bug fix in
a
  branch make a 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-24 Thread Rajani Karuturi

Hi Daan,
here is what i propose:

1. rename 'master' to 'develop’
2. branch a new 'master' from '4.4’
3. branch 'RELEASE-4.5' from the develop
4. merge 'RELEASE-4.5' to master once the release voting is done.

RELEASE-4.6 branch should be off develop as all the feature branches would be 
merged there before freeze for 4.6 and would be merged to master when the 
release is voted.

The other question I have is in the step:4. how are we going to manage fixes to 
4.5 post branch cut?  ( assuming no features as the freeze is done)

~Rajani



On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com wrote:

 Mike, Rajani,
 
 Sebastien's point was that the current 4.4 is the closest we have to a
 releasable branch. I don't mind enting on master but it will require
 more fixing. In general all of this will require some RM work of all
 committers. Please ammend my little proposal if you will.
 
 On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi
 rajani.karut...@citrix.com wrote:
 I agree with mike. I think we should start 4.5 from where master is now
 Also create a develop branch from master and continue future work for 4.6 
 there.
 
 I am not clear on how the release branches are going to be maintained.
 Are we saying we would create 4.5-RELEASE branch which is essentially same 
 as our current -FORWARD branch and continue cherry-picking?
 
 I would prefer merges to cherry-picks.
 Also, I think we should allow committers to commit to the RELEASE branch 
 after discussing about it on dev@ and have RM closely monitor them.
 Any commit intended for 4.5 RELEASE should be checked in after discussion in 
 the 4.5 Release branch and then merged to develop branch.
 
 
 ~Rajani
 
 
 
 On 24-Jul-2014, at 1:14 am, Mike Tutkowski mike.tutkow...@solidfire.com 
 wrote:
 
 Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off
 and then merge features from develop into 4.5.
 
 Why don't we instead start 4.5 where master is now with the assumption that
 since we are past Feature Freeze for 4.5 that master is stable enough?
 
 
 On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com
 wrote:
 
 so to start formulate a proposal:
 
 all work shall be done in a new branch (it is advisable to prefix your
 branches with your id)
 when working, features will be cherry-picked/merged into the release
 branch they are for and next into master.
 hotfixes will be done in branchname-hotfixes
 
 as transition we will
 
 rename 'master' to 'develop'
 branch a new 'master' from '4.4'
 branch '4.5' from the new 'master'
 merge any features from the new 'develop' to '4.5' and 'master'
 
 
 
 On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com
 wrote:
 
 On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com
 wrote:
 
 
 On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com
 wrote:
 
 Let me ask the question, why have master be develop and a release
 branch be
 master? If we are going to follow gitflow, why not just stick with
 the
 norm? If master is the development branch, it might not be stable. I
 think
 the goal here is that we have an obvious stable branch. Anyone could
 come
 check out master and have the latest useable.
 
 I am in favor of following the norm, so ideally master should be our
 stable branch (agreed).
 
 The issue is with the transition.
 
 Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally
 we could start a stable branch of this tag and build up bug fix releases
 all the way to 4.5 from there.
 
 But all features for 4.5 are already in master.
 
 So if we create a 'develop' branch of master and stabilize 'master'
 then develop is now started from a stable tag (4.4.0).
 
 
 *not* started from a stable tag, and merges will be tricky, no ?
 
 So what's the best way to flip ? There is most likely some git magic
 that can we do.
 
 
 The new git workflow and the transition process need to be part of a
 proposal that we get consensus on.
 
 getting there :)
 
 -seb
 
 
 Also, I'm struggling to understand the benefit of cherry-pick. If you
 completely squash history, you lose a tremendous amount of context,
 which I
 use extensively to figure out why a bug is the way it is. Only knowing
 that
 the branch was merged at a given point in time doesn't give any
 context.
 Seeing the individual commit history of the branch helps to preserve
 the
 rationale for why the code was written the way it was. In theory if
 every
 change starts out as a branch (feature, hotfix, release), then why not
 just
 merge the branch once it is in a good and acceptable state?
 
 I also agree with Mike that this will have to be a transition over
 time. It
 will take some time to clean up master to the point where it can be
 considered a solid stable branch. Possibly as part of the 4.5 release.
 
 
 On Wed, Jul 23, 2014 at 10:51 AM, Sebastien Goasguen run...@gmail.com
 
 wrote:
 
 
 On Jul 23, 2014, at 11:38 AM, daan Hoogland daan.hoogl...@gmail.com
 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-24 Thread Daan Hoogland
That's where the 4.5-hotfixes branch comes in.

On Thu, Jul 24, 2014 at 8:39 AM, Rajani Karuturi
rajani.karut...@citrix.com wrote:

 Hi Daan,
 here is what i propose:

 1. rename 'master' to 'develop’
 2. branch a new 'master' from '4.4’
 3. branch 'RELEASE-4.5' from the develop
 4. merge 'RELEASE-4.5' to master once the release voting is done.

 RELEASE-4.6 branch should be off develop as all the feature branches would be 
 merged there before freeze for 4.6 and would be merged to master when the 
 release is voted.

 The other question I have is in the step:4. how are we going to manage fixes 
 to 4.5 post branch cut?  ( assuming no features as the freeze is done)

 ~Rajani



 On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com wrote:

 Mike, Rajani,

 Sebastien's point was that the current 4.4 is the closest we have to a
 releasable branch. I don't mind enting on master but it will require
 more fixing. In general all of this will require some RM work of all
 committers. Please ammend my little proposal if you will.

 On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi
 rajani.karut...@citrix.com wrote:
 I agree with mike. I think we should start 4.5 from where master is now
 Also create a develop branch from master and continue future work for 4.6 
 there.

 I am not clear on how the release branches are going to be maintained.
 Are we saying we would create 4.5-RELEASE branch which is essentially same 
 as our current -FORWARD branch and continue cherry-picking?

 I would prefer merges to cherry-picks.
 Also, I think we should allow committers to commit to the RELEASE branch 
 after discussing about it on dev@ and have RM closely monitor them.
 Any commit intended for 4.5 RELEASE should be checked in after discussion 
 in the 4.5 Release branch and then merged to develop branch.


 ~Rajani



 On 24-Jul-2014, at 1:14 am, Mike Tutkowski mike.tutkow...@solidfire.com 
 wrote:

 Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off
 and then merge features from develop into 4.5.

 Why don't we instead start 4.5 where master is now with the assumption that
 since we are past Feature Freeze for 4.5 that master is stable enough?


 On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com
 wrote:

 so to start formulate a proposal:

 all work shall be done in a new branch (it is advisable to prefix your
 branches with your id)
 when working, features will be cherry-picked/merged into the release
 branch they are for and next into master.
 hotfixes will be done in branchname-hotfixes

 as transition we will

 rename 'master' to 'develop'
 branch a new 'master' from '4.4'
 branch '4.5' from the new 'master'
 merge any features from the new 'develop' to '4.5' and 'master'



 On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com
 wrote:

 On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com
 wrote:


 On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com
 wrote:

 Let me ask the question, why have master be develop and a release
 branch be
 master? If we are going to follow gitflow, why not just stick with
 the
 norm? If master is the development branch, it might not be stable. I
 think
 the goal here is that we have an obvious stable branch. Anyone could
 come
 check out master and have the latest useable.

 I am in favor of following the norm, so ideally master should be our
 stable branch (agreed).

 The issue is with the transition.

 Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally
 we could start a stable branch of this tag and build up bug fix releases
 all the way to 4.5 from there.

 But all features for 4.5 are already in master.

 So if we create a 'develop' branch of master and stabilize 'master'
 then develop is now started from a stable tag (4.4.0).


 *not* started from a stable tag, and merges will be tricky, no ?

 So what's the best way to flip ? There is most likely some git magic
 that can we do.


 The new git workflow and the transition process need to be part of a
 proposal that we get consensus on.

 getting there :)

 -seb


 Also, I'm struggling to understand the benefit of cherry-pick. If you
 completely squash history, you lose a tremendous amount of context,
 which I
 use extensively to figure out why a bug is the way it is. Only knowing
 that
 the branch was merged at a given point in time doesn't give any
 context.
 Seeing the individual commit history of the branch helps to preserve
 the
 rationale for why the code was written the way it was. In theory if
 every
 change starts out as a branch (feature, hotfix, release), then why not
 just
 merge the branch once it is in a good and acceptable state?

 I also agree with Mike that this will have to be a transition over
 time. It
 will take some time to clean up master to the point where it can be
 considered a solid stable branch. Possibly as part of the 4.5 release.


 On Wed, Jul 23, 2014 at 10:51 AM, Sebastien Goasguen 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-24 Thread Erik Weber
24. juli 2014 08:39 skrev Rajani Karuturi rajani.karut...@citrix.com
følgende:


 Hi Daan,
 here is what i propose:

 1. rename 'master' to 'develop’
 2. branch a new 'master' from '4.4’
 3. branch 'RELEASE-4.5' from the develop
 4. merge 'RELEASE-4.5' to master once the release voting is done.

 RELEASE-4.6 branch should be off develop as all the feature branches
would be merged there before freeze for 4.6 and would be merged to master
when the release is voted.

 The other question I have is in the step:4. how are we going to manage
fixes to 4.5 post branch cut?  ( assuming no features as the freeze is done)

Sub releases, ie. 4.4.1,  is generally just hotfixes / bugfixes, yes? In
that case you can branch it off 'master' and merge back to master as a new
release after voting, and merge to develop if the fix is applicable there.

Erik

 ~Rajani



 On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com
wrote:

  Mike, Rajani,
 
  Sebastien's point was that the current 4.4 is the closest we have to a
  releasable branch. I don't mind enting on master but it will require
  more fixing. In general all of this will require some RM work of all
  committers. Please ammend my little proposal if you will.
 
  On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi
  rajani.karut...@citrix.com wrote:
  I agree with mike. I think we should start 4.5 from where master is now
  Also create a develop branch from master and continue future work for
4.6 there.
 
  I am not clear on how the release branches are going to be maintained.
  Are we saying we would create 4.5-RELEASE branch which is essentially
same as our current -FORWARD branch and continue cherry-picking?
 
  I would prefer merges to cherry-picks.
  Also, I think we should allow committers to commit to the RELEASE
branch after discussing about it on dev@ and have RM closely monitor them.
  Any commit intended for 4.5 RELEASE should be checked in after
discussion in the 4.5 Release branch and then merged to develop branch.
 
 
  ~Rajani
 
 
 
  On 24-Jul-2014, at 1:14 am, Mike Tutkowski 
mike.tutkow...@solidfire.com wrote:
 
  Per earlier e-mails, I don't think we want to start 4.5 where 4.4
left off
  and then merge features from develop into 4.5.
 
  Why don't we instead start 4.5 where master is now with the
assumption that
  since we are past Feature Freeze for 4.5 that master is stable enough?
 
 
  On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland 
daan.hoogl...@gmail.com
  wrote:
 
  so to start formulate a proposal:
 
  all work shall be done in a new branch (it is advisable to prefix
your
  branches with your id)
  when working, features will be cherry-picked/merged into the release
  branch they are for and next into master.
  hotfixes will be done in branchname-hotfixes
 
  as transition we will
 
  rename 'master' to 'develop'
  branch a new 'master' from '4.4'
  branch '4.5' from the new 'master'
  merge any features from the new 'develop' to '4.5' and 'master'
 
 
 
  On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com

  wrote:
 
  On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com
  wrote:
 
 
  On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com
  wrote:
 
  Let me ask the question, why have master be develop and a release
  branch be
  master? If we are going to follow gitflow, why not just stick
with
  the
  norm? If master is the development branch, it might not be
stable. I
  think
  the goal here is that we have an obvious stable branch. Anyone
could
  come
  check out master and have the latest useable.
 
  I am in favor of following the norm, so ideally master should be
our
  stable branch (agreed).
 
  The issue is with the transition.
 
  Our latest releasable product is the 4.4 branch (4.4.0 tag), so
ideally
  we could start a stable branch of this tag and build up bug fix
releases
  all the way to 4.5 from there.
 
  But all features for 4.5 are already in master.
 
  So if we create a 'develop' branch of master and stabilize 'master'
  then develop is now started from a stable tag (4.4.0).
 
 
  *not* started from a stable tag, and merges will be tricky, no ?
 
  So what's the best way to flip ? There is most likely some git
magic
  that can we do.
 
 
  The new git workflow and the transition process need to be part of
a
  proposal that we get consensus on.
 
  getting there :)
 
  -seb
 
 
  Also, I'm struggling to understand the benefit of cherry-pick. If
you
  completely squash history, you lose a tremendous amount of
context,
  which I
  use extensively to figure out why a bug is the way it is. Only
knowing
  that
  the branch was merged at a given point in time doesn't give any
  context.
  Seeing the individual commit history of the branch helps to
preserve
  the
  rationale for why the code was written the way it was. In theory
if
  every
  change starts out as a branch (feature, hotfix, release), then
why not
  just
  merge the branch once it is in a good and acceptable 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-24 Thread Leo Simons
On Jul 24, 2014, at 8:39 AM, Rajani Karuturi rajani.karut...@citrix.com wrote:
 here is what i propose:
 
 1. rename 'master' to 'develop’
 2. branch a new 'master' from '4.4’
 3. branch 'RELEASE-4.5' from the develop
 4. merge 'RELEASE-4.5' to master once the release voting is done.

I like this conceptually; I’m not sure if its feasible because step 4 requires 
resolving the cherry-pick mess.

Ignoring awsapi (which has a lot of churn) and ignoring formatting changes, 
here are sizes of very minimalized diffs between branches

  branch twodiff size   big diff chunks
  branch one
  4.3 4.4   11MBhyperv,netscaler,server,engine
  4.4 4.4-forward2MBtests,marvin
  4.4-forward master 6MBxenapi,xen,xenserver,storage
  4.4 master 8MBxenapi,tests,marvin,xen,xenserver
  (See below how I got the numbers.)

Starting git-flow from 4.4 or 4.4-forward and then merging things in from 
master means processing hundreds of thousands of lines of diff. Of those lines, 
many many thousands of lines will probably not auto-merge due to the 
cherry-pick approach. A rebase between any of these branches is not feasible; 
git cannot un-pick what happened so it cannot offer much assistance.

Looking at all the diff stats, breaking xenapi and awsapi out into their own 
git repositories (and release cycles) seems like a really good thing to do; I 
expect it will help a lot with future merges.

You can try step 4. for yourself now:

  git checkout 4.4
  git merge master

Good luck ;-)

 RELEASE-4.6 branch should be off develop as all the feature branches would be 
 merged there before freeze for 4.6 and would be merged to master when the 
 release is voted.

Small note, git-flow tends to use release/ prefixes for release branches. You'd 
label ‘em

  master
  develop
  feature/nuage-vsp-support
  feature/frob-the-foo
  support/license-header-update
  release/4.5
  release/4.6

 The other question I have is in the step:4. how are we going to manage fixes 
 to 4.5 post branch cut?  ( assuming no features as the freeze is done)

Yes that’d be typical with git-flow. Once you create the release branch, all 
bugfixes that are to make it into that release go onto the release branch 
_first_ (and _only_ fixes go there), before being merged into develop.

With git-flow you don’t really have to call it a “freeze”. Development of new 
features continues (on their feature branches) uninterrupted even if a release 
is being cut, and merging of completed features still is exactly the same (to 
develop) regardless of whether there’s active release branches.

On many projects using git-flow there is no rush to try and get features merged 
before a release cut-off date, because cutting another release is easy and 
cheap that you can just do one ‘whenever’ to get your feature out there.

For cloudstack that’s not quite the case due to the somewhat heavyweight 
test/release process. What I imagine is that if a feature misses a deadline, 
and the community decides it wants to include that feature anyway, is rebasing 
it onto the release branch and merging it

  ...decide a finished feature goes into 4.5 after all...
  git branch feature/frob-the-foo-4.5 feature/frob-the-foo
  git checkout feature/frob-the-foo-4.5
  git rebase -i release/4.5
  git push origin feature/frob-the-foo-4.5
  git checkout release/4.5
  git pull --rebase
  git merge feature/frob-the-foo-4.5
  git checkout develop
  git pull --rebase
  git merge release/4.5
  git push
  git branch -d feature/frob-the-foo-4.5
  git branch -d feature/frob-the-foo

There’s little to no chance cloudstack could ever safely decide to do this 
right now, but a few months down the road, this might become safe enough, 
especially since the two explicit merge commits allow figuring out what 
happened, and possibly rolling back if the feature destabilizes the release.

Your workflow would be that most tests and most QA work runs on the release 
branch, while developers switch between release branch and develop branch 
depending on what they are doing. A developer that is picking up a bug report 
associated with that release will basically

  ...get the bug report...
  git stash save what-I-was-doing
  git checkout release/4.5
  git pull --rebase
  ...code code code...
  ...test...
  git commit  git push
  git checkout develop
  git merge release/4.5
  git push
  git stash pop what-I-was-doing
  ...code code code...

For bigger amounts of change/experimentation to work on a nasty kind of bug, 
you might have your own local temporary branch (I almost always do this myself):

  ...get the bug report...
  git stash save what-I-was-doing
  git checkout release/4.5
  git pull --ff-only
  git branch bugfix/CLOUDSTACK-42 release/4.5
  git checkout bugfix/CLOUDSTACK-42
  ...code code code...
  git commit
  ...code code code...
  git commit
  ...test...
  git pull
  git rebase -i release/4.5
  git commit
  git checkout 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-24 Thread Leo Simons
On Jul 24, 2014, at 10:45 AM, Daan Hoogland daan.hoogl...@gmail.com wrote:
 Any advice on our procedure from this, Leo?

Yes, to follow all the git-flow defaults [1].

* goal is for master to become stable
* new develop which starts from master
  * create with `git flow init`
* ‘abandon’ 4.4 / 4.4-forward
  * anything in there which is not currently
in master gets cherry-picked into develop
  * accordingly, plan is no 4.4.1
  * if 4.4.1 becomes really necessary, create
it by cherry-picking from develop
* keep 4.3 to produce 4.3.1 then
  abandon it, too

It is important to realize that a git-flow release/4.5 is _not_ the same as an 
old-style 4.5-forward; a lot more discipline is required.

4.4-forward contains a lot of things which are not purely bugfixes. 4.4-forward 
has additional tests, lots of changes to test suites, things that should go in 
4.4.1 but not 4.4.0, half-merged features that were pulled from 4.4 but remain 
in 4.4-forward, bugfixes that include refactoring, etc etc. In a git-flow 
model, those things would go onto feature/ and/or support/ branches, and from 
there to the develop branch, and definitiely _never_ onto a release branch. It 
was very hard to get 4.4 stable by cherry-picking from 4.4-forward; the 
discipline suggested by git-flow is _exactly_ to avoid that difficulty.

Note git-flow defaults also include:
* feature branches are called feature/feature-thing
  (don’t put your name in there, its meant to be
  descriptive!)
* release branches are called release/{version}
  (not RELEASE-{version})
* hotfixes are called hotfix/{version}-name
  and are based on  merge to master (not usually
  to a release branch, release branches are not
  hot, hotfixes are patches to previous releases,
  i.e. 4.5.1, 4.5.2, 4.5.3 will be hotfixes)
* everyone can commit on release branches,
  everyone can merge to develop (generally you
  don’t need much merging to release branches
  since the only thing you commit there are
  bugfixes, you merge _from_ the release branch
  _to_ the develop branch), merging is _not_ a
  release manager's job (the release manager might
  review or approve bugfixes, but its the committer
  that merges)
* no cherry-picking!


cheers,


Leo

[1] unfortunately, the reason I did this analysis work yesterday was to try and 
find a way to start from 4.4 and go forward from there, first merging in 
4.4-forward and then master, but I don’t see that happening

 On Thu, Jul 24, 2014 at 10:39 AM, Leo Simons lsim...@schubergphilis.com 
 wrote:
  branch twodiff size   big diff chunks
  branch one
  4.3 4.4   11MBhyperv,netscaler,server,engine
  4.4 4.4-forward2MBtests,marvin
  4.4-forward master 6MBxenapi,xen,xenserver,storage
  4.4 master 8MBxenapi,tests,marvin,xen,xenserver
  (See below how I got the numbers.)
 
 Starting git-flow from 4.4 or 4.4-forward and then merging things in from 
 master means processing hundreds of thousands of lines of diff. Of those 
 lines, many many thousands of lines will probably not auto-merge due to the 
 cherry-pick approach. A rebase between any of these branches is not 
 feasible; git cannot un-pick what happened so it cannot offer much 
 assistance.



Re: [DISCUSS][PROPOSAL] git workflow

2014-07-24 Thread Daan Hoogland
now we are kind of set back by this unfortunate result of Leo's work.

new proposal:

We start using git-flow for 4.5/5.0 exclusively.
as of then we will use the workflows as describe by him [1]
4.4.x will still be released by manual RM-cherry-picking (yes
volunteer dragging his feet)

Leo, are you prepared to write up a how-to cwiki page?

kind regards,

[1] http://markmail.org/message/on2l5n6uaucpuuwf



On Thu, Jul 24, 2014 at 11:22 AM, Leo Simons lsim...@schubergphilis.com wrote:
 On Jul 24, 2014, at 10:45 AM, Daan Hoogland daan.hoogl...@gmail.com wrote:
 Any advice on our procedure from this, Leo?

 Yes, to follow all the git-flow defaults [1].

 * goal is for master to become stable
 * new develop which starts from master
   * create with `git flow init`
 * ‘abandon’ 4.4 / 4.4-forward
   * anything in there which is not currently
 in master gets cherry-picked into develop
   * accordingly, plan is no 4.4.1
   * if 4.4.1 becomes really necessary, create
 it by cherry-picking from develop
 * keep 4.3 to produce 4.3.1 then
   abandon it, too

 It is important to realize that a git-flow release/4.5 is _not_ the same as 
 an old-style 4.5-forward; a lot more discipline is required.

 4.4-forward contains a lot of things which are not purely bugfixes. 
 4.4-forward has additional tests, lots of changes to test suites, things that 
 should go in 4.4.1 but not 4.4.0, half-merged features that were pulled from 
 4.4 but remain in 4.4-forward, bugfixes that include refactoring, etc etc. In 
 a git-flow model, those things would go onto feature/ and/or support/ 
 branches, and from there to the develop branch, and definitiely _never_ onto 
 a release branch. It was very hard to get 4.4 stable by cherry-picking from 
 4.4-forward; the discipline suggested by git-flow is _exactly_ to avoid that 
 difficulty.

 Note git-flow defaults also include:
 * feature branches are called feature/feature-thing
   (don’t put your name in there, its meant to be
   descriptive!)
 * release branches are called release/{version}
   (not RELEASE-{version})
 * hotfixes are called hotfix/{version}-name
   and are based on  merge to master (not usually
   to a release branch, release branches are not
   hot, hotfixes are patches to previous releases,
   i.e. 4.5.1, 4.5.2, 4.5.3 will be hotfixes)
 * everyone can commit on release branches,
   everyone can merge to develop (generally you
   don’t need much merging to release branches
   since the only thing you commit there are
   bugfixes, you merge _from_ the release branch
   _to_ the develop branch), merging is _not_ a
   release manager's job (the release manager might
   review or approve bugfixes, but its the committer
   that merges)
 * no cherry-picking!


 cheers,


 Leo

 [1] unfortunately, the reason I did this analysis work yesterday was to try 
 and find a way to start from 4.4 and go forward from there, first merging in 
 4.4-forward and then master, but I don’t see that happening

 On Thu, Jul 24, 2014 at 10:39 AM, Leo Simons lsim...@schubergphilis.com 
 wrote:
  branch twodiff size   big diff chunks
  branch one
  4.3 4.4   11MBhyperv,netscaler,server,engine
  4.4 4.4-forward2MBtests,marvin
  4.4-forward master 6MBxenapi,xen,xenserver,storage
  4.4 master 8MBxenapi,tests,marvin,xen,xenserver
  (See below how I got the numbers.)

 Starting git-flow from 4.4 or 4.4-forward and then merging things in from 
 master means processing hundreds of thousands of lines of diff. Of those 
 lines, many many thousands of lines will probably not auto-merge due to the 
 cherry-pick approach. A rebase between any of these branches is not 
 feasible; git cannot un-pick what happened so it cannot offer much 
 assistance.




-- 
Daan


Re: [DISCUSS][PROPOSAL] git workflow

2014-07-24 Thread Rajani Karuturi
It makes sense to me now. +1 from me

one minor thing i would like to add is git-flow doesn’t force you to its naming 
convention. You can choose any and stick to it. But, it makes sense to use the 
defaults.

~Rajani



On 24-Jul-2014, at 2:52 pm, Leo Simons lsim...@schubergphilis.com wrote:

 On Jul 24, 2014, at 10:45 AM, Daan Hoogland daan.hoogl...@gmail.com wrote:
 Any advice on our procedure from this, Leo?
 
 Yes, to follow all the git-flow defaults [1].
 
 * goal is for master to become stable
 * new develop which starts from master
  * create with `git flow init`
 * ‘abandon’ 4.4 / 4.4-forward
  * anything in there which is not currently
in master gets cherry-picked into develop
  * accordingly, plan is no 4.4.1
  * if 4.4.1 becomes really necessary, create
it by cherry-picking from develop
 * keep 4.3 to produce 4.3.1 then
  abandon it, too
 
 It is important to realize that a git-flow release/4.5 is _not_ the same as 
 an old-style 4.5-forward; a lot more discipline is required.
 
 4.4-forward contains a lot of things which are not purely bugfixes. 
 4.4-forward has additional tests, lots of changes to test suites, things that 
 should go in 4.4.1 but not 4.4.0, half-merged features that were pulled from 
 4.4 but remain in 4.4-forward, bugfixes that include refactoring, etc etc. In 
 a git-flow model, those things would go onto feature/ and/or support/ 
 branches, and from there to the develop branch, and definitiely _never_ onto 
 a release branch. It was very hard to get 4.4 stable by cherry-picking from 
 4.4-forward; the discipline suggested by git-flow is _exactly_ to avoid that 
 difficulty.
 
 Note git-flow defaults also include:
 * feature branches are called feature/feature-thing
  (don’t put your name in there, its meant to be
  descriptive!)
 * release branches are called release/{version}
  (not RELEASE-{version})
 * hotfixes are called hotfix/{version}-name
  and are based on  merge to master (not usually
  to a release branch, release branches are not
  hot, hotfixes are patches to previous releases,
  i.e. 4.5.1, 4.5.2, 4.5.3 will be hotfixes)
 * everyone can commit on release branches,
  everyone can merge to develop (generally you
  don’t need much merging to release branches
  since the only thing you commit there are
  bugfixes, you merge _from_ the release branch
  _to_ the develop branch), merging is _not_ a
  release manager's job (the release manager might
  review or approve bugfixes, but its the committer
  that merges)
 * no cherry-picking!
 
 
 cheers,
 
 
 Leo
 
 [1] unfortunately, the reason I did this analysis work yesterday was to try 
 and find a way to start from 4.4 and go forward from there, first merging in 
 4.4-forward and then master, but I don’t see that happening
 
 On Thu, Jul 24, 2014 at 10:39 AM, Leo Simons lsim...@schubergphilis.com 
 wrote:
 branch twodiff size   big diff chunks
 branch one
 4.3 4.4   11MBhyperv,netscaler,server,engine
 4.4 4.4-forward2MBtests,marvin
 4.4-forward master 6MBxenapi,xen,xenserver,storage
 4.4 master 8MBxenapi,tests,marvin,xen,xenserver
 (See below how I got the numbers.)
 
 Starting git-flow from 4.4 or 4.4-forward and then merging things in from 
 master means processing hundreds of thousands of lines of diff. Of those 
 lines, many many thousands of lines will probably not auto-merge due to the 
 cherry-pick approach. A rebase between any of these branches is not 
 feasible; git cannot un-pick what happened so it cannot offer much 
 assistance.
 



Re: [DISCUSS][PROPOSAL] git workflow

2014-07-24 Thread Leo Simons
On Jul 24, 2014, at 1:19 PM, Daan Hoogland daan.hoogl...@gmail.com wrote:
 Leo, are you prepared to write up a how-to cwiki page?

Sure, though it would be good to get a few provisional +1s before spending a 
lot of time drawing pretty pictures :)

Also, I don’t seem to have edit permissions on 
https://cwiki.apache.org/confluence/display/CLOUDSTACK/CloudStack+Maintainers+Guide
 . Can you add ‘lsimons’ to cloudstack confluence?


cheers,


Leo



Re: [DISCUSS][PROPOSAL] git workflow

2014-07-24 Thread Daan Hoogland
On Thu, Jul 24, 2014 at 1:43 PM, Leo Simons lsim...@schubergphilis.com wrote:
 lsimons


has access

-- 
Daan


Re: [DISCUSS][PROPOSAL] git workflow

2014-07-24 Thread Tracy Phillips
The best thread I have read in awhile...

Good read http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html



On Thu, Jul 24, 2014 at 8:06 AM, Daan Hoogland daan.hoogl...@gmail.com
wrote:

 On Thu, Jul 24, 2014 at 1:43 PM, Leo Simons lsim...@schubergphilis.com
 wrote:
  lsimons


 has access

 --
 Daan



Re: [DISCUSS][PROPOSAL] git workflow

2014-07-24 Thread Daan Hoogland
On Thu, Jul 24, 2014 at 5:08 PM, Tracy Phillips tracp...@weberize.com wrote:
 Good read http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html


he agrees with our thread that every work sould start with creating a
branch, doesn't he. I think we need to say that a lot of times more.
Start a new branch when picking up a ticket. Start a new branch when
experimenting on a new feature. Start a new branch when bored.

-- 
Daan


Re: [DISCUSS][PROPOSAL] git workflow

2014-07-24 Thread Tracy Phillips
Yes, that is what he is saying. Its really the git way.

Starting a branch with the ticket-id and short description works best.

I think this is what you are looking for
https://wiki.diasporafoundation.org/Git_workflow


On Thu, Jul 24, 2014 at 12:29 PM, Daan Hoogland daan.hoogl...@gmail.com
wrote:

 On Thu, Jul 24, 2014 at 5:08 PM, Tracy Phillips tracp...@weberize.com
 wrote:
  Good read
 http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html


 he agrees with our thread that every work sould start with creating a
 branch, doesn't he. I think we need to say that a lot of times more.
 Start a new branch when picking up a ticket. Start a new branch when
 experimenting on a new feature. Start a new branch when bored.

 --
 Daan



RE: [DISCUSS][PROPOSAL] git workflow

2014-07-24 Thread Stephen Turner
I agree, every new ticket should be on a new branch. If you have two changesets 
you might ever want to merge separately, put them on separate branches.

-- 
Stephen Turner


-Original Message-
From: Daan Hoogland [mailto:daan.hoogl...@gmail.com] 
Sent: 24 July 2014 17:30
To: dev
Subject: Re: [DISCUSS][PROPOSAL] git workflow

On Thu, Jul 24, 2014 at 5:08 PM, Tracy Phillips tracp...@weberize.com wrote:
 Good read 
 http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html


he agrees with our thread that every work sould start with creating a branch, 
doesn't he. I think we need to say that a lot of times more.
Start a new branch when picking up a ticket. Start a new branch when 
experimenting on a new feature. Start a new branch when bored.

--
Daan


Re: [DISCUSS][PROPOSAL] git workflow

2014-07-24 Thread Tracy Phillips
If you are on Ubuntu (and who isn't these days... right?), you can install
git-flow easily (git-completion is nice as well)

aptitude install git-flow git-completion

and git-flow command completion is nice

https://github.com/bobthecow/git-flow-completion


On Thu, Jul 24, 2014 at 12:36 PM, Stephen Turner stephen.tur...@citrix.com
wrote:

 I agree, every new ticket should be on a new branch. If you have two
 changesets you might ever want to merge separately, put them on separate
 branches.

 --
 Stephen Turner


 -Original Message-
 From: Daan Hoogland [mailto:daan.hoogl...@gmail.com]
 Sent: 24 July 2014 17:30
 To: dev
 Subject: Re: [DISCUSS][PROPOSAL] git workflow

 On Thu, Jul 24, 2014 at 5:08 PM, Tracy Phillips tracp...@weberize.com
 wrote:
  Good read
  http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html


 he agrees with our thread that every work sould start with creating a
 branch, doesn't he. I think we need to say that a lot of times more.
 Start a new branch when picking up a ticket. Start a new branch when
 experimenting on a new feature. Start a new branch when bored.

 --
 Daan



Re: [DISCUSS][PROPOSAL] git workflow

2014-07-24 Thread Mike Tutkowski
I believe I agree with these steps.

A couple questions:

Is 'master' simply always going to be equal to what's the most recent
version of the code that's in production?

Also, would 'develop' be for 4.6 code then and 4.5 code would go directly
into RELEASE-4.5?


On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi 
rajani.karut...@citrix.com wrote:


 Hi Daan,
 here is what i propose:

 1. rename 'master' to 'develop’
 2. branch a new 'master' from '4.4’
 3. branch 'RELEASE-4.5' from the develop
 4. merge 'RELEASE-4.5' to master once the release voting is done.

 RELEASE-4.6 branch should be off develop as all the feature branches would
 be merged there before freeze for 4.6 and would be merged to master when
 the release is voted.

 The other question I have is in the step:4. how are we going to manage
 fixes to 4.5 post branch cut?  ( assuming no features as the freeze is done)

 ~Rajani



 On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com
 wrote:

  Mike, Rajani,
 
  Sebastien's point was that the current 4.4 is the closest we have to a
  releasable branch. I don't mind enting on master but it will require
  more fixing. In general all of this will require some RM work of all
  committers. Please ammend my little proposal if you will.
 
  On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi
  rajani.karut...@citrix.com wrote:
  I agree with mike. I think we should start 4.5 from where master is now
  Also create a develop branch from master and continue future work for
 4.6 there.
 
  I am not clear on how the release branches are going to be maintained.
  Are we saying we would create 4.5-RELEASE branch which is essentially
 same as our current -FORWARD branch and continue cherry-picking?
 
  I would prefer merges to cherry-picks.
  Also, I think we should allow committers to commit to the RELEASE
 branch after discussing about it on dev@ and have RM closely monitor them.
  Any commit intended for 4.5 RELEASE should be checked in after
 discussion in the 4.5 Release branch and then merged to develop branch.
 
 
  ~Rajani
 
 
 
  On 24-Jul-2014, at 1:14 am, Mike Tutkowski 
 mike.tutkow...@solidfire.com wrote:
 
  Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left
 off
  and then merge features from develop into 4.5.
 
  Why don't we instead start 4.5 where master is now with the assumption
 that
  since we are past Feature Freeze for 4.5 that master is stable enough?
 
 
  On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland 
 daan.hoogl...@gmail.com
  wrote:
 
  so to start formulate a proposal:
 
  all work shall be done in a new branch (it is advisable to prefix your
  branches with your id)
  when working, features will be cherry-picked/merged into the release
  branch they are for and next into master.
  hotfixes will be done in branchname-hotfixes
 
  as transition we will
 
  rename 'master' to 'develop'
  branch a new 'master' from '4.4'
  branch '4.5' from the new 'master'
  merge any features from the new 'develop' to '4.5' and 'master'
 
 
 
  On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com
 
  wrote:
 
  On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com
  wrote:
 
 
  On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com
  wrote:
 
  Let me ask the question, why have master be develop and a release
  branch be
  master? If we are going to follow gitflow, why not just stick
 with
  the
  norm? If master is the development branch, it might not be stable.
 I
  think
  the goal here is that we have an obvious stable branch. Anyone
 could
  come
  check out master and have the latest useable.
 
  I am in favor of following the norm, so ideally master should be our
  stable branch (agreed).
 
  The issue is with the transition.
 
  Our latest releasable product is the 4.4 branch (4.4.0 tag), so
 ideally
  we could start a stable branch of this tag and build up bug fix
 releases
  all the way to 4.5 from there.
 
  But all features for 4.5 are already in master.
 
  So if we create a 'develop' branch of master and stabilize 'master'
  then develop is now started from a stable tag (4.4.0).
 
 
  *not* started from a stable tag, and merges will be tricky, no ?
 
  So what's the best way to flip ? There is most likely some git magic
  that can we do.
 
 
  The new git workflow and the transition process need to be part of a
  proposal that we get consensus on.
 
  getting there :)
 
  -seb
 
 
  Also, I'm struggling to understand the benefit of cherry-pick. If
 you
  completely squash history, you lose a tremendous amount of context,
  which I
  use extensively to figure out why a bug is the way it is. Only
 knowing
  that
  the branch was merged at a given point in time doesn't give any
  context.
  Seeing the individual commit history of the branch helps to
 preserve
  the
  rationale for why the code was written the way it was. In theory if
  every
  change starts out as a branch (feature, hotfix, release), then why
 not
 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-24 Thread Rajani Karuturi
On 24-Jul-2014, at 10:25 pm, Mike Tutkowski mike.tutkow...@solidfire.com 
wrote:

 I believe I agree with these steps.
 
 A couple questions:
 
 Is 'master' simply always going to be equal to what's the most recent
 version of the code that's in production?

I think so. master will always be at the latest release and all the previous 
releases properly tagged. The release branches would be deleted once release is 
done.

 
 Also, would 'develop' be for 4.6 code then and 4.5 code would go directly
 into RELEASE-4.5?
 

Yes. 4.6 work should be done on develop branch and any 4.5 bug fixes should be 
done on the 4.5 branch.



~Rajani


 
 On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi 
 rajani.karut...@citrix.com wrote:
 
 
 Hi Daan,
 here is what i propose:
 
 1. rename 'master' to 'develop’
 2. branch a new 'master' from '4.4’
 3. branch 'RELEASE-4.5' from the develop
 4. merge 'RELEASE-4.5' to master once the release voting is done.
 
 RELEASE-4.6 branch should be off develop as all the feature branches would
 be merged there before freeze for 4.6 and would be merged to master when
 the release is voted.
 
 The other question I have is in the step:4. how are we going to manage
 fixes to 4.5 post branch cut?  ( assuming no features as the freeze is done)
 
 ~Rajani
 
 
 
 On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com
 wrote:
 
 Mike, Rajani,
 
 Sebastien's point was that the current 4.4 is the closest we have to a
 releasable branch. I don't mind enting on master but it will require
 more fixing. In general all of this will require some RM work of all
 committers. Please ammend my little proposal if you will.
 
 On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi
 rajani.karut...@citrix.com wrote:
 I agree with mike. I think we should start 4.5 from where master is now
 Also create a develop branch from master and continue future work for
 4.6 there.
 
 I am not clear on how the release branches are going to be maintained.
 Are we saying we would create 4.5-RELEASE branch which is essentially
 same as our current -FORWARD branch and continue cherry-picking?
 
 I would prefer merges to cherry-picks.
 Also, I think we should allow committers to commit to the RELEASE
 branch after discussing about it on dev@ and have RM closely monitor them.
 Any commit intended for 4.5 RELEASE should be checked in after
 discussion in the 4.5 Release branch and then merged to develop branch.
 
 
 ~Rajani
 
 
 
 On 24-Jul-2014, at 1:14 am, Mike Tutkowski 
 mike.tutkow...@solidfire.com wrote:
 
 Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left
 off
 and then merge features from develop into 4.5.
 
 Why don't we instead start 4.5 where master is now with the assumption
 that
 since we are past Feature Freeze for 4.5 that master is stable enough?
 
 
 On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland 
 daan.hoogl...@gmail.com
 wrote:
 
 so to start formulate a proposal:
 
 all work shall be done in a new branch (it is advisable to prefix your
 branches with your id)
 when working, features will be cherry-picked/merged into the release
 branch they are for and next into master.
 hotfixes will be done in branchname-hotfixes
 
 as transition we will
 
 rename 'master' to 'develop'
 branch a new 'master' from '4.4'
 branch '4.5' from the new 'master'
 merge any features from the new 'develop' to '4.5' and 'master'
 
 
 
 On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com
 
 wrote:
 
 On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com
 wrote:
 
 
 On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com
 wrote:
 
 Let me ask the question, why have master be develop and a release
 branch be
 master? If we are going to follow gitflow, why not just stick
 with
 the
 norm? If master is the development branch, it might not be stable.
 I
 think
 the goal here is that we have an obvious stable branch. Anyone
 could
 come
 check out master and have the latest useable.
 
 I am in favor of following the norm, so ideally master should be our
 stable branch (agreed).
 
 The issue is with the transition.
 
 Our latest releasable product is the 4.4 branch (4.4.0 tag), so
 ideally
 we could start a stable branch of this tag and build up bug fix
 releases
 all the way to 4.5 from there.
 
 But all features for 4.5 are already in master.
 
 So if we create a 'develop' branch of master and stabilize 'master'
 then develop is now started from a stable tag (4.4.0).
 
 
 *not* started from a stable tag, and merges will be tricky, no ?
 
 So what's the best way to flip ? There is most likely some git magic
 that can we do.
 
 
 The new git workflow and the transition process need to be part of a
 proposal that we get consensus on.
 
 getting there :)
 
 -seb
 
 
 Also, I'm struggling to understand the benefit of cherry-pick. If
 you
 completely squash history, you lose a tremendous amount of context,
 which I
 use extensively to figure out why a bug is the way it is. Only
 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-24 Thread Mike Tutkowski
Great. Well, this seems reasonable to me then.

If there are no objections or further comments, when can this be done and
who would do it?

Thanks


On Thu, Jul 24, 2014 at 10:01 PM, Rajani Karuturi 
rajani.karut...@citrix.com wrote:

 On 24-Jul-2014, at 10:25 pm, Mike Tutkowski mike.tutkow...@solidfire.com
 wrote:

  I believe I agree with these steps.
 
  A couple questions:
 
  Is 'master' simply always going to be equal to what's the most recent
  version of the code that's in production?

 I think so. master will always be at the latest release and all the
 previous releases properly tagged. The release branches would be deleted
 once release is done.

 
  Also, would 'develop' be for 4.6 code then and 4.5 code would go directly
  into RELEASE-4.5?
 

 Yes. 4.6 work should be done on develop branch and any 4.5 bug fixes
 should be done on the 4.5 branch.



 ~Rajani


 
  On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi 
  rajani.karut...@citrix.com wrote:
 
 
  Hi Daan,
  here is what i propose:
 
  1. rename 'master' to 'develop’
  2. branch a new 'master' from '4.4’
  3. branch 'RELEASE-4.5' from the develop
  4. merge 'RELEASE-4.5' to master once the release voting is done.
 
  RELEASE-4.6 branch should be off develop as all the feature branches
 would
  be merged there before freeze for 4.6 and would be merged to master when
  the release is voted.
 
  The other question I have is in the step:4. how are we going to manage
  fixes to 4.5 post branch cut?  ( assuming no features as the freeze is
 done)
 
  ~Rajani
 
 
 
  On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com
  wrote:
 
  Mike, Rajani,
 
  Sebastien's point was that the current 4.4 is the closest we have to a
  releasable branch. I don't mind enting on master but it will require
  more fixing. In general all of this will require some RM work of all
  committers. Please ammend my little proposal if you will.
 
  On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi
  rajani.karut...@citrix.com wrote:
  I agree with mike. I think we should start 4.5 from where master is
 now
  Also create a develop branch from master and continue future work for
  4.6 there.
 
  I am not clear on how the release branches are going to be maintained.
  Are we saying we would create 4.5-RELEASE branch which is essentially
  same as our current -FORWARD branch and continue cherry-picking?
 
  I would prefer merges to cherry-picks.
  Also, I think we should allow committers to commit to the RELEASE
  branch after discussing about it on dev@ and have RM closely monitor
 them.
  Any commit intended for 4.5 RELEASE should be checked in after
  discussion in the 4.5 Release branch and then merged to develop branch.
 
 
  ~Rajani
 
 
 
  On 24-Jul-2014, at 1:14 am, Mike Tutkowski 
  mike.tutkow...@solidfire.com wrote:
 
  Per earlier e-mails, I don't think we want to start 4.5 where 4.4
 left
  off
  and then merge features from develop into 4.5.
 
  Why don't we instead start 4.5 where master is now with the
 assumption
  that
  since we are past Feature Freeze for 4.5 that master is stable
 enough?
 
 
  On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland 
  daan.hoogl...@gmail.com
  wrote:
 
  so to start formulate a proposal:
 
  all work shall be done in a new branch (it is advisable to prefix
 your
  branches with your id)
  when working, features will be cherry-picked/merged into the release
  branch they are for and next into master.
  hotfixes will be done in branchname-hotfixes
 
  as transition we will
 
  rename 'master' to 'develop'
  branch a new 'master' from '4.4'
  branch '4.5' from the new 'master'
  merge any features from the new 'develop' to '4.5' and 'master'
 
 
 
  On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen 
 run...@gmail.com
 
  wrote:
 
  On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com
 
  wrote:
 
 
  On Jul 23, 2014, at 12:21 PM, Nate Gordon 
 nate.gor...@appcore.com
  wrote:
 
  Let me ask the question, why have master be develop and a release
  branch be
  master? If we are going to follow gitflow, why not just stick
  with
  the
  norm? If master is the development branch, it might not be
 stable.
  I
  think
  the goal here is that we have an obvious stable branch. Anyone
  could
  come
  check out master and have the latest useable.
 
  I am in favor of following the norm, so ideally master should be
 our
  stable branch (agreed).
 
  The issue is with the transition.
 
  Our latest releasable product is the 4.4 branch (4.4.0 tag), so
  ideally
  we could start a stable branch of this tag and build up bug fix
  releases
  all the way to 4.5 from there.
 
  But all features for 4.5 are already in master.
 
  So if we create a 'develop' branch of master and stabilize
 'master'
  then develop is now started from a stable tag (4.4.0).
 
 
  *not* started from a stable tag, and merges will be tricky, no ?
 
  So what's the best way to flip ? There is most likely some git
 magic
  that can we do.
 
 
  

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-24 Thread Mike Tutkowski
I suppose we need a formal VOTE on this?

If so, perhaps Sebastien would like to call it.


On Thu, Jul 24, 2014 at 10:06 PM, Mike Tutkowski 
mike.tutkow...@solidfire.com wrote:

 Great. Well, this seems reasonable to me then.

 If there are no objections or further comments, when can this be done and
 who would do it?

 Thanks


 On Thu, Jul 24, 2014 at 10:01 PM, Rajani Karuturi 
 rajani.karut...@citrix.com wrote:

 On 24-Jul-2014, at 10:25 pm, Mike Tutkowski mike.tutkow...@solidfire.com
 wrote:

  I believe I agree with these steps.
 
  A couple questions:
 
  Is 'master' simply always going to be equal to what's the most recent
  version of the code that's in production?

 I think so. master will always be at the latest release and all the
 previous releases properly tagged. The release branches would be deleted
 once release is done.

 
  Also, would 'develop' be for 4.6 code then and 4.5 code would go
 directly
  into RELEASE-4.5?
 

 Yes. 4.6 work should be done on develop branch and any 4.5 bug fixes
 should be done on the 4.5 branch.



 ~Rajani


 
  On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi 
  rajani.karut...@citrix.com wrote:
 
 
  Hi Daan,
  here is what i propose:
 
  1. rename 'master' to 'develop’
  2. branch a new 'master' from '4.4’
  3. branch 'RELEASE-4.5' from the develop
  4. merge 'RELEASE-4.5' to master once the release voting is done.
 
  RELEASE-4.6 branch should be off develop as all the feature branches
 would
  be merged there before freeze for 4.6 and would be merged to master
 when
  the release is voted.
 
  The other question I have is in the step:4. how are we going to manage
  fixes to 4.5 post branch cut?  ( assuming no features as the freeze is
 done)
 
  ~Rajani
 
 
 
  On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com
  wrote:
 
  Mike, Rajani,
 
  Sebastien's point was that the current 4.4 is the closest we have to a
  releasable branch. I don't mind enting on master but it will require
  more fixing. In general all of this will require some RM work of all
  committers. Please ammend my little proposal if you will.
 
  On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi
  rajani.karut...@citrix.com wrote:
  I agree with mike. I think we should start 4.5 from where master is
 now
  Also create a develop branch from master and continue future work for
  4.6 there.
 
  I am not clear on how the release branches are going to be
 maintained.
  Are we saying we would create 4.5-RELEASE branch which is essentially
  same as our current -FORWARD branch and continue cherry-picking?
 
  I would prefer merges to cherry-picks.
  Also, I think we should allow committers to commit to the RELEASE
  branch after discussing about it on dev@ and have RM closely monitor
 them.
  Any commit intended for 4.5 RELEASE should be checked in after
  discussion in the 4.5 Release branch and then merged to develop branch.
 
 
  ~Rajani
 
 
 
  On 24-Jul-2014, at 1:14 am, Mike Tutkowski 
  mike.tutkow...@solidfire.com wrote:
 
  Per earlier e-mails, I don't think we want to start 4.5 where 4.4
 left
  off
  and then merge features from develop into 4.5.
 
  Why don't we instead start 4.5 where master is now with the
 assumption
  that
  since we are past Feature Freeze for 4.5 that master is stable
 enough?
 
 
  On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland 
  daan.hoogl...@gmail.com
  wrote:
 
  so to start formulate a proposal:
 
  all work shall be done in a new branch (it is advisable to prefix
 your
  branches with your id)
  when working, features will be cherry-picked/merged into the
 release
  branch they are for and next into master.
  hotfixes will be done in branchname-hotfixes
 
  as transition we will
 
  rename 'master' to 'develop'
  branch a new 'master' from '4.4'
  branch '4.5' from the new 'master'
  merge any features from the new 'develop' to '4.5' and 'master'
 
 
 
  On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen 
 run...@gmail.com
 
  wrote:
 
  On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen 
 run...@gmail.com
  wrote:
 
 
  On Jul 23, 2014, at 12:21 PM, Nate Gordon 
 nate.gor...@appcore.com
  wrote:
 
  Let me ask the question, why have master be develop and a
 release
  branch be
  master? If we are going to follow gitflow, why not just stick
  with
  the
  norm? If master is the development branch, it might not be
 stable.
  I
  think
  the goal here is that we have an obvious stable branch. Anyone
  could
  come
  check out master and have the latest useable.
 
  I am in favor of following the norm, so ideally master should be
 our
  stable branch (agreed).
 
  The issue is with the transition.
 
  Our latest releasable product is the 4.4 branch (4.4.0 tag), so
  ideally
  we could start a stable branch of this tag and build up bug fix
  releases
  all the way to 4.5 from there.
 
  But all features for 4.5 are already in master.
 
  So if we create a 'develop' branch of master and stabilize
 'master'
  then develop is now started from 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-23 Thread Leo Simons
Hey folks,

With 4.4.0 tagged, is now an opportune time to go and implement this?

I would enthousiastically +1 and get crackin', but I’m not a committer so its 
not that practical for me to volunteer!

I wanted to point out atlassian’s description of gitflow

  https://www.atlassian.com/git/workflows#!workflow-gitflow

which might be easier to read.

Similarly, the git-flow scripts that help out with implementing this stuff

  https://github.com/nvie/gitflow

they also describe the relationship between gitflow and dealing with multiple 
remotes

  https://www.atlassian.com/git/workflows#!pull-request

Finally note atlassian’s free sourcetree GUI has built-in support for git-flow

  http://www.sourcetreeapp.com/

Because cloudstack currently is full of rebasing and squashing and 
cherry-picking, you get very little benefit from a tree visualization tool 
(like this or gitk or ...) right now, but it would be *great* to have going 
forward.


cheers,


Leo

On Jul 1, 2014, at 12:09 AM, Sebastien Goasguen run...@gmail.com wrote:

 I would like to re-start this discussion.
 
 Rajani made some good points and someone mentioned Gitflow:
 
 http://nvie.com/posts/a-successful-git-branching-model/
 
 Thinking about our release procedure, we clearly need more tests and a CI. 
 However it looks like this is going to take some time.
 
 In the meantime I think there is nothing preventing us from agreeing to 'git 
 practices', we don't need tests or new infra, we just need to agree on the 
 git workflow.
 
 Right now Master is really a development branch, we should make it a stable 
 branch for production with very few commits.
 This does not mean that we would release less, in contrary this would ensure 
 that a commit to master means it's a production release.
 
 In addition gitflow [1] does not do cherry-picks (gets back to Rajani's 
 point) everything is based on merges.
 
 I am of the opinion that git flow provides a nice process. It basically 
 freezes master. Development happens in a 'develop' branch, releases branches 
 are branched off of that and merged into master and back into develop….etc
 
 Please read [1] it's a good read.
 
 And let's discuss,
 
 [1] http://nvie.com/posts/a-successful-git-branching-model/
 
 -Sebastien
 
 On Jun 2, 2014, at 11:58 PM, Rajani Karuturi rajani.karut...@citrix.com 
 wrote:
 
 There is also the problem of cherry-picking.
 As a contributor, I always endup creating multiple patches for each branch 
 as they don’t cleanly apply on the upward branches. which means distinct 
 commits for each branch and I don’t easily know which all branches my commit 
 exists unless I do grep.
 if we follow merging strategy properly, apart from the first merge of the 
 branch, everything else on top of it should be a painless merge. 
 
 
 
 ~Rajani
 
 
 
 On 02-Jun-2014, at 10:51 pm, Marcus shadow...@gmail.com wrote:
 
 I think many of the bullet points are what we are currently doing
 (guidelines for commit comments, feature branches need to stay in sync with
 master, no back-merging). I also think that much of what we do now is done
 the way it is simply because there *are* vast changes between versions.
 Classes are getting shuffled around and changed all the time. If its
 feasible to merge branch fixes to master, that's fine, but some quick tests
 seem to indicate that this will be messy getting started.
 
 That leaves us with how we do releases. I'm fine with having single
 branches for major releases(4.3) and tagging the commits where each
 incremental release (4.3.x) is done. I'm trying to remember why we went
 with the -forward, I'm sure it's in the mailing list somewhere, but one of
 the nice things it provides is the ability for the release manager to
 control what changes are made during code freeze while giving people a
 place to stage fixes (though admittedly this is not always followed).
 Without -forward, would the flow be for each dev to have their own repo and
 issue pull requests for bugfixes?
 
 
 On Mon, Jun 2, 2014 at 3:17 AM, Rajani Karuturi rajani.karut...@citrix.com
 wrote:
 
 Any other suggestions/objections/comments??
 Can we discuss this in detail and agree to a process??
 
 
 ~Rajani
 
 
 
 On 02-Jun-2014, at 9:32 am, Rajani Karuturi rajani.karut...@citrix.com
 wrote:
 
 Yes as mike said, if its a one-off case we can do a empty merge(merge -s
 ours) for it and git will assume its merged but will not bring in any
 changes.
 
 If the branches diverged a lot, for example after a major rewrite, we
 could stop merging to that branch and above and make the fix manually.
 
 
 ~Rajani
 
 
 
 On 30-May-2014, at 11:26 pm, Mike Tutkowski 
 mike.tutkow...@solidfire.com wrote:
 
 Yep, that's what I was referring to in that a particular fix for an old
 release may not apply to newer versions. That does happen.
 
 We used to mark those as don't need to merge to branch x in SVN and
 then
 you handed it however made sense on the applicable branch(es).
 
 
 On Fri, May 30, 2014 at 11:53 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-23 Thread Sam Schmit
Hey everyone,

I've been a developer for a handful of years and have had my share of
experience with different version control systems.  I've used (for better
or worse) Git, Perforce, Rational ClearCast, and SVN.

Each of these solutions offers their own unique set of features, strengths
and weaknesses.  As there are so many systems that are good at specific
things, it seems best to use the features that the chosen system is best at.

Git is great at branching, merging and using that structure to maintain and
control how changes get into the primary branches.  Git tools even make
this easy by integrating directly into the Gitflow to make branching and
merging that much easier.  It would seem counter-intuitive to NOT make use
of these built-in capabilities.

In addition to that, I know that the current method of change management is
incredibly frustrating to work with, and works directly against the way a
typical Git user would expect it to be structured.  I should NEVER have
problem compiling and running something on master.  I should not have
problems building anything on a release branch.  A feature/bugfix branch is
where things can be, and often are, broken or unstable.  There have been
many times working in Cloudstack where I've had to search for a stable
revision on master, and that's just plain wrong.

I do realize that having this many developers working on so many features
and bugfixes will result in a large number of branches.  I don't believe
this is a good argument against using a branching method, though - I
believe that the current system is even more confusing and difficult to use.

I could pontificate on change management quite a bit more, but my opinion
in summary would basically be:  use Git the way it was meant to be used,
and things will be better.  Just my two cents.

Sam



On Wed, Jul 23, 2014 at 5:16 AM, Leo Simons lsim...@schubergphilis.com
wrote:

 Hey folks,

 With 4.4.0 tagged, is now an opportune time to go and implement this?

 I would enthousiastically +1 and get crackin', but I’m not a committer so
 its not that practical for me to volunteer!

 I wanted to point out atlassian’s description of gitflow

   https://www.atlassian.com/git/workflows#!workflow-gitflow

 which might be easier to read.

 Similarly, the git-flow scripts that help out with implementing this stuff

   https://github.com/nvie/gitflow

 they also describe the relationship between gitflow and dealing with
 multiple remotes

   https://www.atlassian.com/git/workflows#!pull-request

 Finally note atlassian’s free sourcetree GUI has built-in support for
 git-flow

   http://www.sourcetreeapp.com/

 Because cloudstack currently is full of rebasing and squashing and
 cherry-picking, you get very little benefit from a tree visualization tool
 (like this or gitk or ...) right now, but it would be *great* to have going
 forward.


 cheers,


 Leo

 On Jul 1, 2014, at 12:09 AM, Sebastien Goasguen run...@gmail.com wrote:

  I would like to re-start this discussion.
 
  Rajani made some good points and someone mentioned Gitflow:
 
  http://nvie.com/posts/a-successful-git-branching-model/
 
  Thinking about our release procedure, we clearly need more tests and a
 CI. However it looks like this is going to take some time.
 
  In the meantime I think there is nothing preventing us from agreeing to
 'git practices', we don't need tests or new infra, we just need to agree on
 the git workflow.
 
  Right now Master is really a development branch, we should make it a
 stable branch for production with very few commits.
  This does not mean that we would release less, in contrary this would
 ensure that a commit to master means it's a production release.
 
  In addition gitflow [1] does not do cherry-picks (gets back to Rajani's
 point) everything is based on merges.
 
  I am of the opinion that git flow provides a nice process. It basically
 freezes master. Development happens in a 'develop' branch, releases
 branches are branched off of that and merged into master and back into
 develop….etc
 
  Please read [1] it's a good read.
 
  And let's discuss,
 
  [1] http://nvie.com/posts/a-successful-git-branching-model/
 
  -Sebastien
 
  On Jun 2, 2014, at 11:58 PM, Rajani Karuturi rajani.karut...@citrix.com
 wrote:
 
  There is also the problem of cherry-picking.
  As a contributor, I always endup creating multiple patches for each
 branch as they don’t cleanly apply on the upward branches. which means
 distinct commits for each branch and I don’t easily know which all branches
 my commit exists unless I do grep.
  if we follow merging strategy properly, apart from the first merge of
 the branch, everything else on top of it should be a painless merge.
 
 
 
  ~Rajani
 
 
 
  On 02-Jun-2014, at 10:51 pm, Marcus shadow...@gmail.com wrote:
 
  I think many of the bullet points are what we are currently doing
  (guidelines for commit comments, feature branches need to stay in sync
 with
  master, no back-merging). I also think 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-23 Thread Sebastien Goasguen

On Jul 23, 2014, at 11:19 AM, Sam Schmit sam.sch...@appcore.com wrote:

 Hey everyone,
 
 I've been a developer for a handful of years and have had my share of
 experience with different version control systems.  I've used (for better
 or worse) Git, Perforce, Rational ClearCast, and SVN.
 
 Each of these solutions offers their own unique set of features, strengths
 and weaknesses.  As there are so many systems that are good at specific
 things, it seems best to use the features that the chosen system is best at.
 
 Git is great at branching, merging and using that structure to maintain and
 control how changes get into the primary branches.  Git tools even make
 this easy by integrating directly into the Gitflow to make branching and
 merging that much easier.  It would seem counter-intuitive to NOT make use
 of these built-in capabilities.
 
 In addition to that, I know that the current method of change management is
 incredibly frustrating to work with, and works directly against the way a
 typical Git user would expect it to be structured.  I should NEVER have
 problem compiling and running something on master.  I should not have
 problems building anything on a release branch.  A feature/bugfix branch is
 where things can be, and often are, broken or unstable.  There have been
 many times working in Cloudstack where I've had to search for a stable
 revision on master, and that's just plain wrong.
 
 I do realize that having this many developers working on so many features
 and bugfixes will result in a large number of branches.  I don't believe
 this is a good argument against using a branching method, though - I
 believe that the current system is even more confusing and difficult to use.
 
 I could pontificate on change management quite a bit more, but my opinion
 in summary would basically be:  use Git the way it was meant to be used,
 and things will be better.  Just my two cents.
 
 Sam
 
 

Sam, I think we are in agreement (at least with folks who responded to this 
thread).
Or maybe I am not reading your mail right and you don't agree with Leo ?

My own take and reason for calling for a change we are currently doing things 
is mostly due to the way we release.

I would like to see a stable master (and I think we are in agreement with that).
That means that development should not happen on master and that every commit 
that lands on master should be shippable.

I personally have no issues with cherry-picking. So I would be fine cherry 
picking from a hot-fix branch into master, to fix a bug. 
The end result is that the next commit on master would still mean master is 
shippable/releasable.

If we agree with this basic concept. The question becomes how do we get there, 
considering that master is now full of dev work and potential bug.
The only releasable product we have are on the 4.3, 4.4 and previous release 
branches.

Ideally, I would like to see master becomes 4.4. And work our way back, merging 
the new features that are already in master into the new master (based on 4.4).
This could be quite complicated but we need to do it (or something like it).

To move forward, we should make a proposal to the list and call for a vote.

Any takers to start a wiki page proposing a new git process and how we could 
move to it (transition path) ?


-Sebastien


 
 On Wed, Jul 23, 2014 at 5:16 AM, Leo Simons lsim...@schubergphilis.com
 wrote:
 
 Hey folks,
 
 With 4.4.0 tagged, is now an opportune time to go and implement this?
 
 I would enthousiastically +1 and get crackin', but I’m not a committer so
 its not that practical for me to volunteer!
 
 I wanted to point out atlassian’s description of gitflow
 
  https://www.atlassian.com/git/workflows#!workflow-gitflow
 
 which might be easier to read.
 
 Similarly, the git-flow scripts that help out with implementing this stuff
 
  https://github.com/nvie/gitflow
 
 they also describe the relationship between gitflow and dealing with
 multiple remotes
 
  https://www.atlassian.com/git/workflows#!pull-request
 
 Finally note atlassian’s free sourcetree GUI has built-in support for
 git-flow
 
  http://www.sourcetreeapp.com/
 
 Because cloudstack currently is full of rebasing and squashing and
 cherry-picking, you get very little benefit from a tree visualization tool
 (like this or gitk or ...) right now, but it would be *great* to have going
 forward.
 
 
 cheers,
 
 
 Leo
 
 On Jul 1, 2014, at 12:09 AM, Sebastien Goasguen run...@gmail.com wrote:
 
 I would like to re-start this discussion.
 
 Rajani made some good points and someone mentioned Gitflow:
 
 http://nvie.com/posts/a-successful-git-branching-model/
 
 Thinking about our release procedure, we clearly need more tests and a
 CI. However it looks like this is going to take some time.
 
 In the meantime I think there is nothing preventing us from agreeing to
 'git practices', we don't need tests or new infra, we just need to agree on
 the git workflow.
 
 Right now Master is really a development 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-23 Thread Daan Hoogland
Sebastien,

It seems we can do what you are calling for is creating a branch
called 'release'. We can merge back into that branch from 4.4, master,
4.3. I would like to see people that want a feature or bug fix in a
branch make a fork of that branch and when that fork is working do a
cherry-pick. The -forward concept is now used for that but it is
broken because more then for one piece of work there are commits on
it. This caused me conflicts during the release. Especially painfull
as not all was intended to get into the release. We can create this
'release' branch now on the basis of 4.4 and start pulling in changes.
There is a question of control. Do we allow all committers to manage
the release? I am for that but can imagine not everybody is.

rule number 1 will be: you are going to do something to the code, you
start by creating a branch.

right?

On Wed, Jul 23, 2014 at 5:28 PM, Sebastien Goasguen run...@gmail.com wrote:

 On Jul 23, 2014, at 11:19 AM, Sam Schmit sam.sch...@appcore.com wrote:

 Hey everyone,

 I've been a developer for a handful of years and have had my share of
 experience with different version control systems.  I've used (for better
 or worse) Git, Perforce, Rational ClearCast, and SVN.

 Each of these solutions offers their own unique set of features, strengths
 and weaknesses.  As there are so many systems that are good at specific
 things, it seems best to use the features that the chosen system is best at.

 Git is great at branching, merging and using that structure to maintain and
 control how changes get into the primary branches.  Git tools even make
 this easy by integrating directly into the Gitflow to make branching and
 merging that much easier.  It would seem counter-intuitive to NOT make use
 of these built-in capabilities.

 In addition to that, I know that the current method of change management is
 incredibly frustrating to work with, and works directly against the way a
 typical Git user would expect it to be structured.  I should NEVER have
 problem compiling and running something on master.  I should not have
 problems building anything on a release branch.  A feature/bugfix branch is
 where things can be, and often are, broken or unstable.  There have been
 many times working in Cloudstack where I've had to search for a stable
 revision on master, and that's just plain wrong.

 I do realize that having this many developers working on so many features
 and bugfixes will result in a large number of branches.  I don't believe
 this is a good argument against using a branching method, though - I
 believe that the current system is even more confusing and difficult to use.

 I could pontificate on change management quite a bit more, but my opinion
 in summary would basically be:  use Git the way it was meant to be used,
 and things will be better.  Just my two cents.

 Sam



 Sam, I think we are in agreement (at least with folks who responded to this 
 thread).
 Or maybe I am not reading your mail right and you don't agree with Leo ?

 My own take and reason for calling for a change we are currently doing things 
 is mostly due to the way we release.

 I would like to see a stable master (and I think we are in agreement with 
 that).
 That means that development should not happen on master and that every commit 
 that lands on master should be shippable.

 I personally have no issues with cherry-picking. So I would be fine cherry 
 picking from a hot-fix branch into master, to fix a bug.
 The end result is that the next commit on master would still mean master is 
 shippable/releasable.

 If we agree with this basic concept. The question becomes how do we get 
 there, considering that master is now full of dev work and potential bug.
 The only releasable product we have are on the 4.3, 4.4 and previous release 
 branches.

 Ideally, I would like to see master becomes 4.4. And work our way back, 
 merging the new features that are already in master into the new master 
 (based on 4.4).
 This could be quite complicated but we need to do it (or something like it).

 To move forward, we should make a proposal to the list and call for a vote.

 Any takers to start a wiki page proposing a new git process and how we could 
 move to it (transition path) ?


 -Sebastien



 On Wed, Jul 23, 2014 at 5:16 AM, Leo Simons lsim...@schubergphilis.com
 wrote:

 Hey folks,

 With 4.4.0 tagged, is now an opportune time to go and implement this?

 I would enthousiastically +1 and get crackin', but I’m not a committer so
 its not that practical for me to volunteer!

 I wanted to point out atlassian’s description of gitflow

  https://www.atlassian.com/git/workflows#!workflow-gitflow

 which might be easier to read.

 Similarly, the git-flow scripts that help out with implementing this stuff

  https://github.com/nvie/gitflow

 they also describe the relationship between gitflow and dealing with
 multiple remotes

  https://www.atlassian.com/git/workflows#!pull-request

 Finally note 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-23 Thread Sebastien Goasguen

On Jul 23, 2014, at 11:38 AM, daan Hoogland daan.hoogl...@gmail.com wrote:

 Sebastien,
 
 It seems we can do what you are calling for is creating a branch
 called 'release'. We can merge back into that branch from 4.4, master,
 4.3. I would like to see people that want a feature or bug fix in a
 branch make a fork of that branch and when that fork is working do a
 cherry-pick. The -forward concept is now used for that but it is
 broken because more then for one piece of work there are commits on
 it. This caused me conflicts during the release. Especially painfull
 as not all was intended to get into the release. We can create this
 'release' branch now on the basis of 4.4 and start pulling in changes.

Yes, that's what I am thinking about too, so +1

Our master would become the -develop- in gitflow terms
The release branch you mention would become the -master- in gitflow terms

If we start now, indeed we can create 'release' from 4.4 release tag (voted and 
shipped).

That means that to create 4.5 we will need to merge features back into 
'release'. it might be messy because some of those features are already in our 
current master.

But all of this will keep 'release' clean (we can keep track of bugs and 
features that are in it in CHANGES file etc..) 


 There is a question of control. Do we allow all committers to manage
 the release? I am for that but can imagine not everybody is.
 

At first I would say that only the RM can commit to 'release'. As we get the CI 
in place  we could relax this and allow commits that pass the CI to get into 
'release', but right now I would vote for a tighter control of 'release'.

 rule number 1 will be: you are going to do something to the code, you
 start by creating a branch.
 
 right?
 
 On Wed, Jul 23, 2014 at 5:28 PM, Sebastien Goasguen run...@gmail.com wrote:
 
 On Jul 23, 2014, at 11:19 AM, Sam Schmit sam.sch...@appcore.com wrote:
 
 Hey everyone,
 
 I've been a developer for a handful of years and have had my share of
 experience with different version control systems.  I've used (for better
 or worse) Git, Perforce, Rational ClearCast, and SVN.
 
 Each of these solutions offers their own unique set of features, strengths
 and weaknesses.  As there are so many systems that are good at specific
 things, it seems best to use the features that the chosen system is best at.
 
 Git is great at branching, merging and using that structure to maintain and
 control how changes get into the primary branches.  Git tools even make
 this easy by integrating directly into the Gitflow to make branching and
 merging that much easier.  It would seem counter-intuitive to NOT make use
 of these built-in capabilities.
 
 In addition to that, I know that the current method of change management is
 incredibly frustrating to work with, and works directly against the way a
 typical Git user would expect it to be structured.  I should NEVER have
 problem compiling and running something on master.  I should not have
 problems building anything on a release branch.  A feature/bugfix branch is
 where things can be, and often are, broken or unstable.  There have been
 many times working in Cloudstack where I've had to search for a stable
 revision on master, and that's just plain wrong.
 
 I do realize that having this many developers working on so many features
 and bugfixes will result in a large number of branches.  I don't believe
 this is a good argument against using a branching method, though - I
 believe that the current system is even more confusing and difficult to use.
 
 I could pontificate on change management quite a bit more, but my opinion
 in summary would basically be:  use Git the way it was meant to be used,
 and things will be better.  Just my two cents.
 
 Sam
 
 
 
 Sam, I think we are in agreement (at least with folks who responded to this 
 thread).
 Or maybe I am not reading your mail right and you don't agree with Leo ?
 
 My own take and reason for calling for a change we are currently doing 
 things is mostly due to the way we release.
 
 I would like to see a stable master (and I think we are in agreement with 
 that).
 That means that development should not happen on master and that every 
 commit that lands on master should be shippable.
 
 I personally have no issues with cherry-picking. So I would be fine cherry 
 picking from a hot-fix branch into master, to fix a bug.
 The end result is that the next commit on master would still mean master is 
 shippable/releasable.
 
 If we agree with this basic concept. The question becomes how do we get 
 there, considering that master is now full of dev work and potential bug.
 The only releasable product we have are on the 4.3, 4.4 and previous release 
 branches.
 
 Ideally, I would like to see master becomes 4.4. And work our way back, 
 merging the new features that are already in master into the new master 
 (based on 4.4).
 This could be quite complicated but we need to do it (or something like it).
 
 To 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-23 Thread Mike Tutkowski
To start this all off, what about making a new branch call 'develop' off of
'master'? People can continue to commit to 'develop' as needed (as they
were doing previously to 'master'), but only cherry pick well-tested
features into 'master'.

I know 'master' might not be currently in a shippable state (or maybe it
is), but we can allow it to slowly make such a transition during the 4.5
release and then keep it in a shippable going forward.


On Wed, Jul 23, 2014 at 9:51 AM, Sebastien Goasguen run...@gmail.com
wrote:


 On Jul 23, 2014, at 11:38 AM, daan Hoogland daan.hoogl...@gmail.com
 wrote:

  Sebastien,
 
  It seems we can do what you are calling for is creating a branch
  called 'release'. We can merge back into that branch from 4.4, master,
  4.3. I would like to see people that want a feature or bug fix in a
  branch make a fork of that branch and when that fork is working do a
  cherry-pick. The -forward concept is now used for that but it is
  broken because more then for one piece of work there are commits on
  it. This caused me conflicts during the release. Especially painfull
  as not all was intended to get into the release. We can create this
  'release' branch now on the basis of 4.4 and start pulling in changes.

 Yes, that's what I am thinking about too, so +1

 Our master would become the -develop- in gitflow terms
 The release branch you mention would become the -master- in gitflow terms

 If we start now, indeed we can create 'release' from 4.4 release tag
 (voted and shipped).

 That means that to create 4.5 we will need to merge features back into
 'release'. it might be messy because some of those features are already in
 our current master.

 But all of this will keep 'release' clean (we can keep track of bugs and
 features that are in it in CHANGES file etc..)


  There is a question of control. Do we allow all committers to manage
  the release? I am for that but can imagine not everybody is.
 

 At first I would say that only the RM can commit to 'release'. As we get
 the CI in place  we could relax this and allow commits that pass the CI to
 get into 'release', but right now I would vote for a tighter control of
 'release'.

  rule number 1 will be: you are going to do something to the code, you
  start by creating a branch.
 
  right?
 
  On Wed, Jul 23, 2014 at 5:28 PM, Sebastien Goasguen run...@gmail.com
 wrote:
 
  On Jul 23, 2014, at 11:19 AM, Sam Schmit sam.sch...@appcore.com
 wrote:
 
  Hey everyone,
 
  I've been a developer for a handful of years and have had my share of
  experience with different version control systems.  I've used (for
 better
  or worse) Git, Perforce, Rational ClearCast, and SVN.
 
  Each of these solutions offers their own unique set of features,
 strengths
  and weaknesses.  As there are so many systems that are good at specific
  things, it seems best to use the features that the chosen system is
 best at.
 
  Git is great at branching, merging and using that structure to
 maintain and
  control how changes get into the primary branches.  Git tools even make
  this easy by integrating directly into the Gitflow to make branching
 and
  merging that much easier.  It would seem counter-intuitive to NOT make
 use
  of these built-in capabilities.
 
  In addition to that, I know that the current method of change
 management is
  incredibly frustrating to work with, and works directly against the
 way a
  typical Git user would expect it to be structured.  I should NEVER have
  problem compiling and running something on master.  I should not have
  problems building anything on a release branch.  A feature/bugfix
 branch is
  where things can be, and often are, broken or unstable.  There have
 been
  many times working in Cloudstack where I've had to search for a stable
  revision on master, and that's just plain wrong.
 
  I do realize that having this many developers working on so many
 features
  and bugfixes will result in a large number of branches.  I don't
 believe
  this is a good argument against using a branching method, though - I
  believe that the current system is even more confusing and difficult
 to use.
 
  I could pontificate on change management quite a bit more, but my
 opinion
  in summary would basically be:  use Git the way it was meant to be
 used,
  and things will be better.  Just my two cents.
 
  Sam
 
 
 
  Sam, I think we are in agreement (at least with folks who responded to
 this thread).
  Or maybe I am not reading your mail right and you don't agree with Leo ?
 
  My own take and reason for calling for a change we are currently doing
 things is mostly due to the way we release.
 
  I would like to see a stable master (and I think we are in agreement
 with that).
  That means that development should not happen on master and that every
 commit that lands on master should be shippable.
 
  I personally have no issues with cherry-picking. So I would be fine
 cherry picking from a hot-fix branch into master, to fix a bug.

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-23 Thread Nate Gordon
Let me ask the question, why have master be develop and a release branch be
master? If we are going to follow gitflow, why not just stick with the
norm? If master is the development branch, it might not be stable. I think
the goal here is that we have an obvious stable branch. Anyone could come
check out master and have the latest useable.

Also, I'm struggling to understand the benefit of cherry-pick. If you
completely squash history, you lose a tremendous amount of context, which I
use extensively to figure out why a bug is the way it is. Only knowing that
the branch was merged at a given point in time doesn't give any context.
Seeing the individual commit history of the branch helps to preserve the
rationale for why the code was written the way it was. In theory if every
change starts out as a branch (feature, hotfix, release), then why not just
merge the branch once it is in a good and acceptable state?

I also agree with Mike that this will have to be a transition over time. It
will take some time to clean up master to the point where it can be
considered a solid stable branch. Possibly as part of the 4.5 release.


On Wed, Jul 23, 2014 at 10:51 AM, Sebastien Goasguen run...@gmail.com
wrote:


 On Jul 23, 2014, at 11:38 AM, daan Hoogland daan.hoogl...@gmail.com
 wrote:

  Sebastien,
 
  It seems we can do what you are calling for is creating a branch
  called 'release'. We can merge back into that branch from 4.4, master,
  4.3. I would like to see people that want a feature or bug fix in a
  branch make a fork of that branch and when that fork is working do a
  cherry-pick. The -forward concept is now used for that but it is
  broken because more then for one piece of work there are commits on
  it. This caused me conflicts during the release. Especially painfull
  as not all was intended to get into the release. We can create this
  'release' branch now on the basis of 4.4 and start pulling in changes.

 Yes, that's what I am thinking about too, so +1

 Our master would become the -develop- in gitflow terms
 The release branch you mention would become the -master- in gitflow terms

 If we start now, indeed we can create 'release' from 4.4 release tag
 (voted and shipped).

 That means that to create 4.5 we will need to merge features back into
 'release'. it might be messy because some of those features are already in
 our current master.

 But all of this will keep 'release' clean (we can keep track of bugs and
 features that are in it in CHANGES file etc..)


  There is a question of control. Do we allow all committers to manage
  the release? I am for that but can imagine not everybody is.
 

 At first I would say that only the RM can commit to 'release'. As we get
 the CI in place  we could relax this and allow commits that pass the CI to
 get into 'release', but right now I would vote for a tighter control of
 'release'.

  rule number 1 will be: you are going to do something to the code, you
  start by creating a branch.
 
  right?
 
  On Wed, Jul 23, 2014 at 5:28 PM, Sebastien Goasguen run...@gmail.com
 wrote:
 
  On Jul 23, 2014, at 11:19 AM, Sam Schmit sam.sch...@appcore.com
 wrote:
 
  Hey everyone,
 
  I've been a developer for a handful of years and have had my share of
  experience with different version control systems.  I've used (for
 better
  or worse) Git, Perforce, Rational ClearCast, and SVN.
 
  Each of these solutions offers their own unique set of features,
 strengths
  and weaknesses.  As there are so many systems that are good at specific
  things, it seems best to use the features that the chosen system is
 best at.
 
  Git is great at branching, merging and using that structure to
 maintain and
  control how changes get into the primary branches.  Git tools even make
  this easy by integrating directly into the Gitflow to make branching
 and
  merging that much easier.  It would seem counter-intuitive to NOT make
 use
  of these built-in capabilities.
 
  In addition to that, I know that the current method of change
 management is
  incredibly frustrating to work with, and works directly against the
 way a
  typical Git user would expect it to be structured.  I should NEVER have
  problem compiling and running something on master.  I should not have
  problems building anything on a release branch.  A feature/bugfix
 branch is
  where things can be, and often are, broken or unstable.  There have
 been
  many times working in Cloudstack where I've had to search for a stable
  revision on master, and that's just plain wrong.
 
  I do realize that having this many developers working on so many
 features
  and bugfixes will result in a large number of branches.  I don't
 believe
  this is a good argument against using a branching method, though - I
  believe that the current system is even more confusing and difficult
 to use.
 
  I could pontificate on change management quite a bit more, but my
 opinion
  in summary would basically be:  use Git the way it was meant to be
 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-23 Thread Daan Hoogland
Mike,

Why not then just rename master to develop? people can still commit to
it. We don't need to have a branch named master and we can name any
branch so. in line with the gitflow article we could fork master of
off 4.4...

On Wed, Jul 23, 2014 at 6:13 PM, Mike Tutkowski
mike.tutkow...@solidfire.com wrote:
 To start this all off, what about making a new branch call 'develop' off of
 'master'? People can continue to commit to 'develop' as needed (as they
 were doing previously to 'master'), but only cherry pick well-tested
 features into 'master'.

 I know 'master' might not be currently in a shippable state (or maybe it
 is), but we can allow it to slowly make such a transition during the 4.5
 release and then keep it in a shippable going forward.


 On Wed, Jul 23, 2014 at 9:51 AM, Sebastien Goasguen run...@gmail.com
 wrote:


 On Jul 23, 2014, at 11:38 AM, daan Hoogland daan.hoogl...@gmail.com
 wrote:

  Sebastien,
 
  It seems we can do what you are calling for is creating a branch
  called 'release'. We can merge back into that branch from 4.4, master,
  4.3. I would like to see people that want a feature or bug fix in a
  branch make a fork of that branch and when that fork is working do a
  cherry-pick. The -forward concept is now used for that but it is
  broken because more then for one piece of work there are commits on
  it. This caused me conflicts during the release. Especially painfull
  as not all was intended to get into the release. We can create this
  'release' branch now on the basis of 4.4 and start pulling in changes.

 Yes, that's what I am thinking about too, so +1

 Our master would become the -develop- in gitflow terms
 The release branch you mention would become the -master- in gitflow terms

 If we start now, indeed we can create 'release' from 4.4 release tag
 (voted and shipped).

 That means that to create 4.5 we will need to merge features back into
 'release'. it might be messy because some of those features are already in
 our current master.

 But all of this will keep 'release' clean (we can keep track of bugs and
 features that are in it in CHANGES file etc..)


  There is a question of control. Do we allow all committers to manage
  the release? I am for that but can imagine not everybody is.
 

 At first I would say that only the RM can commit to 'release'. As we get
 the CI in place  we could relax this and allow commits that pass the CI to
 get into 'release', but right now I would vote for a tighter control of
 'release'.

  rule number 1 will be: you are going to do something to the code, you
  start by creating a branch.
 
  right?
 
  On Wed, Jul 23, 2014 at 5:28 PM, Sebastien Goasguen run...@gmail.com
 wrote:
 
  On Jul 23, 2014, at 11:19 AM, Sam Schmit sam.sch...@appcore.com
 wrote:
 
  Hey everyone,
 
  I've been a developer for a handful of years and have had my share of
  experience with different version control systems.  I've used (for
 better
  or worse) Git, Perforce, Rational ClearCast, and SVN.
 
  Each of these solutions offers their own unique set of features,
 strengths
  and weaknesses.  As there are so many systems that are good at specific
  things, it seems best to use the features that the chosen system is
 best at.
 
  Git is great at branching, merging and using that structure to
 maintain and
  control how changes get into the primary branches.  Git tools even make
  this easy by integrating directly into the Gitflow to make branching
 and
  merging that much easier.  It would seem counter-intuitive to NOT make
 use
  of these built-in capabilities.
 
  In addition to that, I know that the current method of change
 management is
  incredibly frustrating to work with, and works directly against the
 way a
  typical Git user would expect it to be structured.  I should NEVER have
  problem compiling and running something on master.  I should not have
  problems building anything on a release branch.  A feature/bugfix
 branch is
  where things can be, and often are, broken or unstable.  There have
 been
  many times working in Cloudstack where I've had to search for a stable
  revision on master, and that's just plain wrong.
 
  I do realize that having this many developers working on so many
 features
  and bugfixes will result in a large number of branches.  I don't
 believe
  this is a good argument against using a branching method, though - I
  believe that the current system is even more confusing and difficult
 to use.
 
  I could pontificate on change management quite a bit more, but my
 opinion
  in summary would basically be:  use Git the way it was meant to be
 used,
  and things will be better.  Just my two cents.
 
  Sam
 
 
 
  Sam, I think we are in agreement (at least with folks who responded to
 this thread).
  Or maybe I am not reading your mail right and you don't agree with Leo ?
 
  My own take and reason for calling for a change we are currently doing
 things is mostly due to the way we release.
 
  I would like to see a 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-23 Thread Sebastien Goasguen

On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote:

 Let me ask the question, why have master be develop and a release branch be
 master? If we are going to follow gitflow, why not just stick with the
 norm? If master is the development branch, it might not be stable. I think
 the goal here is that we have an obvious stable branch. Anyone could come
 check out master and have the latest useable.

I am in favor of following the norm, so ideally master should be our stable 
branch (agreed).

The issue is with the transition.

Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally we 
could start a stable branch of this tag and build up bug fix releases all the 
way to 4.5 from there.

But all features for 4.5 are already in master.

So if we create a 'develop' branch of master and stabilize 'master' then 
develop is now started from a stable tag (4.4.0).

So what's the best way to flip ? There is most likely some git magic that can 
we do.


The new git workflow and the transition process need to be part of a proposal 
that we get consensus on.

getting there :)

-seb

 
 Also, I'm struggling to understand the benefit of cherry-pick. If you
 completely squash history, you lose a tremendous amount of context, which I
 use extensively to figure out why a bug is the way it is. Only knowing that
 the branch was merged at a given point in time doesn't give any context.
 Seeing the individual commit history of the branch helps to preserve the
 rationale for why the code was written the way it was. In theory if every
 change starts out as a branch (feature, hotfix, release), then why not just
 merge the branch once it is in a good and acceptable state?
 
 I also agree with Mike that this will have to be a transition over time. It
 will take some time to clean up master to the point where it can be
 considered a solid stable branch. Possibly as part of the 4.5 release.
 
 
 On Wed, Jul 23, 2014 at 10:51 AM, Sebastien Goasguen run...@gmail.com
 wrote:
 
 
 On Jul 23, 2014, at 11:38 AM, daan Hoogland daan.hoogl...@gmail.com
 wrote:
 
 Sebastien,
 
 It seems we can do what you are calling for is creating a branch
 called 'release'. We can merge back into that branch from 4.4, master,
 4.3. I would like to see people that want a feature or bug fix in a
 branch make a fork of that branch and when that fork is working do a
 cherry-pick. The -forward concept is now used for that but it is
 broken because more then for one piece of work there are commits on
 it. This caused me conflicts during the release. Especially painfull
 as not all was intended to get into the release. We can create this
 'release' branch now on the basis of 4.4 and start pulling in changes.
 
 Yes, that's what I am thinking about too, so +1
 
 Our master would become the -develop- in gitflow terms
 The release branch you mention would become the -master- in gitflow terms
 
 If we start now, indeed we can create 'release' from 4.4 release tag
 (voted and shipped).
 
 That means that to create 4.5 we will need to merge features back into
 'release'. it might be messy because some of those features are already in
 our current master.
 
 But all of this will keep 'release' clean (we can keep track of bugs and
 features that are in it in CHANGES file etc..)
 
 
 There is a question of control. Do we allow all committers to manage
 the release? I am for that but can imagine not everybody is.
 
 
 At first I would say that only the RM can commit to 'release'. As we get
 the CI in place  we could relax this and allow commits that pass the CI to
 get into 'release', but right now I would vote for a tighter control of
 'release'.
 
 rule number 1 will be: you are going to do something to the code, you
 start by creating a branch.
 
 right?
 
 On Wed, Jul 23, 2014 at 5:28 PM, Sebastien Goasguen run...@gmail.com
 wrote:
 
 On Jul 23, 2014, at 11:19 AM, Sam Schmit sam.sch...@appcore.com
 wrote:
 
 Hey everyone,
 
 I've been a developer for a handful of years and have had my share of
 experience with different version control systems.  I've used (for
 better
 or worse) Git, Perforce, Rational ClearCast, and SVN.
 
 Each of these solutions offers their own unique set of features,
 strengths
 and weaknesses.  As there are so many systems that are good at specific
 things, it seems best to use the features that the chosen system is
 best at.
 
 Git is great at branching, merging and using that structure to
 maintain and
 control how changes get into the primary branches.  Git tools even make
 this easy by integrating directly into the Gitflow to make branching
 and
 merging that much easier.  It would seem counter-intuitive to NOT make
 use
 of these built-in capabilities.
 
 In addition to that, I know that the current method of change
 management is
 incredibly frustrating to work with, and works directly against the
 way a
 typical Git user would expect it to be structured.  I should NEVER have
 problem compiling and 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-23 Thread Sebastien Goasguen

On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com wrote:

 
 On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote:
 
 Let me ask the question, why have master be develop and a release branch be
 master? If we are going to follow gitflow, why not just stick with the
 norm? If master is the development branch, it might not be stable. I think
 the goal here is that we have an obvious stable branch. Anyone could come
 check out master and have the latest useable.
 
 I am in favor of following the norm, so ideally master should be our stable 
 branch (agreed).
 
 The issue is with the transition.
 
 Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally we 
 could start a stable branch of this tag and build up bug fix releases all the 
 way to 4.5 from there.
 
 But all features for 4.5 are already in master.
 
 So if we create a 'develop' branch of master and stabilize 'master' then 
 develop is now started from a stable tag (4.4.0).
 

*not* started from a stable tag, and merges will be tricky, no ?

 So what's the best way to flip ? There is most likely some git magic that can 
 we do.
 
 
 The new git workflow and the transition process need to be part of a proposal 
 that we get consensus on.
 
 getting there :)
 
 -seb
 
 
 Also, I'm struggling to understand the benefit of cherry-pick. If you
 completely squash history, you lose a tremendous amount of context, which I
 use extensively to figure out why a bug is the way it is. Only knowing that
 the branch was merged at a given point in time doesn't give any context.
 Seeing the individual commit history of the branch helps to preserve the
 rationale for why the code was written the way it was. In theory if every
 change starts out as a branch (feature, hotfix, release), then why not just
 merge the branch once it is in a good and acceptable state?
 
 I also agree with Mike that this will have to be a transition over time. It
 will take some time to clean up master to the point where it can be
 considered a solid stable branch. Possibly as part of the 4.5 release.
 
 
 On Wed, Jul 23, 2014 at 10:51 AM, Sebastien Goasguen run...@gmail.com
 wrote:
 
 
 On Jul 23, 2014, at 11:38 AM, daan Hoogland daan.hoogl...@gmail.com
 wrote:
 
 Sebastien,
 
 It seems we can do what you are calling for is creating a branch
 called 'release'. We can merge back into that branch from 4.4, master,
 4.3. I would like to see people that want a feature or bug fix in a
 branch make a fork of that branch and when that fork is working do a
 cherry-pick. The -forward concept is now used for that but it is
 broken because more then for one piece of work there are commits on
 it. This caused me conflicts during the release. Especially painfull
 as not all was intended to get into the release. We can create this
 'release' branch now on the basis of 4.4 and start pulling in changes.
 
 Yes, that's what I am thinking about too, so +1
 
 Our master would become the -develop- in gitflow terms
 The release branch you mention would become the -master- in gitflow terms
 
 If we start now, indeed we can create 'release' from 4.4 release tag
 (voted and shipped).
 
 That means that to create 4.5 we will need to merge features back into
 'release'. it might be messy because some of those features are already in
 our current master.
 
 But all of this will keep 'release' clean (we can keep track of bugs and
 features that are in it in CHANGES file etc..)
 
 
 There is a question of control. Do we allow all committers to manage
 the release? I am for that but can imagine not everybody is.
 
 
 At first I would say that only the RM can commit to 'release'. As we get
 the CI in place  we could relax this and allow commits that pass the CI to
 get into 'release', but right now I would vote for a tighter control of
 'release'.
 
 rule number 1 will be: you are going to do something to the code, you
 start by creating a branch.
 
 right?
 
 On Wed, Jul 23, 2014 at 5:28 PM, Sebastien Goasguen run...@gmail.com
 wrote:
 
 On Jul 23, 2014, at 11:19 AM, Sam Schmit sam.sch...@appcore.com
 wrote:
 
 Hey everyone,
 
 I've been a developer for a handful of years and have had my share of
 experience with different version control systems.  I've used (for
 better
 or worse) Git, Perforce, Rational ClearCast, and SVN.
 
 Each of these solutions offers their own unique set of features,
 strengths
 and weaknesses.  As there are so many systems that are good at specific
 things, it seems best to use the features that the chosen system is
 best at.
 
 Git is great at branching, merging and using that structure to
 maintain and
 control how changes get into the primary branches.  Git tools even make
 this easy by integrating directly into the Gitflow to make branching
 and
 merging that much easier.  It would seem counter-intuitive to NOT make
 use
 of these built-in capabilities.
 
 In addition to that, I know that the current method of change
 management is
 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-23 Thread Erik Weber
Must it start today, or when (if) the vote passes? Feature freeze for 4.5
has theoretically passed, so basically master branch should now be work in
progress towards a stable branch.

So I'd say; create a 'develop' branch off the current master.

Keep master as is, and only merge bugfixes until it is deemed stable and
4.5 is released.

4.6 development and new features goes into branches of 'develop'.

Erik
23. juli 2014 18:30 skrev Sebastien Goasguen run...@gmail.com følgende:


 On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote:

  Let me ask the question, why have master be develop and a release branch
 be
  master? If we are going to follow gitflow, why not just stick with the
  norm? If master is the development branch, it might not be stable. I
 think
  the goal here is that we have an obvious stable branch. Anyone could come
  check out master and have the latest useable.

 I am in favor of following the norm, so ideally master should be our
 stable branch (agreed).

 The issue is with the transition.

 Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally we
 could start a stable branch of this tag and build up bug fix releases all
 the way to 4.5 from there.

 But all features for 4.5 are already in master.

 So if we create a 'develop' branch of master and stabilize 'master' then
 develop is now started from a stable tag (4.4.0).

 So what's the best way to flip ? There is most likely some git magic that
 can we do.


 The new git workflow and the transition process need to be part of a
 proposal that we get consensus on.

 getting there :)

 -seb

 
  Also, I'm struggling to understand the benefit of cherry-pick. If you
  completely squash history, you lose a tremendous amount of context,
 which I
  use extensively to figure out why a bug is the way it is. Only knowing
 that
  the branch was merged at a given point in time doesn't give any context.
  Seeing the individual commit history of the branch helps to preserve the
  rationale for why the code was written the way it was. In theory if every
  change starts out as a branch (feature, hotfix, release), then why not
 just
  merge the branch once it is in a good and acceptable state?
 
  I also agree with Mike that this will have to be a transition over time.
 It
  will take some time to clean up master to the point where it can be
  considered a solid stable branch. Possibly as part of the 4.5 release.
 
 
  On Wed, Jul 23, 2014 at 10:51 AM, Sebastien Goasguen run...@gmail.com
  wrote:
 
 
  On Jul 23, 2014, at 11:38 AM, daan Hoogland daan.hoogl...@gmail.com
  wrote:
 
  Sebastien,
 
  It seems we can do what you are calling for is creating a branch
  called 'release'. We can merge back into that branch from 4.4, master,
  4.3. I would like to see people that want a feature or bug fix in a
  branch make a fork of that branch and when that fork is working do a
  cherry-pick. The -forward concept is now used for that but it is
  broken because more then for one piece of work there are commits on
  it. This caused me conflicts during the release. Especially painfull
  as not all was intended to get into the release. We can create this
  'release' branch now on the basis of 4.4 and start pulling in changes.
 
  Yes, that's what I am thinking about too, so +1
 
  Our master would become the -develop- in gitflow terms
  The release branch you mention would become the -master- in gitflow
 terms
 
  If we start now, indeed we can create 'release' from 4.4 release tag
  (voted and shipped).
 
  That means that to create 4.5 we will need to merge features back into
  'release'. it might be messy because some of those features are already
 in
  our current master.
 
  But all of this will keep 'release' clean (we can keep track of bugs and
  features that are in it in CHANGES file etc..)
 
 
  There is a question of control. Do we allow all committers to manage
  the release? I am for that but can imagine not everybody is.
 
 
  At first I would say that only the RM can commit to 'release'. As we get
  the CI in place  we could relax this and allow commits that pass the CI
 to
  get into 'release', but right now I would vote for a tighter control of
  'release'.
 
  rule number 1 will be: you are going to do something to the code, you
  start by creating a branch.
 
  right?
 
  On Wed, Jul 23, 2014 at 5:28 PM, Sebastien Goasguen run...@gmail.com
  wrote:
 
  On Jul 23, 2014, at 11:19 AM, Sam Schmit sam.sch...@appcore.com
  wrote:
 
  Hey everyone,
 
  I've been a developer for a handful of years and have had my share of
  experience with different version control systems.  I've used (for
  better
  or worse) Git, Perforce, Rational ClearCast, and SVN.
 
  Each of these solutions offers their own unique set of features,
  strengths
  and weaknesses.  As there are so many systems that are good at
 specific
  things, it seems best to use the features that the chosen system is
  best at.
 
  Git is great at branching, 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-23 Thread Mike Tutkowski
Right, 'master' should - theoretically - be somewhat stable at present as
we are post 4.5 Feature Freeze.

I guess we should address Daan's question of what 'develop' means in this
new model? When can code be checked into 'develop', but not 'master'? Code
that goes into 'master' must be deemed 'stable.' What about 'develop'? Why
do we have it if we're using our own branches for development?

Thanks for clarifying.


On Wed, Jul 23, 2014 at 11:01 AM, Erik Weber terbol...@gmail.com wrote:

 Must it start today, or when (if) the vote passes? Feature freeze for 4.5
 has theoretically passed, so basically master branch should now be work in
 progress towards a stable branch.

 So I'd say; create a 'develop' branch off the current master.

 Keep master as is, and only merge bugfixes until it is deemed stable and
 4.5 is released.

 4.6 development and new features goes into branches of 'develop'.

 Erik
 23. juli 2014 18:30 skrev Sebastien Goasguen run...@gmail.com
 følgende:

 
  On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com
 wrote:
 
   Let me ask the question, why have master be develop and a release
 branch
  be
   master? If we are going to follow gitflow, why not just stick with
 the
   norm? If master is the development branch, it might not be stable. I
  think
   the goal here is that we have an obvious stable branch. Anyone could
 come
   check out master and have the latest useable.
 
  I am in favor of following the norm, so ideally master should be our
  stable branch (agreed).
 
  The issue is with the transition.
 
  Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally
 we
  could start a stable branch of this tag and build up bug fix releases all
  the way to 4.5 from there.
 
  But all features for 4.5 are already in master.
 
  So if we create a 'develop' branch of master and stabilize 'master' then
  develop is now started from a stable tag (4.4.0).
 
  So what's the best way to flip ? There is most likely some git magic that
  can we do.
 
 
  The new git workflow and the transition process need to be part of a
  proposal that we get consensus on.
 
  getting there :)
 
  -seb
 
  
   Also, I'm struggling to understand the benefit of cherry-pick. If you
   completely squash history, you lose a tremendous amount of context,
  which I
   use extensively to figure out why a bug is the way it is. Only knowing
  that
   the branch was merged at a given point in time doesn't give any
 context.
   Seeing the individual commit history of the branch helps to preserve
 the
   rationale for why the code was written the way it was. In theory if
 every
   change starts out as a branch (feature, hotfix, release), then why not
  just
   merge the branch once it is in a good and acceptable state?
  
   I also agree with Mike that this will have to be a transition over
 time.
  It
   will take some time to clean up master to the point where it can be
   considered a solid stable branch. Possibly as part of the 4.5 release.
  
  
   On Wed, Jul 23, 2014 at 10:51 AM, Sebastien Goasguen run...@gmail.com
 
   wrote:
  
  
   On Jul 23, 2014, at 11:38 AM, daan Hoogland daan.hoogl...@gmail.com
   wrote:
  
   Sebastien,
  
   It seems we can do what you are calling for is creating a branch
   called 'release'. We can merge back into that branch from 4.4,
 master,
   4.3. I would like to see people that want a feature or bug fix in a
   branch make a fork of that branch and when that fork is working do a
   cherry-pick. The -forward concept is now used for that but it is
   broken because more then for one piece of work there are commits on
   it. This caused me conflicts during the release. Especially painfull
   as not all was intended to get into the release. We can create this
   'release' branch now on the basis of 4.4 and start pulling in
 changes.
  
   Yes, that's what I am thinking about too, so +1
  
   Our master would become the -develop- in gitflow terms
   The release branch you mention would become the -master- in gitflow
  terms
  
   If we start now, indeed we can create 'release' from 4.4 release tag
   (voted and shipped).
  
   That means that to create 4.5 we will need to merge features back into
   'release'. it might be messy because some of those features are
 already
  in
   our current master.
  
   But all of this will keep 'release' clean (we can keep track of bugs
 and
   features that are in it in CHANGES file etc..)
  
  
   There is a question of control. Do we allow all committers to manage
   the release? I am for that but can imagine not everybody is.
  
  
   At first I would say that only the RM can commit to 'release'. As we
 get
   the CI in place  we could relax this and allow commits that pass the
 CI
  to
   get into 'release', but right now I would vote for a tighter control
 of
   'release'.
  
   rule number 1 will be: you are going to do something to the code, you
   start by creating a branch.
  
   right?
  
   On Wed, Jul 23, 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-23 Thread Daan Hoogland
so to start formulate a proposal:

all work shall be done in a new branch (it is advisable to prefix your
branches with your id)
when working, features will be cherry-picked/merged into the release
branch they are for and next into master.
hotfixes will be done in branchname-hotfixes

as transition we will

rename 'master' to 'develop'
branch a new 'master' from '4.4'
branch '4.5' from the new 'master'
merge any features from the new 'develop' to '4.5' and 'master'



On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com wrote:

 On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com wrote:


 On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote:

 Let me ask the question, why have master be develop and a release branch be
 master? If we are going to follow gitflow, why not just stick with the
 norm? If master is the development branch, it might not be stable. I think
 the goal here is that we have an obvious stable branch. Anyone could come
 check out master and have the latest useable.

 I am in favor of following the norm, so ideally master should be our stable 
 branch (agreed).

 The issue is with the transition.

 Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally we 
 could start a stable branch of this tag and build up bug fix releases all 
 the way to 4.5 from there.

 But all features for 4.5 are already in master.

 So if we create a 'develop' branch of master and stabilize 'master' then 
 develop is now started from a stable tag (4.4.0).


 *not* started from a stable tag, and merges will be tricky, no ?

 So what's the best way to flip ? There is most likely some git magic that 
 can we do.


 The new git workflow and the transition process need to be part of a 
 proposal that we get consensus on.

 getting there :)

 -seb


 Also, I'm struggling to understand the benefit of cherry-pick. If you
 completely squash history, you lose a tremendous amount of context, which I
 use extensively to figure out why a bug is the way it is. Only knowing that
 the branch was merged at a given point in time doesn't give any context.
 Seeing the individual commit history of the branch helps to preserve the
 rationale for why the code was written the way it was. In theory if every
 change starts out as a branch (feature, hotfix, release), then why not just
 merge the branch once it is in a good and acceptable state?

 I also agree with Mike that this will have to be a transition over time. It
 will take some time to clean up master to the point where it can be
 considered a solid stable branch. Possibly as part of the 4.5 release.


 On Wed, Jul 23, 2014 at 10:51 AM, Sebastien Goasguen run...@gmail.com
 wrote:


 On Jul 23, 2014, at 11:38 AM, daan Hoogland daan.hoogl...@gmail.com
 wrote:

 Sebastien,

 It seems we can do what you are calling for is creating a branch
 called 'release'. We can merge back into that branch from 4.4, master,
 4.3. I would like to see people that want a feature or bug fix in a
 branch make a fork of that branch and when that fork is working do a
 cherry-pick. The -forward concept is now used for that but it is
 broken because more then for one piece of work there are commits on
 it. This caused me conflicts during the release. Especially painfull
 as not all was intended to get into the release. We can create this
 'release' branch now on the basis of 4.4 and start pulling in changes.

 Yes, that's what I am thinking about too, so +1

 Our master would become the -develop- in gitflow terms
 The release branch you mention would become the -master- in gitflow terms

 If we start now, indeed we can create 'release' from 4.4 release tag
 (voted and shipped).

 That means that to create 4.5 we will need to merge features back into
 'release'. it might be messy because some of those features are already in
 our current master.

 But all of this will keep 'release' clean (we can keep track of bugs and
 features that are in it in CHANGES file etc..)


 There is a question of control. Do we allow all committers to manage
 the release? I am for that but can imagine not everybody is.


 At first I would say that only the RM can commit to 'release'. As we get
 the CI in place  we could relax this and allow commits that pass the CI to
 get into 'release', but right now I would vote for a tighter control of
 'release'.

 rule number 1 will be: you are going to do something to the code, you
 start by creating a branch.

 right?

 On Wed, Jul 23, 2014 at 5:28 PM, Sebastien Goasguen run...@gmail.com
 wrote:

 On Jul 23, 2014, at 11:19 AM, Sam Schmit sam.sch...@appcore.com
 wrote:

 Hey everyone,

 I've been a developer for a handful of years and have had my share of
 experience with different version control systems.  I've used (for
 better
 or worse) Git, Perforce, Rational ClearCast, and SVN.

 Each of these solutions offers their own unique set of features,
 strengths
 and weaknesses.  As there are so many systems that are good at 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-23 Thread Mike Tutkowski
Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off
and then merge features from develop into 4.5.

Why don't we instead start 4.5 where master is now with the assumption that
since we are past Feature Freeze for 4.5 that master is stable enough?


On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com
wrote:

 so to start formulate a proposal:

 all work shall be done in a new branch (it is advisable to prefix your
 branches with your id)
 when working, features will be cherry-picked/merged into the release
 branch they are for and next into master.
 hotfixes will be done in branchname-hotfixes

 as transition we will

 rename 'master' to 'develop'
 branch a new 'master' from '4.4'
 branch '4.5' from the new 'master'
 merge any features from the new 'develop' to '4.5' and 'master'



 On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com
 wrote:
 
  On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com
 wrote:
 
 
  On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com
 wrote:
 
  Let me ask the question, why have master be develop and a release
 branch be
  master? If we are going to follow gitflow, why not just stick with
 the
  norm? If master is the development branch, it might not be stable. I
 think
  the goal here is that we have an obvious stable branch. Anyone could
 come
  check out master and have the latest useable.
 
  I am in favor of following the norm, so ideally master should be our
 stable branch (agreed).
 
  The issue is with the transition.
 
  Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally
 we could start a stable branch of this tag and build up bug fix releases
 all the way to 4.5 from there.
 
  But all features for 4.5 are already in master.
 
  So if we create a 'develop' branch of master and stabilize 'master'
 then develop is now started from a stable tag (4.4.0).
 
 
  *not* started from a stable tag, and merges will be tricky, no ?
 
  So what's the best way to flip ? There is most likely some git magic
 that can we do.
 
 
  The new git workflow and the transition process need to be part of a
 proposal that we get consensus on.
 
  getting there :)
 
  -seb
 
 
  Also, I'm struggling to understand the benefit of cherry-pick. If you
  completely squash history, you lose a tremendous amount of context,
 which I
  use extensively to figure out why a bug is the way it is. Only knowing
 that
  the branch was merged at a given point in time doesn't give any
 context.
  Seeing the individual commit history of the branch helps to preserve
 the
  rationale for why the code was written the way it was. In theory if
 every
  change starts out as a branch (feature, hotfix, release), then why not
 just
  merge the branch once it is in a good and acceptable state?
 
  I also agree with Mike that this will have to be a transition over
 time. It
  will take some time to clean up master to the point where it can be
  considered a solid stable branch. Possibly as part of the 4.5 release.
 
 
  On Wed, Jul 23, 2014 at 10:51 AM, Sebastien Goasguen run...@gmail.com
 
  wrote:
 
 
  On Jul 23, 2014, at 11:38 AM, daan Hoogland daan.hoogl...@gmail.com
  wrote:
 
  Sebastien,
 
  It seems we can do what you are calling for is creating a branch
  called 'release'. We can merge back into that branch from 4.4,
 master,
  4.3. I would like to see people that want a feature or bug fix in a
  branch make a fork of that branch and when that fork is working do a
  cherry-pick. The -forward concept is now used for that but it is
  broken because more then for one piece of work there are commits on
  it. This caused me conflicts during the release. Especially painfull
  as not all was intended to get into the release. We can create this
  'release' branch now on the basis of 4.4 and start pulling in
 changes.
 
  Yes, that's what I am thinking about too, so +1
 
  Our master would become the -develop- in gitflow terms
  The release branch you mention would become the -master- in gitflow
 terms
 
  If we start now, indeed we can create 'release' from 4.4 release tag
  (voted and shipped).
 
  That means that to create 4.5 we will need to merge features back into
  'release'. it might be messy because some of those features are
 already in
  our current master.
 
  But all of this will keep 'release' clean (we can keep track of bugs
 and
  features that are in it in CHANGES file etc..)
 
 
  There is a question of control. Do we allow all committers to manage
  the release? I am for that but can imagine not everybody is.
 
 
  At first I would say that only the RM can commit to 'release'. As we
 get
  the CI in place  we could relax this and allow commits that pass the
 CI to
  get into 'release', but right now I would vote for a tighter control
 of
  'release'.
 
  rule number 1 will be: you are going to do something to the code, you
  start by creating a branch.
 
  right?
 
  On Wed, Jul 23, 2014 at 5:28 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-23 Thread Rajani Karuturi
I agree with mike. I think we should start 4.5 from where master is now 
Also create a develop branch from master and continue future work for 4.6 there.

I am not clear on how the release branches are going to be maintained.
Are we saying we would create 4.5-RELEASE branch which is essentially same as 
our current -FORWARD branch and continue cherry-picking?

I would prefer merges to cherry-picks. 
Also, I think we should allow committers to commit to the RELEASE branch after 
discussing about it on dev@ and have RM closely monitor them.
Any commit intended for 4.5 RELEASE should be checked in after discussion in 
the 4.5 Release branch and then merged to develop branch.


~Rajani



On 24-Jul-2014, at 1:14 am, Mike Tutkowski mike.tutkow...@solidfire.com wrote:

 Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off
 and then merge features from develop into 4.5.
 
 Why don't we instead start 4.5 where master is now with the assumption that
 since we are past Feature Freeze for 4.5 that master is stable enough?
 
 
 On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com
 wrote:
 
 so to start formulate a proposal:
 
 all work shall be done in a new branch (it is advisable to prefix your
 branches with your id)
 when working, features will be cherry-picked/merged into the release
 branch they are for and next into master.
 hotfixes will be done in branchname-hotfixes
 
 as transition we will
 
 rename 'master' to 'develop'
 branch a new 'master' from '4.4'
 branch '4.5' from the new 'master'
 merge any features from the new 'develop' to '4.5' and 'master'
 
 
 
 On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com
 wrote:
 
 On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com
 wrote:
 
 
 On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com
 wrote:
 
 Let me ask the question, why have master be develop and a release
 branch be
 master? If we are going to follow gitflow, why not just stick with
 the
 norm? If master is the development branch, it might not be stable. I
 think
 the goal here is that we have an obvious stable branch. Anyone could
 come
 check out master and have the latest useable.
 
 I am in favor of following the norm, so ideally master should be our
 stable branch (agreed).
 
 The issue is with the transition.
 
 Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally
 we could start a stable branch of this tag and build up bug fix releases
 all the way to 4.5 from there.
 
 But all features for 4.5 are already in master.
 
 So if we create a 'develop' branch of master and stabilize 'master'
 then develop is now started from a stable tag (4.4.0).
 
 
 *not* started from a stable tag, and merges will be tricky, no ?
 
 So what's the best way to flip ? There is most likely some git magic
 that can we do.
 
 
 The new git workflow and the transition process need to be part of a
 proposal that we get consensus on.
 
 getting there :)
 
 -seb
 
 
 Also, I'm struggling to understand the benefit of cherry-pick. If you
 completely squash history, you lose a tremendous amount of context,
 which I
 use extensively to figure out why a bug is the way it is. Only knowing
 that
 the branch was merged at a given point in time doesn't give any
 context.
 Seeing the individual commit history of the branch helps to preserve
 the
 rationale for why the code was written the way it was. In theory if
 every
 change starts out as a branch (feature, hotfix, release), then why not
 just
 merge the branch once it is in a good and acceptable state?
 
 I also agree with Mike that this will have to be a transition over
 time. It
 will take some time to clean up master to the point where it can be
 considered a solid stable branch. Possibly as part of the 4.5 release.
 
 
 On Wed, Jul 23, 2014 at 10:51 AM, Sebastien Goasguen run...@gmail.com
 
 wrote:
 
 
 On Jul 23, 2014, at 11:38 AM, daan Hoogland daan.hoogl...@gmail.com
 wrote:
 
 Sebastien,
 
 It seems we can do what you are calling for is creating a branch
 called 'release'. We can merge back into that branch from 4.4,
 master,
 4.3. I would like to see people that want a feature or bug fix in a
 branch make a fork of that branch and when that fork is working do a
 cherry-pick. The -forward concept is now used for that but it is
 broken because more then for one piece of work there are commits on
 it. This caused me conflicts during the release. Especially painfull
 as not all was intended to get into the release. We can create this
 'release' branch now on the basis of 4.4 and start pulling in
 changes.
 
 Yes, that's what I am thinking about too, so +1
 
 Our master would become the -develop- in gitflow terms
 The release branch you mention would become the -master- in gitflow
 terms
 
 If we start now, indeed we can create 'release' from 4.4 release tag
 (voted and shipped).
 
 That means that to create 4.5 we will need to merge features back into
 'release'. it 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-10 Thread Abhinandan Prateek

On 01/07/14 3:39 am, Sebastien Goasguen run...@gmail.com wrote:

I would like to re-start this discussion.

Rajani made some good points and someone mentioned Gitflow:

http://nvie.com/posts/a-successful-git-branching-model/

Thinking about our release procedure, we clearly need more tests and a
CI. However it looks like this is going to take some time.

At Citrix we are able to run CI with BVTs. The system of classification of
tests has enabled us to run around 70% of the BVTs on simulator. A single
cycle takes less than 3 hours to run. This can be further optimised. These
70% of the simulated tests can be run in dev environment[1]. There are two
things that community can do:

1. In short run for any feature commit, mandate that at least the
developers have run the simulator based tests before the merge request.
2. Get the required hardware and have a self service interface available
where devs can run the test on their feature branch.
3. Contribute test cases; now simulator also provides a way to check
failure scenarios [2]


[1] 
https://cwiki.apache.org/confluence/display/CLOUDSTACK/Validating+check-ins
+for+your+local+changes%2C+using+Simulator
[2] 
https://cwiki.apache.org/confluence/display/CLOUDSTACK/Writing+tests+levera
ging+the+simulator+enhancements

-abhi


In the meantime I think there is nothing preventing us from agreeing to
'git practices', we don't need tests or new infra, we just need to agree
on the git workflow.

Right now Master is really a development branch, we should make it a
stable branch for production with very few commits.
This does not mean that we would release less, in contrary this would
ensure that a commit to master means it's a production release.

In addition gitflow [1] does not do cherry-picks (gets back to Rajani's
point) everything is based on merges.

I am of the opinion that git flow provides a nice process. It basically
freezes master. Development happens in a 'develop' branch, releases
branches are branched off of that and merged into master and back into
developŠ.etc

Please read [1] it's a good read.

And let's discuss,

[1] http://nvie.com/posts/a-successful-git-branching-model/

-Sebastien

On Jun 2, 2014, at 11:58 PM, Rajani Karuturi rajani.karut...@citrix.com
wrote:

 There is also the problem of cherry-picking.
 As a contributor, I always endup creating multiple patches for each
branch as they don¹t cleanly apply on the upward branches. which means
distinct commits for each branch and I don¹t easily know which all
branches my commit exists unless I do grep.
 if we follow merging strategy properly, apart from the first merge of
the branch, everything else on top of it should be a painless merge.
 
 
 
 ~Rajani
 
 
 
 On 02-Jun-2014, at 10:51 pm, Marcus shadow...@gmail.com wrote:
 
 I think many of the bullet points are what we are currently doing
 (guidelines for commit comments, feature branches need to stay in sync
with
 master, no back-merging). I also think that much of what we do now is
done
 the way it is simply because there *are* vast changes between versions.
 Classes are getting shuffled around and changed all the time. If its
 feasible to merge branch fixes to master, that's fine, but some quick
tests
 seem to indicate that this will be messy getting started.
 
 That leaves us with how we do releases. I'm fine with having single
 branches for major releases(4.3) and tagging the commits where each
 incremental release (4.3.x) is done. I'm trying to remember why we went
 with the -forward, I'm sure it's in the mailing list somewhere, but
one of
 the nice things it provides is the ability for the release manager to
 control what changes are made during code freeze while giving people a
 place to stage fixes (though admittedly this is not always followed).
 Without -forward, would the flow be for each dev to have their own
repo and
 issue pull requests for bugfixes?
 
 
 On Mon, Jun 2, 2014 at 3:17 AM, Rajani Karuturi
rajani.karut...@citrix.com
 wrote:
 
 Any other suggestions/objections/comments??
 Can we discuss this in detail and agree to a process??
 
 
 ~Rajani
 
 
 
 On 02-Jun-2014, at 9:32 am, Rajani Karuturi
rajani.karut...@citrix.com
 wrote:
 
 Yes as mike said, if its a one-off case we can do a empty
merge(merge -s
 ours) for it and git will assume its merged but will not bring in any
 changes.
 
 If the branches diverged a lot, for example after a major rewrite, we
 could stop merging to that branch and above and make the fix manually.
 
 
 ~Rajani
 
 
 
 On 30-May-2014, at 11:26 pm, Mike Tutkowski 
 mike.tutkow...@solidfire.com wrote:
 
 Yep, that's what I was referring to in that a particular fix for an
old
 release may not apply to newer versions. That does happen.
 
 We used to mark those as don't need to merge to branch x in SVN
and
 then
 you handed it however made sense on the applicable branch(es).
 
 
 On Fri, May 30, 2014 at 11:53 AM, Stephen Turner 
 stephen.tur...@citrix.com
 wrote:
 
 What happens if a fix isn't relevant 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-09 Thread Rohit Yadav

Hi,

Rajani Karuturi wrote:

In my first email, I mentioned a youtube url[1] which is a google tech talk by  
Laura Wingerd [2] of Perforce Software
I recommend watching it as well. (its a 55 min video).

[1] https://www.youtube.com/watch?v=AJ-CpGsCpM0
[2] http://www.perforce.com/blog/author/lwingerd

~Rajani


Thanks for sharing this again Rajani, I saw the video it was insightful.

Here are the slides: (link on youtube was broken)

http://web.archive.org/web/20061019021704/http://www.perforce.com/perforce/conferences/us/2005/presentations/Wingerd.pdf


Let me share the key points from the shared talk:

- The speaker uses analogy of ease of driving cars on complex layout of
roads to developing software using a SCM.

- She recommends a mainline model which could speed up development and
release process. (refer the slides) We have branches -- mainline
(master), release (release branches) and development (feature work,
refactoring etc).

- Tofu scale: released/stable branches are firmer, unstable/master ones
are soft.

- She defines a baseline protocol: the soft branches are those which are
not tested and development work is going on, the firm ones are those
which are set to release or are already released or are live. The
protocol is to let the commit/changes flow from soft to firm branches
wrt to a baseline (master) only when they firm-er or tested and
continually changes flow from firm ones to soft ones (i.e. you rebase or
cherry-pick often from firm branches to soft ones). Change flows between
branch and baseline

- Always accept stable changes over destabilizing change

- She suggests to view the branches wrt baseline as a map, where changes
follow the baseline protocol and fix on an old trickle downs to
chronological release branches, then to baseline (master) and to rest of
the feature branches continually.

- She spoke about module, file tree etc. which I think is not relevant
for git users. We've git submodules and subtrees but IMO it's out of the
scope unless we want to split our repo.

- Merge down, copy up: She shares an interesting approach to deliver
feature work/project to firmer baseline branch which requires you to
first get all the changes from baselines (master  above, in git terms
that would be merge/rebase or cherry-picking from master to feature
branch) and then copy the files from the feature branch to baseline (not
merge). Then test and have the code/files in baseline (master).



My thoughts and suggestions:

- We adapt and adopt the baseline protocol (discuss?) wrt ACS

- We don't commit on master directly, break master. In future, have
master to be stable enough for anyone to branch off and work.

- Anyone fixing anything on master or other release/QA branches creates
a feature/topic branch and work on it, and merge/cherry-pick changes
back to upper branches only when that branch is well tested.

- Feature branches branch off master or other feature branches, not
release branches. Bug fix branches branch off from the oldest release
branch (on which we need to fix it) and the test fix lands to that
branch and subsequent release branches and then to master and other
feature branches.

- Suggestion for a better release protocol: All releases have tags. We
value tags more than release branch names. A vote is requested on a
release branch's commit with a version plus -RC, -beta and other
suitable name tag. Once vote is passed, the tag is the version number
this is the actual release. Git allows multiple tags can be on a commit
so we're good. Developers have freedmo to land but only bug fixes (once
fully tested) on release branches from a bugfix branch branched off from
the release branch or (by cherry-picking from) older release branches.
Then the bugfix lands to master and other feature branches continually.
This would also require that tags are immutable (you don't change/delete
them once created and pushed). IMHO this will speed up development process.

- One thing I'm still struggling with is working with branches/releases
which has fair amount of refactoring and rearchitecture work, which is
where changes would need to be manually ported and fixed. I don't have
any idea how to deal with it automatically, with git or any other tool.



On 09-Jul-2014, at 3:52 am, Sebastien 
Goasguenrun...@gmail.commailto:run...@gmail.com  wrote:

This is also a good read, against cherry-picking (back to Rajani's original 
point):

http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html

(even wondering if Rohit did not send this to the list already…)


I do not remember sharing this, but I've read posts like this before and
I think it's just the author's opinion and not universal truth.

In my experience, if you rebase your source branch and cherry pick on
target there is no issue or conflicts (as suggested by this articles).
If merge/rebase is required I prefer no-ff and ignore-whitespace flags.

Merging IMHO is a quick and easy solution but it clutters the history,
while 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-08 Thread Rohit Yadav
Hi,


On Tue, Jul 1, 2014 at 3:39 AM, Sebastien Goasguen run...@gmail.com wrote:

 I would like to re-start this discussion.


Such a shame, this is not getting any attention.



 Rajani made some good points and someone mentioned Gitflow:

 http://nvie.com/posts/a-successful-git-branching-model/

 Thinking about our release procedure, we clearly need more tests and a CI.
 However it looks like this is going to take some time.


I think too that this is going to take time, meanwhile a great way would be
to self police?

I would encourage every committer at least to learn to use git, handle git
mess-ups, have a knowledge about various ACS 4.x branches, favour squashed
commits and cherry-picking over branch merges, rebase on target branch
(master) regularly, build often with unit tests before pushing to master
(at least), test patches on local before merging them on master and other
branches.

@PMC: suggestion -- help drive defining a convention on committer workflow
(refer nvie etc.), make it a requirement for all the committers (future and
present) to learn/know (basic/novice) git, have knowledge about various ACS
branches and release processes.

Comments, suggestions?

Regards.



 In the meantime I think there is nothing preventing us from agreeing to
 'git practices', we don't need tests or new infra, we just need to agree on
 the git workflow.

 Right now Master is really a development branch, we should make it a
 stable branch for production with very few commits.
 This does not mean that we would release less, in contrary this would
 ensure that a commit to master means it's a production release.

 In addition gitflow [1] does not do cherry-picks (gets back to Rajani's
 point) everything is based on merges.

 I am of the opinion that git flow provides a nice process. It basically
 freezes master. Development happens in a 'develop' branch, releases
 branches are branched off of that and merged into master and back into
 developetc

 Please read [1] it's a good read.

 And let's discuss,

 [1] http://nvie.com/posts/a-successful-git-branching-model/

 -Sebastien

 On Jun 2, 2014, at 11:58 PM, Rajani Karuturi rajani.karut...@citrix.com
 wrote:

  There is also the problem of cherry-picking.
  As a contributor, I always endup creating multiple patches for each
 branch as they don't cleanly apply on the upward branches. which means
 distinct commits for each branch and I don't easily know which all branches
 my commit exists unless I do grep.
  if we follow merging strategy properly, apart from the first merge of
 the branch, everything else on top of it should be a painless merge.
 
 
 
  ~Rajani
 
 
 
  On 02-Jun-2014, at 10:51 pm, Marcus shadow...@gmail.com wrote:
 
  I think many of the bullet points are what we are currently doing
  (guidelines for commit comments, feature branches need to stay in sync
 with
  master, no back-merging). I also think that much of what we do now is
 done
  the way it is simply because there *are* vast changes between versions.
  Classes are getting shuffled around and changed all the time. If its
  feasible to merge branch fixes to master, that's fine, but some quick
 tests
  seem to indicate that this will be messy getting started.
 
  That leaves us with how we do releases. I'm fine with having single
  branches for major releases(4.3) and tagging the commits where each
  incremental release (4.3.x) is done. I'm trying to remember why we went
  with the -forward, I'm sure it's in the mailing list somewhere, but one
 of
  the nice things it provides is the ability for the release manager to
  control what changes are made during code freeze while giving people a
  place to stage fixes (though admittedly this is not always followed).
  Without -forward, would the flow be for each dev to have their own repo
 and
  issue pull requests for bugfixes?
 
 
  On Mon, Jun 2, 2014 at 3:17 AM, Rajani Karuturi 
 rajani.karut...@citrix.com
  wrote:
 
  Any other suggestions/objections/comments??
  Can we discuss this in detail and agree to a process??
 
 
  ~Rajani
 
 
 
  On 02-Jun-2014, at 9:32 am, Rajani Karuturi 
 rajani.karut...@citrix.com
  wrote:
 
  Yes as mike said, if its a one-off case we can do a empty merge(merge
 -s
  ours) for it and git will assume its merged but will not bring in any
  changes.
 
  If the branches diverged a lot, for example after a major rewrite, we
  could stop merging to that branch and above and make the fix manually.
 
 
  ~Rajani
 
 
 
  On 30-May-2014, at 11:26 pm, Mike Tutkowski 
  mike.tutkow...@solidfire.com wrote:
 
  Yep, that's what I was referring to in that a particular fix for an
 old
  release may not apply to newer versions. That does happen.
 
  We used to mark those as don't need to merge to branch x in SVN and
  then
  you handed it however made sense on the applicable branch(es).
 
 
  On Fri, May 30, 2014 at 11:53 AM, Stephen Turner 
  stephen.tur...@citrix.com
  wrote:
 
  What happens if a fix isn't relevant for newer 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-08 Thread Daan Hoogland
Rohit, I agree with most and I am glad to see you prefer cherry-pick
over merges. I do not see why the PMC should drive defining the
standard. This is something that should be carried and cherished by
all developers.

On Tue, Jul 8, 2014 at 9:51 AM, Rohit Yadav bhais...@apache.org wrote:
 Hi,


 On Tue, Jul 1, 2014 at 3:39 AM, Sebastien Goasguen run...@gmail.com wrote:

 I would like to re-start this discussion.


 Such a shame, this is not getting any attention.



 Rajani made some good points and someone mentioned Gitflow:

 http://nvie.com/posts/a-successful-git-branching-model/

 Thinking about our release procedure, we clearly need more tests and a CI.
 However it looks like this is going to take some time.


 I think too that this is going to take time, meanwhile a great way would be
 to self police?

 I would encourage every committer at least to learn to use git, handle git
 mess-ups, have a knowledge about various ACS 4.x branches, favour squashed
 commits and cherry-picking over branch merges, rebase on target branch
 (master) regularly, build often with unit tests before pushing to master
 (at least), test patches on local before merging them on master and other
 branches.

 @PMC: suggestion -- help drive defining a convention on committer workflow
 (refer nvie etc.), make it a requirement for all the committers (future and
 present) to learn/know (basic/novice) git, have knowledge about various ACS
 branches and release processes.

 Comments, suggestions?

 Regards.



 In the meantime I think there is nothing preventing us from agreeing to
 'git practices', we don't need tests or new infra, we just need to agree on
 the git workflow.

 Right now Master is really a development branch, we should make it a
 stable branch for production with very few commits.
 This does not mean that we would release less, in contrary this would
 ensure that a commit to master means it's a production release.

 In addition gitflow [1] does not do cherry-picks (gets back to Rajani's
 point) everything is based on merges.

 I am of the opinion that git flow provides a nice process. It basically
 freezes master. Development happens in a 'develop' branch, releases
 branches are branched off of that and merged into master and back into
 developetc

 Please read [1] it's a good read.

 And let's discuss,

 [1] http://nvie.com/posts/a-successful-git-branching-model/

 -Sebastien

 On Jun 2, 2014, at 11:58 PM, Rajani Karuturi rajani.karut...@citrix.com
 wrote:

  There is also the problem of cherry-picking.
  As a contributor, I always endup creating multiple patches for each
 branch as they don't cleanly apply on the upward branches. which means
 distinct commits for each branch and I don't easily know which all branches
 my commit exists unless I do grep.
  if we follow merging strategy properly, apart from the first merge of
 the branch, everything else on top of it should be a painless merge.
 
 
 
  ~Rajani
 
 
 
  On 02-Jun-2014, at 10:51 pm, Marcus shadow...@gmail.com wrote:
 
  I think many of the bullet points are what we are currently doing
  (guidelines for commit comments, feature branches need to stay in sync
 with
  master, no back-merging). I also think that much of what we do now is
 done
  the way it is simply because there *are* vast changes between versions.
  Classes are getting shuffled around and changed all the time. If its
  feasible to merge branch fixes to master, that's fine, but some quick
 tests
  seem to indicate that this will be messy getting started.
 
  That leaves us with how we do releases. I'm fine with having single
  branches for major releases(4.3) and tagging the commits where each
  incremental release (4.3.x) is done. I'm trying to remember why we went
  with the -forward, I'm sure it's in the mailing list somewhere, but one
 of
  the nice things it provides is the ability for the release manager to
  control what changes are made during code freeze while giving people a
  place to stage fixes (though admittedly this is not always followed).
  Without -forward, would the flow be for each dev to have their own repo
 and
  issue pull requests for bugfixes?
 
 
  On Mon, Jun 2, 2014 at 3:17 AM, Rajani Karuturi 
 rajani.karut...@citrix.com
  wrote:
 
  Any other suggestions/objections/comments??
  Can we discuss this in detail and agree to a process??
 
 
  ~Rajani
 
 
 
  On 02-Jun-2014, at 9:32 am, Rajani Karuturi 
 rajani.karut...@citrix.com
  wrote:
 
  Yes as mike said, if its a one-off case we can do a empty merge(merge
 -s
  ours) for it and git will assume its merged but will not bring in any
  changes.
 
  If the branches diverged a lot, for example after a major rewrite, we
  could stop merging to that branch and above and make the fix manually.
 
 
  ~Rajani
 
 
 
  On 30-May-2014, at 11:26 pm, Mike Tutkowski 
  mike.tutkow...@solidfire.com wrote:
 
  Yep, that's what I was referring to in that a particular fix for an
 old
  release may not apply to newer versions. 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-08 Thread Mike Tutkowski
Thanks for bringing this up again, Sebastien.

I've had http://nvie.com/posts/a-successful-git-branching-model/ up in
Chrome since you sent that link and been reading through it a bit here and
there, but have just been too busy as of late to give it a bunch of thought.

I agree, though, that we should really think about moving to another model
of using Git as it is not un-common for master to be broken, which leads to
a lot of lost development time for many people.


On Mon, Jun 30, 2014 at 4:09 PM, Sebastien Goasguen run...@gmail.com
wrote:

 I would like to re-start this discussion.

 Rajani made some good points and someone mentioned Gitflow:

 http://nvie.com/posts/a-successful-git-branching-model/

 Thinking about our release procedure, we clearly need more tests and a CI.
 However it looks like this is going to take some time.

 In the meantime I think there is nothing preventing us from agreeing to
 'git practices', we don't need tests or new infra, we just need to agree on
 the git workflow.

 Right now Master is really a development branch, we should make it a
 stable branch for production with very few commits.
 This does not mean that we would release less, in contrary this would
 ensure that a commit to master means it's a production release.

 In addition gitflow [1] does not do cherry-picks (gets back to Rajani's
 point) everything is based on merges.

 I am of the opinion that git flow provides a nice process. It basically
 freezes master. Development happens in a 'develop' branch, releases
 branches are branched off of that and merged into master and back into
 develop….etc

 Please read [1] it's a good read.

 And let's discuss,

 [1] http://nvie.com/posts/a-successful-git-branching-model/

 -Sebastien

 On Jun 2, 2014, at 11:58 PM, Rajani Karuturi rajani.karut...@citrix.com
 wrote:

  There is also the problem of cherry-picking.
  As a contributor, I always endup creating multiple patches for each
 branch as they don’t cleanly apply on the upward branches. which means
 distinct commits for each branch and I don’t easily know which all branches
 my commit exists unless I do grep.
  if we follow merging strategy properly, apart from the first merge of
 the branch, everything else on top of it should be a painless merge.
 
 
 
  ~Rajani
 
 
 
  On 02-Jun-2014, at 10:51 pm, Marcus shadow...@gmail.com wrote:
 
  I think many of the bullet points are what we are currently doing
  (guidelines for commit comments, feature branches need to stay in sync
 with
  master, no back-merging). I also think that much of what we do now is
 done
  the way it is simply because there *are* vast changes between versions.
  Classes are getting shuffled around and changed all the time. If its
  feasible to merge branch fixes to master, that's fine, but some quick
 tests
  seem to indicate that this will be messy getting started.
 
  That leaves us with how we do releases. I'm fine with having single
  branches for major releases(4.3) and tagging the commits where each
  incremental release (4.3.x) is done. I'm trying to remember why we went
  with the -forward, I'm sure it's in the mailing list somewhere, but one
 of
  the nice things it provides is the ability for the release manager to
  control what changes are made during code freeze while giving people a
  place to stage fixes (though admittedly this is not always followed).
  Without -forward, would the flow be for each dev to have their own repo
 and
  issue pull requests for bugfixes?
 
 
  On Mon, Jun 2, 2014 at 3:17 AM, Rajani Karuturi 
 rajani.karut...@citrix.com
  wrote:
 
  Any other suggestions/objections/comments??
  Can we discuss this in detail and agree to a process??
 
 
  ~Rajani
 
 
 
  On 02-Jun-2014, at 9:32 am, Rajani Karuturi 
 rajani.karut...@citrix.com
  wrote:
 
  Yes as mike said, if its a one-off case we can do a empty merge(merge
 -s
  ours) for it and git will assume its merged but will not bring in any
  changes.
 
  If the branches diverged a lot, for example after a major rewrite, we
  could stop merging to that branch and above and make the fix manually.
 
 
  ~Rajani
 
 
 
  On 30-May-2014, at 11:26 pm, Mike Tutkowski 
  mike.tutkow...@solidfire.com wrote:
 
  Yep, that's what I was referring to in that a particular fix for an
 old
  release may not apply to newer versions. That does happen.
 
  We used to mark those as don't need to merge to branch x in SVN and
  then
  you handed it however made sense on the applicable branch(es).
 
 
  On Fri, May 30, 2014 at 11:53 AM, Stephen Turner 
  stephen.tur...@citrix.com
  wrote:
 
  What happens if a fix isn't relevant for newer versions, or has to
 be
  rewritten for newer versions because the code has changed? Don't the
  branches diverge and you end up cherry-picking after that?
 
  --
  Stephen Turner
 
 
  -Original Message-
  From: Mike Tutkowski [mailto:mike.tutkow...@solidfire.com]
  Sent: 30 May 2014 18:48
  To: dev@cloudstack.apache.org
  Subject: Re: [PROPOSAL] 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-08 Thread Nate Gordon
As someone who has worked with a number of different version control
systems (and have far more love for git than any other), I'm curious as to
why we would want to fight what I've always seen as the core feature of
git. Branching and merging. The gitflow model is incredibly useful for
keeping track of a number of different development paths concurrently.
Branches remained organized and have a clear destination and workflow that
they need to go through as part of the merging process. We use it
internally (on a much smaller team) with great success. And with the
difficulties I've seen on the mailing list around the -forward branches and
cherry-picking, I'm curious as to why this is the preferred method. From
everything I've read about git and cherry-picking, it is a copy of the
commit, not a reference to the original commit. This makes it hard to track
down an individual change to find the original source.

Thanks,

-Nate


On Tue, Jul 8, 2014 at 11:04 AM, Mike Tutkowski 
mike.tutkow...@solidfire.com wrote:

 Thanks for bringing this up again, Sebastien.

 I've had http://nvie.com/posts/a-successful-git-branching-model/ up in
 Chrome since you sent that link and been reading through it a bit here and
 there, but have just been too busy as of late to give it a bunch of
 thought.

 I agree, though, that we should really think about moving to another model
 of using Git as it is not un-common for master to be broken, which leads to
 a lot of lost development time for many people.


 On Mon, Jun 30, 2014 at 4:09 PM, Sebastien Goasguen run...@gmail.com
 wrote:

  I would like to re-start this discussion.
 
  Rajani made some good points and someone mentioned Gitflow:
 
  http://nvie.com/posts/a-successful-git-branching-model/
 
  Thinking about our release procedure, we clearly need more tests and a
 CI.
  However it looks like this is going to take some time.
 
  In the meantime I think there is nothing preventing us from agreeing to
  'git practices', we don't need tests or new infra, we just need to agree
 on
  the git workflow.
 
  Right now Master is really a development branch, we should make it a
  stable branch for production with very few commits.
  This does not mean that we would release less, in contrary this would
  ensure that a commit to master means it's a production release.
 
  In addition gitflow [1] does not do cherry-picks (gets back to Rajani's
  point) everything is based on merges.
 
  I am of the opinion that git flow provides a nice process. It basically
  freezes master. Development happens in a 'develop' branch, releases
  branches are branched off of that and merged into master and back into
  develop….etc
 
  Please read [1] it's a good read.
 
  And let's discuss,
 
  [1] http://nvie.com/posts/a-successful-git-branching-model/
 
  -Sebastien
 
  On Jun 2, 2014, at 11:58 PM, Rajani Karuturi rajani.karut...@citrix.com
 
  wrote:
 
   There is also the problem of cherry-picking.
   As a contributor, I always endup creating multiple patches for each
  branch as they don’t cleanly apply on the upward branches. which means
  distinct commits for each branch and I don’t easily know which all
 branches
  my commit exists unless I do grep.
   if we follow merging strategy properly, apart from the first merge of
  the branch, everything else on top of it should be a painless merge.
  
  
  
   ~Rajani
  
  
  
   On 02-Jun-2014, at 10:51 pm, Marcus shadow...@gmail.com wrote:
  
   I think many of the bullet points are what we are currently doing
   (guidelines for commit comments, feature branches need to stay in sync
  with
   master, no back-merging). I also think that much of what we do now is
  done
   the way it is simply because there *are* vast changes between
 versions.
   Classes are getting shuffled around and changed all the time. If its
   feasible to merge branch fixes to master, that's fine, but some quick
  tests
   seem to indicate that this will be messy getting started.
  
   That leaves us with how we do releases. I'm fine with having single
   branches for major releases(4.3) and tagging the commits where each
   incremental release (4.3.x) is done. I'm trying to remember why we
 went
   with the -forward, I'm sure it's in the mailing list somewhere, but
 one
  of
   the nice things it provides is the ability for the release manager to
   control what changes are made during code freeze while giving people a
   place to stage fixes (though admittedly this is not always followed).
   Without -forward, would the flow be for each dev to have their own
 repo
  and
   issue pull requests for bugfixes?
  
  
   On Mon, Jun 2, 2014 at 3:17 AM, Rajani Karuturi 
  rajani.karut...@citrix.com
   wrote:
  
   Any other suggestions/objections/comments??
   Can we discuss this in detail and agree to a process??
  
  
   ~Rajani
  
  
  
   On 02-Jun-2014, at 9:32 am, Rajani Karuturi 
  rajani.karut...@citrix.com
   wrote:
  
   Yes as mike said, if its a one-off case we can do a empty

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-08 Thread Rohit Yadav

Hi,

Daan Hoogland wrote:

I do not see why the PMC should drive defining the
standard. This is something that should be carried and cherished by
all developers.


In my experience when something is everyone's responsibility, eventually
no one is responsible for it.

I think the PMC should drive it because IMHO the PMC comprises of our
project management folks who have decision making powers and are
officially responsible for the project as recognized by the ASF [1].

Therefore, I'm requesting our PMC to come up with a convention along
with committers/developers on this issue and enforce it using some
tooling etc.

[1] http://www.apache.org/dev/pmc.htm

Regards,
Rohit Yadav
Software Architect, ShapeBlue
M. +91 88 262 30892 | rohit.ya...@shapeblue.com
Blog: bhaisaab.org | Twitter: @_bhaisaab
Find out more about ShapeBlue and our range of CloudStack related services

IaaS Cloud Design  Buildhttp://shapeblue.com/iaas-cloud-design-and-build//
CSForge – rapid IaaS deployment frameworkhttp://shapeblue.com/csforge/
CloudStack Consultinghttp://shapeblue.com/cloudstack-consultancy/
CloudStack Infrastructure 
Supporthttp://shapeblue.com/cloudstack-infrastructure-support/
CloudStack Bootcamp Training Courseshttp://shapeblue.com/cloudstack-training/

This email and any attachments to it may be confidential and are intended solely 
for the use of the individual to whom it is addressed. Any views or opinions 
expressed are solely those of the author and do not necessarily represent those of 
Shape Blue Ltd or related companies. If you are not the intended recipient of this 
email, you must neither take any action based upon its contents, nor copy or show 
it to anyone. Please contact the sender if you believe you have received this email 
in error. Shape Blue Ltd is a company incorporated in England  Wales. 
ShapeBlue Services India LLP is a company incorporated in India and is operated 
under license from Shape Blue Ltd. Shape Blue Brasil Consultoria Ltda is a company 
incorporated in Brasil and is operated under license from Shape Blue Ltd. ShapeBlue 
is a registered trademark.


Re: [DISCUSS][PROPOSAL] git workflow

2014-07-08 Thread Chip Childers
On Tue, Jul 8, 2014 at 3:30 PM, Rohit Yadav rohit.ya...@shapeblue.com wrote:
 Hi,


 Daan Hoogland wrote:

 I do not see why the PMC should drive defining the
 standard. This is something that should be carried and cherished by
 all developers.


 In my experience when something is everyone's responsibility, eventually
 no one is responsible for it.

 I think the PMC should drive it because IMHO the PMC comprises of our
 project management folks who have decision making powers and are
 officially responsible for the project as recognized by the ASF [1].

 Therefore, I'm requesting our PMC to come up with a convention along
 with committers/developers on this issue and enforce it using some
 tooling etc.

 [1] http://www.apache.org/dev/pmc.htm

 Regards,
 Rohit Yadav
 Software Architect, ShapeBlue
 M. +91 88 262 30892 | rohit.ya...@shapeblue.com
 Blog: bhaisaab.org | Twitter: @_bhaisaab
 Find out more about ShapeBlue and our range of CloudStack related services

 IaaS Cloud Design 
 Buildhttp://shapeblue.com/iaas-cloud-design-and-build//
 CSForge – rapid IaaS deployment frameworkhttp://shapeblue.com/csforge/
 CloudStack Consultinghttp://shapeblue.com/cloudstack-consultancy/
 CloudStack Infrastructure
 Supporthttp://shapeblue.com/cloudstack-infrastructure-support/
 CloudStack Bootcamp Training
 Courseshttp://shapeblue.com/cloudstack-training/

 This email and any attachments to it may be confidential and are intended
 solely for the use of the individual to whom it is addressed. Any views or
 opinions expressed are solely those of the author and do not necessarily
 represent those of Shape Blue Ltd or related companies. If you are not the
 intended recipient of this email, you must neither take any action based
 upon its contents, nor copy or show it to anyone. Please contact the sender
 if you believe you have received this email in error. Shape Blue Ltd is a
 company incorporated in England  Wales. ShapeBlue Services India LLP is a
 company incorporated in India and is operated under license from Shape Blue
 Ltd. Shape Blue Brasil Consultoria Ltda is a company incorporated in Brasil
 and is operated under license from Shape Blue Ltd. ShapeBlue is a registered
 trademark.


Re: [DISCUSS][PROPOSAL] git workflow

2014-07-08 Thread Chip Childers
Let me try that again, this time with content!

I've dropped private@, since this doesn't belong there.

On Tue, Jul 8, 2014 at 3:30 PM, Rohit Yadav rohit.ya...@shapeblue.com wrote:
 Hi,


 Daan Hoogland wrote:

 I do not see why the PMC should drive defining the
 standard. This is something that should be carried and cherished by
 all developers.


 In my experience when something is everyone's responsibility, eventually
 no one is responsible for it.

 I think the PMC should drive it because IMHO the PMC comprises of our
 project management folks who have decision making powers and are
 officially responsible for the project as recognized by the ASF [1].

 Therefore, I'm requesting our PMC to come up with a convention along
 with committers/developers on this issue and enforce it using some
 tooling etc.

 [1] http://www.apache.org/dev/pmc.htm

Everyone here is part of the community, and everyone deserves a say in
how this is done.  If you're suggesting that PMC members should be
involved in this discussion, agreed!  But should should committers and
contributors!


Re: [DISCUSS][PROPOSAL] git workflow

2014-07-08 Thread Rohit Yadav

Hi Chip,

Chip Childers wrote:

Let me try that again, this time with content!

I've dropped private@, since this doesn't belong there.

On Tue, Jul 8, 2014 at 3:30 PM, Rohit Yadavrohit.ya...@shapeblue.com  wrote:

Hi,


Daan Hoogland wrote:

I do not see why the PMC should drive defining the
standard. This is something that should be carried and cherished by
all developers.


In my experience when something is everyone's responsibility, eventually
no one is responsible for it.

I think the PMC should drive it because IMHO the PMC comprises of our
project management folks who have decision making powers and are
officially responsible for the project as recognized by the ASF [1].

Therefore, I'm requesting our PMC to come up with a convention along
with committers/developers on this issue and enforce it using some
tooling etc.

[1] http://www.apache.org/dev/pmc.htm


Everyone here is part of the community, and everyone deserves a say in
how this is done.  If you're suggesting that PMC members should be
involved in this discussion, agreed!  But should should committers and
contributors!


Thanks Chip -- I'm with you on this.

I'm trying to say is -- shared responsibility is tricky, in most cases
no one would be responsible eventually, *unless*...

Regards,
Rohit Yadav
Software Architect, ShapeBlue
M. +91 88 262 30892 | rohit.ya...@shapeblue.com
Blog: bhaisaab.org | Twitter: @_bhaisaab
Find out more about ShapeBlue and our range of CloudStack related services

IaaS Cloud Design  Buildhttp://shapeblue.com/iaas-cloud-design-and-build//
CSForge – rapid IaaS deployment frameworkhttp://shapeblue.com/csforge/
CloudStack Consultinghttp://shapeblue.com/cloudstack-consultancy/
CloudStack Infrastructure 
Supporthttp://shapeblue.com/cloudstack-infrastructure-support/
CloudStack Bootcamp Training Courseshttp://shapeblue.com/cloudstack-training/

This email and any attachments to it may be confidential and are intended solely 
for the use of the individual to whom it is addressed. Any views or opinions 
expressed are solely those of the author and do not necessarily represent those of 
Shape Blue Ltd or related companies. If you are not the intended recipient of this 
email, you must neither take any action based upon its contents, nor copy or show 
it to anyone. Please contact the sender if you believe you have received this email 
in error. Shape Blue Ltd is a company incorporated in England  Wales. 
ShapeBlue Services India LLP is a company incorporated in India and is operated 
under license from Shape Blue Ltd. Shape Blue Brasil Consultoria Ltda is a company 
incorporated in Brasil and is operated under license from Shape Blue Ltd. ShapeBlue 
is a registered trademark.


Re: [DISCUSS][PROPOSAL] git workflow

2014-07-08 Thread Sebastien Goasguen

On Jul 8, 2014, at 4:13 PM, Rohit Yadav rohit.ya...@shapeblue.com wrote:

 Hi Chip,
 
 Chip Childers wrote:
 Let me try that again, this time with content!
 
 I've dropped private@, since this doesn't belong there.
 
 On Tue, Jul 8, 2014 at 3:30 PM, Rohit Yadavrohit.ya...@shapeblue.com  
 wrote:
 Hi,
 
 
 Daan Hoogland wrote:
 I do not see why the PMC should drive defining the
 standard. This is something that should be carried and cherished by
 all developers.
 
 In my experience when something is everyone's responsibility, eventually
 no one is responsible for it.
 
 I think the PMC should drive it because IMHO the PMC comprises of our
 project management folks who have decision making powers and are
 officially responsible for the project as recognized by the ASF [1].
 
 Therefore, I'm requesting our PMC to come up with a convention along
 with committers/developers on this issue and enforce it using some
 tooling etc.
 
 [1] http://www.apache.org/dev/pmc.htm
 
 Everyone here is part of the community, and everyone deserves a say in
 how this is done.  If you're suggesting that PMC members should be
 involved in this discussion, agreed!  But should should committers and
 contributors!
 
 Thanks Chip -- I'm with you on this.
 
 I'm trying to say is -- shared responsibility is tricky, in most cases
 no one would be responsible eventually, *unless*…
 

That's really a bar discussion :).

At Apache we govern by consensus. Any technical decisions (especially one like 
this), needs to be agreed upon by the community as a whole.
The agreement will happen through discussion on the dev list. 

For us to change, we need people (who believe that what we are doing currently 
is wrong) to step up,  explain the issues and make a proposal.
Then by iterating and discussing the proposal we will reach consensus.

At least that's how I view things.

I re-opened the thread because no-one picked it up, and as you say it's a shame.

IMHO our development methodology is totally broken and this is best shown by 
our inability to release on-time.

I am interested to take on the 4.5 or 4.6 RM duties if we agree to change our 
workflow significantly.

Personally, I would like to freeze master and make the development happen 
somewhere else.

Basically master should be our releasable branch and once we merge things in 
master we end up with working releases.
I would go further and actually propose that only the RM gets to merge in 
master.

I think if we started from a working release tag it would mean that we would 
never miss a release on time. Only the scope of the features would be affected.

Until we have a proper review/test/commit CI setup we should not allow 
committing to master.

I am still thinking through this, but once I have a clear idea, I plan to make 
a proposal by writing a new workflow on the wiki.

ideas, thoughts, flames ?

-sebastien


 Regards,
 Rohit Yadav
 Software Architect, ShapeBlue
 M. +91 88 262 30892 | rohit.ya...@shapeblue.com
 Blog: bhaisaab.org | Twitter: @_bhaisaab
 Find out more about ShapeBlue and our range of CloudStack related services
 
 IaaS Cloud Design  Buildhttp://shapeblue.com/iaas-cloud-design-and-build//
 CSForge – rapid IaaS deployment frameworkhttp://shapeblue.com/csforge/
 CloudStack Consultinghttp://shapeblue.com/cloudstack-consultancy/
 CloudStack Infrastructure 
 Supporthttp://shapeblue.com/cloudstack-infrastructure-support/
 CloudStack Bootcamp Training 
 Courseshttp://shapeblue.com/cloudstack-training/
 
 This email and any attachments to it may be confidential and are intended 
 solely for the use of the individual to whom it is addressed. Any views or 
 opinions expressed are solely those of the author and do not necessarily 
 represent those of Shape Blue Ltd or related companies. If you are not the 
 intended recipient of this email, you must neither take any action based upon 
 its contents, nor copy or show it to anyone. Please contact the sender if you 
 believe you have received this email in error. Shape Blue Ltd is a company 
 incorporated in England  Wales. ShapeBlue Services India LLP is a company 
 incorporated in India and is operated under license from Shape Blue Ltd. 
 Shape Blue Brasil Consultoria Ltda is a company incorporated in Brasil and is 
 operated under license from Shape Blue Ltd. ShapeBlue is a registered 
 trademark.



Re: [DISCUSS][PROPOSAL] git workflow

2014-07-08 Thread Sebastien Goasguen

On Jul 8, 2014, at 2:20 PM, Nate Gordon nate.gor...@appcore.com wrote:

 As someone who has worked with a number of different version control
 systems (and have far more love for git than any other), I'm curious as to
 why we would want to fight what I've always seen as the core feature of
 git. Branching and merging. The gitflow model is incredibly useful for
 keeping track of a number of different development paths concurrently.
 Branches remained organized and have a clear destination and workflow that
 they need to go through as part of the merging process. We use it
 internally (on a much smaller team) with great success. And with the
 difficulties I've seen on the mailing list around the -forward branches and
 cherry-picking,I'm curious as to why this is the preferred method.

I don't think it's the preferred method.
I see it as 'the method currently used'.

I think we need to change.

 From
 everything I've read about git and cherry-picking, it is a copy of the
 commit, not a reference to the original commit. This makes it hard to track
 down an individual change to find the original source.
 
 Thanks,
 
 -Nate
 
 
 On Tue, Jul 8, 2014 at 11:04 AM, Mike Tutkowski 
 mike.tutkow...@solidfire.com wrote:
 
 Thanks for bringing this up again, Sebastien.
 
 I've had http://nvie.com/posts/a-successful-git-branching-model/ up in
 Chrome since you sent that link and been reading through it a bit here and
 there, but have just been too busy as of late to give it a bunch of
 thought.
 
 I agree, though, that we should really think about moving to another model
 of using Git as it is not un-common for master to be broken, which leads to
 a lot of lost development time for many people.
 
 
 On Mon, Jun 30, 2014 at 4:09 PM, Sebastien Goasguen run...@gmail.com
 wrote:
 
 I would like to re-start this discussion.
 
 Rajani made some good points and someone mentioned Gitflow:
 
 http://nvie.com/posts/a-successful-git-branching-model/
 
 Thinking about our release procedure, we clearly need more tests and a
 CI.
 However it looks like this is going to take some time.
 
 In the meantime I think there is nothing preventing us from agreeing to
 'git practices', we don't need tests or new infra, we just need to agree
 on
 the git workflow.
 
 Right now Master is really a development branch, we should make it a
 stable branch for production with very few commits.
 This does not mean that we would release less, in contrary this would
 ensure that a commit to master means it's a production release.
 
 In addition gitflow [1] does not do cherry-picks (gets back to Rajani's
 point) everything is based on merges.
 
 I am of the opinion that git flow provides a nice process. It basically
 freezes master. Development happens in a 'develop' branch, releases
 branches are branched off of that and merged into master and back into
 develop….etc
 
 Please read [1] it's a good read.
 
 And let's discuss,
 
 [1] http://nvie.com/posts/a-successful-git-branching-model/
 
 -Sebastien
 
 On Jun 2, 2014, at 11:58 PM, Rajani Karuturi rajani.karut...@citrix.com
 
 wrote:
 
 There is also the problem of cherry-picking.
 As a contributor, I always endup creating multiple patches for each
 branch as they don’t cleanly apply on the upward branches. which means
 distinct commits for each branch and I don’t easily know which all
 branches
 my commit exists unless I do grep.
 if we follow merging strategy properly, apart from the first merge of
 the branch, everything else on top of it should be a painless merge.
 
 
 
 ~Rajani
 
 
 
 On 02-Jun-2014, at 10:51 pm, Marcus shadow...@gmail.com wrote:
 
 I think many of the bullet points are what we are currently doing
 (guidelines for commit comments, feature branches need to stay in sync
 with
 master, no back-merging). I also think that much of what we do now is
 done
 the way it is simply because there *are* vast changes between
 versions.
 Classes are getting shuffled around and changed all the time. If its
 feasible to merge branch fixes to master, that's fine, but some quick
 tests
 seem to indicate that this will be messy getting started.
 
 That leaves us with how we do releases. I'm fine with having single
 branches for major releases(4.3) and tagging the commits where each
 incremental release (4.3.x) is done. I'm trying to remember why we
 went
 with the -forward, I'm sure it's in the mailing list somewhere, but
 one
 of
 the nice things it provides is the ability for the release manager to
 control what changes are made during code freeze while giving people a
 place to stage fixes (though admittedly this is not always followed).
 Without -forward, would the flow be for each dev to have their own
 repo
 and
 issue pull requests for bugfixes?
 
 
 On Mon, Jun 2, 2014 at 3:17 AM, Rajani Karuturi 
 rajani.karut...@citrix.com
 wrote:
 
 Any other suggestions/objections/comments??
 Can we discuss this in detail and agree to a process??
 
 
 ~Rajani
 
 
 
 On 02-Jun-2014, at 9:32 am, Rajani 

Re: [DISCUSS][PROPOSAL] git workflow

2014-07-08 Thread Sebastien Goasguen

On Jul 8, 2014, at 5:40 PM, Sebastien Goasguen run...@gmail.com wrote:

 
 On Jul 8, 2014, at 4:13 PM, Rohit Yadav rohit.ya...@shapeblue.com wrote:
 
 Hi Chip,
 
 Chip Childers wrote:
 Let me try that again, this time with content!
 
 I've dropped private@, since this doesn't belong there.
 
 On Tue, Jul 8, 2014 at 3:30 PM, Rohit Yadavrohit.ya...@shapeblue.com  
 wrote:
 Hi,
 
 
 Daan Hoogland wrote:
 I do not see why the PMC should drive defining the
 standard. This is something that should be carried and cherished by
 all developers.
 
 In my experience when something is everyone's responsibility, eventually
 no one is responsible for it.
 
 I think the PMC should drive it because IMHO the PMC comprises of our
 project management folks who have decision making powers and are
 officially responsible for the project as recognized by the ASF [1].
 
 Therefore, I'm requesting our PMC to come up with a convention along
 with committers/developers on this issue and enforce it using some
 tooling etc.
 
 [1] http://www.apache.org/dev/pmc.htm
 
 Everyone here is part of the community, and everyone deserves a say in
 how this is done.  If you're suggesting that PMC members should be
 involved in this discussion, agreed!  But should should committers and
 contributors!
 
 Thanks Chip -- I'm with you on this.
 
 I'm trying to say is -- shared responsibility is tricky, in most cases
 no one would be responsible eventually, *unless*…
 
 
 That's really a bar discussion :).
 
 At Apache we govern by consensus. Any technical decisions (especially one 
 like this), needs to be agreed upon by the community as a whole.
 The agreement will happen through discussion on the dev list. 
 
 For us to change, we need people (who believe that what we are doing 
 currently is wrong) to step up,  explain the issues and make a proposal.
 Then by iterating and discussing the proposal we will reach consensus.
 
 At least that's how I view things.
 
 I re-opened the thread because no-one picked it up, and as you say it's a 
 shame.
 
 IMHO our development methodology is totally broken and this is best shown by 
 our inability to release on-time.
 
 I am interested to take on the 4.5 or 4.6 RM duties if we agree to change our 
 workflow significantly.
 
 Personally, I would like to freeze master and make the development happen 
 somewhere else.
 
 Basically master should be our releasable branch and once we merge things in 
 master we end up with working releases.
 I would go further and actually propose that only the RM gets to merge in 
 master.
 
 I think if we started from a working release tag it would mean that we would 
 never miss a release on time. Only the scope of the features would be 
 affected.
 
 Until we have a proper review/test/commit CI setup we should not allow 
 committing to master.
 
 I am still thinking through this, but once I have a clear idea, I plan to 
 make a proposal by writing a new workflow on the wiki.
 
 ideas, thoughts, flames ?
 
 -sebastien
 

This is also a good read, against cherry-picking (back to Rajani's original 
point):

http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html

(even wondering if Rohit did not send this to the list already…)

-sebastien


 
 Regards,
 Rohit Yadav
 Software Architect, ShapeBlue
 M. +91 88 262 30892 | rohit.ya...@shapeblue.com
 Blog: bhaisaab.org | Twitter: @_bhaisaab
 Find out more about ShapeBlue and our range of CloudStack related services
 
 IaaS Cloud Design  Buildhttp://shapeblue.com/iaas-cloud-design-and-build//
 CSForge – rapid IaaS deployment frameworkhttp://shapeblue.com/csforge/
 CloudStack Consultinghttp://shapeblue.com/cloudstack-consultancy/
 CloudStack Infrastructure 
 Supporthttp://shapeblue.com/cloudstack-infrastructure-support/
 CloudStack Bootcamp Training 
 Courseshttp://shapeblue.com/cloudstack-training/
 
 This email and any attachments to it may be confidential and are intended 
 solely for the use of the individual to whom it is addressed. Any views or 
 opinions expressed are solely those of the author and do not necessarily 
 represent those of Shape Blue Ltd or related companies. If you are not the 
 intended recipient of this email, you must neither take any action based 
 upon its contents, nor copy or show it to anyone. Please contact the sender 
 if you believe you have received this email in error. Shape Blue Ltd is a 
 company incorporated in England  Wales. ShapeBlue Services India LLP is a 
 company incorporated in India and is operated under license from Shape Blue 
 Ltd. Shape Blue Brasil Consultoria Ltda is a company incorporated in Brasil 
 and is operated under license from Shape Blue Ltd. ShapeBlue is a registered 
 trademark.
 



Re: [DISCUSS][PROPOSAL] git workflow

2014-07-08 Thread Rajani Karuturi
In my first email, I mentioned a youtube url[1] which is a google tech talk by  
Laura Wingerd [2] of Perforce Software
I recommend watching it as well. (its a 55 min video).

[1] https://www.youtube.com/watch?v=AJ-CpGsCpM0
[2] http://www.perforce.com/blog/author/lwingerd

~Rajani



On 09-Jul-2014, at 3:52 am, Sebastien Goasguen 
run...@gmail.commailto:run...@gmail.com wrote:

This is also a good read, against cherry-picking (back to Rajani's original 
point):

http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html

(even wondering if Rohit did not send this to the list already…)

-sebastien



Re: [DISCUSS][PROPOSAL] git workflow

2014-06-30 Thread Sebastien Goasguen
I would like to re-start this discussion.

Rajani made some good points and someone mentioned Gitflow:

http://nvie.com/posts/a-successful-git-branching-model/

Thinking about our release procedure, we clearly need more tests and a CI. 
However it looks like this is going to take some time.

In the meantime I think there is nothing preventing us from agreeing to 'git 
practices', we don't need tests or new infra, we just need to agree on the git 
workflow.

Right now Master is really a development branch, we should make it a stable 
branch for production with very few commits.
This does not mean that we would release less, in contrary this would ensure 
that a commit to master means it's a production release.

In addition gitflow [1] does not do cherry-picks (gets back to Rajani's point) 
everything is based on merges.

I am of the opinion that git flow provides a nice process. It basically freezes 
master. Development happens in a 'develop' branch, releases branches are 
branched off of that and merged into master and back into develop….etc

Please read [1] it's a good read.

And let's discuss,

[1] http://nvie.com/posts/a-successful-git-branching-model/

-Sebastien

On Jun 2, 2014, at 11:58 PM, Rajani Karuturi rajani.karut...@citrix.com wrote:

 There is also the problem of cherry-picking.
 As a contributor, I always endup creating multiple patches for each branch as 
 they don’t cleanly apply on the upward branches. which means distinct commits 
 for each branch and I don’t easily know which all branches my commit exists 
 unless I do grep.
 if we follow merging strategy properly, apart from the first merge of the 
 branch, everything else on top of it should be a painless merge. 
 
 
 
 ~Rajani
 
 
 
 On 02-Jun-2014, at 10:51 pm, Marcus shadow...@gmail.com wrote:
 
 I think many of the bullet points are what we are currently doing
 (guidelines for commit comments, feature branches need to stay in sync with
 master, no back-merging). I also think that much of what we do now is done
 the way it is simply because there *are* vast changes between versions.
 Classes are getting shuffled around and changed all the time. If its
 feasible to merge branch fixes to master, that's fine, but some quick tests
 seem to indicate that this will be messy getting started.
 
 That leaves us with how we do releases. I'm fine with having single
 branches for major releases(4.3) and tagging the commits where each
 incremental release (4.3.x) is done. I'm trying to remember why we went
 with the -forward, I'm sure it's in the mailing list somewhere, but one of
 the nice things it provides is the ability for the release manager to
 control what changes are made during code freeze while giving people a
 place to stage fixes (though admittedly this is not always followed).
 Without -forward, would the flow be for each dev to have their own repo and
 issue pull requests for bugfixes?
 
 
 On Mon, Jun 2, 2014 at 3:17 AM, Rajani Karuturi rajani.karut...@citrix.com
 wrote:
 
 Any other suggestions/objections/comments??
 Can we discuss this in detail and agree to a process??
 
 
 ~Rajani
 
 
 
 On 02-Jun-2014, at 9:32 am, Rajani Karuturi rajani.karut...@citrix.com
 wrote:
 
 Yes as mike said, if its a one-off case we can do a empty merge(merge -s
 ours) for it and git will assume its merged but will not bring in any
 changes.
 
 If the branches diverged a lot, for example after a major rewrite, we
 could stop merging to that branch and above and make the fix manually.
 
 
 ~Rajani
 
 
 
 On 30-May-2014, at 11:26 pm, Mike Tutkowski 
 mike.tutkow...@solidfire.com wrote:
 
 Yep, that's what I was referring to in that a particular fix for an old
 release may not apply to newer versions. That does happen.
 
 We used to mark those as don't need to merge to branch x in SVN and
 then
 you handed it however made sense on the applicable branch(es).
 
 
 On Fri, May 30, 2014 at 11:53 AM, Stephen Turner 
 stephen.tur...@citrix.com
 wrote:
 
 What happens if a fix isn't relevant for newer versions, or has to be
 rewritten for newer versions because the code has changed? Don't the
 branches diverge and you end up cherry-picking after that?
 
 --
 Stephen Turner
 
 
 -Original Message-
 From: Mike Tutkowski [mailto:mike.tutkow...@solidfire.com]
 Sent: 30 May 2014 18:48
 To: dev@cloudstack.apache.org
 Subject: Re: [PROPOSAL] git workflow
 
 I think this flow is something we should seriously consider.
 
 I find cherry picking from branch to branch to be error prone in that
 it's
 easy for someone to forget to cherry pick to all applicable branches
 and
 you don't have any easy way to see the cherry picks are related.
 
 When I worked at HP, we had automated tools check to see if you
 checked a
 fix into a prior release, but not later releases. In such a situation,
 you
 either 1) forgot to perform the check-in or 2) the check-in was no
 longer
 applicable in the later release(s), so you needed to mark it as
 un-necessary (SVN supported this 

Re: [DISCUSS][PROPOSAL] git workflow

2014-06-02 Thread Rajani Karuturi
Any other suggestions/objections/comments??
Can we discuss this in detail and agree to a process??


~Rajani



On 02-Jun-2014, at 9:32 am, Rajani Karuturi rajani.karut...@citrix.com wrote:

 Yes as mike said, if its a one-off case we can do a empty merge(merge -s 
 ours) for it and git will assume its merged but will not bring in any changes.
 
 If the branches diverged a lot, for example after a major rewrite, we could 
 stop merging to that branch and above and make the fix manually.
 
 
 ~Rajani
 
 
 
 On 30-May-2014, at 11:26 pm, Mike Tutkowski mike.tutkow...@solidfire.com 
 wrote:
 
 Yep, that's what I was referring to in that a particular fix for an old
 release may not apply to newer versions. That does happen.
 
 We used to mark those as don't need to merge to branch x in SVN and then
 you handed it however made sense on the applicable branch(es).
 
 
 On Fri, May 30, 2014 at 11:53 AM, Stephen Turner stephen.tur...@citrix.com
 wrote:
 
 What happens if a fix isn't relevant for newer versions, or has to be
 rewritten for newer versions because the code has changed? Don't the
 branches diverge and you end up cherry-picking after that?
 
 --
 Stephen Turner
 
 
 -Original Message-
 From: Mike Tutkowski [mailto:mike.tutkow...@solidfire.com]
 Sent: 30 May 2014 18:48
 To: dev@cloudstack.apache.org
 Subject: Re: [PROPOSAL] git workflow
 
 I think this flow is something we should seriously consider.
 
 I find cherry picking from branch to branch to be error prone in that it's
 easy for someone to forget to cherry pick to all applicable branches and
 you don't have any easy way to see the cherry picks are related.
 
 When I worked at HP, we had automated tools check to see if you checked a
 fix into a prior release, but not later releases. In such a situation, you
 either 1) forgot to perform the check-in or 2) the check-in was no longer
 applicable in the later release(s), so you needed to mark it as
 un-necessary (SVN supported this ability...not sure about Git).
 
 
 On Fri, May 30, 2014 at 10:49 AM, Rajani Karuturi 
 rajani.karut...@citrix.com wrote:
 
 Hi all,
 
 
 
 Our current git workflow is confusing with the *forward branches and
 cherry-picking. Its hard to track on what all releases the commit has
 gone into unless I do some git log greping. Also, as a contributor, I
 endup creating patches for each branch as it doesn’t cleanly apply on
 different branches.
 
 
 
 I think we should have some guidelines. Here is what I propose.
 
 
 
 1.  There should be branch for every major release(ex: 4.3.x, 4.4.x,
 5.0.x,5.1.x) and the minor releases should be tagged accordingly on
 the respective branches.
 2.  The branch naming convention is to be followed. Many branches
 with 4.3, 4.3.0, 4.3.1 etc. is confusing
 3.  Cherry-picking should be avoided. In git, when we cherry-pick,
 we have two physically distinct commits for the same change or fix and
 is difficult to track unless you do cherry-pick -x
 4.  There should always be a continous flow from release branches to
 master. This doesn’t mean cherry-picking. They should be merged(either
 ff or no-ff) which retains the commit ids and easily trackable with
 git branch --contains
*   Every bug fix should always flow from minimal release uptill
 master. A bug isnt fixed until the fix reaches master.
*   For ex. A bug 4.2.1 should be committed to
 4.2.x-4.3.x-4.4.x-master
*   If someone forgets to do the merge, the next time a new commit
 is
 done this will also get merged.
 5.  There should always be a continuous flow from master to feature
 branches. Meaning all feature branch owners should proactively take
 any new commits from master by doing a merge from master
 6.  The commits from feature branch will make to master on code
 complete through a merge.
 7.  There should never be a merge from master to release branches
 8.  Every commit in LTS branch(targetted to any minor release)
 should have atleast bug id and correct author information
*   Cassandra's template: patch by author; reviewed by committer
 for CASSANDRA-ticket
 9.  Once the release branch is created(after code freeze), any bug
 in jira can be marked with fix version current release(4.4) only on
 RM's approval and only they can go to the release branch.  This can be
 done through jira and with certain rules.(may be using jira vote?)
 this would save the cherry-picking time and another branch maintenance.
 
 
 
 Please add your thoughts/suggestions/comments.
 
 
 
 Ref:
 http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html
 https://www.youtube.com/watch?v=AJ-CpGsCpM0
 
 ~Rajani
 
 
 
 
 
 
 --
 *Mike Tutkowski*
 *Senior CloudStack Developer, SolidFire Inc.*
 e: mike.tutkow...@solidfire.com
 o: 303.746.7302
 Advancing the way the world uses the cloud
 http://solidfire.com/solution/overview/?video=play*™*
 
 
 
 
 -- 
 *Mike Tutkowski*
 *Senior CloudStack Developer, SolidFire Inc.*
 e: mike.tutkow...@solidfire.com
 o: 303.746.7302
 Advancing the way the 

Re: [DISCUSS][PROPOSAL] git workflow

2014-06-02 Thread Marcus
I think many of the bullet points are what we are currently doing
(guidelines for commit comments, feature branches need to stay in sync with
master, no back-merging). I also think that much of what we do now is done
the way it is simply because there *are* vast changes between versions.
Classes are getting shuffled around and changed all the time. If its
feasible to merge branch fixes to master, that's fine, but some quick tests
seem to indicate that this will be messy getting started.

That leaves us with how we do releases. I'm fine with having single
branches for major releases(4.3) and tagging the commits where each
incremental release (4.3.x) is done. I'm trying to remember why we went
with the -forward, I'm sure it's in the mailing list somewhere, but one of
the nice things it provides is the ability for the release manager to
control what changes are made during code freeze while giving people a
place to stage fixes (though admittedly this is not always followed).
Without -forward, would the flow be for each dev to have their own repo and
issue pull requests for bugfixes?


On Mon, Jun 2, 2014 at 3:17 AM, Rajani Karuturi rajani.karut...@citrix.com
wrote:

 Any other suggestions/objections/comments??
 Can we discuss this in detail and agree to a process??


 ~Rajani



 On 02-Jun-2014, at 9:32 am, Rajani Karuturi rajani.karut...@citrix.com
 wrote:

  Yes as mike said, if its a one-off case we can do a empty merge(merge -s
 ours) for it and git will assume its merged but will not bring in any
 changes.
 
  If the branches diverged a lot, for example after a major rewrite, we
 could stop merging to that branch and above and make the fix manually.
 
 
  ~Rajani
 
 
 
  On 30-May-2014, at 11:26 pm, Mike Tutkowski 
 mike.tutkow...@solidfire.com wrote:
 
  Yep, that's what I was referring to in that a particular fix for an old
  release may not apply to newer versions. That does happen.
 
  We used to mark those as don't need to merge to branch x in SVN and
 then
  you handed it however made sense on the applicable branch(es).
 
 
  On Fri, May 30, 2014 at 11:53 AM, Stephen Turner 
 stephen.tur...@citrix.com
  wrote:
 
  What happens if a fix isn't relevant for newer versions, or has to be
  rewritten for newer versions because the code has changed? Don't the
  branches diverge and you end up cherry-picking after that?
 
  --
  Stephen Turner
 
 
  -Original Message-
  From: Mike Tutkowski [mailto:mike.tutkow...@solidfire.com]
  Sent: 30 May 2014 18:48
  To: dev@cloudstack.apache.org
  Subject: Re: [PROPOSAL] git workflow
 
  I think this flow is something we should seriously consider.
 
  I find cherry picking from branch to branch to be error prone in that
 it's
  easy for someone to forget to cherry pick to all applicable branches
 and
  you don't have any easy way to see the cherry picks are related.
 
  When I worked at HP, we had automated tools check to see if you
 checked a
  fix into a prior release, but not later releases. In such a situation,
 you
  either 1) forgot to perform the check-in or 2) the check-in was no
 longer
  applicable in the later release(s), so you needed to mark it as
  un-necessary (SVN supported this ability...not sure about Git).
 
 
  On Fri, May 30, 2014 at 10:49 AM, Rajani Karuturi 
  rajani.karut...@citrix.com wrote:
 
  Hi all,
 
 
 
  Our current git workflow is confusing with the *forward branches and
  cherry-picking. Its hard to track on what all releases the commit has
  gone into unless I do some git log greping. Also, as a contributor, I
  endup creating patches for each branch as it doesn’t cleanly apply on
  different branches.
 
 
 
  I think we should have some guidelines. Here is what I propose.
 
 
 
  1.  There should be branch for every major release(ex: 4.3.x, 4.4.x,
  5.0.x,5.1.x) and the minor releases should be tagged accordingly on
  the respective branches.
  2.  The branch naming convention is to be followed. Many branches
  with 4.3, 4.3.0, 4.3.1 etc. is confusing
  3.  Cherry-picking should be avoided. In git, when we cherry-pick,
  we have two physically distinct commits for the same change or fix and
  is difficult to track unless you do cherry-pick -x
  4.  There should always be a continous flow from release branches to
  master. This doesn’t mean cherry-picking. They should be merged(either
  ff or no-ff) which retains the commit ids and easily trackable with
  git branch --contains
 *   Every bug fix should always flow from minimal release uptill
  master. A bug isnt fixed until the fix reaches master.
 *   For ex. A bug 4.2.1 should be committed to
  4.2.x-4.3.x-4.4.x-master
 *   If someone forgets to do the merge, the next time a new commit
  is
  done this will also get merged.
  5.  There should always be a continuous flow from master to feature
  branches. Meaning all feature branch owners should proactively take
  any new commits from master by doing a merge from master
  6.  The commits from feature branch 

Re: [DISCUSS][PROPOSAL] git workflow

2014-06-02 Thread David Nalley
On Mon, Jun 2, 2014 at 1:21 PM, Marcus shadow...@gmail.com wrote:
 I think many of the bullet points are what we are currently doing
 (guidelines for commit comments, feature branches need to stay in sync with
 master, no back-merging). I also think that much of what we do now is done
 the way it is simply because there *are* vast changes between versions.
 Classes are getting shuffled around and changed all the time. If its
 feasible to merge branch fixes to master, that's fine, but some quick tests
 seem to indicate that this will be messy getting started.

 That leaves us with how we do releases. I'm fine with having single
 branches for major releases(4.3) and tagging the commits where each
 incremental release (4.3.x) is done. I'm trying to remember why we went
 with the -forward, I'm sure it's in the mailing list somewhere, but one of
 the nice things it provides is the ability for the release manager to
 control what changes are made during code freeze while giving people a
 place to stage fixes (though admittedly this is not always followed).
 Without -forward, would the flow be for each dev to have their own repo and
 issue pull requests for bugfixes?


The historical reasoning was that we needed to keep 4.x relatively
clean, particularly as we were voting on RCs, but we didn't want to
stop folks working on bugs, even if they were minor and getting those
ready for 4.x.1; otherwise 4.x effectively becomes abandoned from a
bug fix perspective.

What should (IMO) be happening is 4.x-forward should be getting merged
into 4.x as soon as the release is kicked out the door, and then
4.x-forward deleted.

--David


Re: [DISCUSS][PROPOSAL] git workflow

2014-06-02 Thread Marcus
Is that not happening?


On Mon, Jun 2, 2014 at 11:26 AM, David Nalley da...@gnsa.us wrote:

 On Mon, Jun 2, 2014 at 1:21 PM, Marcus shadow...@gmail.com wrote:
  I think many of the bullet points are what we are currently doing
  (guidelines for commit comments, feature branches need to stay in sync
 with
  master, no back-merging). I also think that much of what we do now is
 done
  the way it is simply because there *are* vast changes between versions.
  Classes are getting shuffled around and changed all the time. If its
  feasible to merge branch fixes to master, that's fine, but some quick
 tests
  seem to indicate that this will be messy getting started.
 
  That leaves us with how we do releases. I'm fine with having single
  branches for major releases(4.3) and tagging the commits where each
  incremental release (4.3.x) is done. I'm trying to remember why we went
  with the -forward, I'm sure it's in the mailing list somewhere, but one
 of
  the nice things it provides is the ability for the release manager to
  control what changes are made during code freeze while giving people a
  place to stage fixes (though admittedly this is not always followed).
  Without -forward, would the flow be for each dev to have their own repo
 and
  issue pull requests for bugfixes?
 

 The historical reasoning was that we needed to keep 4.x relatively
 clean, particularly as we were voting on RCs, but we didn't want to
 stop folks working on bugs, even if they were minor and getting those
 ready for 4.x.1; otherwise 4.x effectively becomes abandoned from a
 bug fix perspective.

 What should (IMO) be happening is 4.x-forward should be getting merged
 into 4.x as soon as the release is kicked out the door, and then
 4.x-forward deleted.

 --David



Re: [DISCUSS][PROPOSAL] git workflow

2014-06-02 Thread Rajani Karuturi
There is also the problem of cherry-picking.
As a contributor, I always endup creating multiple patches for each branch as 
they don’t cleanly apply on the upward branches. which means distinct commits 
for each branch and I don’t easily know which all branches my commit exists 
unless I do grep.
if we follow merging strategy properly, apart from the first merge of the 
branch, everything else on top of it should be a painless merge. 



~Rajani



On 02-Jun-2014, at 10:51 pm, Marcus shadow...@gmail.com wrote:

 I think many of the bullet points are what we are currently doing
 (guidelines for commit comments, feature branches need to stay in sync with
 master, no back-merging). I also think that much of what we do now is done
 the way it is simply because there *are* vast changes between versions.
 Classes are getting shuffled around and changed all the time. If its
 feasible to merge branch fixes to master, that's fine, but some quick tests
 seem to indicate that this will be messy getting started.
 
 That leaves us with how we do releases. I'm fine with having single
 branches for major releases(4.3) and tagging the commits where each
 incremental release (4.3.x) is done. I'm trying to remember why we went
 with the -forward, I'm sure it's in the mailing list somewhere, but one of
 the nice things it provides is the ability for the release manager to
 control what changes are made during code freeze while giving people a
 place to stage fixes (though admittedly this is not always followed).
 Without -forward, would the flow be for each dev to have their own repo and
 issue pull requests for bugfixes?
 
 
 On Mon, Jun 2, 2014 at 3:17 AM, Rajani Karuturi rajani.karut...@citrix.com
 wrote:
 
 Any other suggestions/objections/comments??
 Can we discuss this in detail and agree to a process??
 
 
 ~Rajani
 
 
 
 On 02-Jun-2014, at 9:32 am, Rajani Karuturi rajani.karut...@citrix.com
 wrote:
 
 Yes as mike said, if its a one-off case we can do a empty merge(merge -s
 ours) for it and git will assume its merged but will not bring in any
 changes.
 
 If the branches diverged a lot, for example after a major rewrite, we
 could stop merging to that branch and above and make the fix manually.
 
 
 ~Rajani
 
 
 
 On 30-May-2014, at 11:26 pm, Mike Tutkowski 
 mike.tutkow...@solidfire.com wrote:
 
 Yep, that's what I was referring to in that a particular fix for an old
 release may not apply to newer versions. That does happen.
 
 We used to mark those as don't need to merge to branch x in SVN and
 then
 you handed it however made sense on the applicable branch(es).
 
 
 On Fri, May 30, 2014 at 11:53 AM, Stephen Turner 
 stephen.tur...@citrix.com
 wrote:
 
 What happens if a fix isn't relevant for newer versions, or has to be
 rewritten for newer versions because the code has changed? Don't the
 branches diverge and you end up cherry-picking after that?
 
 --
 Stephen Turner
 
 
 -Original Message-
 From: Mike Tutkowski [mailto:mike.tutkow...@solidfire.com]
 Sent: 30 May 2014 18:48
 To: dev@cloudstack.apache.org
 Subject: Re: [PROPOSAL] git workflow
 
 I think this flow is something we should seriously consider.
 
 I find cherry picking from branch to branch to be error prone in that
 it's
 easy for someone to forget to cherry pick to all applicable branches
 and
 you don't have any easy way to see the cherry picks are related.
 
 When I worked at HP, we had automated tools check to see if you
 checked a
 fix into a prior release, but not later releases. In such a situation,
 you
 either 1) forgot to perform the check-in or 2) the check-in was no
 longer
 applicable in the later release(s), so you needed to mark it as
 un-necessary (SVN supported this ability...not sure about Git).
 
 
 On Fri, May 30, 2014 at 10:49 AM, Rajani Karuturi 
 rajani.karut...@citrix.com wrote:
 
 Hi all,
 
 
 
 Our current git workflow is confusing with the *forward branches and
 cherry-picking. Its hard to track on what all releases the commit has
 gone into unless I do some git log greping. Also, as a contributor, I
 endup creating patches for each branch as it doesn’t cleanly apply on
 different branches.
 
 
 
 I think we should have some guidelines. Here is what I propose.
 
 
 
 1.  There should be branch for every major release(ex: 4.3.x, 4.4.x,
 5.0.x,5.1.x) and the minor releases should be tagged accordingly on
 the respective branches.
 2.  The branch naming convention is to be followed. Many branches
 with 4.3, 4.3.0, 4.3.1 etc. is confusing
 3.  Cherry-picking should be avoided. In git, when we cherry-pick,
 we have two physically distinct commits for the same change or fix and
 is difficult to track unless you do cherry-pick -x
 4.  There should always be a continous flow from release branches to
 master. This doesn’t mean cherry-picking. They should be merged(either
 ff or no-ff) which retains the commit ids and easily trackable with
 git branch --contains
   *   Every bug fix should always flow from minimal release