Commit cd74f9da91cb1b798a8654f725b502bac256228d

Authored by Dmitriy Zaporozhets
1 parent 78d620b3

Link for auto merge, db field for MR

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
@@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
  1 +class AddAutomergeToMergeRequest < ActiveRecord::Migration
  2 + def change
  3 + add_column :merge_requests, :auto_merge, :boolean, :null => false, :default => true
  4 +
  5 + end
  6 +end
@@ -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 =&gt; 20120323221339) do @@ -30,8 +30,8 @@ ActiveRecord::Schema.define(:version =&gt; 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 =&gt; 20120323221339) do @@ -43,8 +43,8 @@ ActiveRecord::Schema.define(:version =&gt; 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 =&gt; 20120323221339) do @@ -59,11 +59,12 @@ ActiveRecord::Schema.define(:version =&gt; 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 =&gt; 20120323221339) do @@ -73,8 +74,8 @@ ActiveRecord::Schema.define(:version =&gt; 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 =&gt; 20120323221339) do @@ -87,8 +88,8 @@ ActiveRecord::Schema.define(:version =&gt; 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 =&gt; 20120323221339) do @@ -111,8 +112,8 @@ ActiveRecord::Schema.define(:version =&gt; 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 =&gt; 20120323221339) do @@ -145,8 +146,8 @@ ActiveRecord::Schema.define(:version =&gt; 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 =&gt; 20120323221339) do @@ -165,16 +166,16 @@ ActiveRecord::Schema.define(:version =&gt; 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|