Commit 4cbfe942 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge pull request #1613 from tsigo/performance

Improve performance of Commits#show
parents dc53a4f7 5e3be9cd
...@@ -16,13 +16,15 @@ class CommitDecorator < ApplicationDecorator ...@@ -16,13 +16,15 @@ class CommitDecorator < ApplicationDecorator
# In case this first line is longer than 80 characters, it is cut off # In case this first line is longer than 80 characters, it is cut off
# after 70 characters and ellipses (`&hellp;`) are appended. # after 70 characters and ellipses (`&hellp;`) are appended.
def title def title
return no_commit_message if safe_message.blank? title = safe_message
title_end = safe_message.index(/\n/) return no_commit_message if title.blank?
if (!title_end && safe_message.length > 80) || (title_end && title_end > 80)
safe_message[0..69] << "&hellip;".html_safe title_end = title.index(/\n/)
if (!title_end && title.length > 80) || (title_end && title_end > 80)
title[0..69] << "&hellip;".html_safe
else else
safe_message.split(/\n/, 2).first title.split(/\n/, 2).first
end end
end end
...@@ -30,11 +32,13 @@ class CommitDecorator < ApplicationDecorator ...@@ -30,11 +32,13 @@ class CommitDecorator < ApplicationDecorator
# #
# cut off, ellipses (`&hellp;`) are prepended to the commit message. # cut off, ellipses (`&hellp;`) are prepended to the commit message.
def description def description
title_end = safe_message.index(/\n/) description = safe_message
if (!title_end && safe_message.length > 80) || (title_end && title_end > 80)
"&hellip;".html_safe << safe_message[70..-1] title_end = description.index(/\n/)
if (!title_end && description.length > 80) || (title_end && title_end > 80)
"&hellip;".html_safe << description[70..-1]
else else
safe_message.split(/\n/, 2)[1].try(:chomp) description.split(/\n/, 2)[1].try(:chomp)
end end
end end
......
...@@ -107,7 +107,7 @@ class Commit ...@@ -107,7 +107,7 @@ class Commit
end end
def safe_message def safe_message
utf8 message @safe_message ||= utf8 message
end end
def created_at def created_at
......
...@@ -9,12 +9,12 @@ ...@@ -9,12 +9,12 @@
= nav_link(html_options: {class: branches_tab_class}) do = nav_link(html_options: {class: branches_tab_class}) do
= link_to project_repository_path(@project) do = link_to project_repository_path(@project) do
Branches Branches
%span.badge= @project.repo.branch_count %span.badge= @project.branches.length
= nav_link(controller: :repositories, action: :tags) do = nav_link(controller: :repositories, action: :tags) do
= link_to tags_project_repository_path(@project) do = link_to tags_project_repository_path(@project) do
Tags Tags
%span.badge= @project.repo.tag_count %span.badge= @project.tags.length
- if current_controller?(:commits) && current_user.private_token - if current_controller?(:commits) && current_user.private_token
%li.right %li.right
......
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]}&hellip;"
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]}&hellip;"
end
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment