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
Gemfile.lock
... | ... | @@ -331,6 +331,7 @@ GEM |
331 | 331 | tilt (~> 1.1, != 1.3.0) |
332 | 332 | sqlite3 (1.3.6) |
333 | 333 | stamp (0.1.6) |
334 | + tabs_on_rails (2.1.1) | |
334 | 335 | therubyracer (0.10.1) |
335 | 336 | libv8 (~> 3.3.10) |
336 | 337 | thin (1.3.1) |
... | ... | @@ -420,6 +421,7 @@ DEPENDENCIES |
420 | 421 | six |
421 | 422 | sqlite3 |
422 | 423 | stamp |
424 | + tabs_on_rails | |
423 | 425 | therubyracer |
424 | 426 | thin |
425 | 427 | turn | ... | ... |
app/assets/javascripts/merge_requests.js
... | ... | @@ -8,36 +8,77 @@ var MergeRequest = { |
8 | 8 | var self = this; |
9 | 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 | 30 | self.showState(self.opts.current_state); |
31 | + | |
12 | 32 | if($(".automerge_widget").length && self.opts.check_enable){ |
13 | 33 | $.get(opts.url_to_automerge_check, function(data){ |
14 | 34 | self.showState(data.state); |
15 | 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 | 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 | 61 | $(".merge-request-diffs").hide(); |
25 | 62 | $(".merge_request_notes").show(); |
63 | + var mr_path = $(".merge-notes-tab").attr("data-url"); | |
64 | + history.pushState({ path: mr_path }, '', mr_path); | |
26 | 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 | 72 | if(!MergeRequest.diffs_loaded) { |
31 | 73 | MergeRequest.loadDiff(); |
32 | 74 | } |
33 | 75 | $(".merge_request_notes").hide(); |
34 | 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 | 79 | e.preventDefault(); |
36 | 80 | }); |
37 | 81 | |
38 | - $(".mr_show_all_commits").bind("click", function() { | |
39 | - MergeRequest.showAllCommits(); | |
40 | - }) | |
41 | 82 | }, |
42 | 83 | |
43 | 84 | showState: | ... | ... |
app/assets/stylesheets/sections/merge_requests.scss
app/controllers/merge_requests_controller.rb
... | ... | @@ -3,6 +3,8 @@ class MergeRequestsController < ApplicationController |
3 | 3 | before_filter :project |
4 | 4 | before_filter :module_enabled |
5 | 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 | 8 | layout "project" |
7 | 9 | |
8 | 10 | # Authorize |
... | ... | @@ -20,6 +22,7 @@ class MergeRequestsController < ApplicationController |
20 | 22 | # Allow destroy merge_request |
21 | 23 | before_filter :authorize_admin_merge_request!, :only => [:destroy] |
22 | 24 | |
25 | + | |
23 | 26 | def index |
24 | 27 | @merge_requests = @project.merge_requests |
25 | 28 | |
... | ... | @@ -34,20 +37,6 @@ class MergeRequestsController < ApplicationController |
34 | 37 | end |
35 | 38 | |
36 | 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 | 40 | respond_to do |format| |
52 | 41 | format.html |
53 | 42 | format.js |
... | ... | @@ -142,4 +131,22 @@ class MergeRequestsController < ApplicationController |
142 | 131 | def module_enabled |
143 | 132 | return render_404 unless @project.merge_requests_enabled |
144 | 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 | 152 | end | ... | ... |
app/views/commits/_diffs.html.haml
... | ... | @@ -35,5 +35,4 @@ |
35 | 35 | .diff_file_content_image{:class => image_diff_class(diff)} |
36 | 36 | %img{:src => "data:#{file.mime_type};base64,#{Base64.encode64(file.data)}"} |
37 | 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 | -- 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 | -%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 @@ |
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 @@ |
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 @@ |
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 @@ |
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 @@ |
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 @@ |
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 | 61 | t.boolean "closed", :default => false, :null => false |
62 | 62 | t.datetime "created_at", :null => false |
63 | 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 | 66 | t.boolean "merged", :default => false, :null => false |
67 | 67 | t.integer "state", :default => 1, :null => false |
68 | 68 | end | ... | ... |