Commit cd74f9da91cb1b798a8654f725b502bac256228d
1 parent
78d620b3
Exists in
master
and in
4 other branches
Link for auto merge, db field for MR
Showing
5 changed files
with
61 additions
and
25 deletions
Show diff stats
app/controllers/merge_requests_controller.rb
@@ -96,19 +96,24 @@ class MergeRequestsController < ApplicationController | @@ -96,19 +96,24 @@ class MergeRequestsController < ApplicationController | ||
96 | end | 96 | end |
97 | 97 | ||
98 | def automerge | 98 | def automerge |
99 | + render_404 unless @merge_request.open? | ||
100 | + | ||
99 | message = "" | 101 | message = "" |
102 | + | ||
100 | if GitlabMerge.new(@merge_request).merge | 103 | if GitlabMerge.new(@merge_request).merge |
101 | - @merge_request.update_attributes( | ||
102 | - :author_id_of_changes => current_user.id, | ||
103 | - :closed => true | ||
104 | - ) | ||
105 | - @merge_request.reload_code | 104 | + @merge_request.merge!(current_user.id) |
106 | message = "Successfully merged" | 105 | message = "Successfully merged" |
107 | else | 106 | else |
107 | + @merge_request.mark_as_unmergable | ||
108 | message = "Can not be merged" | 108 | message = "Can not be merged" |
109 | end | 109 | end |
110 | 110 | ||
111 | redirect_to [@merge_request.project, @merge_request], :alert => message | 111 | redirect_to [@merge_request.project, @merge_request], :alert => message |
112 | + rescue => ex | ||
113 | + @merge_request.mark_as_unmergable | ||
114 | + message = "Can not be merged" | ||
115 | + ensure | ||
116 | + redirect_to [@merge_request.project, @merge_request], :alert => message | ||
112 | end | 117 | end |
113 | 118 | ||
114 | def destroy | 119 | def destroy |
app/models/merge_request.rb
@@ -56,6 +56,10 @@ class MergeRequest < ActiveRecord::Base | @@ -56,6 +56,10 @@ class MergeRequest < ActiveRecord::Base | ||
56 | self.reloaded_diffs | 56 | self.reloaded_diffs |
57 | end | 57 | end |
58 | 58 | ||
59 | + def can_be_merged? | ||
60 | + auto_merge | ||
61 | + end | ||
62 | + | ||
59 | def new? | 63 | def new? |
60 | today? && created_at == updated_at | 64 | today? && created_at == updated_at |
61 | end | 65 | end |
@@ -118,6 +122,11 @@ class MergeRequest < ActiveRecord::Base | @@ -118,6 +122,11 @@ class MergeRequest < ActiveRecord::Base | ||
118 | save | 122 | save |
119 | end | 123 | end |
120 | 124 | ||
125 | + def mark_as_unmergable | ||
126 | + self.auto_merge = false | ||
127 | + save | ||
128 | + end | ||
129 | + | ||
121 | def reloaded_commits | 130 | def reloaded_commits |
122 | if open? && unmerged_commits.any? | 131 | if open? && unmerged_commits.any? |
123 | self.st_commits = unmerged_commits | 132 | self.st_commits = unmerged_commits |
app/views/merge_requests/show.html.haml
@@ -8,7 +8,6 @@ | @@ -8,7 +8,6 @@ | ||
8 | %span.right | 8 | %span.right |
9 | - if can?(current_user, :modify_merge_request, @merge_request) | 9 | - if can?(current_user, :modify_merge_request, @merge_request) |
10 | - if @merge_request.open? | 10 | - if @merge_request.open? |
11 | - = link_to "Show how to merge", "#", :class => "how_to_merge_link btn small padded", :title => "How To Merge" | ||
12 | = link_to 'Close', project_merge_request_path(@project, @merge_request, :merge_request => {:closed => true }, :status_only => true), :method => :put, :class => "btn small padded", :title => "Close merge request" | 11 | = link_to 'Close', project_merge_request_path(@project, @merge_request, :merge_request => {:closed => true }, :status_only => true), :method => :put, :class => "btn small padded", :title => "Close merge request" |
13 | = link_to edit_project_merge_request_path(@project, @merge_request), :class => "btn small padded" do | 12 | = link_to edit_project_merge_request_path(@project, @merge_request), :class => "btn small padded" do |
14 | Edit | 13 | Edit |
@@ -53,6 +52,22 @@ | @@ -53,6 +52,22 @@ | ||
53 | Closed by #{@merge_request.closed_event.author_name} | 52 | Closed by #{@merge_request.closed_event.author_name} |
54 | %small #{time_ago_in_words(@merge_request.closed_event.created_at)} ago. | 53 | %small #{time_ago_in_words(@merge_request.closed_event.created_at)} ago. |
55 | 54 | ||
55 | +- if @merge_request.open? && @commits.any? | ||
56 | + - if @merge_request.can_be_merged? | ||
57 | + .alert-message.block-message.success | ||
58 | + %p You can try to merge this request with GitLab. If failed you can always do it manually | ||
59 | + .alert-actions | ||
60 | + = link_to "Try Merge it!", automerge_project_merge_request_path(@project, @merge_request), :class => "btn small success" | ||
61 | + | ||
62 | + = link_to "Show how to merge", "#", :class => "how_to_merge_link btn small padded", :title => "How To Merge" | ||
63 | + - else | ||
64 | + .alert-message.block-message | ||
65 | + %p This request cant be merged with GitLab. You should do it manually | ||
66 | + .alert-actions | ||
67 | + %span.btn.small.disabled Try Merge it! | ||
68 | + = link_to "Show how to merge", "#", :class => "how_to_merge_link btn small padded success", :title => "How To Merge" | ||
69 | + | ||
70 | + | ||
56 | = render "merge_requests/commits" | 71 | = render "merge_requests/commits" |
57 | 72 | ||
58 | - unless @commits.empty? | 73 | - unless @commits.empty? |
db/migrate/20120329170745_add_automerge_to_merge_request.rb
0 → 100644
db/schema.rb
@@ -11,7 +11,7 @@ | @@ -11,7 +11,7 @@ | ||
11 | # | 11 | # |
12 | # It's strongly recommended to check this file into your version control system. | 12 | # It's strongly recommended to check this file into your version control system. |
13 | 13 | ||
14 | -ActiveRecord::Schema.define(:version => 20120323221339) do | 14 | +ActiveRecord::Schema.define(:version => 20120329170745) do |
15 | 15 | ||
16 | create_table "events", :force => true do |t| | 16 | create_table "events", :force => true do |t| |
17 | t.string "target_type" | 17 | t.string "target_type" |
@@ -30,8 +30,8 @@ ActiveRecord::Schema.define(:version => 20120323221339) do | @@ -30,8 +30,8 @@ ActiveRecord::Schema.define(:version => 20120323221339) do | ||
30 | t.integer "assignee_id" | 30 | t.integer "assignee_id" |
31 | t.integer "author_id" | 31 | t.integer "author_id" |
32 | t.integer "project_id" | 32 | t.integer "project_id" |
33 | - t.datetime "created_at" | ||
34 | - t.datetime "updated_at" | 33 | + t.datetime "created_at", :null => false |
34 | + t.datetime "updated_at", :null => false | ||
35 | t.boolean "closed", :default => false, :null => false | 35 | t.boolean "closed", :default => false, :null => false |
36 | t.integer "position", :default => 0 | 36 | t.integer "position", :default => 0 |
37 | t.boolean "critical", :default => false, :null => false | 37 | t.boolean "critical", :default => false, :null => false |
@@ -43,8 +43,8 @@ ActiveRecord::Schema.define(:version => 20120323221339) do | @@ -43,8 +43,8 @@ ActiveRecord::Schema.define(:version => 20120323221339) do | ||
43 | 43 | ||
44 | create_table "keys", :force => true do |t| | 44 | create_table "keys", :force => true do |t| |
45 | t.integer "user_id" | 45 | t.integer "user_id" |
46 | - t.datetime "created_at" | ||
47 | - t.datetime "updated_at" | 46 | + t.datetime "created_at", :null => false |
47 | + t.datetime "updated_at", :null => false | ||
48 | t.text "key" | 48 | t.text "key" |
49 | t.string "title" | 49 | t.string "title" |
50 | t.string "identifier" | 50 | t.string "identifier" |
@@ -59,11 +59,12 @@ ActiveRecord::Schema.define(:version => 20120323221339) do | @@ -59,11 +59,12 @@ ActiveRecord::Schema.define(:version => 20120323221339) do | ||
59 | t.integer "assignee_id" | 59 | t.integer "assignee_id" |
60 | t.string "title" | 60 | t.string "title" |
61 | t.boolean "closed", :default => false, :null => false | 61 | t.boolean "closed", :default => false, :null => false |
62 | - t.datetime "created_at" | ||
63 | - t.datetime "updated_at" | 62 | + t.datetime "created_at", :null => false |
63 | + t.datetime "updated_at", :null => false | ||
64 | t.text "st_commits" | 64 | t.text "st_commits" |
65 | t.text "st_diffs" | 65 | t.text "st_diffs" |
66 | t.boolean "merged", :default => false, :null => false | 66 | t.boolean "merged", :default => false, :null => false |
67 | + t.boolean "auto_merge", :default => true, :null => false | ||
67 | end | 68 | end |
68 | 69 | ||
69 | add_index "merge_requests", ["project_id"], :name => "index_merge_requests_on_project_id" | 70 | add_index "merge_requests", ["project_id"], :name => "index_merge_requests_on_project_id" |
@@ -73,8 +74,8 @@ ActiveRecord::Schema.define(:version => 20120323221339) do | @@ -73,8 +74,8 @@ ActiveRecord::Schema.define(:version => 20120323221339) do | ||
73 | t.string "noteable_id" | 74 | t.string "noteable_id" |
74 | t.string "noteable_type" | 75 | t.string "noteable_type" |
75 | t.integer "author_id" | 76 | t.integer "author_id" |
76 | - t.datetime "created_at" | ||
77 | - t.datetime "updated_at" | 77 | + t.datetime "created_at", :null => false |
78 | + t.datetime "updated_at", :null => false | ||
78 | t.integer "project_id" | 79 | t.integer "project_id" |
79 | t.string "attachment" | 80 | t.string "attachment" |
80 | t.string "line_code" | 81 | t.string "line_code" |
@@ -87,8 +88,8 @@ ActiveRecord::Schema.define(:version => 20120323221339) do | @@ -87,8 +88,8 @@ ActiveRecord::Schema.define(:version => 20120323221339) do | ||
87 | t.string "name" | 88 | t.string "name" |
88 | t.string "path" | 89 | t.string "path" |
89 | t.text "description" | 90 | t.text "description" |
90 | - t.datetime "created_at" | ||
91 | - t.datetime "updated_at" | 91 | + t.datetime "created_at", :null => false |
92 | + t.datetime "updated_at", :null => false | ||
92 | t.boolean "private_flag", :default => true, :null => false | 93 | t.boolean "private_flag", :default => true, :null => false |
93 | t.string "code" | 94 | t.string "code" |
94 | t.integer "owner_id" | 95 | t.integer "owner_id" |
@@ -111,8 +112,8 @@ ActiveRecord::Schema.define(:version => 20120323221339) do | @@ -111,8 +112,8 @@ ActiveRecord::Schema.define(:version => 20120323221339) do | ||
111 | t.text "content" | 112 | t.text "content" |
112 | t.integer "author_id", :null => false | 113 | t.integer "author_id", :null => false |
113 | t.integer "project_id", :null => false | 114 | t.integer "project_id", :null => false |
114 | - t.datetime "created_at" | ||
115 | - t.datetime "updated_at" | 115 | + t.datetime "created_at", :null => false |
116 | + t.datetime "updated_at", :null => false | ||
116 | t.string "file_name" | 117 | t.string "file_name" |
117 | t.datetime "expires_at" | 118 | t.datetime "expires_at" |
118 | end | 119 | end |
@@ -145,8 +146,8 @@ ActiveRecord::Schema.define(:version => 20120323221339) do | @@ -145,8 +146,8 @@ ActiveRecord::Schema.define(:version => 20120323221339) do | ||
145 | t.datetime "last_sign_in_at" | 146 | t.datetime "last_sign_in_at" |
146 | t.string "current_sign_in_ip" | 147 | t.string "current_sign_in_ip" |
147 | t.string "last_sign_in_ip" | 148 | t.string "last_sign_in_ip" |
148 | - t.datetime "created_at" | ||
149 | - t.datetime "updated_at" | 149 | + t.datetime "created_at", :null => false |
150 | + t.datetime "updated_at", :null => false | ||
150 | t.string "name" | 151 | t.string "name" |
151 | t.boolean "admin", :default => false, :null => false | 152 | t.boolean "admin", :default => false, :null => false |
152 | t.integer "projects_limit", :default => 10 | 153 | t.integer "projects_limit", :default => 10 |
@@ -165,16 +166,16 @@ ActiveRecord::Schema.define(:version => 20120323221339) do | @@ -165,16 +166,16 @@ ActiveRecord::Schema.define(:version => 20120323221339) do | ||
165 | create_table "users_projects", :force => true do |t| | 166 | create_table "users_projects", :force => true do |t| |
166 | t.integer "user_id", :null => false | 167 | t.integer "user_id", :null => false |
167 | t.integer "project_id", :null => false | 168 | t.integer "project_id", :null => false |
168 | - t.datetime "created_at" | ||
169 | - t.datetime "updated_at" | 169 | + t.datetime "created_at", :null => false |
170 | + t.datetime "updated_at", :null => false | ||
170 | t.integer "project_access", :default => 0, :null => false | 171 | t.integer "project_access", :default => 0, :null => false |
171 | end | 172 | end |
172 | 173 | ||
173 | create_table "web_hooks", :force => true do |t| | 174 | create_table "web_hooks", :force => true do |t| |
174 | t.string "url" | 175 | t.string "url" |
175 | t.integer "project_id" | 176 | t.integer "project_id" |
176 | - t.datetime "created_at" | ||
177 | - t.datetime "updated_at" | 177 | + t.datetime "created_at", :null => false |
178 | + t.datetime "updated_at", :null => false | ||
178 | end | 179 | end |
179 | 180 | ||
180 | create_table "wikis", :force => true do |t| | 181 | create_table "wikis", :force => true do |t| |