Auto-merge: checking via AJAX
This commit is contained in:
parent
f145450415
commit
8269a3a735
|
@ -1,9 +1,19 @@
|
||||||
var MergeRequest = {
|
var MergeRequest = {
|
||||||
diffs_loaded: false,
|
diffs_loaded: false,
|
||||||
commits_loaded: false,
|
commits_loaded: false,
|
||||||
|
opts: false,
|
||||||
|
|
||||||
init:
|
init:
|
||||||
function() {
|
function(opts) {
|
||||||
|
this.opts = opts;
|
||||||
|
|
||||||
|
if($(".automerge_widget").lenght){
|
||||||
|
$.get(opts.url_to_automerge_check, function(data){
|
||||||
|
$(".automerge_widget").hide();
|
||||||
|
$(".automerge_widget." + data.state).show();
|
||||||
|
}, "json");
|
||||||
|
}
|
||||||
|
|
||||||
$(".tabs a").live("click", function() {
|
$(".tabs a").live("click", function() {
|
||||||
$(".tabs a").parent().removeClass("active");
|
$(".tabs a").parent().removeClass("active");
|
||||||
$(this).parent().addClass("active");
|
$(this).parent().addClass("active");
|
||||||
|
|
|
@ -2,7 +2,7 @@ class MergeRequestsController < ApplicationController
|
||||||
before_filter :authenticate_user!
|
before_filter :authenticate_user!
|
||||||
before_filter :project
|
before_filter :project
|
||||||
before_filter :module_enabled
|
before_filter :module_enabled
|
||||||
before_filter :merge_request, :only => [:edit, :update, :destroy, :show, :commits, :diffs, :automerge]
|
before_filter :merge_request, :only => [:edit, :update, :destroy, :show, :commits, :diffs, :automerge, :automerge_check]
|
||||||
layout "project"
|
layout "project"
|
||||||
|
|
||||||
# Authorize
|
# Authorize
|
||||||
|
@ -45,10 +45,6 @@ class MergeRequestsController < ApplicationController
|
||||||
# or from cache if already merged
|
# or from cache if already merged
|
||||||
@commits = @merge_request.commits
|
@commits = @merge_request.commits
|
||||||
|
|
||||||
if @merge_request.unchecked?
|
|
||||||
@merge_request.check_if_can_be_merged
|
|
||||||
end
|
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html
|
format.html
|
||||||
format.js
|
format.js
|
||||||
|
@ -100,6 +96,13 @@ class MergeRequestsController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def automerge_check
|
||||||
|
if @merge_request.unchecked?
|
||||||
|
@merge_request.check_if_can_be_merged
|
||||||
|
end
|
||||||
|
render :json => {:state => @merge_request.human_state}
|
||||||
|
end
|
||||||
|
|
||||||
def automerge
|
def automerge
|
||||||
render_404 unless @merge_request.open? && @merge_request.can_be_merged?
|
render_404 unless @merge_request.open? && @merge_request.can_be_merged?
|
||||||
return access_denied! unless can?(current_user, :accept_mr, @project)
|
return access_denied! unless can?(current_user, :accept_mr, @project)
|
||||||
|
|
|
@ -49,6 +49,15 @@ class MergeRequest < ActiveRecord::Base
|
||||||
where("source_branch like :branch or target_branch like :branch", :branch => branch_name)
|
where("source_branch like :branch or target_branch like :branch", :branch => branch_name)
|
||||||
end
|
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
|
def validate_branches
|
||||||
if target_branch == source_branch
|
if target_branch == source_branch
|
||||||
errors.add :base, "You can not use same branch for source and target branches"
|
errors.add :base, "You can not use same branch for source and target branches"
|
||||||
|
|
|
@ -54,19 +54,26 @@
|
||||||
|
|
||||||
|
|
||||||
- if @merge_request.open? && @commits.any? && can?(current_user, :accept_mr, @project)
|
- if @merge_request.open? && @commits.any? && can?(current_user, :accept_mr, @project)
|
||||||
- if @merge_request.can_be_merged?
|
.automerge_widget.can_be_merged{:style => "display:none"}
|
||||||
.ui-box.padded
|
.ui-box.padded
|
||||||
%p
|
%p
|
||||||
You can accept this request automatically. If you still want to do it manually - #{link_to "click here", "#", :class => "how_to_merge_link vlink", :title => "How To Merge"} for instructions
|
You can accept this request automatically. If you still want to do it manually - #{link_to "click here", "#", :class => "how_to_merge_link vlink", :title => "How To Merge"} for instructions
|
||||||
= link_to "Accept Merge Request", automerge_project_merge_request_path(@project, @merge_request), :class => "btn small info accept_merge_request", :remote => true
|
= link_to "Accept Merge Request", automerge_project_merge_request_path(@project, @merge_request), :class => "btn small info accept_merge_request", :remote => true
|
||||||
|
|
||||||
|
|
||||||
- else
|
.automerge_widget.cannot_be_merged{:style => "display:none"}
|
||||||
.alert-message
|
.alert-message
|
||||||
%p
|
%p
|
||||||
%strong This request cant be merged with GitLab. You should do it manually
|
%strong This request cant be merged with GitLab. You should do it manually
|
||||||
= link_to "Show how to merge", "#", :class => "how_to_merge_link btn small padded", :title => "How To Merge"
|
= link_to "Show how to merge", "#", :class => "how_to_merge_link btn small padded", :title => "How To Merge"
|
||||||
|
|
||||||
|
.automerge_widget.unchecked
|
||||||
|
.alert-message
|
||||||
|
%p
|
||||||
|
%strong Checking for ability to automatically merge…
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
= render "merge_requests/commits"
|
= render "merge_requests/commits"
|
||||||
|
|
||||||
|
@ -87,7 +94,9 @@
|
||||||
|
|
||||||
:javascript
|
:javascript
|
||||||
$(function(){
|
$(function(){
|
||||||
MergeRequest.init();
|
MergeRequest.init({
|
||||||
|
url_to_automerge_check: "#{automerge_check_project_merge_request_path(@project, @merge_request)}",
|
||||||
|
});
|
||||||
|
|
||||||
$(".accept_merge_request").live("ajax:beforeSend", function() {
|
$(".accept_merge_request").live("ajax:beforeSend", function() {
|
||||||
$(this).replaceWith('#{image_tag "ajax_loader.gif"}');
|
$(this).replaceWith('#{image_tag "ajax_loader.gif"}');
|
||||||
|
|
|
@ -103,6 +103,7 @@ Gitlab::Application.routes.draw do
|
||||||
member do
|
member do
|
||||||
get :diffs
|
get :diffs
|
||||||
get :automerge
|
get :automerge
|
||||||
|
get :automerge_check
|
||||||
end
|
end
|
||||||
|
|
||||||
collection do
|
collection do
|
||||||
|
|
|
@ -29,6 +29,7 @@ class GitlabMerge
|
||||||
|
|
||||||
def pull
|
def pull
|
||||||
self.project.repo.git.clone({:branch => merge_request.target_branch}, project.url_to_repo, merge_path)
|
self.project.repo.git.clone({:branch => merge_request.target_branch}, project.url_to_repo, merge_path)
|
||||||
|
#TODO When user do not have permissions then raise exception
|
||||||
Dir.chdir(merge_path) do
|
Dir.chdir(merge_path) do
|
||||||
merge_repo = Grit::Repo.new('.')
|
merge_repo = Grit::Repo.new('.')
|
||||||
merge_repo.git.sh "git config user.name \"#{user.name}\""
|
merge_repo.git.sh "git config user.name \"#{user.name}\""
|
||||||
|
|
Loading…
Reference in a new issue