Re: [PHP-DEV] Adopt GitFlow process

2012-03-27 Thread Kris Craig
On Mon, Mar 26, 2012 at 12:03 PM, Alexey Shein con...@gmail.com wrote:

 26 марта 2012 г. 4:30 пользователь Stas Malyshev
 smalys...@sugarcrm.com написал:
  Hi!
 
  Main problem is that our current workflow doesn't allow branch-only
  changes. I.e. if you make a bugfix and want to stay it in PHP-5.3 only
  you can't merge 5.3 with 5.4 anymore, otherwise your bugfix will go
  there.
 
  Why would you want a bugfix to be in 5.3 but not in 5.4? Can you give an
  example?
  I can see it if the code had substantial change there so bugfix no
  longer applies. In this case, I would try the merge, see it fail and
  resolve it as all ours. It shouldn't take longer than 10 mins. Though
  it you have ideas how to improve that without disrupting the rest of the
  process and the common use case, you are welcome.

 For example this commit

 http://git.php.net/?p=php-src.git;a=commit;h=8d0760f38a9d3dabb3a31d1d47f85827d27d0db4
 by Ilia was intentionally commited in PHP-5.3 only, maybe Ilia will
 describe better. It was then accidentally merged into PHP-5.4 by
 Hannes (which broke something in PHP-5.4) when he was merging his own
 changes which merge made a lot of confusion.

 We should really deal with this problem first before diving further,
 since it will have great impact on the whole working process with git.
 If we can live with simple git merge - it would be simply awesome.

  1) use cherry-picking in one repo. This has big downside (as dsp
  pointed) that we can't use git annotate, bisect and other commands
  assuming that commit is introduced in repository only once.
 
  bisect is a bit weird now btw, since it seems to be a bit confused by
  5.3-5.4 merge that happened not when it thinks it did - so if you try to
  bisect changes in 5.4 branch only, you will get some very old changes
  in. You can quickly go through that, marking them as good, but still not
  ideal situation.

 Yep, already tried bisect and it doesn't seem work good at least for
 php-5.3 branch.

  Okay, since I'm not too familiar with release process, assume
  following (please, correct me if I'm wrong):
  * PHP 5.3 can't have features, only bugfixes
 
  True.
 
  * PHP 5.3 can have bugfixes that are merged upstream (PHP-5.4 and
  master) and bugfixes that should stay only in PHP-5.3
 
  Not entirely true - 5.3 code can have bugfixes that aren't merged up,
  but that would not be the common case. Example - bugfix regarding magic
  quotes or safe mode, which are not in 5.4.

 So it's still possible to have not-merged up bugfixes. That means that
 we should take that into account.
 I'm just trying to figure out our needs to better understand what
 needs to be done then.

 
  * PHP-5.4 and master can have bugfixes and features that are merged
  upstream (master) and bugfixes/features that should stay only in
  current branch
 
  5.4-only fixes very unlikely, as master and 5.4 are very close today. If
  we ever do big changes in master this is a possibility, as described
  above, but still won't be a common case - unless we rewrite our engine
  completely, which doesn't seem to be likely.
 
  * All branches are have regular releases
 
  True, except for master.
 
  In gitflow you have 4 branches:
  * master - contains only production ready releases, nobody commits here
 directly
  * develop - main development branch, all work usually is get merged here
  * feature/name - feature/bugfix branches for separate bugfixes and
  features. Merged into develop.
  * hotfix/name - same that feature branches but is urgent and is
  always merged into master *and* develop. For example, when security
  release is issued, this fix should go into release and into main
  development branch.
  * release/name - pre-release stability branches, for bug-fixes only.
  Merged into develop and master (making a new release). When you have a
  release branch, you can't commit into develop (so hotfixes go here
  too, if we have release branch).
 
  I don't like that can't commit into thing - the main advantage of git
  as I see it that you can manage release branch and dev/stable branches
  separately and not have the situation of asking people to sit on their
  code for 2 months while release is being stabilized.

 Sorry, I messed this up. You actually can commit into the develop, new
 features go there, while bugfixes should go in release branch. If you
 want you can merge release branch into develop anytime you want, it's
 just should be done at least once when release branch is closed.

  Make a bugfix in 5.3
  $ git flow feature start bugfix PHP-5.3 # create a bugfix branch based
 on 5.3
  $ git flow feature finish -k bugfix 5.3-develop
  Bugfix get merged into 5.3-develop - this should be implemented since
  gitflow supports only 1 develop branch for now. -k says to keep branch
  after finish, since we'll need it to merge upstream
 
  Why would we need bugfix branch in our repo here? I would say keep it in
  your own fork, test it, show it off, get it ready - then merge 

