Commit ecdf778e80d3804a076061989b5abb2d6e1e5c19
Exists in
master
and in
4 other branches
Merge branch 'public_submission_milestones_for_mr' of https://github.com/piffio/…
…gitlabhq into piffio-public_submission_milestones_for_mr Conflicts: app/views/merge_requests/_form.html.haml
Showing
14 changed files
with
124 additions
and
23 deletions
Show diff stats
app/assets/javascripts/merge_requests.js
... | ... | @@ -115,4 +115,15 @@ var MergeRequest = { |
115 | 115 | $(".merge_in_progress").hide(); |
116 | 116 | $(".automerge_widget.already_cannot_be_merged").show(); |
117 | 117 | } |
118 | +}; | |
119 | + | |
120 | +/* | |
121 | + * Filter merge requests | |
122 | + */ | |
123 | +function merge_requestsPage() { | |
124 | + $("#assignee_id").chosen(); | |
125 | + $("#milestone_id").chosen(); | |
126 | + $("#milestone_id, #assignee_id").on("change", function(){ | |
127 | + $(this).closest("form").submit(); | |
128 | + }); | |
118 | 129 | } | ... | ... |
app/assets/stylesheets/sections/merge_requests.scss
... | ... | @@ -121,3 +121,20 @@ li.merge_request { |
121 | 121 | .mr_direction_tip { |
122 | 122 | margin-top:40px |
123 | 123 | } |
124 | + | |
125 | +.merge_requests_form_box { | |
126 | + @extend .main_box; | |
127 | + .merge_requests_middle_box { | |
128 | + @extend .middle_box_content; | |
129 | + height:30px; | |
130 | + .merge_requests_assignee { | |
131 | + @extend .span6; | |
132 | + float:left; | |
133 | + } | |
134 | + .merge_requests_milestone { | |
135 | + @extend .span4; | |
136 | + float:left; | |
137 | + } | |
138 | + } | |
139 | +} | |
140 | + | ... | ... |
app/contexts/merge_requests_load_context.rb
... | ... | @@ -2,7 +2,7 @@ class MergeRequestsLoadContext < BaseContext |
2 | 2 | def execute |
3 | 3 | type = params[:f] |
4 | 4 | |
5 | - merge_requests = project.merge_requests | |
5 | + merge_requests = @project.merge_requests | |
6 | 6 | |
7 | 7 | merge_requests = case type |
8 | 8 | when 'all' then merge_requests |
... | ... | @@ -12,5 +12,18 @@ class MergeRequestsLoadContext < BaseContext |
12 | 12 | end.page(params[:page]).per(20) |
13 | 13 | |
14 | 14 | merge_requests.includes(:author, :project).order("closed, created_at desc") |
15 | + | |
16 | + @merge_requests = merge_requests | |
17 | + | |
18 | + # Filter by specific assignee_id (or lack thereof)? | |
19 | + if params[:assignee_id].present? | |
20 | + @merge_requests = merge_requests.where(assignee_id: (params[:assignee_id] == '0' ? nil : params[:assignee_id])) | |
21 | + end | |
22 | + | |
23 | + # Filter by specific milestone_id (or lack thereof)? | |
24 | + if params[:milestone_id].present? | |
25 | + @merge_requests = merge_requests.where(milestone_id: (params[:milestone_id] == '0' ? nil : params[:milestone_id])) | |
26 | + end | |
27 | + @merge_requests | |
15 | 28 | end |
16 | 29 | end | ... | ... |
app/controllers/milestones_controller.rb
app/models/merge_request.rb
... | ... | @@ -4,11 +4,13 @@ class MergeRequest < ActiveRecord::Base |
4 | 4 | include IssueCommonality |
5 | 5 | include Votes |
6 | 6 | |
7 | - attr_accessible :title, :assignee_id, :closed, :target_branch, :source_branch, | |
7 | + attr_accessible :title, :assignee_id, :closed, :target_branch, :source_branch, :milestone_id, | |
8 | 8 | :author_id_of_changes |
9 | 9 | |
10 | 10 | attr_accessor :should_remove_source_branch |
11 | 11 | |
12 | + belongs_to :milestone | |
13 | + | |
12 | 14 | BROKEN_DIFF = "--broken-diff" |
13 | 15 | |
14 | 16 | UNCHECKED = 1 |
... | ... | @@ -26,6 +28,10 @@ class MergeRequest < ActiveRecord::Base |
26 | 28 | where("source_branch LIKE :branch OR target_branch LIKE :branch", branch: branch_name) |
27 | 29 | end |
28 | 30 | |
31 | + def self.find_all_by_milestone(milestone) | |
32 | + where("milestone_id = :milestone_id", milestone_id: milestone) | |
33 | + end | |
34 | + | |
29 | 35 | def human_state |
30 | 36 | states = { |
31 | 37 | CAN_BE_MERGED => "can_be_merged", |
... | ... | @@ -212,5 +218,6 @@ end |
212 | 218 | # st_diffs :text(4294967295 |
213 | 219 | # merged :boolean default(FALSE), not null |
214 | 220 | # state :integer default(1), not null |
221 | +# milestone_id :integer | |
215 | 222 | # |
216 | 223 | ... | ... |
app/models/milestone.rb
app/views/merge_requests/_form.html.haml
... | ... | @@ -28,16 +28,22 @@ |
28 | 28 | %h4.cdark 2. Fill info |
29 | 29 | |
30 | 30 | .clearfix |
31 | - .main_box | |
31 | + .merge_requests_form_box | |
32 | 32 | .top_box_content |
33 | 33 | = f.label :title do |
34 | 34 | %strong= "Title *" |
35 | 35 | .input= f.text_field :title, class: "input-xxlarge pad js-gfm-input", maxlength: 255, rows: 5 |
36 | - .middle_box_content | |
37 | - = f.label :assignee_id do | |
38 | - %i.icon-user | |
39 | - Assign to | |
40 | - .input= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { include_blank: "Select user" }, {class: 'chosen span3'}) | |
36 | + .merge_requests_middle_box | |
37 | + .merge_requests_assignee | |
38 | + = f.label :assignee_id do | |
39 | + %i.icon-user | |
40 | + Assign to | |
41 | + .input= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { include_blank: "Select user" }, {class: 'chosen span3'}) | |
42 | + .merge_requests_milestone | |
43 | + = f.label :milestone_id do | |
44 | + %i.icon-time | |
45 | + Milestone | |
46 | + .input= f.select(:milestone_id, @project.milestones.active.all.collect {|p| [ p.title, p.id ] }, { include_blank: "Select milestone" }, {class: 'chosen'}) | |
41 | 47 | |
42 | 48 | .control-group |
43 | 49 | ... | ... |
app/views/merge_requests/_merge_request.html.haml
... | ... | @@ -10,6 +10,10 @@ |
10 | 10 | %span.btn.small.disabled.grouped |
11 | 11 | %i.icon-comment |
12 | 12 | = merge_request.mr_and_commit_notes.count |
13 | + - if merge_request.milestone_id? | |
14 | + %span.btn.small.disabled.grouped | |
15 | + %i.icon-time | |
16 | + = merge_request.project.milestones.find(merge_request.milestone_id).title | |
13 | 17 | %span.btn.small.disabled.grouped |
14 | 18 | = merge_request.source_branch |
15 | 19 | → | ... | ... |
app/views/merge_requests/index.html.haml
... | ... | @@ -9,19 +9,26 @@ |
9 | 9 | |
10 | 10 | .ui-box |
11 | 11 | .title |
12 | - %ul.nav.nav-pills | |
13 | - %li{class: ("active" if (params[:f] == 'open' || !params[:f]))} | |
14 | - = link_to project_merge_requests_path(@project, f: 'open') do | |
15 | - Open | |
16 | - %li{class: ("active" if params[:f] == "closed")} | |
17 | - = link_to project_merge_requests_path(@project, f: "closed") do | |
18 | - Closed | |
19 | - %li{class: ("active" if params[:f] == 'assigned-to-me')} | |
20 | - = link_to project_merge_requests_path(@project, f: 'assigned-to-me') do | |
21 | - To Me | |
22 | - %li{class: ("active" if params[:f] == 'all')} | |
23 | - = link_to project_merge_requests_path(@project, f: 'all') do | |
24 | - All | |
12 | + .left | |
13 | + %ul.nav.nav-pills | |
14 | + %li{class: ("active" if (params[:f] == 'open' || !params[:f]))} | |
15 | + = link_to project_merge_requests_path(@project, f: 'open', milestone_id: params[:milestone_id]) do | |
16 | + Open | |
17 | + %li{class: ("active" if params[:f] == "closed")} | |
18 | + = link_to project_merge_requests_path(@project, f: "closed", milestone_id: params[:milestone_id]) do | |
19 | + Closed | |
20 | + %li{class: ("active" if params[:f] == 'assigned-to-me')} | |
21 | + = link_to project_merge_requests_path(@project, f: 'assigned-to-me', milestone_id: params[:milestone_id]) do | |
22 | + To Me | |
23 | + %li{class: ("active" if params[:f] == 'all')} | |
24 | + = link_to project_merge_requests_path(@project, f: 'all', milestone_id: params[:milestone_id]) do | |
25 | + All | |
26 | + .right | |
27 | + = form_tag project_merge_requests_path(@project), id: "merge_requests_search_form", method: :get, class: :right do | |
28 | + = select_tag(:assignee_id, options_from_collection_for_select([unassigned_filter] + @project.users.all, "id", "name", params[:assignee_id]), prompt: "Assignee") | |
29 | + = select_tag(:milestone_id, options_from_collection_for_select([unassigned_filter] + @project.milestones.order("id desc").all, "id", "title", params[:milestone_id]), prompt: "Milestone") | |
30 | + = hidden_field_tag :f, params[:f] | |
31 | + .clearfix | |
25 | 32 | |
26 | 33 | %ul.unstyled |
27 | 34 | = render @merge_requests |
... | ... | @@ -35,3 +42,7 @@ |
35 | 42 | .span4.right |
36 | 43 | %span.cgray.right #{@merge_requests.total_count} merge requests for this filter |
37 | 44 | |
45 | +:javascript | |
46 | + $(function() { | |
47 | + merge_requestsPage(); | |
48 | + }) | ... | ... |
app/views/merge_requests/show/_mr_box.html.haml
... | ... | @@ -14,9 +14,13 @@ |
14 | 14 | %strong.author= link_to_merge_request_author(@merge_request) |
15 | 15 | |
16 | 16 | - if @merge_request.assignee |
17 | - %cite.cgray and currently assigned to | |
17 | + %cite.cgray , currently assigned to | |
18 | 18 | = image_tag gravatar_icon(@merge_request.assignee_email), width: 16, class: "lil_av" |
19 | 19 | %strong.author= link_to_merge_request_assignee(@merge_request) |
20 | + - if @merge_request.milestone | |
21 | + - milestone = @merge_request.milestone | |
22 | + %cite.cgray and attached to milestone | |
23 | + %strong= link_to_gfm truncate(milestone.title, length: 20), project_milestone_path(milestone.project, milestone) | |
20 | 24 | |
21 | 25 | |
22 | 26 | - if @merge_request.closed | ... | ... |
app/views/milestones/_milestone.html.haml
... | ... | @@ -4,6 +4,10 @@ |
4 | 4 | %span.btn.small.disabled.grouped= pluralize milestone.issues.count, 'issues' |
5 | 5 | - if milestone.issues.count > 0 |
6 | 6 | = link_to 'Browse Issues', project_issues_path(milestone.project, milestone_id: milestone.id), class: "btn small grouped" |
7 | + - if milestone.merge_requests.any? | |
8 | + %span.btn.small.disabled.grouped= pluralize milestone.issues.count, 'Merge Requests' | |
9 | + - if milestone.merge_requests.count > 0 | |
10 | + = link_to 'Browse Merge Requests', project_merge_requests_path(milestone.project, milestone_id: milestone.id), class: "btn small grouped" | |
7 | 11 | - if can? current_user, :admin_milestone, milestone.project |
8 | 12 | = link_to 'Edit', edit_project_milestone_path(milestone.project, milestone), class: "btn small edit-milestone-link grouped" |
9 | 13 | %h4 | ... | ... |
app/views/milestones/show.html.haml
... | ... | @@ -61,6 +61,22 @@ |
61 | 61 | %br |
62 | 62 | |
63 | 63 | .span6 |
64 | + %table.milestone-merge_requests-filter | |
65 | + %thead | |
66 | + %th | |
67 | + %ul.nav.nav-pills | |
68 | + %li.active= link_to('Open Merge Requests', '#') | |
69 | + %li=link_to('All Merge Requests', '#') | |
70 | + - @merge_requests.each do |merge_request| | |
71 | + %tr{data: {closed: merge_request.closed}} | |
72 | + %td | |
73 | + = link_to [@project, merge_request] do | |
74 | + %span.badge.badge-info ##{merge_request.id} | |
75 | + – | |
76 | + = link_to_gfm truncate(merge_request.title, length: 60), [@project, merge_request] | |
77 | + %br | |
78 | + | |
79 | + .span6 | |
64 | 80 | %table |
65 | 81 | %thead |
66 | 82 | %th Participants | ... | ... |
db/migrate/20121026114600_add_milestone_id_to_merge_requests.rb
0 → 100644
db/schema.rb
... | ... | @@ -11,7 +11,7 @@ |
11 | 11 | # |
12 | 12 | # It's strongly recommended to check this file into your version control system. |
13 | 13 | |
14 | -ActiveRecord::Schema.define(:version => 20121009205010) do | |
14 | +ActiveRecord::Schema.define(:version => 20121026114600) do | |
15 | 15 | |
16 | 16 | create_table "events", :force => true do |t| |
17 | 17 | t.string "target_type" |
... | ... | @@ -73,6 +73,7 @@ ActiveRecord::Schema.define(:version => 20121009205010) do |
73 | 73 | t.text "st_diffs", :limit => 2147483647 |
74 | 74 | t.boolean "merged", :default => false, :null => false |
75 | 75 | t.integer "state", :default => 1, :null => false |
76 | + t.integer "milestone_id" | |
76 | 77 | end |
77 | 78 | |
78 | 79 | add_index "merge_requests", ["project_id"], :name => "index_merge_requests_on_project_id" | ... | ... |