Commit 3063af5adcf1c0331681fbbc13e679de1eb96487
1 parent
3c6daec4
Exists in
master
and in
4 other branches
BaseContext
Controllers refactoring with contexts Move commit compare logic to model
Showing
11 changed files
with
132 additions
and
64 deletions
Show diff stats
| @@ -0,0 +1,26 @@ | @@ -0,0 +1,26 @@ | ||
| 1 | +class CommitLoad < BaseContext | ||
| 2 | + def execute | ||
| 3 | + result = { | ||
| 4 | + :commit => nil, | ||
| 5 | + :suppress_diff => false, | ||
| 6 | + :line_notes => [], | ||
| 7 | + :notes_count => 0, | ||
| 8 | + :note => nil | ||
| 9 | + } | ||
| 10 | + | ||
| 11 | + commit = project.commit(params[:id]) | ||
| 12 | + | ||
| 13 | + if commit | ||
| 14 | + commit = CommitDecorator.decorate(commit) | ||
| 15 | + line_notes = project.commit_line_notes(commit) | ||
| 16 | + | ||
| 17 | + result[:suppress_diff] = true if commit.diffs.size > 200 && !params[:force_show_diff] | ||
| 18 | + result[:commit] = commit | ||
| 19 | + result[:note] = project.build_commit_note(commit) | ||
| 20 | + result[:line_notes] = line_notes | ||
| 21 | + result[:notes_count] = line_notes.count + project.commit_notes(commit).count | ||
| 22 | + end | ||
| 23 | + | ||
| 24 | + result | ||
| 25 | + end | ||
| 26 | +end |
| @@ -0,0 +1,16 @@ | @@ -0,0 +1,16 @@ | ||
| 1 | +class MergeRequestsLoad < BaseContext | ||
| 2 | + def execute | ||
| 3 | + type = params[:f].to_i | ||
| 4 | + | ||
| 5 | + merge_requests = project.merge_requests | ||
| 6 | + | ||
| 7 | + merge_requests = case type | ||
| 8 | + when 1 then merge_requests | ||
| 9 | + when 2 then merge_requests.closed | ||
| 10 | + when 3 then merge_requests.opened.assigned(current_user) | ||
| 11 | + else merge_requests.opened | ||
| 12 | + end.page(params[:page]).per(20) | ||
| 13 | + | ||
| 14 | + merge_requests.includes(:author, :project).order("closed, created_at desc") | ||
| 15 | + end | ||
| 16 | +end |
| @@ -0,0 +1,30 @@ | @@ -0,0 +1,30 @@ | ||
| 1 | +class NotesLoad < BaseContext | ||
| 2 | + def execute | ||
| 3 | + target_type = params[:target_type] | ||
| 4 | + target_id = params[:target_id] | ||
| 5 | + first_id = params[:first_id] | ||
| 6 | + last_id = params[:last_id] | ||
| 7 | + | ||
| 8 | + | ||
| 9 | + @notes = case target_type | ||
| 10 | + when "commit" | ||
| 11 | + then project.commit_notes(project.commit(target_id)).fresh.limit(20) | ||
| 12 | + when "snippet" | ||
| 13 | + then project.snippets.find(target_id).notes | ||
| 14 | + when "wall" | ||
| 15 | + then project.common_notes.order("created_at DESC").fresh.limit(50) | ||
| 16 | + when "issue" | ||
| 17 | + then project.issues.find(target_id).notes.inc_author.order("created_at DESC").limit(20) | ||
| 18 | + when "merge_request" | ||
| 19 | + then project.merge_requests.find(target_id).notes.inc_author.order("created_at DESC").limit(20) | ||
| 20 | + end | ||
| 21 | + | ||
| 22 | + @notes = if last_id | ||
| 23 | + @notes.where("id > ?", last_id) | ||
| 24 | + elsif first_id | ||
| 25 | + @notes.where("id < ?", first_id) | ||
| 26 | + else | ||
| 27 | + @notes | ||
| 28 | + end | ||
| 29 | + end | ||
| 30 | +end |
app/controllers/commits_controller.rb
| @@ -26,43 +26,31 @@ class CommitsController < ApplicationController | @@ -26,43 +26,31 @@ class CommitsController < ApplicationController | ||
| 26 | end | 26 | end |
| 27 | 27 | ||
| 28 | def show | 28 | def show |
| 29 | - @commit = project.commit(params[:id]) | ||
| 30 | - | ||
| 31 | - git_not_found! and return unless @commit | ||
| 32 | - | ||
| 33 | - @commit = CommitDecorator.decorate(@commit) | ||
| 34 | - | ||
| 35 | - @note = @project.build_commit_note(@commit) | ||
| 36 | - @comments_allowed = true | ||
| 37 | - @line_notes = project.commit_line_notes(@commit) | ||
| 38 | - | ||
| 39 | - @notes_count = @line_notes.count + project.commit_notes(@commit).count | ||
| 40 | - | ||
| 41 | - if @commit.diffs.size > 200 && !params[:force_show_diff] | ||
| 42 | - @suppress_diff = true | 29 | + result = CommitLoad.new(project, current_user, params).execute |
| 30 | + | ||
| 31 | + @commit = result[:commit] | ||
| 32 | + | ||
| 33 | + if @commit | ||
| 34 | + @suppress_diff = result[:suppress_diff] | ||
| 35 | + @note = result[:note] | ||
| 36 | + @line_notes = result[:line_notes] | ||
| 37 | + @notes_count = result[:notes_count] | ||
| 38 | + @comments_allowed = true | ||
| 39 | + else | ||
| 40 | + return git_not_found! | ||
| 43 | end | 41 | end |
| 42 | + | ||
| 44 | rescue Grit::Git::GitTimeout | 43 | rescue Grit::Git::GitTimeout |
| 45 | render "huge_commit" | 44 | render "huge_commit" |
| 46 | end | 45 | end |
| 47 | 46 | ||
| 48 | def compare | 47 | def compare |
| 49 | - first = project.commit(params[:to].try(:strip)) | ||
| 50 | - last = project.commit(params[:from].try(:strip)) | 48 | + result = Commit.compare(project, params[:from], params[:to]) |
| 51 | 49 | ||
| 52 | - @diffs = [] | ||
| 53 | - @commits = [] | 50 | + @commits = result[:commits] |
| 51 | + @commit = result[:commit] | ||
| 52 | + @diffs = result[:diffs] | ||
| 54 | @line_notes = [] | 53 | @line_notes = [] |
| 55 | - | ||
| 56 | - if first && last | ||
| 57 | - commits = [first, last].sort_by(&:created_at) | ||
| 58 | - younger = commits.first | ||
| 59 | - older = commits.last | ||
| 60 | - | ||
| 61 | - | ||
| 62 | - @commits = project.repo.commits_between(younger.id, older.id).map {|c| Commit.new(c)} | ||
| 63 | - @diffs = project.repo.diff(younger.id, older.id) rescue [] | ||
| 64 | - @commit = Commit.new(older) | ||
| 65 | - end | ||
| 66 | end | 54 | end |
| 67 | 55 | ||
| 68 | def patch | 56 | def patch |
app/controllers/dashboard_controller.rb
| @@ -2,11 +2,8 @@ class DashboardController < ApplicationController | @@ -2,11 +2,8 @@ class DashboardController < ApplicationController | ||
| 2 | respond_to :html | 2 | respond_to :html |
| 3 | 3 | ||
| 4 | def index | 4 | def index |
| 5 | - @projects = current_user.projects.includes(:events).order("events.created_at DESC") | ||
| 6 | - @projects = @projects.page(params[:page]).per(40) | ||
| 7 | - | ||
| 8 | - @events = Event.where(:project_id => current_user.projects.map(&:id)).recent.limit(20) | ||
| 9 | - | 5 | + @projects = current_user.projects_with_events.page(params[:page]).per(40) |
| 6 | + @events = Event.recent_for_user(current_user).limit(20) | ||
| 10 | @last_push = current_user.recent_push | 7 | @last_push = current_user.recent_push |
| 11 | 8 | ||
| 12 | respond_to do |format| | 9 | respond_to do |format| |
app/controllers/merge_requests_controller.rb
| @@ -24,16 +24,7 @@ class MergeRequestsController < ApplicationController | @@ -24,16 +24,7 @@ class MergeRequestsController < ApplicationController | ||
| 24 | 24 | ||
| 25 | 25 | ||
| 26 | def index | 26 | def index |
| 27 | - @merge_requests = @project.merge_requests | ||
| 28 | - | ||
| 29 | - @merge_requests = case params[:f].to_i | ||
| 30 | - when 1 then @merge_requests | ||
| 31 | - when 2 then @merge_requests.closed | ||
| 32 | - when 3 then @merge_requests.opened.assigned(current_user) | ||
| 33 | - else @merge_requests.opened | ||
| 34 | - end.page(params[:page]).per(20) | ||
| 35 | - | ||
| 36 | - @merge_requests = @merge_requests.includes(:author, :project).order("closed, created_at desc") | 27 | + @merge_requests = MergeRequestsLoad.new(project, current_user, params).execute |
| 37 | end | 28 | end |
| 38 | 29 | ||
| 39 | def show | 30 | def show |
app/controllers/notes_controller.rb
| @@ -40,25 +40,6 @@ class NotesController < ApplicationController | @@ -40,25 +40,6 @@ class NotesController < ApplicationController | ||
| 40 | protected | 40 | protected |
| 41 | 41 | ||
| 42 | def notes | 42 | def notes |
| 43 | - @notes = case params[:target_type] | ||
| 44 | - when "commit" | ||
| 45 | - then project.commit_notes(project.commit((params[:target_id]))).fresh.limit(20) | ||
| 46 | - when "snippet" | ||
| 47 | - then project.snippets.find(params[:target_id]).notes | ||
| 48 | - when "wall" | ||
| 49 | - then project.common_notes.order("created_at DESC").fresh.limit(50) | ||
| 50 | - when "issue" | ||
| 51 | - then project.issues.find(params[:target_id]).notes.inc_author.order("created_at DESC").limit(20) | ||
| 52 | - when "merge_request" | ||
| 53 | - then project.merge_requests.find(params[:target_id]).notes.inc_author.order("created_at DESC").limit(20) | ||
| 54 | - end | ||
| 55 | - | ||
| 56 | - @notes = if params[:last_id] | ||
| 57 | - @notes.where("id > ?", params[:last_id]) | ||
| 58 | - elsif params[:first_id] | ||
| 59 | - @notes.where("id < ?", params[:first_id]) | ||
| 60 | - else | ||
| 61 | - @notes | ||
| 62 | - end | 43 | + @notes = NotesLoad.new(project, current_user, params).execute |
| 63 | end | 44 | end |
| 64 | end | 45 | end |
app/models/commit.rb
| @@ -80,6 +80,29 @@ class Commit | @@ -80,6 +80,29 @@ class Commit | ||
| 80 | def commits_between(repo, from, to) | 80 | def commits_between(repo, from, to) |
| 81 | repo.commits_between(from, to).map { |c| Commit.new(c) } | 81 | repo.commits_between(from, to).map { |c| Commit.new(c) } |
| 82 | end | 82 | end |
| 83 | + | ||
| 84 | + def compare(project, from, to) | ||
| 85 | + first = project.commit(to.try(:strip)) | ||
| 86 | + last = project.commit(from.try(:strip)) | ||
| 87 | + | ||
| 88 | + result = { | ||
| 89 | + :commits => [], | ||
| 90 | + :diffs => [], | ||
| 91 | + :commit => nil | ||
| 92 | + } | ||
| 93 | + | ||
| 94 | + if first && last | ||
| 95 | + commits = [first, last].sort_by(&:created_at) | ||
| 96 | + younger = commits.first | ||
| 97 | + older = commits.last | ||
| 98 | + | ||
| 99 | + result[:commits] = project.repo.commits_between(younger.id, older.id).map {|c| Commit.new(c)} | ||
| 100 | + result[:diffs] = project.repo.diff(younger.id, older.id) rescue [] | ||
| 101 | + result[:commit] = Commit.new(older) | ||
| 102 | + end | ||
| 103 | + | ||
| 104 | + result | ||
| 105 | + end | ||
| 83 | end | 106 | end |
| 84 | 107 | ||
| 85 | def persisted? | 108 | def persisted? |
app/models/event.rb
| @@ -28,6 +28,10 @@ class Event < ActiveRecord::Base | @@ -28,6 +28,10 @@ class Event < ActiveRecord::Base | ||
| 28 | end | 28 | end |
| 29 | end | 29 | end |
| 30 | 30 | ||
| 31 | + def self.recent_for_user user | ||
| 32 | + where(:project_id => user.projects.map(&:id)).recent | ||
| 33 | + end | ||
| 34 | + | ||
| 31 | # Next events currently enabled for system | 35 | # Next events currently enabled for system |
| 32 | # - push | 36 | # - push |
| 33 | # - new issue | 37 | # - new issue |
app/roles/account.rb
| @@ -55,4 +55,8 @@ module Account | @@ -55,4 +55,8 @@ module Account | ||
| 55 | # Take only latest one | 55 | # Take only latest one |
| 56 | events = events.recent.limit(1).first | 56 | events = events.recent.limit(1).first |
| 57 | end | 57 | end |
| 58 | + | ||
| 59 | + def projects_with_events | ||
| 60 | + projects.includes(:events).order("events.created_at DESC") | ||
| 61 | + end | ||
| 58 | end | 62 | end |