From 90748cf724d4b019c954d316621b04cefd69dbaf Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 30 Mar 2012 20:49:34 +0300 Subject: [PATCH] Merge Button v1 complete --- app/controllers/merge_requests_controller.rb | 1 + app/models/ability.rb | 1 + app/models/merge_request.rb | 4 +-- app/views/merge_requests/show.html.haml | 3 +- db/schema.rb | 38 ++++++++++---------- lib/gitlab_merge.rb | 9 +++-- 6 files changed, 31 insertions(+), 25 deletions(-) diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb index f4b97de9..b3776c0a 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 e97b662b..8ff45b6d 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 85492e80..d7863c2e 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 7e14a61c..68c16560 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 7b9d431d..ff03d504 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 35ae5d1d..3913aa64 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