Re: [PHP-DEV] Adopt GitFlow process

2012-03-26 Thread Alexey Shein
26 марта 2012 г. 4:30 пользователь Stas Malyshev
smalys...@sugarcrm.com написал:
 Hi!

 Main problem is that our current workflow doesn't allow branch-only
 changes. I.e. if you make a bugfix and want to stay it in PHP-5.3 only
 you can't merge 5.3 with 5.4 anymore, otherwise your bugfix will go
 there.

 Why would you want a bugfix to be in 5.3 but not in 5.4? Can you give an
 example?
 I can see it if the code had substantial change there so bugfix no
 longer applies. In this case, I would try the merge, see it fail and
 resolve it as all ours. It shouldn't take longer than 10 mins. Though
 it you have ideas how to improve that without disrupting the rest of the
 process and the common use case, you are welcome.

For example this commit
http://git.php.net/?p=php-src.git;a=commit;h=8d0760f38a9d3dabb3a31d1d47f85827d27d0db4
by Ilia was intentionally commited in PHP-5.3 only, maybe Ilia will
describe better. It was then accidentally merged into PHP-5.4 by
Hannes (which broke something in PHP-5.4) when he was merging his own
changes which merge made a lot of confusion.

We should really deal with this problem first before diving further,
since it will have great impact on the whole working process with git.
If we can live with simple git merge - it would be simply awesome.

 1) use cherry-picking in one repo. This has big downside (as dsp
 pointed) that we can't use git annotate, bisect and other commands
 assuming that commit is introduced in repository only once.

 bisect is a bit weird now btw, since it seems to be a bit confused by
 5.3-5.4 merge that happened not when it thinks it did - so if you try to
 bisect changes in 5.4 branch only, you will get some very old changes
 in. You can quickly go through that, marking them as good, but still not
 ideal situation.

Yep, already tried bisect and it doesn't seem work good at least for
php-5.3 branch.

 Okay, since I'm not too familiar with release process, assume
 following (please, correct me if I'm wrong):
 * PHP 5.3 can't have features, only bugfixes

 True.

 * PHP 5.3 can have bugfixes that are merged upstream (PHP-5.4 and
 master) and bugfixes that should stay only in PHP-5.3

 Not entirely true - 5.3 code can have bugfixes that aren't merged up,
 but that would not be the common case. Example - bugfix regarding magic
 quotes or safe mode, which are not in 5.4.

So it's still possible to have not-merged up bugfixes. That means that
we should take that into account.
I'm just trying to figure out our needs to better understand what
needs to be done then.


 * PHP-5.4 and master can have bugfixes and features that are merged
 upstream (master) and bugfixes/features that should stay only in
 current branch

 5.4-only fixes very unlikely, as master and 5.4 are very close today. If
 we ever do big changes in master this is a possibility, as described
 above, but still won't be a common case - unless we rewrite our engine
 completely, which doesn't seem to be likely.

 * All branches are have regular releases

 True, except for master.

 In gitflow you have 4 branches:
 * master - contains only production ready releases, nobody commits here 
 directly
 * develop - main development branch, all work usually is get merged here
 * feature/name - feature/bugfix branches for separate bugfixes and
 features. Merged into develop.
 * hotfix/name - same that feature branches but is urgent and is
 always merged into master *and* develop. For example, when security
 release is issued, this fix should go into release and into main
 development branch.
 * release/name - pre-release stability branches, for bug-fixes only.
 Merged into develop and master (making a new release). When you have a
 release branch, you can't commit into develop (so hotfixes go here
 too, if we have release branch).

 I don't like that can't commit into thing - the main advantage of git
 as I see it that you can manage release branch and dev/stable branches
 separately and not have the situation of asking people to sit on their
 code for 2 months while release is being stabilized.

