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 96 end
97 97  
98 98 def automerge
  99 + render_404 unless @merge_request.open?
  100 +
99 101 message = ""
  102 +
100 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 105 message = "Successfully merged"
107 106 else
  107 + @merge_request.mark_as_unmergable
108 108 message = "Can not be merged"
109 109 end
110 110  
111 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 117 end
113 118  
114 119 def destroy
... ...
app/models/merge_request.rb
... ... @@ -56,6 +56,10 @@ class MergeRequest < ActiveRecord::Base
56 56 self.reloaded_diffs
57 57 end
58 58  
  59 + def can_be_merged?
  60 + auto_merge
  61 + end
  62 +
59 63 def new?
60 64 today? && created_at == updated_at
61 65 end
... ... @@ -118,6 +122,11 @@ class MergeRequest < ActiveRecord::Base
118 122 save
119 123 end
120 124  
  125 + def mark_as_unmergable
  126 + self.auto_merge = false
  127 + save
  128 + end
  129 +
121 130 def reloaded_commits
122 131 if open? && unmerged_commits.any?
123 132 self.st_commits = unmerged_commits
... ...
app/views/merge_requests/show.html.haml
... ... @@ -8,7 +8,6 @@
8 8 %span.right
9 9 - if can?(current_user, :modify_merge_request, @merge_request)
10 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 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 12 = link_to edit_project_merge_request_path(@project, @merge_request), :class => "btn small padded" do
14 13 Edit
... ... @@ -53,6 +52,22 @@
53 52 Closed by #{@merge_request.closed_event.author_name}
54 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 71 = render "merge_requests/commits"
57 72  
58 73 - unless @commits.empty?
... ...
db/migrate/20120329170745_add_automerge_to_merge_request.rb 0 → 100644
... ... @@ -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
... ...
db/schema.rb
... ... @@ -11,7 +11,7 @@
11 11 #
12 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 16 create_table "events", :force => true do |t|
17 17 t.string "target_type"
... ... @@ -30,8 +30,8 @@ ActiveRecord::Schema.define(:version =&gt; 20120323221339) do
30 30 t.integer "assignee_id"
31 31 t.integer "author_id"
32 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 35 t.boolean "closed", :default => false, :null => false
36 36 t.integer "position", :default => 0
37 37 t.boolean "critical", :default => false, :null => false
... ... @@ -43,8 +43,8 @@ ActiveRecord::Schema.define(:version =&gt; 20120323221339) do
43 43  
44 44 create_table "keys", :force => true do |t|
45 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 48 t.text "key"
49 49 t.string "title"
50 50 t.string "identifier"
... ... @@ -59,11 +59,12 @@ ActiveRecord::Schema.define(:version =&gt; 20120323221339) do
59 59 t.integer "assignee_id"
60 60 t.string "title"
61 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 64 t.text "st_commits"
65 65 t.text "st_diffs"
66 66 t.boolean "merged", :default => false, :null => false
  67 + t.boolean "auto_merge", :default => true, :null => false
67 68 end
68 69  
69 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 74 t.string "noteable_id"
74 75 t.string "noteable_type"
75 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 79 t.integer "project_id"
79 80 t.string "attachment"
80 81 t.string "line_code"
... ... @@ -87,8 +88,8 @@ ActiveRecord::Schema.define(:version =&gt; 20120323221339) do
87 88 t.string "name"
88 89 t.string "path"
89 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 93 t.boolean "private_flag", :default => true, :null => false
93 94 t.string "code"
94 95 t.integer "owner_id"
... ... @@ -111,8 +112,8 @@ ActiveRecord::Schema.define(:version =&gt; 20120323221339) do
111 112 t.text "content"
112 113 t.integer "author_id", :null => false
113 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 117 t.string "file_name"
117 118 t.datetime "expires_at"
118 119 end
... ... @@ -145,8 +146,8 @@ ActiveRecord::Schema.define(:version =&gt; 20120323221339) do
145 146 t.datetime "last_sign_in_at"
146 147 t.string "current_sign_in_ip"
147 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 151 t.string "name"
151 152 t.boolean "admin", :default => false, :null => false
152 153 t.integer "projects_limit", :default => 10
... ... @@ -165,16 +166,16 @@ ActiveRecord::Schema.define(:version =&gt; 20120323221339) do
165 166 create_table "users_projects", :force => true do |t|
166 167 t.integer "user_id", :null => false
167 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 171 t.integer "project_access", :default => 0, :null => false
171 172 end
172 173  
173 174 create_table "web_hooks", :force => true do |t|
174 175 t.string "url"
175 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 179 end
179 180  
180 181 create_table "wikis", :force => true do |t|
... ...