Commit 90748cf724d4b019c954d316621b04cefd69dbaf

Authored by Dmitriy Zaporozhets
1 parent 464cd59d

Merge Button v1 complete

app/controllers/merge_requests_controller.rb
@@ -102,6 +102,7 @@ class MergeRequestsController < ApplicationController @@ -102,6 +102,7 @@ class MergeRequestsController < ApplicationController
102 102
103 def automerge 103 def automerge
104 render_404 unless @merge_request.open? && @merge_request.can_be_merged? 104 render_404 unless @merge_request.open? && @merge_request.can_be_merged?
  105 + return access_denied! unless can?(current_user, :accept_mr, @project)
105 @merge_request.automerge!(current_user) 106 @merge_request.automerge!(current_user)
106 end 107 end
107 108
app/models/ability.rb
@@ -46,6 +46,7 @@ class Ability @@ -46,6 +46,7 @@ class Ability
46 :admin_team_member, 46 :admin_team_member,
47 :admin_merge_request, 47 :admin_merge_request,
48 :admin_note, 48 :admin_note,
  49 + :accept_mr,
49 :admin_wiki 50 :admin_wiki
50 ] if project.master_access_for?(user) || project.owner == user 51 ] if project.master_access_for?(user) || project.owner == user
51 52
app/models/merge_request.rb
@@ -73,7 +73,7 @@ class MergeRequest < ActiveRecord::Base @@ -73,7 +73,7 @@ class MergeRequest < ActiveRecord::Base
73 end 73 end
74 74
75 def check_if_can_be_merged 75 def check_if_can_be_merged
76 - self.state = if GitlabMerge.new(self).can_be_merged? 76 + self.state = if GitlabMerge.new(self, self.author).can_be_merged?
77 CAN_BE_MERGED 77 CAN_BE_MERGED
78 else 78 else
79 CANNOT_BE_MERGED 79 CANNOT_BE_MERGED
@@ -175,7 +175,7 @@ class MergeRequest < ActiveRecord::Base @@ -175,7 +175,7 @@ class MergeRequest < ActiveRecord::Base
175 end 175 end
176 176
177 def automerge!(current_user) 177 def automerge!(current_user)
178 - if GitlabMerge.new(self).merge 178 + if GitlabMerge.new(self, current_user).merge
179 self.merge!(current_user.id) 179 self.merge!(current_user.id)
180 true 180 true
181 end 181 end
app/views/merge_requests/show.html.haml
@@ -52,7 +52,8 @@ @@ -52,7 +52,8 @@
52 Closed by #{@merge_request.closed_event.author_name} 52 Closed by #{@merge_request.closed_event.author_name}
53 %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.
54 54
55 -- if @merge_request.open? && @commits.any? 55 +
  56 +- if @merge_request.open? && @commits.any? && can?(current_user, :accept_mr, @project)
56 - if @merge_request.can_be_merged? 57 - if @merge_request.can_be_merged?
57 .ui-box.padded 58 .ui-box.padded
58 %p 59 %p
@@ -30,8 +30,8 @@ ActiveRecord::Schema.define(:version => 20120329170745) do @@ -30,8 +30,8 @@ ActiveRecord::Schema.define(:version => 20120329170745) 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 => 20120329170745) do @@ -43,8 +43,8 @@ ActiveRecord::Schema.define(:version => 20120329170745) 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,12 +59,12 @@ ActiveRecord::Schema.define(:version => 20120329170745) do @@ -59,12 +59,12 @@ ActiveRecord::Schema.define(:version => 20120329170745) 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.integer "state", :default => 1, :null => false 67 + t.boolean "auto_merge", :default => true, :null => false
68 end 68 end
69 69
70 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"
@@ -74,8 +74,8 @@ ActiveRecord::Schema.define(:version => 20120329170745) do @@ -74,8 +74,8 @@ ActiveRecord::Schema.define(:version => 20120329170745) do
74 t.string "noteable_id" 74 t.string "noteable_id"
75 t.string "noteable_type" 75 t.string "noteable_type"
76 t.integer "author_id" 76 t.integer "author_id"
77 - t.datetime "created_at"  
78 - t.datetime "updated_at" 77 + t.datetime "created_at", :null => false
  78 + t.datetime "updated_at", :null => false
79 t.integer "project_id" 79 t.integer "project_id"
80 t.string "attachment" 80 t.string "attachment"
81 t.string "line_code" 81 t.string "line_code"
@@ -88,8 +88,8 @@ ActiveRecord::Schema.define(:version => 20120329170745) do @@ -88,8 +88,8 @@ ActiveRecord::Schema.define(:version => 20120329170745) do
88 t.string "name" 88 t.string "name"
89 t.string "path" 89 t.string "path"
90 t.text "description" 90 t.text "description"
91 - t.datetime "created_at"  
92 - t.datetime "updated_at" 91 + t.datetime "created_at", :null => false
  92 + t.datetime "updated_at", :null => false
