Merge pull request #1613 from tsigo/performance
Improve performance of Commits#show
This commit is contained in:
commit
4cbfe9427b
4 changed files with 53 additions and 12 deletions
|
@ -16,13 +16,15 @@ class CommitDecorator < ApplicationDecorator
|
|||
# In case this first line is longer than 80 characters, it is cut off
|
||||
# after 70 characters and ellipses (`&hellp;`) are appended.
|
||||
def title
|
||||
return no_commit_message if safe_message.blank?
|
||||
title = safe_message
|
||||
|
||||
title_end = safe_message.index(/\n/)
|
||||
if (!title_end && safe_message.length > 80) || (title_end && title_end > 80)
|
||||
safe_message[0..69] << "…".html_safe
|
||||
return no_commit_message if title.blank?
|
||||
|
||||
title_end = title.index(/\n/)
|
||||
if (!title_end && title.length > 80) || (title_end && title_end > 80)
|
||||
title[0..69] << "…".html_safe
|
||||
else
|
||||
safe_message.split(/\n/, 2).first
|
||||
title.split(/\n/, 2).first
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -30,11 +32,13 @@ class CommitDecorator < ApplicationDecorator
|
|||
#
|
||||
# cut off, ellipses (`&hellp;`) are prepended to the commit message.
|
||||
def description
|
||||
title_end = safe_message.index(/\n/)
|
||||
if (!title_end && safe_message.length > 80) || (title_end && title_end > 80)
|
||||
"…".html_safe << safe_message[70..-1]
|
||||
description = safe_message
|
||||
|
||||
title_end = description.index(/\n/)
|
||||
if (!title_end && description.length > 80) || (title_end && title_end > 80)
|
||||
"…".html_safe << description[70..-1]
|
||||
else
|
||||
safe_message.split(/\n/, 2)[1].try(:chomp)
|
||||
description.split(/\n/, 2)[1].try(:chomp)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -107,7 +107,7 @@ class Commit
|
|||
end
|
||||
|
||||
def safe_message
|
||||
utf8 message
|
||||
@safe_message ||= utf8 message
|
||||
end
|
||||
|
||||
def created_at
|
||||
|
|
|
@ -9,12 +9,12 @@
|
|||
= nav_link(html_options: {class: branches_tab_class}) do
|
||||
= link_to project_repository_path(@project) do
|
||||
Branches
|
||||
%span.badge= @project.repo.branch_count
|
||||
%span.badge= @project.branches.length
|
||||
|
||||
= nav_link(controller: :repositories, action: :tags) do
|
||||
= link_to tags_project_repository_path(@project) do
|
||||
Tags
|
||||
%span.badge= @project.repo.tag_count
|
||||
%span.badge= @project.tags.length
|
||||
|
||||
- if current_controller?(:commits) && current_user.private_token
|
||||
%li.right
|
||||
|
|
37
spec/models/commit_spec.rb
Normal file
37
spec/models/commit_spec.rb
Normal file
|
@ -0,0 +1,37 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Commit do
|
||||
let(:commit) { create(:project).commit }
|
||||
|
||||
describe CommitDecorator do
|
||||
let(:decorator) { CommitDecorator.new(commit) }
|
||||
|
||||
describe '#title' do
|
||||
it "returns no_commit_message when safe_message is blank" do
|
||||
decorator.stub(:safe_message).and_return('')
|
||||
decorator.title.should == "--no commit message"
|
||||
end
|
||||
|
||||
it "truncates a message without a newline at 70 characters" do
|
||||
message = commit.safe_message * 10
|
||||
|
||||
decorator.stub(:safe_message).and_return(message)
|
||||
decorator.title.should == "#{message[0..69]}…"
|
||||
end
|
||||
|
||||
it "truncates a message with a newline before 80 characters at the newline" do
|
||||
message = commit.safe_message.split(" ").first
|
||||
|
||||
decorator.stub(:safe_message).and_return(message + "\n" + message)
|
||||
decorator.title.should == message
|
||||
end
|
||||
|
||||
it "truncates a message with a newline after 80 characters at 70 characters" do
|
||||
message = (commit.safe_message * 10) + "\n"
|
||||
|
||||
decorator.stub(:safe_message).and_return(message)
|
||||
decorator.title.should == "#{message[0..69]}…"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Reference in a new issue