Commit 2def1c7217556388763dfb860f76e16f9af58571
1 parent
b110c6bc
Exists in
master
and in
4 other branches
Merge Request -> show. Refactored. f5 support for diff
Showing
21 changed files
with
287 additions
and
226 deletions
Show diff stats
Gemfile
@@ -39,6 +39,7 @@ gem "charlock_holmes" | @@ -39,6 +39,7 @@ gem "charlock_holmes" | ||
39 | gem "foreman" | 39 | gem "foreman" |
40 | gem "colored" | 40 | gem "colored" |
41 | gem 'resque_mailer' | 41 | gem 'resque_mailer' |
42 | +gem 'tabs_on_rails' | ||
42 | 43 | ||
43 | group :assets do | 44 | group :assets do |
44 | gem "sass-rails", "3.2.5" | 45 | gem "sass-rails", "3.2.5" |
Gemfile.lock
@@ -331,6 +331,7 @@ GEM | @@ -331,6 +331,7 @@ GEM | ||
331 | tilt (~> 1.1, != 1.3.0) | 331 | tilt (~> 1.1, != 1.3.0) |
332 | sqlite3 (1.3.6) | 332 | sqlite3 (1.3.6) |
333 | stamp (0.1.6) | 333 | stamp (0.1.6) |
334 | + tabs_on_rails (2.1.1) | ||
334 | therubyracer (0.10.1) | 335 | therubyracer (0.10.1) |
335 | libv8 (~> 3.3.10) | 336 | libv8 (~> 3.3.10) |
336 | thin (1.3.1) | 337 | thin (1.3.1) |
@@ -420,6 +421,7 @@ DEPENDENCIES | @@ -420,6 +421,7 @@ DEPENDENCIES | ||
420 | six | 421 | six |
421 | sqlite3 | 422 | sqlite3 |
422 | stamp | 423 | stamp |
424 | + tabs_on_rails | ||
423 | therubyracer | 425 | therubyracer |
424 | thin | 426 | thin |
425 | turn | 427 | turn |
app/assets/javascripts/merge_requests.js
@@ -8,36 +8,77 @@ var MergeRequest = { | @@ -8,36 +8,77 @@ var MergeRequest = { | ||
8 | var self = this; | 8 | var self = this; |
9 | self.opts = opts; | 9 | self.opts = opts; |
10 | 10 | ||
11 | + self.initTabs(); | ||
12 | + self.initMergeWidget(); | ||
13 | + | ||
14 | + $(".mr_show_all_commits").bind("click", function() { | ||
15 | + self.showAllCommits(); | ||
16 | + }); | ||
17 | + | ||
18 | + $(".line_note_link, .line_note_reply_link").live("click", function(e) { | ||
19 | + var form = $(".per_line_form"); | ||
20 | + $(this).parent().parent().after(form); | ||
21 | + form.find("#note_line_code").val($(this).attr("line_code")); | ||
22 | + form.show(); | ||
23 | + return false; | ||
24 | + }); | ||
25 | + }, | ||
26 | + | ||
27 | + initMergeWidget: | ||
28 | + function() { | ||
29 | + var self = this; | ||
11 | self.showState(self.opts.current_state); | 30 | self.showState(self.opts.current_state); |
31 | + | ||
12 | if($(".automerge_widget").length && self.opts.check_enable){ | 32 | if($(".automerge_widget").length && self.opts.check_enable){ |
13 | $.get(opts.url_to_automerge_check, function(data){ | 33 | $.get(opts.url_to_automerge_check, function(data){ |
14 | self.showState(data.state); | 34 | self.showState(data.state); |
15 | }, "json"); | 35 | }, "json"); |
16 | } | 36 | } |
37 | + }, | ||
17 | 38 | ||
18 | - $(".nav-tabs a").live("click", function() { | ||
19 | - $(".nav-tabs a").parent().removeClass("active"); | 39 | + initTabs: |
40 | + function() { | ||
41 | + $(".mr_nav_tabs a").live("click", function() { | ||
42 | + $(".mr_nav_tabs a").parent().removeClass("active"); | ||
20 | $(this).parent().addClass("active"); | 43 | $(this).parent().addClass("active"); |
21 | }); | 44 | }); |
22 | 45 | ||
23 | - $(".nav-tabs a.merge-notes-tab").live("click", function(e) { | 46 | + var current_tab; |
47 | + if(this.opts.action == "diffs") { | ||
48 | + current_tab = $(".mr_nav_tabs .merge-diffs-tab"); | ||
49 | + } else { | ||
50 | + current_tab = $(".mr_nav_tabs .merge-notes-tab"); | ||
51 | + } | ||
52 | + current_tab.parent().addClass("active"); | ||
53 | + | ||
54 | + this.initNotesTab(); | ||
55 | + this.initDiffTab(); | ||
56 | + }, | ||
57 | + | ||
58 | + initNotesTab: | ||
59 | + function() { | ||
60 | + $(".mr_nav_tabs a.merge-notes-tab").live("click", function(e) { | ||
24 | $(".merge-request-diffs").hide(); | 61 | $(".merge-request-diffs").hide(); |
25 | $(".merge_request_notes").show(); | 62 | $(".merge_request_notes").show(); |
63 | + var mr_path = $(".merge-notes-tab").attr("data-url"); | ||
64 | + history.pushState({ path: mr_path }, '', mr_path); | ||
26 | e.preventDefault(); | 65 | e.preventDefault(); |
27 | }); | 66 | }); |
67 | + }, | ||
28 | 68 | ||
29 | - $(".nav-tabs a.merge-diffs-tab").live("click", function(e) { | 69 | + initDiffTab: |
70 | + function() { | ||
71 | + $(".mr_nav_tabs a.merge-diffs-tab").live("click", function(e) { | ||
30 | if(!MergeRequest.diffs_loaded) { | 72 | if(!MergeRequest.diffs_loaded) { |
31 | MergeRequest.loadDiff(); | 73 | MergeRequest.loadDiff(); |
32 | } | 74 | } |
33 | $(".merge_request_notes").hide(); | 75 | $(".merge_request_notes").hide(); |
34 | $(".merge-request-diffs").show(); | 76 | $(".merge-request-diffs").show(); |
77 | + var mr_diff_path = $(".merge-diffs-tab").attr("data-url"); | ||
78 | + history.pushState({ path: mr_diff_path }, '', mr_diff_path); | ||
35 | e.preventDefault(); | 79 | e.preventDefault(); |
36 | }); | 80 | }); |
37 | 81 | ||
38 | - $(".mr_show_all_commits").bind("click", function() { | ||
39 | - MergeRequest.showAllCommits(); | ||
40 | - }) | ||
41 | }, | 82 | }, |
42 | 83 | ||
43 | showState: | 84 | showState: |
app/assets/stylesheets/sections/merge_requests.scss
app/controllers/merge_requests_controller.rb
@@ -3,6 +3,8 @@ class MergeRequestsController < ApplicationController | @@ -3,6 +3,8 @@ class MergeRequestsController < ApplicationController | ||
3 | before_filter :project | 3 | before_filter :project |
4 | before_filter :module_enabled | 4 | before_filter :module_enabled |
5 | before_filter :merge_request, :only => [:edit, :update, :destroy, :show, :commits, :diffs, :automerge, :automerge_check] | 5 | before_filter :merge_request, :only => [:edit, :update, :destroy, :show, :commits, :diffs, :automerge, :automerge_check] |
6 | + before_filter :validates_merge_request, :only => [:show, :diffs] | ||
7 | + before_filter :define_show_vars, :only => [:show, :diffs] | ||
6 | layout "project" | 8 | layout "project" |
7 | 9 | ||
8 | # Authorize | 10 | # Authorize |
@@ -20,6 +22,7 @@ class MergeRequestsController < ApplicationController | @@ -20,6 +22,7 @@ class MergeRequestsController < ApplicationController | ||
20 | # Allow destroy merge_request | 22 | # Allow destroy merge_request |
21 | before_filter :authorize_admin_merge_request!, :only => [:destroy] | 23 | before_filter :authorize_admin_merge_request!, :only => [:destroy] |
22 | 24 | ||
25 | + | ||
23 | def index | 26 | def index |
24 | @merge_requests = @project.merge_requests | 27 | @merge_requests = @project.merge_requests |
25 | 28 | ||
@@ -34,20 +37,6 @@ class MergeRequestsController < ApplicationController | @@ -34,20 +37,6 @@ class MergeRequestsController < ApplicationController | ||
34 | end | 37 | end |
35 | 38 | ||
36 | def show | 39 | def show |
37 | - # Show git not found page if target branch doesnt exist | ||
38 | - return git_not_found! unless @project.repo.heads.map(&:name).include?(@merge_request.target_branch) | ||
39 | - | ||
40 | - # Show git not found page if source branch doesnt exist | ||
41 | - # and there is no saved commits between source & target branch | ||
42 | - return git_not_found! if !@project.repo.heads.map(&:name).include?(@merge_request.source_branch) && @merge_request.commits.blank? | ||
43 | - | ||
44 | - # Build a note object for comment form | ||
45 | - @note = @project.notes.new(:noteable => @merge_request) | ||
46 | - | ||
47 | - # Get commits from repository | ||
48 | - # or from cache if already merged | ||
49 | - @commits = @merge_request.commits | ||
50 | - | ||
51 | respond_to do |format| | 40 | respond_to do |format| |
52 | format.html | 41 | format.html |
53 | format.js | 42 | format.js |
@@ -142,4 +131,22 @@ class MergeRequestsController < ApplicationController | @@ -142,4 +131,22 @@ class MergeRequestsController < ApplicationController | ||
142 | def module_enabled | 131 | def module_enabled |
143 | return render_404 unless @project.merge_requests_enabled | 132 | return render_404 unless @project.merge_requests_enabled |
144 | end | 133 | end |
134 | + | ||
135 | + def validates_merge_request | ||
136 | + # Show git not found page if target branch doesnt exist | ||
137 | + return git_not_found! unless @project.repo.heads.map(&:name).include?(@merge_request.target_branch) | ||
138 | + | ||
139 | + # Show git not found page if source branch doesnt exist | ||
140 | + # and there is no saved commits between source & target branch | ||
141 | + return git_not_found! if !@project.repo.heads.map(&:name).include?(@merge_request.source_branch) && @merge_request.commits.blank? | ||
142 | + end | ||
143 | + | ||
144 | + def define_show_vars | ||
145 | + # Build a note object for comment form | ||
146 | + @note = @project.notes.new(:noteable => @merge_request) | ||
147 | + | ||
148 | + # Get commits from repository | ||
149 | + # or from cache if already merged | ||
150 | + @commits = @merge_request.commits | ||
151 | + end | ||
145 | end | 152 | end |
app/views/commits/_diffs.html.haml
@@ -35,5 +35,4 @@ | @@ -35,5 +35,4 @@ | ||
35 | .diff_file_content_image{:class => image_diff_class(diff)} | 35 | .diff_file_content_image{:class => image_diff_class(diff)} |
36 | %img{:src => "data:#{file.mime_type};base64,#{Base64.encode64(file.data)}"} | 36 | %img{:src => "data:#{file.mime_type};base64,#{Base64.encode64(file.data)}"} |
37 | - else | 37 | - else |
38 | - %p | ||
39 | - %center No preview for this file type | 38 | + %p.nothing_here_message No preview for this file type |
app/views/merge_requests/_commits.html.haml
@@ -1,28 +0,0 @@ | @@ -1,28 +0,0 @@ | ||
1 | -- if @commits.present? | ||
2 | - .ui-box | ||
3 | - %h5 Commits (#{@commits.count}) | ||
4 | - .merge-request-commits | ||
5 | - - if @commits.count > 8 | ||
6 | - %ul.first_mr_commits.unstyled | ||
7 | - - @commits.first(8).each do |commit| | ||
8 | - = render "commits/commit", :commit => commit | ||
9 | - %li.bottom | ||
10 | - 8 of #{@commits.count} commits displayed. | ||
11 | - %strong | ||
12 | - %a.mr_show_all_commits Click here to show all | ||
13 | - %ul.all_mr_commits.hide.unstyled | ||
14 | - - @commits.each do |commit| | ||
15 | - = render "commits/commit", :commit => commit | ||
16 | - | ||
17 | - - else | ||
18 | - %ul.unstyled | ||
19 | - - @commits.each do |commit| | ||
20 | - = render "commits/commit", :commit => commit | ||
21 | - | ||
22 | -- else | ||
23 | - %h5 | ||
24 | - Nothing to merge from | ||
25 | - %span.label #{@merge_request.source_branch} | ||
26 | - to | ||
27 | - %span.label #{@merge_request.target_branch} | ||
28 | - %br |
app/views/merge_requests/_diffs.html.haml
app/views/merge_requests/_how_to_merge.html.haml
@@ -1,25 +0,0 @@ | @@ -1,25 +0,0 @@ | ||
1 | -%div#modal_merge_info.modal.hide | ||
2 | - .modal-header | ||
3 | - %a.close{:href => "#"} × | ||
4 | - %h3 How To Merge | ||
5 | - .modal-body | ||
6 | - %pre | ||
7 | - = preserve do | ||
8 | - :erb | ||
9 | - git checkout <%= @merge_request.target_branch %> | ||
10 | - git fetch origin | ||
11 | - git merge origin/<%= @merge_request.source_branch %> | ||
12 | - git push origin <%= @merge_request.target_branch %> | ||
13 | - | ||
14 | - | ||
15 | -:javascript | ||
16 | - $(function(){ | ||
17 | - var modal = $('#modal_merge_info').modal({modal: true, show:false}); | ||
18 | - $('.how_to_merge_link').bind("click", function(){ | ||
19 | - modal.show(); | ||
20 | - }); | ||
21 | - $('.modal-header .close').bind("click", function(){ | ||
22 | - modal.hide(); | ||
23 | - }) | ||
24 | - }) | ||
25 | - |
@@ -0,0 +1,39 @@ | @@ -0,0 +1,39 @@ | ||
1 | += render "merge_requests/show/mr_title" | ||
2 | += render "merge_requests/show/how_to_merge" | ||
3 | += render "merge_requests/show/mr_box" | ||
4 | += render "merge_requests/show/mr_accept" | ||
5 | += render "merge_requests/show/commits" | ||
6 | + | ||
7 | +- if @commits.present? | ||
8 | + %ul.nav.nav-tabs.mr_nav_tabs | ||
9 | + %li | ||
10 | + = link_to "#notes", "data-url" => project_merge_request_path(@project, @merge_request), :class => "merge-notes-tab tab" do | ||
11 | + %i.icon-comment | ||
12 | + Comments | ||
13 | + %li | ||
14 | + = link_to "#diffs", "data-url" => diffs_project_merge_request_path(@project, @merge_request), :class => "merge-diffs-tab tab" do | ||
15 | + %i.icon-list-alt | ||
16 | + Diff | ||
17 | + | ||
18 | +.merge_request_notes#notes{ :class => (controller.action_name == 'show') ? "" : "hide" } | ||
19 | + = render("notes/notes", :tid => @merge_request.id, :tt => "merge_request") | ||
20 | +.merge-request-diffs | ||
21 | + = render "merge_requests/show/diffs" if @diffs | ||
22 | +.status | ||
23 | + | ||
24 | += render "notes/per_line_form" | ||
25 | + | ||
26 | +:javascript | ||
27 | + $(function(){ | ||
28 | + MergeRequest.init({ | ||
29 | + url_to_automerge_check: "#{automerge_check_project_merge_request_path(@project, @merge_request)}", | ||
30 | + check_enable: #{@merge_request.state == MergeRequest::UNCHECKED ? "true" : "false"}, | ||
31 | + current_state: "#{@merge_request.human_state}", | ||
32 | + action: "#{controller.action_name}" | ||
33 | + }); | ||
34 | + | ||
35 | + $(".edit_merge_request").live("ajax:beforeSend", function() { | ||
36 | + $(this).replaceWith('#{image_tag "ajax_loader.gif"}'); | ||
37 | + }) | ||
38 | + }) | ||
39 | + |
app/views/merge_requests/diffs.js.haml
app/views/merge_requests/show.html.haml
1 | -%h3 | ||
2 | - = "Merge Request ##{@merge_request.id}:" | ||
3 | - | ||
4 | - %span.pretty_label.branch= @merge_request.source_branch | ||
5 | - → | ||
6 | - %span.pretty_label.branch= @merge_request.target_branch | ||
7 | - | ||
8 | - %span.right | ||
9 | - - if @merge_request.merged? | ||
10 | - %span.btn.small.disabled.padded | ||
11 | - %strong | ||
12 | - %i.icon-ok | ||
13 | - = "MERGED" | ||
14 | - - if can?(current_user, :modify_merge_request, @merge_request) | ||
15 | - - if @merge_request.open? | ||
16 | - = link_to 'Close', project_merge_request_path(@project, @merge_request, :merge_request => {:closed => true }, :status_only => true), :method => :put, :class => "btn small padded danger", :title => "Close merge request" | ||
17 | - = link_to edit_project_merge_request_path(@project, @merge_request), :class => "btn small padded" do | ||
18 | - %i.icon-edit | ||
19 | - Edit | ||
20 | - | ||
21 | - %br | ||
22 | - - if @merge_request.upvotes > 0 | ||
23 | - .upvotes#upvotes= "+#{pluralize @merge_request.upvotes, 'upvote'}" | ||
24 | - | ||
25 | -= render "merge_requests/how_to_merge" | ||
26 | -.back_link | ||
27 | - = link_to project_merge_requests_path(@project) do | ||
28 | - ← To merge requests | ||
29 | - | ||
30 | -.main_box | ||
31 | - .top_box_content | ||
32 | - %h4 | ||
33 | - - if @merge_request.closed | ||
34 | - .alert-message.error.status_info Closed | ||
35 | - - else | ||
36 | - .alert-message.success.status_info Open | ||
37 | - = @merge_request.title | ||
38 | - | ||
39 | - .middle_box_content | ||
40 | - %div | ||
41 | - %cite.cgray Created at #{@merge_request.created_at.stamp("Aug 21, 2011")} by | ||
42 | - = image_tag gravatar_icon(@merge_request.author_email), :width => 16, :class => "lil_av" | ||
43 | - %strong.author= link_to_merge_request_author(@merge_request) | ||
44 | - | ||
45 | - %cite.cgray and currently assigned to | ||
46 | - = image_tag gravatar_icon(@merge_request.assignee_email), :width => 16, :class => "lil_av" | ||
47 | - %strong.author= link_to_merge_request_assignee(@merge_request) | ||
48 | - | ||
49 | - | ||
50 | - - if @merge_request.closed | ||
51 | - .bottom_box_content | ||
52 | - - if @merge_request.merged? | ||
53 | - %span | ||
54 | - Merged by #{@merge_request.merge_event.author_name} | ||
55 | - %small #{time_ago_in_words(@merge_request.merge_event.created_at)} ago. | ||
56 | - - elsif @merge_request.closed_event | ||
57 | - %span | ||
58 | - Closed by #{@merge_request.closed_event.author_name} | ||
59 | - %small #{time_ago_in_words(@merge_request.closed_event.created_at)} ago. | ||
60 | - | ||
61 | -- unless can?(current_user, :accept_mr, @project) | ||
62 | - .alert-message | ||
63 | - %strong Only masters can accept MR | ||
64 | - | ||
65 | - | ||
66 | -- if @merge_request.open? && @commits.any? && can?(current_user, :accept_mr, @project) | ||
67 | - .automerge_widget.can_be_merged{:style => "display:none"} | ||
68 | - .alert.alert-success | ||
69 | - %span | ||
70 | - = form_for [:automerge, @project, @merge_request], :remote => true, :method => :get do |f| | ||
71 | - %p | ||
72 | - You can accept this request automatically. | ||
73 | - If you still want to do it manually - | ||
74 | - %strong= link_to "click here", "#", :class => "how_to_merge_link vlink", :title => "How To Merge" | ||
75 | - for instructions | ||
76 | - .accept_group | ||
77 | - = f.submit "Accept Merge Request", :class => "btn small success accept_merge_request" | ||
78 | - - unless @project.root_ref? @merge_request.source_branch | ||
79 | - .remove_branch_holder | ||
80 | - = label_tag :should_remove_source_branch, :class => "checkbox" do | ||
81 | - = check_box_tag :should_remove_source_branch | ||
82 | - Remove source-branch | ||
83 | - .clearfix | ||
84 | - | ||
85 | - | ||
86 | - .automerge_widget.cannot_be_merged{:style => "display:none"} | ||
87 | - .alert.alert-info | ||
88 | - %span | ||
89 | - = link_to "Show how to merge", "#", :class => "how_to_merge_link btn small padded", :title => "How To Merge" | ||
90 | - | ||
91 | - %strong This request cant be merged with GitLab. You should do it manually | ||
92 | - | ||
93 | - .automerge_widget.unchecked | ||
94 | - .alert-message | ||
95 | - %strong | ||
96 | - %i.icon-refresh | ||
97 | - Checking for ability to automatically merge… | ||
98 | - | ||
99 | - .automerge_widget.already_cannot_be_merged{:style => "display:none"} | ||
100 | - .alert.alert-info | ||
101 | - %strong This merge request already can not be merged. Try to reload page. | ||
102 | - | ||
103 | -= render "merge_requests/commits" | ||
104 | - | ||
105 | -- unless @commits.empty? | ||
106 | - .nav.nav-tabs | ||
107 | - %li.active | ||
108 | - = link_to "#notes", :class => "merge-notes-tab tab" do | ||
109 | - Notes | ||
110 | - %li | ||
111 | - = link_to "#diffs", "data-url" => diffs_project_merge_request_path(@project, @merge_request), :class => "merge-diffs-tab tab" do | ||
112 | - Diff | ||
113 | - | ||
114 | - | ||
115 | -.merge_request_notes#notes= render "notes/notes", :tid => @merge_request.id, :tt => "merge_request" | ||
116 | - | ||
117 | -.merge-request-diffs | ||
118 | -.status | ||
119 | - | ||
120 | -:javascript | ||
121 | - $(function(){ | ||
122 | - MergeRequest.init({ | ||
123 | - url_to_automerge_check: "#{automerge_check_project_merge_request_path(@project, @merge_request)}", | ||
124 | - check_enable: #{@merge_request.state == MergeRequest::UNCHECKED ? "true" : "false"}, | ||
125 | - current_state: "#{@merge_request.human_state}" | ||
126 | - }); | ||
127 | - | ||
128 | - $(".edit_merge_request").live("ajax:beforeSend", function() { | ||
129 | - $(this).replaceWith('#{image_tag "ajax_loader.gif"}'); | ||
130 | - }) | ||
131 | - }) | ||
132 | - | ||
133 | -= render "notes/per_line_form" | ||
134 | - | ||
135 | -:javascript | ||
136 | - $(document).ready(function(){ | ||
137 | - $(".line_note_link, .line_note_reply_link").live("click", function(e) { | ||
138 | - var form = $(".per_line_form"); | ||
139 | - $(this).parent().parent().after(form); | ||
140 | - form.find("#note_line_code").val($(this).attr("line_code")); | ||
141 | - form.show(); | ||
142 | - return false; | ||
143 | - }); | ||
144 | - }); | 1 | += render "show" |
@@ -0,0 +1,28 @@ | @@ -0,0 +1,28 @@ | ||
1 | +- if @commits.present? | ||
2 | + .ui-box | ||
3 | + %h5 Commits (#{@commits.count}) | ||
4 | + .merge-request-commits | ||
5 | + - if @commits.count > 8 | ||
6 | + %ul.first_mr_commits.unstyled | ||
7 | + - @commits.first(8).each do |commit| | ||
8 | + = render "commits/commit", :commit => commit | ||
9 | + %li.bottom | ||
10 | + 8 of #{@commits.count} commits displayed. | ||
11 | + %strong | ||
12 | + %a.mr_show_all_commits Click here to show all | ||
13 | + %ul.all_mr_commits.hide.unstyled | ||
14 | + - @commits.each do |commit| | ||
15 | + = render "commits/commit", :commit => commit | ||
16 | + | ||
17 | + - else | ||
18 | + %ul.unstyled | ||
19 | + - @commits.each do |commit| | ||
20 | + = render "commits/commit", :commit => commit | ||
21 | + | ||
22 | +- else | ||
23 | + %h5 | ||
24 | + Nothing to merge from | ||
25 | + %span.label #{@merge_request.source_branch} | ||
26 | + to | ||
27 | + %span.label #{@merge_request.target_branch} | ||
28 | + %br |
@@ -0,0 +1,25 @@ | @@ -0,0 +1,25 @@ | ||
1 | +%div#modal_merge_info.modal.hide | ||
2 | + .modal-header | ||
3 | + %a.close{:href => "#"} × | ||
4 | + %h3 How To Merge | ||
5 | + .modal-body | ||
6 | + %pre | ||
7 | + = preserve do | ||
8 | + :erb | ||
9 | + git checkout <%= @merge_request.target_branch %> | ||
10 | + git fetch origin | ||
11 | + git merge origin/<%= @merge_request.source_branch %> | ||
12 | + git push origin <%= @merge_request.target_branch %> | ||
13 | + | ||
14 | + | ||
15 | +:javascript | ||
16 | + $(function(){ | ||
17 | + var modal = $('#modal_merge_info').modal({modal: true, show:false}); | ||
18 | + $('.how_to_merge_link').bind("click", function(){ | ||
19 | + modal.show(); | ||
20 | + }); | ||
21 | + $('.modal-header .close').bind("click", function(){ | ||
22 | + modal.hide(); | ||
23 | + }) | ||
24 | + }) | ||
25 | + |
@@ -0,0 +1,42 @@ | @@ -0,0 +1,42 @@ | ||
1 | +- unless can?(current_user, :accept_mr, @project) | ||
2 | + .alert-message | ||
3 | + %strong Only masters can accept MR | ||
4 | + | ||
5 | + | ||
6 | +- if @merge_request.open? && @commits.any? && can?(current_user, :accept_mr, @project) | ||
7 | + .automerge_widget.can_be_merged{:style => "display:none"} | ||
8 | + .alert.alert-success | ||
9 | + %span | ||
10 | + = form_for [:automerge, @project, @merge_request], :remote => true, :method => :get do |f| | ||
11 | + %p | ||
12 | + You can accept this request automatically. | ||
13 | + If you still want to do it manually - | ||
14 | + %strong= link_to "click here", "#", :class => "how_to_merge_link vlink", :title => "How To Merge" | ||
15 | + for instructions | ||
16 | + .accept_group | ||
17 | + = f.submit "Accept Merge Request", :class => "btn small success accept_merge_request" | ||
18 | + - unless @project.root_ref? @merge_request.source_branch | ||
19 | + .remove_branch_holder | ||
20 | + = label_tag :should_remove_source_branch, :class => "checkbox" do | ||
21 | + = check_box_tag :should_remove_source_branch | ||
22 | + Remove source-branch | ||
23 | + .clearfix | ||
24 | + | ||
25 | + | ||
26 | + .automerge_widget.cannot_be_merged{:style => "display:none"} | ||
27 | + .alert.alert-info | ||
28 | + %span | ||
29 | + = link_to "Show how to merge", "#", :class => "how_to_merge_link btn small padded", :title => "How To Merge" | ||
30 | + | ||
31 | + %strong This request cant be merged with GitLab. You should do it manually | ||
32 | + | ||
33 | + .automerge_widget.unchecked | ||
34 | + .alert-message | ||
35 | + %strong | ||
36 | + %i.icon-refresh | ||
37 | + Checking for ability to automatically merge… | ||
38 | + | ||
39 | + .automerge_widget.already_cannot_be_merged{:style => "display:none"} | ||
40 | + .alert.alert-info | ||
41 | + %strong This merge request already can not be merged. Try to reload page. | ||
42 | + |
@@ -0,0 +1,31 @@ | @@ -0,0 +1,31 @@ | ||
1 | +.main_box | ||
2 | + .top_box_content | ||
3 | + %h4 | ||
4 | + - if @merge_request.closed | ||
5 | + .alert-message.error.status_info Closed | ||
6 | + - else | ||
7 | + .alert-message.success.status_info Open | ||
8 | + = @merge_request.title | ||
9 | + | ||
10 | + .middle_box_content | ||
11 | + %div | ||
12 | + %cite.cgray Created at #{@merge_request.created_at.stamp("Aug 21, 2011")} by | ||
13 | + = image_tag gravatar_icon(@merge_request.author_email), :width => 16, :class => "lil_av" | ||
14 | + %strong.author= link_to_merge_request_author(@merge_request) | ||
15 | + | ||
16 | + %cite.cgray and currently assigned to | ||
17 | + = image_tag gravatar_icon(@merge_request.assignee_email), :width => 16, :class => "lil_av" | ||
18 | + %strong.author= link_to_merge_request_assignee(@merge_request) | ||
19 | + | ||
20 | + | ||
21 | + - if @merge_request.closed | ||
22 | + .bottom_box_content | ||
23 | + - if @merge_request.merged? | ||
24 | + %span | ||
25 | + Merged by #{@merge_request.merge_event.author_name} | ||
26 | + %small #{time_ago_in_words(@merge_request.merge_event.created_at)} ago. | ||
27 | + - elsif @merge_request.closed_event | ||
28 | + %span | ||
29 | + Closed by #{@merge_request.closed_event.author_name} | ||
30 | + %small #{time_ago_in_words(@merge_request.closed_event.created_at)} ago. | ||
31 | + |
@@ -0,0 +1,28 @@ | @@ -0,0 +1,28 @@ | ||
1 | +%h3 | ||
2 | + = "Merge Request ##{@merge_request.id}:" | ||
3 | + | ||
4 | + %span.pretty_label.branch= @merge_request.source_branch | ||
5 | + → | ||
6 | + %span.pretty_label.branch= @merge_request.target_branch | ||
7 | + | ||
8 | + %span.right | ||
9 | + - if @merge_request.merged? | ||
10 | + %span.btn.small.disabled.padded | ||
11 | + %strong | ||
12 | + %i.icon-ok | ||
13 | + = "MERGED" | ||
14 | + - if can?(current_user, :modify_merge_request, @merge_request) | ||
15 | + - if @merge_request.open? | ||
16 | + = link_to 'Close', project_merge_request_path(@project, @merge_request, :merge_request => {:closed => true }, :status_only => true), :method => :put, :class => "btn small padded danger", :title => "Close merge request" | ||
17 | + = link_to edit_project_merge_request_path(@project, @merge_request), :class => "btn small padded" do | ||
18 | + %i.icon-edit | ||
19 | + Edit | ||
20 | + | ||
21 | + %br | ||
22 | + - if @merge_request.upvotes > 0 | ||
23 | + .upvotes#upvotes= "+#{pluralize @merge_request.upvotes, 'upvote'}" | ||
24 | + | ||
25 | + | ||
26 | +.back_link | ||
27 | + = link_to project_merge_requests_path(@project) do | ||
28 | + ← To merge requests |
db/schema.rb
@@ -61,8 +61,8 @@ ActiveRecord::Schema.define(:version => 20120627145613) do | @@ -61,8 +61,8 @@ ActiveRecord::Schema.define(:version => 20120627145613) do | ||
61 | t.boolean "closed", :default => false, :null => false | 61 | t.boolean "closed", :default => false, :null => false |
62 | t.datetime "created_at", :null => false | 62 | t.datetime "created_at", :null => false |
63 | t.datetime "updated_at", :null => false | 63 | t.datetime "updated_at", :null => false |
64 | - t.text "st_commits", :limit => 4294967295 | ||
65 | - t.text "st_diffs", :limit => 4294967295 | 64 | + t.text "st_commits", :limit => 2147483647 |
65 | + t.text "st_diffs", :limit => 2147483647 | ||
66 | t.boolean "merged", :default => false, :null => false | 66 | t.boolean "merged", :default => false, :null => false |
67 | t.integer "state", :default => 1, :null => false | 67 | t.integer "state", :default => 1, :null => false |
68 | end | 68 | end |