Sorry, I messed this up. You actually can commit into the develop, new
features go there, while bugfixes should go in release branch. If you
want you can merge release branch into develop anytime you want, it's
just should be done at least once when release branch is closed.

 Make a bugfix in 5.3
 $ git flow feature start bugfix PHP-5.3 # create a bugfix branch based on 5.3
 $ git flow feature finish -k bugfix 5.3-develop
 Bugfix get merged into 5.3-develop - this should be implemented since
 gitflow supports only 1 develop branch for now. -k says to keep branch
 after finish, since we'll need it to merge upstream

 Why would we need bugfix branch in our repo here? I would say keep it in
 your own fork, test it, show it off, get it ready - then merge it into
 php repo. What is the reason for us to keep halfbaked fix branches in
 our repo?

 Merge bugfix from 5.3 repo to 5.4
 First, rebase branch against 5.4
 $ git 

[PHP-DEV] Adopt GitFlow process

2012-03-25 Thread Alexey Shein
Hi, internals!

There was a discussion recently on IRC that our current git working
process is not perfect (especially about keeping one branch-only
bugfixes) so that's a
suggestion to use (and modify to better suit our needs) nvie's gitflow
process and git-flow tool he developed to ease the process.
If you're not yet familiar what is that, please read
his wonderful article   http://nvie.com/posts/a-successful-git-branching-model/
another wonderful article about the gitflow tool
http://jeffkreeftmeijer.com/2010/why-arent-you-using-git-flow/

go to git-flow project on github: https://github.com/nvie/gitflow

watch video tutorials about gitflow
http://buildamodule.com/video/change-management-and-version-control-deploying-releases-features-and-fixes-with-git-how-to-use-a-scalable-git-branching-model-called-gitflow
http://vimeo.com/16018419
http://codesherpas.com/screencasts/on_the_path_gitflow.mov

Personally, I see migration from current setup that way so each
release branch (PHP-5.3, PHP-5.4 and master) becomes a separate
repository with adopted gitflow model (although it should be thought
through more carefully).
What do you think about that?
-- 
Regards,
Shein Alexey

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] Adopt GitFlow process

2012-03-25 Thread Stas Malyshev
Hi!

 There was a discussion recently on IRC that our current git working
 process is not perfect (especially about keeping one branch-only
 bugfixes) so that's a

One thing with discussions on IRC is that nobody except those present
there can neither participate nor know what was talked about. And since
we have timezone differences and other stuff going on in our lives, that
means, on my estimate, a substantial percentage of the people here
wouldn't know anything about what was discussed. Thus, it would be
useful to explain what exactly is the problem we are talking about.

 If you're not yet familiar what is that, please read
 his wonderful article   
 http://nvie.com/posts/a-successful-git-branching-model/
 another wonderful article about the gitflow tool
 http://jeffkreeftmeijer.com/2010/why-arent-you-using-git-flow/

This is a nice process, however I'm not sure how it could apply to PHP.
Could you outline what will be done in this case when we have:
1. A bugfix for 5.3
2. A bugfix for 5.4
3. A feature addition for 5.4
4. A release of 5.3.x
5. A release of 5.4.x
6. A release of 5.5 and 5.5.x

