Merge remote-tracking branch 'origin/merge_button'

Conflicts:
	app/assets/javascripts/merge_requests.js
	db/schema.rb
This commit is contained in:
Dmitriy Zaporozhets 2012-04-21 12:22:56 +03:00
commit 08994f3f60
13 changed files with 223 additions and 7 deletions

View file

@ -48,6 +48,7 @@ class Ability
:admin_team_member,
:admin_merge_request,
:admin_note,
:accept_mr,
:admin_wiki
] if project.master_access_for?(user) || project.owner == user

View file

@ -1,6 +1,10 @@
require File.join(Rails.root, "app/models/commit")
class MergeRequest < ActiveRecord::Base
UNCHECKED = 1
CAN_BE_MERGED = 2
CANNOT_BE_MERGED = 3
belongs_to :project
belongs_to :author, :class_name => "User"
belongs_to :assignee, :class_name => "User"
@ -45,6 +49,15 @@ class MergeRequest < ActiveRecord::Base
where("source_branch like :branch or target_branch like :branch", :branch => branch_name)
end
def human_state
states = {
CAN_BE_MERGED => "can_be_merged",
CANNOT_BE_MERGED => "cannot_be_merged",
UNCHECKED => "unchecked"
}
states[self.state]
end
def validate_branches
if target_branch == source_branch
errors.add :base, "You can not use same branch for source and target branches"
@ -56,6 +69,27 @@ class MergeRequest < ActiveRecord::Base
self.reloaded_diffs
end
def unchecked?
state == UNCHECKED
end
def mark_as_unchecked
self.update_attributes(:state => UNCHECKED)
end
def can_be_merged?
state == CAN_BE_MERGED
end
def check_if_can_be_merged
self.state = if GitlabMerge.new(self, self.author).can_be_merged?
CAN_BE_MERGED
else
CANNOT_BE_MERGED
end
self.save
end
def new?
today? && created_at == updated_at
end
@ -118,6 +152,10 @@ class MergeRequest < ActiveRecord::Base
save
end
def mark_as_unmergable
self.update_attributes :state => CANNOT_BE_MERGED
end
def reloaded_commits
if open? && unmerged_commits.any?
self.st_commits = unmerged_commits
@ -144,6 +182,16 @@ class MergeRequest < ActiveRecord::Base
:author_id => user_id
)
end
def automerge!(current_user)
if GitlabMerge.new(self, current_user).merge
self.merge!(current_user.id)
true
end
rescue
self.mark_as_unmergable
false
end
end
# == Schema Information
#

View file

@ -18,7 +18,7 @@ module Project::HooksTrait
# Update code for merge requests
mrs = self.merge_requests.opened.find_all_by_branch(branch_name).all
mrs.each { |merge_request| merge_request.reload_code }
mrs.each { |merge_request| merge_request.reload_code; merge_request.mark_as_unchecked }
# Close merge requests
mrs = self.merge_requests.opened.where(:target_branch => branch_name).all