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 102  
103 103 def automerge
104 104 render_404 unless @merge_request.open? && @merge_request.can_be_merged?
  105 + return access_denied! unless can?(current_user, :accept_mr, @project)
105 106 @merge_request.automerge!(current_user)
106 107 end
107 108  
... ...
app/models/ability.rb
... ... @@ -46,6 +46,7 @@ class Ability
46 46 :admin_team_member,
47 47 :admin_merge_request,
48 48 :admin_note,
  49 + :accept_mr,
49 50 :admin_wiki
50 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 73 end
74 74  
75 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 77 CAN_BE_MERGED
78 78 else
79 79 CANNOT_BE_MERGED
... ... @@ -175,7 +175,7 @@ class MergeRequest < ActiveRecord::Base
175 175 end
176 176  
177 177 def automerge!(current_user)
178   - if GitlabMerge.new(self).merge
  178 + if GitlabMerge.new(self, current_user).merge
179 179 self.merge!(current_user.id)
180 180 true
181 181 end
... ...
app/views/merge_requests/show.html.haml
... ... @@ -52,7 +52,8 @@
52 52 Closed by #{@merge_request.closed_event.author_name}
53 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 57 - if @merge_request.can_be_merged?
57 58 .ui-box.padded
58 59 %p
... ...
db/schema.rb
... ... @@ -30,8 +30,8 @@ ActiveRecord::Schema.define(:version => 20120329170745) 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 => 20120329170745) 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,12 +59,12 @@ ActiveRecord::Schema.define(:version => 20120329170745) 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.integer "state", :default => 1, :null => false
  67 + t.boolean "auto_merge", :default => true, :null => false
68 68 end
69 69  
70 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 74 t.string "noteable_id"
75 75 t.string "noteable_type"
76 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 79 t.integer "project_id"
80 80 t.string "attachment"
81 81 t.string "line_code"
... ... @@ -88,8 +88,8 @@ ActiveRecord::Schema.define(:version => 20120329170745) do
88 88 t.string "name"
89 89 t.string "path"
90 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 93 t.boolean "private_flag", :default => true, :null => false
94 94 t.string "code"
95 95 t.integer "owner_id"
... ... @@ -112,8 +112,8 @@ ActiveRecord::Schema.define(:version => 20120329170745) do
112 112 t.text "content"
113 113 t.integer "author_id", :null => false
114 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 117 t.string "file_name"
118 118 t.datetime "expires_at"
119 119 end
... ... @@ -146,8 +146,8 @@ ActiveRecord::Schema.define(:version => 20120329170745) do
146 146 t.datetime "last_sign_in_at"
147 147 t.string "current_sign_in_ip"
148 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 151 t.string "name"
152 152 t.boolean "admin", :default => false, :null => false
153 153 t.integer "projects_limit", :default => 10
... ... @@ -166,16 +166,16 @@ ActiveRecord::Schema.define(:version => 20120329170745) do
166 166 create_table "users_projects", :force => true do |t|
167 167 t.integer "user_id", :null => false
168 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 171 t.integer "project_access", :default => 0, :null => false
172 172 end
173 173  
174 174 create_table "web_hooks", :force => true do |t|
175 175 t.string "url"
176 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 179 end
180 180  
181 181 create_table "wikis", :force => true do |t|
... ...
lib/gitlab_merge.rb
1 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 6 self.merge_request = merge_request
6 7 self.project = merge_request.project
7 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 31 self.project.repo.git.clone({:branch => merge_request.target_branch}, project.url_to_repo, merge_path)
31 32 Dir.chdir(merge_path) do
32 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 37 yield(merge_repo, output)
35 38 end
36 39 end
... ...