Also, what would happen if bugfix/feature is contributed via github pull?

 Personally, I see migration from current setup that way so each
 release branch (PHP-5.3, PHP-5.4 and master) becomes a separate
 repository with adopted gitflow model (although it should be thought
 through more carefully).
 What do you think about that?

I do not think it makes sense to keep the code in separate repos, given
that about 90% of the code is the same. It also will make much harder to
accept outside contribution - I'm not sure how easy would it be to merge
a patch into three repos from one pull req.
-- 
Stanislav Malyshev, Software Architect
SugarCRM: http://www.sugarcrm.com/
(408)454-6900 ext. 227

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] Adopt GitFlow process

2012-03-25 Thread Kris Craig
On Sun, Mar 25, 2012 at 2:04 PM, Stas Malyshev smalys...@sugarcrm.comwrote:

 Hi!

  There was a discussion recently on IRC that our current git working
  process is not perfect (especially about keeping one branch-only
  bugfixes) so that's a

 One thing with discussions on IRC is that nobody except those present
 there can neither participate nor know what was talked about. And since
 we have timezone differences and other stuff going on in our lives, that
 means, on my estimate, a substantial percentage of the people here
 wouldn't know anything about what was discussed. Thus, it would be
 useful to explain what exactly is the problem we are talking about.


+1



  If you're not yet familiar what is that, please read
  his wonderful article
 http://nvie.com/posts/a-successful-git-branching-model/
  another wonderful article about the gitflow tool
  http://jeffkreeftmeijer.com/2010/why-arent-you-using-git-flow/

 This is a nice process, however I'm not sure how it could apply to PHP.
 Could you outline what will be done in this case when we have:
 1. A bugfix for 5.3
 2. A bugfix for 5.4
 3. A feature addition for 5.4
 4. A release of 5.3.x
 5. A release of 5.4.x
 6. A release of 5.5 and 5.5.x

 Also, what would happen if bugfix/feature is contributed via github pull?


I'm also a strong proponent of NVIE's branching model.  We'd probably have
to modify it to suit PHP's exact needs, but in principle I very much
advocate it as it actually takes full advantage of Git's branching
strengths over Subversion.


  Personally, I see migration from current setup that way so each
  release branch (PHP-5.3, PHP-5.4 and master) becomes a separate
  repository with adopted gitflow model (although it should be thought
  through more carefully).
  What do you think about that?

 I do not think it makes sense to keep the code in separate repos, given
 that about 90% of the code is the same. It also will make much harder to
 accept outside contribution - I'm not sure how easy would it be to merge
 a patch into three repos from one pull req.


Agreed.  Breaking PHP into separate repos would carry a lot of implications
that make me uneasy.  Instead, I think it would be better to modify the
NVIE workflow model to bridge the two branches (basically, it would be
like linking 2 develop and 2 master branches somehow) in parallel on
the same repo.

--
 Stanislav Malyshev, Software Architect
 SugarCRM: http://www.sugarcrm.com/
 (408)454-6900 ext. 227

 --
 PHP Internals - PHP Runtime Development Mailing List
 To unsubscribe, visit: http://www.php.net/unsub.php




Re: [PHP-DEV] Adopt GitFlow process

2012-03-25 Thread Alexey Shein
26 марта 2012 г. 2:04 пользователь Stas Malyshev
smalys...@sugarcrm.com написал:
 Hi!

 There was a discussion recently on IRC that our current git working
 process is not perfect (especially about keeping one branch-only
 bugfixes) so that's a

 One thing with discussions on IRC is that nobody except those present
 there can neither participate nor know what was talked about. And since
 we have timezone differences and other stuff going on in our lives, that
 means, on my estimate, a substantial percentage of the people here
 wouldn't know anything about what was discussed. Thus, it would be
 useful to explain what exactly is the problem we are talking about.


