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
return render "projects/empty" unless @project.repo_exists? && @project.has_commits?
limit = (params[:limit] || 20).to_i
@activities = @project.cached_updates(limit)
@activities = @project.updates_wo_repo(limit)
end
def files

View file

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

View file

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

View file

@ -79,6 +79,7 @@ class Project < ActiveRecord::Base
:repo_exists?,
:commit,
:commits,
:commits_with_refs,
:tree,
:heads,
:commits_since,
@ -144,6 +145,10 @@ class Project < ActiveRecord::Base
users_projects.find_by_user_id(user_id)
end
def fresh_merge_requests(n)
merge_requests.includes(:project, :author).order("created_at desc").first(n)
end
def fresh_issues(n)
issues.includes(:project, :author).order("created_at desc").first(n)
end
@ -290,6 +295,16 @@ class Project < ActiveRecord::Base
end[0...n]
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
unless owner.can_create_project?
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]
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)
commits = heads.map do |h|
repo.log(h.name, nil, :since => date).each { |c| Commit.new(c, h) }

View file

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

View file

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

View file

@ -4,4 +4,18 @@
#news-feed.news-feed
.project-box.project-updates.ui-box.ui-box-small.ui-box-big
- @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)}
%span.update-title{:style => "margin-bottom:0px;"}
= tag.name
%span.update-author.right
= time_ago_in_words(tag.commit.committed_date)
ago
- else
%h3 No tags