summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2012-03-30 20:49:34 +0300
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2012-03-30 20:49:34 +0300
commit90748cf724d4b019c954d316621b04cefd69dbaf (patch)
tree6e6ac8345aec69abd1e38b259a1735ba7d28aa9d
parent464cd59dff0e543cc367c0d468a70ca590334e42 (diff)
downloadgitlab-ce-90748cf724d4b019c954d316621b04cefd69dbaf.tar.gz
Merge Button v1 complete
-rw-r--r--app/controllers/merge_requests_controller.rb1
-rw-r--r--app/models/ability.rb1
-rw-r--r--app/models/merge_request.rb4
-rw-r--r--app/views/merge_requests/show.html.haml3
-rw-r--r--db/schema.rb38
-rw-r--r--lib/gitlab_merge.rb9
6 files changed, 31 insertions, 25 deletions
diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb
index f4b97de93a6..b3776c0af27 100644
--- a/app/controllers/merge_requests_controller.rb
+++ b/app/controllers/merge_requests_controller.rb
@@ -102,6 +102,7 @@ class MergeRequestsController < ApplicationController
def automerge
render_404 unless @merge_request.open? && @merge_request.can_be_merged?
+ return access_denied! unless can?(current_user, :accept_mr, @project)
@merge_request.automerge!(current_user)
end
diff --git a/app/models/ability.rb b/app/models/ability.rb
index e97b662b8ce..8ff45b6d17e 100644
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -46,6 +46,7 @@ class Ability
:admin_team_member,
:admin_merge_request,
:admin_note,
+ :accept_mr,
:admin_wiki
] if project.master_access_for?(user) || project.owner == user
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 85492e802e3..d7863c2edb0 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -73,7 +73,7 @@ class MergeRequest < ActiveRecord::Base
end
def check_if_can_be_merged
- self.state = if GitlabMerge.new(self).can_be_merged?
+ self.state = if GitlabMerge.new(self, self.author).can_be_merged?
CAN_BE_MERGED
else
CANNOT_BE_MERGED
@@ -175,7 +175,7 @@ class MergeRequest < ActiveRecord::Base
end
def automerge!(current_user)
- if GitlabMerge.new(self).merge
+ if GitlabMerge.new(self, current_user).merge
self.merge!(current_user.id)
true
end
diff --git a/app/views/merge_requests/show.html.haml b/app/views/merge_requests/show.html.haml
index 7e14a61c661..68c165605ea 100644
--- a/app/views/merge_requests/show.html.haml
+++ b/app/views/merge_requests/show.html.haml
@@ -52,7 +52,8 @@
Closed by #{@merge_request.closed_event.author_name}
%small #{time_ago_in_words(@merge_request.closed_event.created_at)} ago.
-- if @merge_request.open? && @commits.any?
+
+- if @merge_request.open? && @commits.any? && can?(current_user, :accept_mr, @project)
- if @merge_request.can_be_merged?
.ui-box.padded
%p
diff --git a/db/schema.rb b/db/schema.rb
index 7b9d431de4b..ff03d504b24 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -30,8 +30,8 @@ ActiveRecord::Schema.define(:version => 20120329170745) do
t.integer "assignee_id"
t.integer "author_id"
t.integer "project_id"
- t.datetime "created_at"
- t.datetime "updated_at"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
t.boolean "closed", :default => false, :null => false
t.integer "position", :default => 0
t.boolean "critical", :default => false, :null => false
@@ -43,8 +43,8 @@ ActiveRecord::Schema.define(:version => 20120329170745) do
create_table "keys", :force => true do |t|
t.integer "user_id"
- t.datetime "created_at"
- t.datetime "updated_at"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
t.text "key"
t.string "title"
t.string "identifier"
@@ -59,12 +59,12 @@ ActiveRecord::Schema.define(:version => 20120329170745) do
t.integer "assignee_id"
t.string "title"
t.boolean "closed", :default => false, :null => false
- t.datetime "created_at"
- t.datetime "updated_at"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
t.text "st_commits"
t.text "st_diffs"
t.boolean "merged", :default => false, :null => false
- t.integer "state", :default => 1, :null => false
+ t.boolean "auto_merge", :default => true, :null => false
end
add_index "merge_requests", ["project_id"], :name => "index_merge_requests_on_project_id"
@@ -74,8 +74,8 @@ ActiveRecord::Schema.define(:version => 20120329170745) do
t.string "noteable_id"
t.string "noteable_type"
t.integer "author_id"
- t.datetime "created_at"
- t.datetime "updated_at"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
t.integer "project_id"
t.string "attachment"
t.string "line_code"
@@ -88,8 +88,8 @@ ActiveRecord::Schema.define(:version => 20120329170745) do
t.string "name"
t.string "path"
t.text "description"
- t.datetime "created_at"
- t.datetime "updated_at"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
t.boolean "private_flag", :default => true, :null => false
t.string "code"
t.integer "owner_id"
@@ -112,8 +112,8 @@ ActiveRecord::Schema.define(:version => 20120329170745) do
t.text "content"
t.integer "author_id", :null => false
t.integer "project_id", :null => false
- t.datetime "created_at"
- t.datetime "updated_at"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
t.string "file_name"
t.datetime "expires_at"
end
@@ -146,8 +146,8 @@ ActiveRecord::Schema.define(:version => 20120329170745) do
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
- t.datetime "created_at"
- t.datetime "updated_at"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
t.string "name"
t.boolean "admin", :default => false, :null => false
t.integer "projects_limit", :default => 10
@@ -166,16 +166,16 @@ ActiveRecord::Schema.define(:version => 20120329170745) do
create_table "users_projects", :force => true do |t|
t.integer "user_id", :null => false
t.integer "project_id", :null => false
- t.datetime "created_at"
- t.datetime "updated_at"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
t.integer "project_access", :default => 0, :null => false
end
create_table "web_hooks", :force => true do |t|
t.string "url"
t.integer "project_id"
- t.datetime "created_at"
- t.datetime "updated_at"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
end
create_table "wikis", :force => true do |t|
diff --git a/lib/gitlab_merge.rb b/lib/gitlab_merge.rb
index 35ae5d1d2c8..3913aa647cf 100644
--- a/lib/gitlab_merge.rb
+++ b/lib/gitlab_merge.rb
@@ -1,7 +1,8 @@
class GitlabMerge
- attr_accessor :project, :merge_path, :merge_request
+ attr_accessor :project, :merge_path, :merge_request, :user
- def initialize(merge_request)
+ def initialize(merge_request, user)
+ self.user = user
self.merge_request = merge_request
self.project = merge_request.project
self.merge_path = File.join(Rails.root, "tmp", "merge_repo", project.path, merge_request.id.to_s)
@@ -30,7 +31,9 @@ class GitlabMerge
self.project.repo.git.clone({:branch => merge_request.target_branch}, project.url_to_repo, merge_path)
Dir.chdir(merge_path) do
merge_repo = Grit::Repo.new('.')
- output = merge_repo.git.pull({}, "origin", merge_request.source_branch)
+ merge_repo.git.sh "git config user.name \"#{user.name}\""
+ merge_repo.git.sh "git config user.email \"#{user.email}\""
+ output = merge_repo.git.pull({}, "--no-ff", "origin", merge_request.source_branch)
yield(merge_repo, output)
end
end