Commit 8269a3a735d6b1195ef0263716845ef3d2ab3327
1 parent
f1454504
Exists in
master
and in
4 other branches
Auto-merge: checking via AJAX
Showing
6 changed files
with
43 additions
and
10 deletions
Show diff stats
app/assets/javascripts/merge_requests.js
1 | 1 | var MergeRequest = { |
2 | 2 | diffs_loaded: false, |
3 | 3 | commits_loaded: false, |
4 | + opts: false, | |
4 | 5 | |
5 | 6 | init: |
6 | - function() { | |
7 | + function(opts) { | |
8 | + this.opts = opts; | |
9 | + | |
10 | + if($(".automerge_widget").lenght){ | |
11 | + $.get(opts.url_to_automerge_check, function(data){ | |
12 | + $(".automerge_widget").hide(); | |
13 | + $(".automerge_widget." + data.state).show(); | |
14 | + }, "json"); | |
15 | + } | |
16 | + | |
7 | 17 | $(".tabs a").live("click", function() { |
8 | 18 | $(".tabs a").parent().removeClass("active"); |
9 | 19 | $(this).parent().addClass("active"); | ... | ... |
app/controllers/merge_requests_controller.rb
... | ... | @@ -2,7 +2,7 @@ class MergeRequestsController < ApplicationController |
2 | 2 | before_filter :authenticate_user! |
3 | 3 | before_filter :project |
4 | 4 | before_filter :module_enabled |
5 | - before_filter :merge_request, :only => [:edit, :update, :destroy, :show, :commits, :diffs, :automerge] | |
5 | + before_filter :merge_request, :only => [:edit, :update, :destroy, :show, :commits, :diffs, :automerge, :automerge_check] | |
6 | 6 | layout "project" |
7 | 7 | |
8 | 8 | # Authorize |
... | ... | @@ -45,10 +45,6 @@ class MergeRequestsController < ApplicationController |
45 | 45 | # or from cache if already merged |
46 | 46 | @commits = @merge_request.commits |
47 | 47 | |
48 | - if @merge_request.unchecked? | |
49 | - @merge_request.check_if_can_be_merged | |
50 | - end | |
51 | - | |
52 | 48 | respond_to do |format| |
53 | 49 | format.html |
54 | 50 | format.js |
... | ... | @@ -100,6 +96,13 @@ class MergeRequestsController < ApplicationController |
100 | 96 | end |
101 | 97 | end |
102 | 98 | |
99 | + def automerge_check | |
100 | + if @merge_request.unchecked? | |
101 | + @merge_request.check_if_can_be_merged | |
102 | + end | |
103 | + render :json => {:state => @merge_request.human_state} | |
104 | + end | |
105 | + | |
103 | 106 | def automerge |
104 | 107 | render_404 unless @merge_request.open? && @merge_request.can_be_merged? |
105 | 108 | return access_denied! unless can?(current_user, :accept_mr, @project) | ... | ... |
app/models/merge_request.rb
... | ... | @@ -49,6 +49,15 @@ class MergeRequest < ActiveRecord::Base |
49 | 49 | where("source_branch like :branch or target_branch like :branch", :branch => branch_name) |
50 | 50 | end |
51 | 51 | |
52 | + def human_state | |
53 | + states = { | |
54 | + CAN_BE_MERGED => "can_be_merged", | |
55 | + CANNOT_BE_MERGED => "cannot_be_merged", | |
56 | + UNCHECKED => "unchecked" | |
57 | + } | |
58 | + states[self.state] | |
59 | + end | |
60 | + | |
52 | 61 | def validate_branches |
53 | 62 | if target_branch == source_branch |
54 | 63 | errors.add :base, "You can not use same branch for source and target branches" | ... | ... |
app/views/merge_requests/show.html.haml
... | ... | @@ -54,18 +54,25 @@ |
54 | 54 | |
55 | 55 | |
56 | 56 | - if @merge_request.open? && @commits.any? && can?(current_user, :accept_mr, @project) |
57 | - - if @merge_request.can_be_merged? | |
57 | + .automerge_widget.can_be_merged{:style => "display:none"} | |
58 | 58 | .ui-box.padded |
59 | 59 | %p |
60 | 60 | 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 |
61 | 61 | = link_to "Accept Merge Request", automerge_project_merge_request_path(@project, @merge_request), :class => "btn small info accept_merge_request", :remote => true |
62 | 62 | |
63 | - | |
64 | - - else | |
63 | + | |
64 | + .automerge_widget.cannot_be_merged{:style => "display:none"} | |
65 | 65 | .alert-message |
66 | 66 | %p |
67 | 67 | %strong This request cant be merged with GitLab. You should do it manually |
68 | 68 | = link_to "Show how to merge", "#", :class => "how_to_merge_link btn small padded", :title => "How To Merge" |
69 | + | |
70 | + .automerge_widget.unchecked | |
71 | + .alert-message | |
72 | + %p | |
73 | + %strong Checking for ability to automatically merge… | |
74 | + | |
75 | + | |
69 | 76 | |
70 | 77 | |
71 | 78 | = render "merge_requests/commits" |
... | ... | @@ -87,7 +94,9 @@ |
87 | 94 | |
88 | 95 | :javascript |
89 | 96 | $(function(){ |
90 | - MergeRequest.init(); | |
97 | + MergeRequest.init({ | |
98 | + url_to_automerge_check: "#{automerge_check_project_merge_request_path(@project, @merge_request)}", | |
99 | + }); | |
91 | 100 | |
92 | 101 | $(".accept_merge_request").live("ajax:beforeSend", function() { |
93 | 102 | $(this).replaceWith('#{image_tag "ajax_loader.gif"}'); | ... | ... |
config/routes.rb
lib/gitlab_merge.rb
... | ... | @@ -29,6 +29,7 @@ class GitlabMerge |
29 | 29 | |
30 | 30 | def pull |
31 | 31 | self.project.repo.git.clone({:branch => merge_request.target_branch}, project.url_to_repo, merge_path) |
32 | + #TODO When user do not have permissions then raise exception | |
32 | 33 | Dir.chdir(merge_path) do |
33 | 34 | merge_repo = Grit::Repo.new('.') |
34 | 35 | merge_repo.git.sh "git config user.name \"#{user.name}\"" | ... | ... |