93 t.boolean "private_flag", :default => true, :null => false 93 t.boolean "private_flag", :default => true, :null => false
94 t.string "code" 94 t.string "code"
95 t.integer "owner_id" 95 t.integer "owner_id"
@@ -112,8 +112,8 @@ ActiveRecord::Schema.define(:version => 20120329170745) do @@ -112,8 +112,8 @@ ActiveRecord::Schema.define(:version => 20120329170745) do
112 t.text "content" 112 t.text "content"
113 t.integer "author_id", :null => false 113 t.integer "author_id", :null => false
114 t.integer "project_id", :null => false 114 t.integer "project_id", :null => false
115 - t.datetime "created_at"  
116 - t.datetime "updated_at" 115 + t.datetime "created_at", :null => false
  116 + t.datetime "updated_at", :null => false
117 t.string "file_name" 117 t.string "file_name"
118 t.datetime "expires_at" 118 t.datetime "expires_at"
119 end 119 end
@@ -146,8 +146,8 @@ ActiveRecord::Schema.define(:version => 20120329170745) do @@ -146,8 +146,8 @@ ActiveRecord::Schema.define(:version => 20120329170745) do
146 t.datetime "last_sign_in_at" 146 t.datetime "last_sign_in_at"
147 t.string "current_sign_in_ip" 147 t.string "current_sign_in_ip"
148 t.string "last_sign_in_ip" 148 t.string "last_sign_in_ip"
149 - t.datetime "created_at"  
150 - t.datetime "updated_at" 149 + t.datetime "created_at", :null => false
  150 + t.datetime "updated_at", :null => false
151 t.string "name" 151 t.string "name"
152 t.boolean "admin", :default => false, :null => false 152 t.boolean "admin", :default => false, :null => false
153 t.integer "projects_limit", :default => 10 153 t.integer "projects_limit", :default => 10
@@ -166,16 +166,16 @@ ActiveRecord::Schema.define(:version => 20120329170745) do @@ -166,16 +166,16 @@ ActiveRecord::Schema.define(:version => 20120329170745) do
166 create_table "users_projects", :force => true do |t| 166 create_table "users_projects", :force => true do |t|
167 t.integer "user_id", :null => false 167 t.integer "user_id", :null => false
168 t.integer "project_id", :null => false 168 t.integer "project_id", :null => false
169 - t.datetime "created_at"  
170 - t.datetime "updated_at" 169 + t.datetime "created_at", :null => false
  170 + t.datetime "updated_at", :null => false
171 t.integer "project_access", :default => 0, :null => false 171 t.integer "project_access", :default => 0, :null => false
172 end 172 end
173 173
174 create_table "web_hooks", :force => true do |t| 174 create_table "web_hooks", :force => true do |t|
175 t.string "url" 175 t.string "url"
176 t.integer "project_id" 176 t.integer "project_id"
177 - t.datetime "created_at"  
178 - t.datetime "updated_at" 177 + t.datetime "created_at", :null => false
  178 + t.datetime "updated_at", :null => false
179 end 179 end
180 180
181 create_table "wikis", :force => true do |t| 181 create_table "wikis", :force => true do |t|
lib/gitlab_merge.rb
1 class GitlabMerge 1 class GitlabMerge
2 - attr_accessor :project, :merge_path, :merge_request 2 + attr_accessor :project, :merge_path, :merge_request, :user
3 3
4 - def initialize(merge_request) 4 + def initialize(merge_request, user)
  5 + self.user = user
5 self.merge_request = merge_request 6 self.merge_request = merge_request
6 self.project = merge_request.project 7 self.project = merge_request.project
7 self.merge_path = File.join(Rails.root, "tmp", "merge_repo", project.path, merge_request.id.to_s) 8 self.merge_path = File.join(Rails.root, "tmp", "merge_repo", project.path, merge_request.id.to_s)
@@ -30,7 +31,9 @@ class GitlabMerge @@ -30,7 +31,9 @@ class GitlabMerge
30 self.project.repo.git.clone({:branch => merge_request.target_branch}, project.url_to_repo, merge_path) 31 self.project.repo.git.clone({:branch => merge_request.target_branch}, project.url_to_repo, merge_path)
31 Dir.chdir(merge_path) do 32 Dir.chdir(merge_path) do
32 merge_repo = Grit::Repo.new('.') 33 merge_repo = Grit::Repo.new('.')
33 - output = merge_repo.git.pull({}, "origin", merge_request.source_branch) 34 + merge_repo.git.sh "git config user.name \"#{user.name}\""
  35 + merge_repo.git.sh "git config user.email \"#{user.email}\""
  36 + output = merge_repo.git.pull({}, "--no-ff", "origin", merge_request.source_branch)
34 yield(merge_repo, output) 37 yield(merge_repo, output)
35 end 38 end
36 end 39 end