| |   |
| 1 | events: |
| 2 | * need to create user-less events even we don't find matching users, otherwise it gets weird whenever there's commits from non-registered gitorious users (or users commit from another email). |
| 3 | - maybe save name+email in events table in that case, so we can hook them up to a user later if needed. |
| 4 | |
| 5 | new-ui: |
| 6 | * mandatory project descriptions, at least a sentence or two |
| 7 | * tweak fonts-sizes and line-heights |
| 8 | * Clone stats graph on repositories#index |
| 9 | * popular & active projects on frontpage |
| 10 | * make the top-header smaller (move gitorious logo to footer?) |
| 11 | |
| 1 | 12 | (in no particular order) |
| 2 | 13 | |
| 3 | 14 | two from Yurii: |
| … | … | |
| 17 | 17 | |
| 18 | 18 | * tree browser: deal better with funny characters: http://gitorious.org/projects/avara/repos/mainline/trees/master |
| 19 | 19 | * if you comment on a specific commit, you should get redirected back there |
| 20 | | * graphs should show username (if we have it) for avoiding confusion and for consistency |
| 21 | | ** Repository#commit_graph_data_by_author should just use git-shortlog summary instead of jumping through hoops about it |
| 22 | 20 | |
| 23 | 21 | > If you do `git archive --format=tar --prefix=myproject/ HEAD | gzip > |
| 24 | 22 | > myproject.tar.gz`, when .gitattributes specifies files that have |
| … | … | |
| 25 | 25 | > it'd be pretty nice if it did. |
| 26 | 26 | |
| 27 | 27 | * Deal gracefully with markdown errors (and/or look into using the other markdown libary instead) |
| 28 | | * Don't generate graphs with big "No Data", text even if there's no data |
| 29 | 28 | * Markdownify atom feed body for projects.atom |
| 30 | 29 | * Make the fact that you _can_ clone/fork any repo more visible, maybe reword it since people confuse it with local cloning |
| 31 | 30 | * Show the most recent mergerequests on users dashboard so they can track them |
| … | … | |
| 40 | 40 | * Nicer diff stats |
| 41 | 41 | * more interesting project stats on frontpage |
| 42 | 42 | * parse git submodule data and link to project if submodule is in gitorious |
| 43 | | * link to users in gitorious in commmits if email match |
| 44 | 43 | * add mainline as a remote branch in clones |
| 45 | 44 | * timezone support |
| 46 | 45 | * Email source_repository owner about merge_request changes |
| toggle raw diff |
--- a/TODO.txt
+++ b/TODO.txt
@@ -1,3 +1,14 @@
+events:
+* need to create user-less events even we don't find matching users, otherwise it gets weird whenever there's commits from non-registered gitorious users (or users commit from another email).
+- maybe save name+email in events table in that case, so we can hook them up to a user later if needed.
+
+new-ui:
+* mandatory project descriptions, at least a sentence or two
+* tweak fonts-sizes and line-heights
+* Clone stats graph on repositories#index
+* popular & active projects on frontpage
+* make the top-header smaller (move gitorious logo to footer?)
+
(in no particular order)
two from Yurii:
@@ -6,8 +17,6 @@ two from Yurii:
* tree browser: deal better with funny characters: http://gitorious.org/projects/avara/repos/mainline/trees/master
* if you comment on a specific commit, you should get redirected back there
-* graphs should show username (if we have it) for avoiding confusion and for consistency
-** Repository#commit_graph_data_by_author should just use git-shortlog summary instead of jumping through hoops about it
> If you do `git archive --format=tar --prefix=myproject/ HEAD | gzip >
> myproject.tar.gz`, when .gitattributes specifies files that have
@@ -16,7 +25,6 @@ two from Yurii:
> it'd be pretty nice if it did.
* Deal gracefully with markdown errors (and/or look into using the other markdown libary instead)
-* Don't generate graphs with big "No Data", text even if there's no data
* Markdownify atom feed body for projects.atom
* Make the fact that you _can_ clone/fork any repo more visible, maybe reword it since people confuse it with local cloning
* Show the most recent mergerequests on users dashboard so they can track them
@@ -32,7 +40,6 @@ two from Yurii:
* Nicer diff stats
* more interesting project stats on frontpage
* parse git submodule data and link to project if submodule is in gitorious
-* link to users in gitorious in commmits if email match
* add mainline as a remote branch in clones
* timezone support
* Email source_repository owner about merge_request changes |
| |   |
| 31 | 31 | @merge_request.user = current_user |
| 32 | 32 | respond_to do |format| |
| 33 | 33 | if @merge_request.save |
| 34 | @project.create_event(Action::REQUEST_MERGE, @merge_request, current_user) |
| 34 | 35 | format.html { |
| 35 | 36 | flash[:success] = %Q{You sent a merge request to "#{@merge_request.target_repository.name}"} |
| 36 | 37 | redirect_to project_repository_path(@project, @repository) and return |
| … | … | |
| 51 | 51 | # TODO: put to change status |
| 52 | 52 | @merge_request.status = params[:merge_request][:status] |
| 53 | 53 | if @merge_request.save |
| 54 | @project.create_event(Action::RESOLVE_MERGE_REQUEST, @merge_request, current_user) |
| 54 | 55 | flash[:notice] = "The merge request was marked as #{@merge_request.status_string}" |
| 55 | 56 | end |
| 56 | 57 | redirect_to [@project, @repository, @merge_request] |
| … | … | |
| 64 | 64 | def update |
| 65 | 65 | @merge_request.attributes = params[:merge_request] |
| 66 | 66 | if @merge_request.save |
| 67 | @project.create_event(Action::UPDATE_MERGE_REQUEST, @merge_request, current_user) |
| 67 | 68 | flash[:success] = "Merge request was updated" |
| 68 | 69 | redirect_to [@project, @repository, @merge_request] |
| 69 | 70 | else |
| … | … | |
| 75 | 75 | |
| 76 | 76 | def destroy |
| 77 | 77 | @merge_request.destroy |
| 78 | @project.create_event(Action::DELETE_MERGE_REQUEST, @repository, current_user) |
| 78 | 79 | flash[:success] = "Merge request was retracted" |
| 79 | 80 | redirect_to project_repository_path(@project, @repository) |
| 80 | 81 | end |
| toggle raw diff |
--- a/app/controllers/merge_requests_controller.rb
+++ b/app/controllers/merge_requests_controller.rb
@@ -31,6 +31,7 @@ class MergeRequestsController < ApplicationController
@merge_request.user = current_user
respond_to do |format|
if @merge_request.save
+ @project.create_event(Action::REQUEST_MERGE, @merge_request, current_user)
format.html {
flash[:success] = %Q{You sent a merge request to "#{@merge_request.target_repository.name}"}
redirect_to project_repository_path(@project, @repository) and return
@@ -50,6 +51,7 @@ class MergeRequestsController < ApplicationController
# TODO: put to change status
@merge_request.status = params[:merge_request][:status]
if @merge_request.save
+ @project.create_event(Action::RESOLVE_MERGE_REQUEST, @merge_request, current_user)
flash[:notice] = "The merge request was marked as #{@merge_request.status_string}"
end
redirect_to [@project, @repository, @merge_request]
@@ -62,6 +64,7 @@ class MergeRequestsController < ApplicationController
def update
@merge_request.attributes = params[:merge_request]
if @merge_request.save
+ @project.create_event(Action::UPDATE_MERGE_REQUEST, @merge_request, current_user)
flash[:success] = "Merge request was updated"
redirect_to [@project, @repository, @merge_request]
else
@@ -72,6 +75,7 @@ class MergeRequestsController < ApplicationController
def destroy
@merge_request.destroy
+ @project.create_event(Action::DELETE_MERGE_REQUEST, @repository, current_user)
flash[:success] = "Merge request was retracted"
redirect_to project_repository_path(@project, @repository)
end |
| |   |
| 31 | 31 | |
| 32 | 32 | def show |
| 33 | 33 | @project = Project.find_by_slug!(params[:id], :include => [:repositories]) |
| 34 | | @repositories = @project.repositories |
| 34 | @mainline_repository = @project.mainline_repository |
| 35 | @repositories = @project.repository_clones |
| 36 | @events = @project.events.paginate(:all, :page => params[:page], |
| 37 | :order => "created_at desc", :include => [:user, :project]) |
| 38 | @atom_auto_discovery_url = formatted_project_path(@project, :atom) |
| 35 | 39 | |
| 36 | 40 | respond_to do |format| |
| 37 | 41 | format.html |
| 38 | | format.xml { render :xml => @project } |
| 42 | format.xml { render :xml => @project } |
| 43 | format.atom { } |
| 39 | 44 | end |
| 40 | 45 | end |
| 41 | 46 | |
| … | … | |
| 51 | 51 | @project = Project.new(params[:project]) |
| 52 | 52 | @project.user = current_user |
| 53 | 53 | if @project.save |
| 54 | @project.create_event(Action::CREATE_PROJECT, @project, current_user) |
| 54 | 55 | redirect_to projects_path |
| 55 | 56 | else |
| 56 | 57 | render :action => 'new' |
| … | … | |
| 70 | 70 | end |
| 71 | 71 | @project.attributes = params[:project] |
| 72 | 72 | if @project.save |
| 73 | @project.create_event(Action::UPDATE_PROJECT, @project, current_user) |
| 73 | 74 | redirect_to project_path(@project) |
| 74 | 75 | else |
| 75 | 76 | render :action => 'new' |
| … | … | |
| 84 | 84 | def destroy |
| 85 | 85 | @project = Project.find_by_slug!(params[:id]) |
| 86 | 86 | if @project.can_be_deleted_by?(current_user) |
| 87 | project_title = @project.title |
| 87 | 88 | @project.destroy |
| 89 | #current_user.create_event(Action::DELETE_PROJECT, nil, project_title) |
| 88 | 90 | else |
| 89 | 91 | flash[:error] = "You're not the owner of this project, or the project has clones" |
| 90 | 92 | end |
| toggle raw diff |
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -31,11 +31,16 @@ class ProjectsController < ApplicationController
def show
@project = Project.find_by_slug!(params[:id], :include => [:repositories])
- @repositories = @project.repositories
+ @mainline_repository = @project.mainline_repository
+ @repositories = @project.repository_clones
+ @events = @project.events.paginate(:all, :page => params[:page],
+ :order => "created_at desc", :include => [:user, :project])
+ @atom_auto_discovery_url = formatted_project_path(@project, :atom)
respond_to do |format|
format.html
- format.xml { render :xml => @project }
+ format.xml { render :xml => @project }
+ format.atom { }
end
end
@@ -46,6 +51,7 @@ class ProjectsController < ApplicationController
@project = Project.new(params[:project])
@project.user = current_user
if @project.save
+ @project.create_event(Action::CREATE_PROJECT, @project, current_user)
redirect_to projects_path
else
render :action => 'new'
@@ -64,6 +70,7 @@ class ProjectsController < ApplicationController
end
@project.attributes = params[:project]
if @project.save
+ @project.create_event(Action::UPDATE_PROJECT, @project, current_user)
redirect_to project_path(@project)
else
render :action => 'new'
@@ -77,7 +84,9 @@ class ProjectsController < ApplicationController
def destroy
@project = Project.find_by_slug!(params[:id])
if @project.can_be_deleted_by?(current_user)
+ project_title = @project.title
@project.destroy
+ #current_user.create_event(Action::DELETE_PROJECT, nil, project_title)
else
flash[:error] = "You're not the owner of this project, or the project has clones"
end |
| |   |
| 6 | 6 | session :off, :only => [:writable_by] |
| 7 | 7 | |
| 8 | 8 | def index |
| 9 | | redirect_to(project_path(@project)) |
| 9 | @repositories = @project.repositories.find(:all, :include => [:user, :events, :project]) |
| 10 | 10 | end |
| 11 | 11 | |
| 12 | 12 | def show |
| 13 | 13 | @repository = @project.repositories.find_by_name!(params[:id]) |
| 14 | | @comment_count = @repository.comments.count |
| 15 | | @merge_request_count = @repository.merge_requests.count_open |
| 16 | | if @repository.has_commits? |
| 17 | | @commits = @repository.paginated_commits(@repository.head_candidate.name, page=1) |
| 18 | | else |
| 19 | | @commits = [] |
| 20 | | end |
| 14 | @events = @repository.events.paginate(:all, :page => params[:page], |
| 15 | :order => "created_at desc") |
| 21 | 16 | |
| 22 | 17 | @atom_auto_discovery_url = formatted_project_repository_path(@project, @repository, :atom) |
| 23 | 18 | respond_to do |format| |
| 24 | 19 | format.html |
| 25 | 20 | format.xml { render :xml => @repository } |
| 26 | | format.atom { render :template => "logs/feed.atom.builder" } |
| 21 | format.atom { } |
| 27 | 22 | end |
| 28 | 23 | end |
| 29 | 24 | |
| … | … | |
| 56 | 56 | |
| 57 | 57 | respond_to do |format| |
| 58 | 58 | if @repository.save |
| 59 | @project.create_event(Action::CLONE_REPOSITORY, @repository, current_user, @repository_to_clone.id) |
| 60 | |
| 59 | 61 | location = project_repository_path(@project, @repository) |
| 60 | 62 | format.html { redirect_to location } |
| 61 | 63 | format.xml { render :xml => @repository, :status => :created, :location => location } |
| … | … | |
| 86 | 86 | def destroy |
| 87 | 87 | @repository = @project.repositories.find_by_name!(params[:id]) |
| 88 | 88 | if @repository.can_be_deleted_by?(current_user) |
| 89 | repo_name = @repository.name |
| 89 | 90 | flash[:notice] = "The repository was deleted" |
| 90 | 91 | @repository.destroy |
| 92 | @project.create_event(Action::DELETE_REPOSITORY, @project, current_user, repo_name) |
| 91 | 93 | else |
| 92 | 94 | flash[:error] = "You're not the owner of this repository" |
| 93 | 95 | end |
| toggle raw diff |
--- a/app/controllers/repositories_controller.rb
+++ b/app/controllers/repositories_controller.rb
@@ -6,24 +6,19 @@ class RepositoriesController < ApplicationController
session :off, :only => [:writable_by]
def index
- redirect_to(project_path(@project))
+ @repositories = @project.repositories.find(:all, :include => [:user, :events, :project])
end
def show
@repository = @project.repositories.find_by_name!(params[:id])
- @comment_count = @repository.comments.count
- @merge_request_count = @repository.merge_requests.count_open
- if @repository.has_commits?
- @commits = @repository.paginated_commits(@repository.head_candidate.name, page=1)
- else
- @commits = []
- end
+ @events = @repository.events.paginate(:all, :page => params[:page],
+ :order => "created_at desc")
@atom_auto_discovery_url = formatted_project_repository_path(@project, @repository, :atom)
respond_to do |format|
format.html
format.xml { render :xml => @repository }
- format.atom { render :template => "logs/feed.atom.builder" }
+ format.atom { }
end
end
@@ -61,6 +56,8 @@ class RepositoriesController < ApplicationController
respond_to do |format|
if @repository.save
+ @project.create_event(Action::CLONE_REPOSITORY, @repository, current_user, @repository_to_clone.id)
+
location = project_repository_path(@project, @repository)
format.html { redirect_to location }
format.xml { render :xml => @repository, :status => :created, :location => location }
@@ -89,8 +86,10 @@ class RepositoriesController < ApplicationController
def destroy
@repository = @project.repositories.find_by_name!(params[:id])
if @repository.can_be_deleted_by?(current_user)
+ repo_name = @repository.name
flash[:notice] = "The repository was deleted"
@repository.destroy
+ @project.create_event(Action::DELETE_REPOSITORY, @project, current_user, repo_name)
else
flash[:error] = "You're not the owner of this repository"
end |
| |   |
| 7 | 7 | |
| 8 | 8 | def dashboard |
| 9 | 9 | @projects = current_user.projects |
| 10 | | project_ids = @projects.map(&:id) |
| 11 | | @recent_comments = Comment.find(:all, :limit => 10, |
| 12 | | :conditions => ["comments.project_id in (?)", project_ids], |
| 13 | | :order => "comments.created_at desc", :include => [:user, :repository]) |
| 14 | | @repository_clones = Repository.find(:all, :order => "created_at desc", |
| 15 | | :conditions => ["project_id in (?) and mainline = ?", project_ids, false]) |
| 16 | | |
| 17 | | @repositories = current_user.repositories.find(:all, :conditions => ["mainline = ?", false]) |
| 10 | @repositories = current_user.repositories.find(:all, |
| 11 | :conditions => ["mainline = ?", false]) |
| 12 | event_project_ids = (@projects.map(&:id) + @repositories.map(&:project_id)).uniq |
| 13 | @events = Event.paginate(:all, |
| 14 | :page => params[:page], |
| 15 | :conditions => ["events.project_id in (?)", event_project_ids], |
| 16 | :order => "events.created_at desc", |
| 17 | :include => [:user, :project]) |
| 18 | 18 | end |
| 19 | 19 | |
| 20 | 20 | def about |
| toggle raw diff |
--- a/app/controllers/site_controller.rb
+++ b/app/controllers/site_controller.rb
@@ -7,14 +7,14 @@ class SiteController < ApplicationController
def dashboard
@projects = current_user.projects
- project_ids = @projects.map(&:id)
- @recent_comments = Comment.find(:all, :limit => 10,
- :conditions => ["comments.project_id in (?)", project_ids],
- :order => "comments.created_at desc", :include => [:user, :repository])
- @repository_clones = Repository.find(:all, :order => "created_at desc",
- :conditions => ["project_id in (?) and mainline = ?", project_ids, false])
-
- @repositories = current_user.repositories.find(:all, :conditions => ["mainline = ?", false])
+ @repositories = current_user.repositories.find(:all,
+ :conditions => ["mainline = ?", false])
+ event_project_ids = (@projects.map(&:id) + @repositories.map(&:project_id)).uniq
+ @events = Event.paginate(:all,
+ :page => params[:page],
+ :conditions => ["events.project_id in (?)", event_project_ids],
+ :order => "events.created_at desc",
+ :include => [:user, :project])
end
def about |
| |   |
| 7 | 7 | @user = User.find_by_login!(params[:id]) |
| 8 | 8 | @projects = @user.projects.find(:all, :include => [:tags, { :repositories => :project }]) |
| 9 | 9 | @repositories = @user.repositories.find(:all, :conditions => ["mainline = ?", false]) |
| 10 | @events = @user.events.paginate(:all, |
| 11 | :page => params[:page], |
| 12 | :order => "events.created_at desc", |
| 13 | :include => [:user, :project]) |
| 10 | 14 | |
| 11 | | @commits_last_week = 0 |
| 12 | | @projects.map{|p| p.repositories.first }.concat(@repositories).each do |repo| |
| 13 | | @commits_last_week += repo.count_commits_from_last_week_by_user(@user) |
| 15 | @commits_last_week = @user.events.count(:all, |
| 16 | :conditions => ["created_at > ? AND action = ?", 7.days.ago, Action::COMMIT]) |
| 17 | @atom_auto_discovery_url = formatted_feed_user_path(@user, :atom) |
| 18 | |
| 19 | respond_to do |format| |
| 20 | format.html { } |
| 21 | format.atom { redirect_to formatted_feed_user_path(@user, :atom) } |
| 22 | end |
| 23 | end |
| 24 | |
| 25 | def feed |
| 26 | @user = User.find_by_login!(params[:id]) |
| 27 | @events = @user.events.find(:all, :order => "events.created_at desc", |
| 28 | :include => [:user, :project], :limit => 30) |
| 29 | respond_to do |format| |
| 30 | format.html { redirect_to user_path(@user) } |
| 31 | format.atom { } |
| 14 | 32 | end |
| 15 | 33 | end |
| 16 | 34 | |
| toggle raw diff |
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -7,10 +7,28 @@ class UsersController < ApplicationController
@user = User.find_by_login!(params[:id])
@projects = @user.projects.find(:all, :include => [:tags, { :repositories => :project }])
@repositories = @user.repositories.find(:all, :conditions => ["mainline = ?", false])
+ @events = @user.events.paginate(:all,
+ :page => params[:page],
+ :order => "events.created_at desc",
+ :include => [:user, :project])
- @commits_last_week = 0
- @projects.map{|p| p.repositories.first }.concat(@repositories).each do |repo|
- @commits_last_week += repo.count_commits_from_last_week_by_user(@user)
+ @commits_last_week = @user.events.count(:all,
+ :conditions => ["created_at > ? AND action = ?", 7.days.ago, Action::COMMIT])
+ @atom_auto_discovery_url = formatted_feed_user_path(@user, :atom)
+
+ respond_to do |format|
+ format.html { }
+ format.atom { redirect_to formatted_feed_user_path(@user, :atom) }
+ end
+ end
+
+ def feed
+ @user = User.find_by_login!(params[:id])
+ @events = @user.events.find(:all, :order => "events.created_at desc",
+ :include => [:user, :project], :limit => 30)
+ respond_to do |format|
+ format.html { redirect_to user_path(@user) }
+ format.atom { }
end
end
|
| |   |
| 2 | 2 | module ApplicationHelper |
| 3 | 3 | include TagsHelper |
| 4 | 4 | |
| 5 | def feed_icon(url, alt_title = "Atom feed", size = :small) |
| 6 | link_to image_tag("feed_12.png", :class => "feed_icon"), url, |
| 7 | :alt => alt_title, :title => alt_title |
| 8 | end |
| 9 | |
| 5 | 10 | def default_css_tag_sizes |
| 6 | 11 | %w(tag_size_1 tag_size_2 tag_size_3 tag_size_4) |
| 7 | 12 | end |
| … | … | |
| 43 | 43 | end |
| 44 | 44 | end |
| 45 | 45 | |
| 46 | def submenu_selected_class_if_current?(section) |
| 47 | case section |
| 48 | when :overview |
| 49 | if %w[projects].include?(controller.controller_name ) |
| 50 | return "selected" |
| 51 | end |
| 52 | when :repositories |
| 53 | if %w[repositories trees logs commits comitters comments merge_requests |
| 54 | blobs committers].include?(controller.controller_name ) |
| 55 | return "selected" |
| 56 | end |
| 57 | end |
| 58 | end |
| 59 | |
| 46 | 60 | def link_to_with_selected(name, options = {}, html_options = nil) |
| 47 | 61 | html_options = current_page?(options) ? {:class => "selected"} : nil |
| 48 | 62 | link_to(name, options = {}, html_options) |
| … | … | |
| 120 | 120 | image_tag("graphs/#{filename}") |
| 121 | 121 | end |
| 122 | 122 | end |
| 123 | |
| 124 | def action_and_body_for_event(event) |
| 125 | target = event.target |
| 126 | action = "" |
| 127 | body = "" |
| 128 | category = "" |
| 129 | case event.action |
| 130 | when Action::CREATE_PROJECT |
| 131 | action = "<strong>created project</strong> #{link_to h(target.title), project_path(target)}" |
| 132 | body = truncate(target.stripped_description, 100) |
| 133 | category = "project" |
| 134 | when Action::DELETE_PROJECT |
| 135 | action = "<strong>deleted project</strong> #{h(event.data)}" |
| 136 | category = "project" |
| 137 | when Action::UPDATE_PROJECT |
| 138 | action = "<strong>updated project</strong> #{link_to h(target.title), project_path(target)}" |
| 139 | category = "project" |
| 140 | when Action::CLONE_REPOSITORY |
| 141 | original_repo = Repository.find_by_id(event.data.to_i) |
| 142 | next if original_repo.nil? |
| 143 | |
| 144 | project = target.project |
| 145 | |
| 146 | action = "<strong>forked</strong> #{link_to h(project.title), project_path(project)}/#{link_to h(original_repo.name), project_repository_url(project, original_repo)} in #{link_to h(target.name), project_repository_url(project, target)}" |
| 147 | category = "repository" |
| 148 | when Action::DELETE_REPOSITORY |
| 149 | action = "<strong>deleted repository</strong> #{link_to h(target.title), project_path(target)}/#{event.data}" |
| 150 | category = "project" |
| 151 | when Action::COMMIT |
| 152 | project = event.project |
| 153 | action = "<strong>committed</strong> #{link_to event.data[0,8], project_repository_commit_path(project, target, event.data)} to #{link_to h(project.slug), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}" |
| 154 | body = link_to(h(truncate(event.body, 150)), project_repository_commit_path(project, target, event.data)) |
| 155 | category = "commit" |
| 156 | when Action::CREATE_BRANCH |
| 157 | project = target.project |
| 158 | if event.data == "master" |
| 159 | action = "<strong>started development</strong> of #{link_to h(project.title), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}" |
| 160 | body = event.body |
| 161 | else |
| 162 | action = "<strong>created branch</strong> #{link_to h(event.data), project_repository_tree_path(project, target, event.data)} on #{link_to h(project.title), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}" |
| 163 | end |
| 164 | category = "commit" |
| 165 | when Action::DELETE_BRANCH |
| 166 | project = target.project |
| 167 | action = "<strong>deleted branch</strong> #{event.data} on #{link_to h(project.title), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}" |
| 168 | category = "commit" |
| 169 | when Action::CREATE_TAG |
| 170 | project = target.project |
| 171 | action = "<strong>tagged</strong> #{link_to h(project.title), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}" |
| 172 | body = "#{link_to event.data, project_repository_commit_path(project, target, event.data)}<br/>#{event.body}" |
| 173 | category = "commit" |
| 174 | when Action::DELETE_TAG |
| 175 | project = target.project |
| 176 | action = "<strong>deleted tag</strong> #{event.data} on #{link_to h(project.title), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}" |
| 177 | category = "commit" |
| 178 | when Action::ADD_COMMITTER |
| 179 | user = target.user |
| 180 | repo = target.repository |
| 181 | action = "<strong>added committer</strong> #{link_to user.login, user_path(user)} to #{link_to h(repo.project.title), project_path(repo.project)}/#{link_to h(repo.name), project_repository_url(repo.project, repo)}" |
| 182 | category = "repository" |
| 183 | when Action::REMOVE_COMMITTER |
| 184 | user = User.find_by_id(event.data.to_i) |
| 185 | next unless user |
| 186 | |
| 187 | project = target.project |
| 188 | action = "<strong>removed committer</strong> #{link_to user.login, user_path(user)} from #{link_to h(project.title), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}" |
| 189 | category = "repository" |
| 190 | when Action::COMMENT |
| 191 | project = target.project |
| 192 | repo = target.repository |
| 193 | |
| 194 | action = "<strong>commented</strong> on #{link_to h(project.title), project_path(project)}/#{link_to h(repo.name), project_repository_url(project, repo)}" |
| 195 | body = truncate(h(target.body), 150) |
| 196 | category = "comment" |
| 197 | when Action::REQUEST_MERGE |
| 198 | source_repository = target.source_repository |
| 199 | project = source_repository.project |
| 200 | target_repository = target.target_repository |
| 201 | |
| 202 | action = "<strong>requested merge</strong> #{link_to h(project.title), project_path(project)}/#{link_to h(source_repository.name), project_repository_url(project, source_repository)} to #{link_to h(project.title), project_path(project)}/#{link_to h(target_repository.name)}" |
| 203 | body = "#{link_to "review", [project, target_repository, target]}<br/>#{truncate(h(target.proposal), 100)}" |
| 204 | category = "merge request" |
| 205 | when Action::RESOLVE_MERGE_REQUEST |
| 206 | source_repository = target.source_repository |
| 207 | project = source_repository.project |
| 208 | target_repository = target.target_repository |
| 209 | |
| 210 | action = "<strong>resolved merge request </strong>to [#{target.status_string}] from #{link_to h(project.title), project_path(project)}/#{link_to h(source_repository.name), project_repository_url(project, source_repository)}" |
| 211 | category = "merge_request" |
| 212 | when Action::UPDATE_MERGE_REQUEST |
| 213 | source_repository = target.source_repository |
| 214 | project = source_repository.project |
| 215 | target_repository = target.target_repository |
| 216 | |
| 217 | action = "<strong>updated merge request</strong> from #{link_to h(project.title), project_path(project)}/#{link_to h(source_repository.name), project_repository_url(project, source_repository)}" |
| 218 | category = "merge_request" |
| 219 | when Action::DELETE_MERGE_REQUEST |
| 220 | project = target.project |
| 221 | |
| 222 | action = "<strong>deleted merge request</strong> from #{link_to h(project.title), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}" |
| 223 | category = "merge_request" |
| 224 | end |
| 225 | |
| 226 | [action, body, category] |
| 227 | end |
| 228 | |
| 229 | def sidebar_content? |
| 230 | !@content_for_sidebar.blank? |
| 231 | end |
| 232 | |
| 233 | def render_readme(repository) |
| 234 | possibilities = [] |
| 235 | repository.git.git.ls_tree({:name_only => true}, "master").each do |line| |
| 236 | possibilities << line[0, line.length-1] if line =~ /README.*/ |
| 237 | end |
| 238 | |
| 239 | return "" if possibilities.empty? |
| 240 | text = repository.git.git.show({}, "master:#{possibilities.first}") |
| 241 | markdown(text) rescue simple_format(sanitize(text)) |
| 242 | end |
| 243 | |
| 244 | def file_path(repository, filename, head = "master") |
| 245 | project_repository_blob_path(repository.project, repository, head, filename) |
| 246 | end |
| 123 | 247 | end |
| toggle raw diff |
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -2,6 +2,11 @@
module ApplicationHelper
include TagsHelper
+ def feed_icon(url, alt_title = "Atom feed", size = :small)
+ link_to image_tag("feed_12.png", :class => "feed_icon"), url,
+ :alt => alt_title, :title => alt_title
+ end
+
def default_css_tag_sizes
%w(tag_size_1 tag_size_2 tag_size_3 tag_size_4)
end
@@ -38,6 +43,20 @@ module ApplicationHelper
end
end
+ def submenu_selected_class_if_current?(section)
+ case section
+ when :overview
+ if %w[projects].include?(controller.controller_name )
+ return "selected"
+ end
+ when :repositories
+ if %w[repositories trees logs commits comitters comments merge_requests
+ blobs committers].include?(controller.controller_name )
+ return "selected"
+ end
+ end
+ end
+
def link_to_with_selected(name, options = {}, html_options = nil)
html_options = current_page?(options) ? {:class => "selected"} : nil
link_to(name, options = {}, html_options)
@@ -101,4 +120,128 @@ module ApplicationHelper
image_tag("graphs/#{filename}")
end
end
+
+ def action_and_body_for_event(event)
+ target = event.target
+ action = ""
+ body = ""
+ category = ""
+ case event.action
+ when Action::CREATE_PROJECT
+ action = "<strong>created project</strong> #{link_to h(target.title), project_path(target)}"
+ body = truncate(target.stripped_description, 100)
+ category = "project"
+ when Action::DELETE_PROJECT
+ action = "<strong>deleted project</strong> #{h(event.data)}"
+ category = "project"
+ when Action::UPDATE_PROJECT
+ action = "<strong>updated project</strong> #{link_to h(target.title), project_path(target)}"
+ category = "project"
+ when Action::CLONE_REPOSITORY
+ original_repo = Repository.find_by_id(event.data.to_i)
+ next if original_repo.nil?
+
+ project = target.project
+
+ action = "<strong>forked</strong> #{link_to h(project.title), project_path(project)}/#{link_to h(original_repo.name), project_repository_url(project, original_repo)} in #{link_to h(target.name), project_repository_url(project, target)}"
+ category = "repository"
+ when Action::DELETE_REPOSITORY
+ action = "<strong>deleted repository</strong> #{link_to h(target.title), project_path(target)}/#{event.data}"
+ category = "project"
+ when Action::COMMIT
+ project = event.project
+ action = "<strong>committed</strong> #{link_to event.data[0,8], project_repository_commit_path(project, target, event.data)} to #{link_to h(project.slug), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}"
+ body = link_to(h(truncate(event.body, 150)), project_repository_commit_path(project, target, event.data))
+ category = "commit"
+ when Action::CREATE_BRANCH
+ project = target.project
+ if event.data == "master"
+ action = "<strong>started development</strong> of #{link_to h(project.title), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}"
+ body = event.body
+ else
+ action = "<strong>created branch</strong> #{link_to h(event.data), project_repository_tree_path(project, target, event.data)} on #{link_to h(project.title), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}"
+ end
+ category = "commit"
+ when Action::DELETE_BRANCH
+ project = target.project
+ action = "<strong>deleted branch</strong> #{event.data} on #{link_to h(project.title), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}"
+ category = "commit"
+ when Action::CREATE_TAG
+ project = target.project
+ action = "<strong>tagged</strong> #{link_to h(project.title), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}"
+ body = "#{link_to event.data, project_repository_commit_path(project, target, event.data)}<br/>#{event.body}"
+ category = "commit"
+ when Action::DELETE_TAG
+ project = target.project
+ action = "<strong>deleted tag</strong> #{event.data} on #{link_to h(project.title), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}"
+ category = "commit"
+ when Action::ADD_COMMITTER
+ user = target.user
+ repo = target.repository
+ action = "<strong>added committer</strong> #{link_to user.login, user_path(user)} to #{link_to h(repo.project.title), project_path(repo.project)}/#{link_to h(repo.name), project_repository_url(repo.project, repo)}"
+ category = "repository"
+ when Action::REMOVE_COMMITTER
+ user = User.find_by_id(event.data.to_i)
+ next unless user
+
+ project = target.project
+ action = "<strong>removed committer</strong> #{link_to user.login, user_path(user)} from #{link_to h(project.title), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}"
+ category = "repository"
+ when Action::COMMENT
+ project = target.project
+ repo = target.repository
+
+ action = "<strong>commented</strong> on #{link_to h(project.title), project_path(project)}/#{link_to h(repo.name), project_repository_url(project, repo)}"
+ body = truncate(h(target.body), 150)
+ category = "comment"
+ when Action::REQUEST_MERGE
+ source_repository = target.source_repository
+ project = source_repository.project
+ target_repository = target.target_repository
+
+ action = "<strong>requested merge</strong> #{link_to h(project.title), project_path(project)}/#{link_to h(source_repository.name), project_repository_url(project, source_repository)} to #{link_to h(project.title), project_path(project)}/#{link_to h(target_repository.name)}"
+ body = "#{link_to "review", [project, target_repository, target]}<br/>#{truncate(h(target.proposal), 100)}"
+ category = "merge request"
+ when Action::RESOLVE_MERGE_REQUEST
+ source_repository = target.source_repository
+ project = source_repository.project
+ target_repository = target.target_repository
+
+ action = "<strong>resolved merge request </strong>to [#{target.status_string}] from #{link_to h(project.title), project_path(project)}/#{link_to h(source_repository.name), project_repository_url(project, source_repository)}"
+ category = "merge_request"
+ when Action::UPDATE_MERGE_REQUEST
+ source_repository = target.source_repository
+ project = source_repository.project
+ target_repository = target.target_repository
+
+ action = "<strong>updated merge request</strong> from #{link_to h(project.title), project_path(project)}/#{link_to h(source_repository.name), project_repository_url(project, source_repository)}"
+ category = "merge_request"
+ when Action::DELETE_MERGE_REQUEST
+ project = target.project
+
+ action = "<strong>deleted merge request</strong> from #{link_to h(project.title), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}"
+ category = "merge_request"
+ end
+
+ [action, body, category]
+ end
+
+ def sidebar_content?
+ !@content_for_sidebar.blank?
+ end
+
+ def render_readme(repository)
+ possibilities = []
+ repository.git.git.ls_tree({:name_only => true}, "master").each do |line|
+ possibilities << line[0, line.length-1] if line =~ /README.*/
+ end
+
+ return "" if possibilities.empty?
+ text = repository.git.git.show({}, "master:#{possibilities.first}")
+ markdown(text) rescue simple_format(sanitize(text))
+ end
+
+ def file_path(repository, filename, head = "master")
+ project_repository_blob_path(repository.project, repository, head, filename)
+ end
end |