summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValery Sizov <vsv2711@gmail.com>2012-04-16 22:08:03 +0300
committerValery Sizov <vsv2711@gmail.com>2012-04-16 22:08:03 +0300
commit8269a3a735d6b1195ef0263716845ef3d2ab3327 (patch)
treeaee61889f975591e9ee2b8abeafcef70bed0dbdc
parentf145450415ed1e9db10ebcb8e02eb15c6dcffbf1 (diff)
downloadgitlab-ce-8269a3a735d6b1195ef0263716845ef3d2ab3327.tar.gz
Auto-merge: checking via AJAX
-rw-r--r--app/assets/javascripts/merge_requests.js12
-rw-r--r--app/controllers/merge_requests_controller.rb13
-rw-r--r--app/models/merge_request.rb9
-rw-r--r--app/views/merge_requests/show.html.haml17
-rw-r--r--config/routes.rb1
-rw-r--r--lib/gitlab_merge.rb1
6 files changed, 43 insertions, 10 deletions
diff --git a/app/assets/javascripts/merge_requests.js b/app/assets/javascripts/merge_requests.js
index b051928e0de..eba9c9cab43 100644
--- a/app/assets/javascripts/merge_requests.js
+++ b/app/assets/javascripts/merge_requests.js
@@ -1,9 +1,19 @@
var MergeRequest = {
diffs_loaded: false,
commits_loaded: false,
+ opts: false,
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").parent().removeClass("active");
$(this).parent().addClass("active");
diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb
index b3776c0af27..18ad578fc83 100644
--- a/app/controllers/merge_requests_controller.rb
+++ b/app/controllers/merge_requests_controller.rb
@@ -2,7 +2,7 @@ class MergeRequestsController < ApplicationController
before_filter :authenticate_user!
before_filter :project
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"
# Authorize
@@ -45,10 +45,6 @@ class MergeRequestsController < ApplicationController
# or from cache if already merged
@commits = @merge_request.commits
- if @merge_request.unchecked?
- @merge_request.check_if_can_be_merged
- end
-
respond_to do |format|
format.html
format.js
@@ -100,6 +96,13 @@ class MergeRequestsController < ApplicationController
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
render_404 unless @merge_request.open? && @merge_request.can_be_merged?
return access_denied! unless can?(current_user, :accept_mr, @project)
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 3845a0eced2..248bbdacad4 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -49,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"
diff --git a/app/views/merge_requests/show.html.haml b/app/views/merge_requests/show.html.haml
index 68c165605ea..aef74b8dce6 100644
--- a/app/views/merge_requests/show.html.haml
+++ b/app/views/merge_requests/show.html.haml
@@ -54,18 +54,25 @@
- 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
%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
= link_to "Accept Merge Request", automerge_project_merge_request_path(@project, @merge_request), :class => "btn small info accept_merge_request", :remote => true
&nbsp;
-
- - else
+
+ .automerge_widget.cannot_be_merged{:style => "display:none"}
.alert-message
%p
%strong This request cant be merged with GitLab. You should do it manually &nbsp;
= 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"
@@ -87,7 +94,9 @@
:javascript
$(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() {
$(this).replaceWith('#{image_tag "ajax_loader.gif"}');
diff --git a/config/routes.rb b/config/routes.rb
index a1c54565f49..9118c19f8f0 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -103,6 +103,7 @@ Gitlab::Application.routes.draw do
member do
get :diffs
get :automerge
+ get :automerge_check
end
collection do
diff --git a/lib/gitlab_merge.rb b/lib/gitlab_merge.rb
index 3913aa647cf..421750b7638 100644
--- a/lib/gitlab_merge.rb
+++ b/lib/gitlab_merge.rb
@@ -29,6 +29,7 @@ class GitlabMerge
def pull
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
merge_repo = Grit::Repo.new('.')
merge_repo.git.sh "git config user.name \"#{user.name}\""