Project activities perfomance increased. Cache for project activitites disabled. Repository conception changed

This commit is contained in:
Dmitriy Zaporozhets 2012-01-04 08:17:41 +02:00
parent ac62036320
commit 0ebc610e49
10 changed files with 64 additions and 4 deletions

View file

@ -672,3 +672,17 @@ body.project-page h2.icon.loading {
} }
} }
} }
a.project-update.titled {
position: relative;
padding-right: 310px !important;
.right-block {
padding: 10px;
width: 280px;
background: #f5f5f5;
position: absolute;
right: 0;
top: 0;
}
}

View file

@ -69,7 +69,7 @@ class ProjectsController < ApplicationController
def show def show
return render "projects/empty" unless @project.repo_exists? && @project.has_commits? return render "projects/empty" unless @project.repo_exists? && @project.has_commits?
limit = (params[:limit] || 20).to_i limit = (params[:limit] || 20).to_i
@activities = @project.cached_updates(limit) @activities = @project.updates_wo_repo(limit)
end end
def files def files

View file

@ -9,7 +9,7 @@ class RepositoriesController < ApplicationController
layout "project" layout "project"
def show def show
@activities = @project.fresh_commits(20) @activities = @project.commits_with_refs(20)
end end
def branches def branches

View file

@ -2,6 +2,7 @@ class Commit
attr_accessor :commit attr_accessor :commit
attr_accessor :head attr_accessor :head
attr_accessor :refs
delegate :message, delegate :message,
:committed_date, :committed_date,

View file

@ -79,6 +79,7 @@ class Project < ActiveRecord::Base
:repo_exists?, :repo_exists?,
:commit, :commit,
:commits, :commits,
:commits_with_refs,
:tree, :tree,
:heads, :heads,
:commits_since, :commits_since,
@ -144,6 +145,10 @@ class Project < ActiveRecord::Base
users_projects.find_by_user_id(user_id) users_projects.find_by_user_id(user_id)
end end
def fresh_merge_requests(n)
merge_requests.includes(:project, :author).order("created_at desc").first(n)
end
def fresh_issues(n) def fresh_issues(n)
issues.includes(:project, :author).order("created_at desc").first(n) issues.includes(:project, :author).order("created_at desc").first(n)
end end
@ -290,6 +295,16 @@ class Project < ActiveRecord::Base
end[0...n] end[0...n]
end end
def updates_wo_repo(n=3)
[
fresh_issues(n),
fresh_merge_requests(n),
fresh_notes(n)
].compact.flatten.sort do |x, y|
y.created_at <=> x.created_at
end[0...n]
end
def check_limit def check_limit
unless owner.can_create_project? unless owner.can_create_project?
errors[:base] << ("Your own projects limit is #{owner.projects_limit}! Please contact administrator to increase it") errors[:base] << ("Your own projects limit is #{owner.projects_limit}! Please contact administrator to increase it")

View file

@ -112,6 +112,16 @@ class Repository
commits[0...n] commits[0...n]
end end
def commits_with_refs(n = 20)
commits = repo.refs.map { |ref| Commit.new(ref.commit, ref) }
commits.sort! do |x, y|
y.committed_date <=> x.committed_date
end[0..n]
commits
end
def commits_since(date) def commits_since(date)
commits = heads.map do |h| commits = heads.map do |h|
repo.log(h.name, nil, :since => date).each { |c| Commit.new(c, h) } repo.log(h.name, nil, :since => date).each { |c| Commit.new(c, h) }

View file

@ -1,7 +1,7 @@
.merge-tabs.repository .merge-tabs.repository
= link_to project_repository_path(@project), :class => "activities-tab tab #{'active' if current_page?(project_repository_path(@project)) }" do = link_to project_repository_path(@project), :class => "activities-tab tab #{'active' if current_page?(project_repository_path(@project)) }" do
%span %span
Activities History
= link_to branches_project_repository_path(@project), :class => "tab #{'active' if current_page?(branches_project_repository_path(@project)) }" do = link_to branches_project_repository_path(@project), :class => "tab #{'active' if current_page?(branches_project_repository_path(@project)) }" do
%span %span
Branches Branches

View file

@ -6,5 +6,8 @@
%a.update-item{:href => project_commits_path(@project, :ref => branch.name)} %a.update-item{:href => project_commits_path(@project, :ref => branch.name)}
%span.update-title{:style => "margin-bottom:0px;"} %span.update-title{:style => "margin-bottom:0px;"}
= branch.name = branch.name
%span.update-author.right
= time_ago_in_words(branch.commit.committed_date)
ago
- else - else
%h3 No brances %h3 No brances

View file

@ -4,4 +4,18 @@
#news-feed.news-feed #news-feed.news-feed
.project-box.project-updates.ui-box.ui-box-small.ui-box-big .project-box.project-updates.ui-box.ui-box-small.ui-box-big
- @activities.each do |update| - @activities.each do |update|
= render "projects/feed", :update => update, :project => @project %a.project-update.titled{:href => project_commits_path(@project, :ref => update.head.name)}
= image_tag gravatar_icon(update.author_email), :class => "left", :width => 40
%span.update-title
= dashboard_feed_title(update)
%span.update-author
%strong= update.author_name
authored
= time_ago_in_words(update.created_at)
ago
.right-block
%span.update-title
%span.commit.tag= update.head.name
%span.update-author
.right= truncate update.commit.id

View file

@ -6,5 +6,8 @@
%a.update-item{:href => project_commits_path(@project, :ref => tag.name)} %a.update-item{:href => project_commits_path(@project, :ref => tag.name)}
%span.update-title{:style => "margin-bottom:0px;"} %span.update-title{:style => "margin-bottom:0px;"}
= tag.name = tag.name
%span.update-author.right
= time_ago_in_words(tag.commit.committed_date)
ago
- else - else
%h3 No tags %h3 No tags