System notice: In light of the Debian OpenSSL security issue we've regenerated the server keys. See this thread for instructions and the new key fingerprints.

Commit 6dfcf347dbc29f79d7d4b70409e5cf07aa64b1a7

Merge commit 'johan/new-ui' into new-ui

Commit diff

app/controllers/users_controller.rb

 
1414
1515 @commits_last_week = @user.events.count(:all,
1616 :conditions => ["created_at > ? AND action = ?", 7.days.ago, Action::COMMIT])
17 @atom_auto_discovery_url = formatted_user_path(@user, :atom)
17 @atom_auto_discovery_url = formatted_feed_user_path(@user, :atom)
1818
1919 respond_to do |format|
2020 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) }
2131 format.atom { }
2232 end
2333 end
toggle raw diff

app/helpers/application_helper.rb

 
22module ApplicationHelper
33 include TagsHelper
44
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
510 def default_css_tag_sizes
611 %w(tag_size_1 tag_size_2 tag_size_3 tag_size_4)
712 end
149149 action = "<strong>deleted repository</strong> #{link_to h(target.title), project_path(target)}/#{event.data}"
150150 category = "project"
151151 when Action::COMMIT
152 project = target.project
152 project = event.project
153153 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 = truncate(event.body, 150)
154 body = link_to(h(truncate(event.body, 150)), project_repository_commit_path(project, target, event.data))
155155 category = "commit"
156156 when Action::CREATE_BRANCH
157157 project = target.project
toggle raw diff

app/views/projects/show.html.erb

 
55 <%= auto_link(markdown(sanitize(@project.description)), :urls) -%>
66</div>
77
8<h2>Activities<%= link_to image_tag("feed.png", :width => 24, :height => 24), @atom_auto_discovery_url %></h2>
8<h2>Activities<%= feed_icon @atom_auto_discovery_url %></h2>
99<%= render :partial => "events/events", :locals => { :events => @events } -%>
1010
1111<% content_for :submenu do -%>
toggle raw diff

app/views/repositories/show.html.erb

 
77
88 <%= render :partial => "infobox" -%>
99
10 <%= render_readme(@repository) %>
10 <%#= render_readme(@repository) %>
1111
12 <h2>Activities <%= link_to image_tag("feed.png", :width => 24, :height => 24), @atom_auto_discovery_url %></h2>
12 <h2>Activities <%= feed_icon @atom_auto_discovery_url %></h2>
1313 <%= render :partial => "events/events", :locals => { :events => @events } -%>
1414<% end -%>
1515
toggle raw diff

app/views/users/feed.atom.builder

 
1atom_feed do |feed|
2 feed.title("Gitorious: #{@user.login}'s activity")
3 feed.updated((@events.blank? ? Time.now : @events.first.created_at))
4
5 @events.each do |event|
6 action, body, category = action_and_body_for_event(event)
7 item_url = "http://#{GitoriousConfig['gitorious_host']}" + user_path(@user)
8 feed.entry(event, :url => item_url) do |entry|
9 entry.title("#{h(event.user.login)} #{strip_tags(action)}")
10 entry.content(<<-EOS, :type => 'html')
11<p>#{link_to event.user.login, user_path(event.user)} #{action}</p>
12<p>#{body}<p>
13EOS
14 entry.author do |author|
15 author.name(event.user.login)
16 end
17 end
18 end
19end
toggle raw diff

app/views/users/show.atom.builder

 
0atom_feed do |feed|
1 feed.title("Gitorious: #{@user.login}'s activity")
2 feed.updated((@events.blank? ? Time.now : @events.first.created_at))
3
4 @events.each do |event|
5 action, body, category = action_and_body_for_event(event)
6 item_url = "http://#{GitoriousConfig['gitorious_host']}" + user_path(@user)
7 feed.entry(event, :url => item_url) do |entry|
8 entry.title("#{h(event.user.login)} #{strip_tags(action)}")
9 entry.content(<<-EOS, :type => 'html')
10<p>#{link_to event.user.login, user_path(event.user)} #{action}</p>
11<p>#{body}<p>
12EOS
13 entry.author do |author|
14 author.name(event.user.login)
15 end
16 end
17 end
18end
toggle raw diff

app/views/users/show.html.erb

 
11<% @page_title = h(@user.login) -%>
22
33<% unless @events.empty? -%>
4 <h2>Activities<%= link_to image_tag("feed.png", :width => 24, :height => 24), @atom_auto_discovery_url %></h2>
4 <h2>Activities<%= feed_icon @atom_auto_discovery_url %></h2>
55 <%= render :partial => "events/events", :locals => { :events => @events } -%>
66<% end -%>
77
toggle raw diff

