forked from reenhanced/gitreflow
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Issue reenhanced#149] Fix for PR ending as "Closed" instead of "Merg…
…ed" - Calling Github API to Squash Merge the PR as opposed doing it manually
- Loading branch information
1 parent
7925721
commit 18d6d36
Showing
11 changed files
with
252 additions
and
284 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -205,45 +205,32 @@ You kick butt. You've got your code reviewed and now you're ready to merge it do | |
Reflow's +deliver+ requires you to have a pull request, so you'll be protected on those mornings when the coffee isn't working yet. | ||
We built this <b>to get in your way and make you follow the process</b>. If you don't like it, do it by hand. You already know what you're doing. | ||
|
||
You'll be presented with a prefilled commit message based on the body of your pull request which includes the text <code>Closes #XX</code> that will automatically close the associated pull request on github when deliver completes. | ||
You'll be presented with a prefilled commit message based on the body of your pull request with references to the pull request and reviewers. | ||
|
||
Make a mistake and deliver too early? It happens. You'll be prompted after you edit your commit message if you want to push your updated +master+ to github. If you answer 'n', then you'll want to do <code>git reset --hard origin/master</code> and checkout your branch again. | ||
Want to clean up your feature branch afterwards? You'll be prompted after you edit your commit message if you want to clean up your +feature_branch+ on github. If you answer 'n', then your feature_branch will exist for you to clean it up later. | ||
|
||
This is what it looks like: | ||
|
||
$ git reflow deliver | ||
From github.com:reenhanced/gitreflow | ||
* branch master -> FETCH_HEAD | ||
Merging pull request #36: 'Enforce at least one LGTM before delivery', from 'reenhanced:nh-fail-without-lgtm' into 'reenhanced:master' | ||
Switched to branch 'master' | ||
From github.com:reenhanced/gitreflow | ||
Merging pull request #36: 'test-a-a', from 'simonzhu24:test-a-a' into 'simonzhu24:master' | ||
#<Net::HTTPOK 200 OK readbody=true> | ||
|
||
[success] Pull Request successfully merged. | ||
Would you like to cleanup your feature branch? Y | ||
git pull origin master | ||
remote: Counting objects: 1, done. | ||
remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 | ||
Unpacking objects: 100% (1/1), done. | ||
From https://github.com/simonzhu24/test | ||
* branch master -> FETCH_HEAD | ||
Already up-to-date. | ||
Switched to branch 'nh-fail-without-lgtm' | ||
Switched to branch 'master' | ||
Updating c2ec1b1..f90e111 | ||
Fast-forward | ||
Squash commit -- not updating HEAD | ||
lib/git_reflow.rb | 71 +++++++++++++++++++++++++++---------------------------- | ||
1 file changed, 35 insertions(+), 36 deletions(-) | ||
[master d1b4dd5] Enforces LGTM before deliver, even with no comments. | ||
1 file changed, 35 insertions(+), 36 deletions(-) | ||
Merge complete! | ||
Would you like to push this branch to your remote repo and cleanup your feature branch? y | ||
Counting objects: 7, done. | ||
Delta compression using up to 16 threads. | ||
Compressing objects: 100% (4/4), done. | ||
Writing objects: 100% (4/4), 1.38 KiB, done. | ||
Total 4 (delta 2), reused 0 (delta 0) | ||
To [email protected]:reenhanced/gitreflow.git | ||
c2ec1b1..d1b4dd5 master -> master | ||
|
||
To [email protected]:reenhanced/gitreflow.git | ||
- [deleted] nh-fail-without-lgtm | ||
|
||
Deleted branch nh-fail-without-lgtm (was f90e111). | ||
a549abf..4f089a9 master -> origin/master | ||
Merge made by the 'recursive' strategy. | ||
git branch -D test-a-a | ||
error: Cannot delete the branch 'test-a-a' which you are currently on. | ||
|
||
Nice job buddy. | ||
This is what the default commit message looks like: | ||
|
||
This is what the default commit message looks like: | ||
Enforces LGTM before deliver, even with no comments. | ||
Removes the need to review the pull request yourself if you make a | ||
comment. | ||
|
@@ -274,29 +261,42 @@ This is what we do behind the scenes when you do +deliver+ | |
|
||
If not, show a list of authors that need to provide a +LGTM+. | ||
|
||
If the review is done, it's time to merge. Here's what happens: | ||
* If the review is done, it's time to merge. Here's what happens: | ||
|
||
First, update our local +master+ so we don't get conflicts | ||
git checkout master | ||
git pull origin master | ||
First, we use the github_api gem to merge the pull request. | ||
|
||
Next, squash merge our feature branch | ||
git merge --squash nh-branch-name | ||
|
||
Now, we'll apply a little magic so we have a great commit message by default. Your editor will open and you'll see a nice default for your commit message based on the pull request body. | ||
We call the public API for: | ||
|
||
Once you've saved the commit, prompt the user to see if we should continue | ||
Merge complete! | ||
Would you like to push this branch to your remote repo and cleanup your feature branch? | ||
github.pull_requests.merge 'user-name', 'repo-name', 'number', payload | ||
|
||
Please take a look at lib/git_reflow/git_server/git_hub/pull_request.rb:102-107 for an example of the call. | ||
This call makes an HTTP request using the Github API to merge the available pull request passing in the user name, repository name, pull request number, and some additional data in the payload. | ||
|
||
The payload contains data in the following format: | ||
|
||
data = { | ||
"commit_title", | ||
"commit_message", | ||
"sha", | ||
"squash" | ||
} | ||
|
||
Notice "squash" is set to true, meaning that we will do a squash-merge for each pull request. | ||
|
||
For more detailed documentation, please read: https://github.com/piotrmurach/github/blob/master/lib/github_api/client/pull_requests.rb#L197 | ||
|
||
* Next, we prompt you if you want to deploy and cleanup | ||
Would you like cleanup your feature branch? | ||
|
||
If 'y', then we'll push to +master+ and delete the feature branch | ||
git push origin master | ||
git push origin :nh-branch-name | ||
git branch -D nh-branch-name | ||
If 'y', then we'll update the +base+ and delete the feature branch | ||
|
||
git pull origin #{base_branch} | ||
git push origin :#{feature_branch} | ||
git branch -D #{feature_branch} | ||
|
||
If 'n', then just stop here. The user can reset his local +master+. | ||
If 'n', then just stop here. The user can clean up his branch locally. | ||
|
||
And we're done. | ||
And we're done. | ||
|
||
== Guiding principles: | ||
* Your workflow should resemble the following: | ||
|
@@ -321,22 +321,27 @@ http://reenhanced.com/images/reflow.png | |
|
||
* If you make a new commit in your branch, you require another review. | ||
|
||
* All participants in a pull request must approve the pull request. | ||
If 2 people comment, you need 2 'LGTM's before the code is ready to merge. | ||
* Depending on the minimumApprovals that you specify in your ~/.gitconfig.reflow (created upon reflow setup), you can have the following: | ||
|
||
"" : All participants in a pull request must approve the pull request. | ||
"0": 0 approvals required for you to merge PR. | ||
"1": You need a minimum of 1 LGTM and the last comment on your PR must be an LGTM. | ||
"2": You need a minimum of 2 LGTM and the last comment on your PR must be an LGTM. | ||
... | ||
|
||
* Once approved, your feature branch is squash merged to master. | ||
This makes the history of the master branch extremely clean and easy to follow. | ||
* Once approved, your feature branch is squash merged to your base_branch. | ||
This makes the history of the base_branch branch extremely clean and easy to follow. | ||
|
||
* Git blame becomes your friend. You'll know who to blame and can see the full context of changes. | ||
Squash commits to master mean every commit represents the whole feature, not a "typo fix". | ||
Squash commits to base_branch mean every commit represents the whole feature, not a "typo fix". | ||
|
||
|
||
== Configuration | ||
|
||
In order to streamline delivery you can set the following git config to | ||
always push the branch after merge and clean up the feature branch. | ||
always clean up the feature branch after the PR is merged | ||
|
||
git config --global --add "reflow.always-deploy-and-cleanup" "true" | ||
git config --global --add "reflow.always-cleanup" "true" | ||
|
||
|
||
--- | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -77,7 +77,7 @@ def approvals | |
|
||
approved | ||
end | ||
|
||
end | ||
end | ||
end | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
module GitReflow | ||
module GitServer | ||
class MergeError < StandardError | ||
def initialize(msg="My default message") | ||
super(msg) | ||
end | ||
end | ||
end | ||
end |
Oops, something went wrong.