Main problem is that our current workflow doesn't allow branch-only
changes. I.e. if you make a bugfix and want to stay it in PHP-5.3 only
you can't merge 5.3 with 5.4 anymore, otherwise your bugfix will go
there.
After some thinking it seems that GitFlow doesn't solve this problem
since it's based on merging :), so let's postpone its presence here
for a while.
What can we do here:
1) use cherry-picking in one repo. This has big downside (as dsp
pointed) that we can't use git annotate, bisect and other commands
assuming that commit is introduced in repository only once.
2) Simplify code that way so we won't need one-branch only changes,
can't say anything concrete here since I'm not familiar with PHP
internals at all.
We still need a better solution here.


 If you're not yet familiar what is that, please read
 his wonderful article   
 http://nvie.com/posts/a-successful-git-branching-model/
 another wonderful article about the gitflow tool
 http://jeffkreeftmeijer.com/2010/why-arent-you-using-git-flow/

 This is a nice process, however I'm not sure how it could apply to PHP.
 Could you outline what will be done in this case when we have:
 1. A bugfix for 5.3

Okay, since I'm not too familiar with release process, assume
following (please, correct me if I'm wrong):
* PHP 5.3 can't have features, only bugfixes
* PHP 5.3 can have bugfixes that are merged upstream (PHP-5.4 and
master) and bugfixes that should stay only in PHP-5.3
* PHP-5.4 and master can have bugfixes and features that are merged
upstream (master) and bugfixes/features that should stay only in
current branch
* All branches are have regular releases

Advantage of git flow is that your development process becomes more
straightforward, you can concentrate on development then on merging
bureaucracy.

In gitflow you have 4 branches:
* master - contains only production ready releases, nobody commits here directly
* develop - main development branch, all work usually is get merged here
* feature/name - feature/bugfix branches for separate bugfixes and
features. Merged into develop.
* hotfix/name - same that feature branches but is urgent and is
always merged into master *and* develop. For example, when security
release is issued, this fix should go into release and into main
development branch.
* release/name - pre-release stability branches, for bug-fixes only.
Merged into develop and master (making a new release). When you have a
release branch, you can't commit into develop (so hotfixes go here
too, if we have release branch).

That's canonical git-flow. We obviously will need several master and
develop branches, since PHP release branches need own development and
can't be merged in each other. That's not yet implemented and needs to
be done in git-flow.

So you want to make a bugfix in 5.3 that will be merged upstream

Make a bugfix in 5.3
$ git flow feature start bugfix PHP-5.3 # create a bugfix branch based on 5.3
hack ... check ... test
$ git add  git commit
$ git flow feature finish -k bugfix 5.3-develop
Bugfix get merged into 5.3-develop - this should be implemented since
gitflow supports only 1 develop branch for now. -k says to keep branch
after finish, since we'll need it to merge upstream

Merge bugfix from 5.3 repo to 5.4
First, rebase branch against 5.4
$ git rebase --onto develop-5.4 bugfix~num bugfix
Where num is number of commits in your branch. I know it sucks, but
that's how it works :)
Or you can git cherry-pick each commit, (simpler solution anyone?).
Now your bugfix branch is rebased against  5.4-develop and ready to be merged
$ git flow feature finish -k bugfix 5.4-develop

Repeat the same for master:
$ git rebase --onto develop-master bugfix~num bugfix
$ git flow feature finish -k bugfix master-develop

Push changes:
$ git push

 2. A bugfix for 5.4
 3. A feature addition for 5.4
Same as above. Since all work is done in branches there's no
difference between bugfixes and features.

 4. A release of 5.3.x

$ git flow release start 5.3.58
bump version number now
prepare NEWS, UPGRADING and all that stuff
$ git flow release publish 5.3.58 # publish (push to remote repo)
release-branch. It's not finished yet!
When release is ready you do
$ git flow release finish 5.3.58
Release get merged into 5.3-develop and 5.3-master, creating a tag
5.3.58 in 5.3-master

 5. A 

Re: [PHP-DEV] Adopt GitFlow process