config/routes.rb

 
2424 account.resources :keys
2525 end
2626 map.connect "users/activate/:activation_code", :controller => "users", :action => "activate"
27 map.resources :users, :requirements => {:id => /[^\/\\\.\s]+/ }, :collection => { # FIXME: fails if login contains .
27 map.resources :users, :requirements => {:id => /.+/ }, :collection => {
2828 :forgot_password => :get,
2929 :reset_password => :post,
30 }
30 }, :member => { :feed => :get }
3131 map.resources :events
3232 map.resource :sessions
3333 map.with_options(:controller => "projects", :action => "category") do |project_cat|
toggle raw diff

public/images/feed_12.png

 
toggle raw diff

public/stylesheets/base.css

 
11561156 background: #b6babc;
11571157}
11581158
1159.event_instance .event_category.comment { background: #a49d98; }
1160.event_instance .event_category.project { background: #98a49f; }
1161.event_instance .event_category.merge_request { background: #a2a498; }
1162
11591163/* repository meta (overview apge) */
11601164table.repository_meta {
11611165/* border: 1px solid #ddd;*/
11981198table.repository_meta .meta td .bignum {
11991199 font-size: 20px;
12001200}
1201table.repository_meta .graph td { text-align:center; }
1201table.repository_meta .graph td { text-align:center; }
1202
1203.feed_icon { margin: 0 4px 0 4px; }
toggle raw diff

script/rebuild_events

 
77
88abort("Usage: #{$0} repo_id") unless ARGV[0]
99
10$stdout.sync = true
11
1012def create_repo_creation_events_for(project)
1113 project.repository_clones.each do |repo|
1214 puts "creating Repository clone event in #{project.slug}/#{repo.name}"
13 # project.create_event(Action::CLONE_REPOSITORY, repo, repo.user, repo.parent_id)
1415 project.events.create({
1516 :action => Action::CLONE_REPOSITORY,
1617 :target => repo,
2525def create_comment_events_for(repo, project)
2626 repo.comments.each do |comment|
2727 puts "creating Comment event on #{project.slug}/#{repo.name}"
28 #project.create_event(Action::COMMENT, comment, comment.user)
2928 project.events.create({
3029 :action => Action::COMMENT,
3130 :target => comment,
6767 users_commits[commit.committer.email] ||= []
6868 users_commits[commit.committer.email] << commit
6969 end
70
70
7171 users = User.find(:all, :conditions => ['email in (?)', users_commits.keys] )
7272 users.each do |user|
7373 commits = users_commits[user.email]
74
74 puts "\nindexing #{commits.size} commits for #{user.email} in #{project.slug}/#{repo.name}:#{head.name}"
7575 commits.each_index do |i|
7676 commit = commits[i]
7777 previous_commit = commits[i-1]
152152 end
153153 end
154154
155 puts "#{current_rev_type}#{action.inspect} in #{project.slug}/#{repo.name}:#{head.name}: #{commit.short_message}"
156 #project.create_event(action_id, repo, user, commit.id, commit.message)
155 print "." if (i % 10 == 1)
156 #puts "#{current_rev_type}#{action.inspect} in #{project.slug}/#{repo.name}:#{head.name}: #{commit.short_message}"
157157 project.events.create({
158158 :action => action_id || Action::COMMIT,
159159 :target => repo,
163163 :created_at => commit.committed_date})
164164 end
165165 commits = nil
166 puts
166167 end
167168 users_commits = nil
168169 end
toggle raw diff

spec/controllers/users_controller_spec.rb

 
9898 (assigns[:commits_last_week] >= 0).should == true
9999 end
100100
101 it "#show sets atom feed autodiscovery" do
102 user = users(:johan)
103 get :show, :id => user.login
104 assigns[:atom_auto_discovery_url].should == formatted_feed_user_path(user, :atom)
105 end
106
107 it "has an atom feed" do
108 user = users(:johan)
109 get :feed, :id => user.login, :format => "atom"
110 response.should be_success
111 assigns[:user].should == user
112 assigns[:events].should == user.events.find(:all, :limit => 30, :order => "created_at desc")
113 end
114
101115 describe "#forgot_password" do
102116 it "GETs the page fine for everyone" do
103117 get :forgot_password
toggle raw diff