2012-03-25 Thread Stas Malyshev
Hi!

 Main problem is that our current workflow doesn't allow branch-only
 changes. I.e. if you make a bugfix and want to stay it in PHP-5.3 only
 you can't merge 5.3 with 5.4 anymore, otherwise your bugfix will go
 there.

Why would you want a bugfix to be in 5.3 but not in 5.4? Can you give an
example?
I can see it if the code had substantial change there so bugfix no
longer applies. In this case, I would try the merge, see it fail and
resolve it as all ours. It shouldn't take longer than 10 mins. Though
it you have ideas how to improve that without disrupting the rest of the
process and the common use case, you are welcome.

 1) use cherry-picking in one repo. This has big downside (as dsp
 pointed) that we can't use git annotate, bisect and other commands
 assuming that commit is introduced in repository only once.

bisect is a bit weird now btw, since it seems to be a bit confused by
5.3-5.4 merge that happened not when it thinks it did - so if you try to
bisect changes in 5.4 branch only, you will get some very old changes
in. You can quickly go through that, marking them as good, but still not
ideal situation.

 Okay, since I'm not too familiar with release process, assume
 following (please, correct me if I'm wrong):
 * PHP 5.3 can't have features, only bugfixes

True.

 * PHP 5.3 can have bugfixes that are merged upstream (PHP-5.4 and
 master) and bugfixes that should stay only in PHP-5.3

Not entirely true - 5.3 code can have bugfixes that aren't merged up,
but that would not be the common case. Example - bugfix regarding magic
quotes or safe mode, which are not in 5.4.

 * PHP-5.4 and master can have bugfixes and features that are merged
 upstream (master) and bugfixes/features that should stay only in
 current branch

5.4-only fixes very unlikely, as master and 5.4 are very close today. If
we ever do big changes in master this is a possibility, as described
above, but still won't be a common case - unless we rewrite our engine
completely, which doesn't seem to be likely.

 * All branches are have regular releases

True, except for master.

 In gitflow you have 4 branches:
 * master - contains only production ready releases, nobody commits here 
 directly
 * develop - main development branch, all work usually is get merged here
 * feature/name - feature/bugfix branches for separate bugfixes and
 features. Merged into develop.
 * hotfix/name - same that feature branches but is urgent and is
 always merged into master *and* develop. For example, when security
 release is issued, this fix should go into release and into main
 development branch.
 * release/name - pre-release stability branches, for bug-fixes only.
 Merged into develop and master (making a new release). When you have a
 release branch, you can't commit into develop (so hotfixes go here
 too, if we have release branch).

I don't like that can't commit into thing - the main advantage of git
as I see it that you can manage release branch and dev/stable branches
separately and not have the situation of asking people to sit on their
code for 2 months while release is being stabilized.

 Make a bugfix in 5.3
 $ git flow feature start bugfix PHP-5.3 # create a bugfix branch based on 5.3
 $ git flow feature finish -k bugfix 5.3-develop
 Bugfix get merged into 5.3-develop - this should be implemented since
 gitflow supports only 1 develop branch for now. -k says to keep branch
 after finish, since we'll need it to merge upstream

Why would we need bugfix branch in our repo here? I would say keep it in
your own fork, test it, show it off, get it ready - then merge it into
php repo. What is the reason for us to keep halfbaked fix branches in
our repo?

 Merge bugfix from 5.3 repo to 5.4
 First, rebase branch against 5.4
 $ git rebase --onto develop-5.4 bugfix~num bugfix
 Where num is number of commits in your branch. I know it sucks, but
 that's how it works :)

I don't like it. Too fragile and too easy to mess up.

In general, this scheme seems quite complex and I don't really see what
the benefit of it would be. Could you explain why would we want to do this?
-- 
Stanislav Malyshev, Software Architect
SugarCRM: http://www.sugarcrm.com/
(408)454-6900 ext. 227

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php