summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohan Sørensen <johan@johansorensen.com>2008-04-21 00:11:04 +0200
committerJohan Sørensen <johan@johansorensen.com>2008-04-21 00:11:04 +0200
commitd46486643c475436b7938b955e7d1582ef1a90c2 (patch)
tree22035666d67bddacd486bae5bd7eb521fd1103b7
parenta6ecefdc8ea78756d1ec63f8de846b3202545df4 (diff)
downloadgitorious-mainline-outdated-d46486643c475436b7938b955e7d1582ef1a90c2.zip
gitorious-mainline-outdated-d46486643c475436b7938b955e7d1582ef1a90c2.tar.gz
gitorious-mainline-outdated-d46486643c475436b7938b955e7d1582ef1a90c2.tar.bz2
Moved events to be primarily pivoting around the project.
-rw-r--r--app/controllers/comments_controller.rb2
-rw-r--r--app/controllers/committers_controller.rb4
-rw-r--r--app/controllers/merge_requests_controller.rb8
-rw-r--r--app/controllers/projects_controller.rb6
-rw-r--r--app/controllers/repositories_controller.rb4
-rw-r--r--app/models/action.rb2
-rwxr-xr-xapp/models/event.rb1
-rw-r--r--app/models/project.rb6
-rw-r--r--app/models/user.rb4
-rw-r--r--app/views/events/_events.html.erb2
-rwxr-xr-xdata/hooks/post-receive7
-rw-r--r--db/migrate/024_create_events.rb2
-rw-r--r--spec/controllers/events_controller_spec.rb2
-rw-r--r--spec/models/event_spec.rb13
-rw-r--r--spec/models/project_spec.rb29
15 files changed, 59 insertions, 33 deletions
diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb
index 37d293f..1a31794 100644
--- a/app/controllers/comments_controller.rb
+++ b/app/controllers/comments_controller.rb
@@ -29,7 +29,7 @@ class CommentsController < ApplicationController
@comment.project = @project
respond_to do |format|
if @comment.save
- current_user.create_event(Action::COMMENT, @comment)
+ @project.create_event(Action::COMMENT, @comment, current_user)
format.html do
flash[:success] = "Your comment was added"
redirect_to project_repository_comments_path(@project, @repository)
diff --git a/app/controllers/committers_controller.rb b/app/controllers/committers_controller.rb
index fafeef5..fe2b4d0 100644
--- a/app/controllers/committers_controller.rb
+++ b/app/controllers/committers_controller.rb
@@ -22,7 +22,7 @@ class CommittersController < ApplicationController
respond_to do |format|
if @repository.add_committer(@committer)
@committership = @repository.committerships.find_by_user_id(@committer.id)
- current_user.create_event(Action::ADD_COMMITTER, @committership)
+ @project.create_event(Action::ADD_COMMITTER, @committership, current_user)
format.html { redirect_to([@repository.project, @repository]) }
format.xml do
render :xml => @committer
@@ -40,7 +40,7 @@ class CommittersController < ApplicationController
respond_to do |format|
if @committership.destroy
- current_user.create_event(Action::REMOVE_COMMITTER, @repository, params[:id])
+ @project.create_event(Action::REMOVE_COMMITTER, @repository, current_user, params[:id])
flash[:success] = "User removed from repository"
format.html { redirect_to [@repository.project, @repository] }
format.xml { render :nothing, :status => :ok }
diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb
index 58edb82..2799824 100644
--- a/app/controllers/merge_requests_controller.rb
+++ b/app/controllers/merge_requests_controller.rb
@@ -31,7 +31,7 @@ class MergeRequestsController < ApplicationController
@merge_request.user = current_user
respond_to do |format|
if @merge_request.save
- current_user.create_event(Action::REQUEST_MERGE, @merge_request)
+ @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
@@ -51,7 +51,7 @@ class MergeRequestsController < ApplicationController
# TODO: put to change status
@merge_request.status = params[:merge_request][:status]
if @merge_request.save
- current_user.create_event(Action::RESOLVE_MERGE_REQUEST, @merge_request)
+ @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]
@@ -64,7 +64,7 @@ class MergeRequestsController < ApplicationController
def update
@merge_request.attributes = params[:merge_request]
if @merge_request.save
- current_user.create_event(Action::UPDATE_MERGE_REQUEST, @merge_request)
+ @project.create_event(Action::UPDATE_MERGE_REQUEST, @merge_request, current_user)
flash[:success] = "Merge request was updated"
redirect_to [@project, @repository, @merge_request]
else
@@ -75,7 +75,7 @@ class MergeRequestsController < ApplicationController
def destroy
@merge_request.destroy
- current_user.create_event(Action::DELETE_MERGE_REQUEST, @repository)
+ @project.create_event(Action::DELETE_MERGE_REQUEST, @repository, current_user)
flash[:success] = "Merge request was retracted"
redirect_to project_repository_path(@project, @repository)
end
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 2b12466..1bd16a9 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -46,7 +46,7 @@ class ProjectsController < ApplicationController
@project = Project.new(params[:project])
@project.user = current_user
if @project.save
- current_user.create_event(Action::CREATE_PROJECT, @project)
+ @project.create_event(Action::CREATE_PROJECT, @project, current_user)
redirect_to projects_path
else
render :action => 'new'
@@ -65,7 +65,7 @@ class ProjectsController < ApplicationController
end
@project.attributes = params[:project]
if @project.save
- current_user.create_event(Action::UPDATE_PROJECT, @project)
+ @project.create_event(Action::UPDATE_PROJECT, @project, current_user)
redirect_to project_path(@project)
else
render :action => 'new'
@@ -81,7 +81,7 @@ class ProjectsController < ApplicationController
if @project.can_be_deleted_by?(current_user)
project_title = @project.title
@project.destroy
- current_user.create_event(Action::DELETE_PROJECT, nil, project_title)
+ #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
diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb
index 9a083c7..22742d7 100644
--- a/app/controllers/repositories_controller.rb
+++ b/app/controllers/repositories_controller.rb
@@ -61,7 +61,7 @@ class RepositoriesController < ApplicationController
respond_to do |format|
if @repository.save
- current_user.create_event(Action::CLONE_REPOSITORY, @repository, @repository_to_clone.id)
+ @project.create_event(Action::CLONE_REPOSITORY, @repository, current_user, @repository_to_clone.id)
location = project_repository_path(@project, @repository)
format.html { redirect_to location }
@@ -94,7 +94,7 @@ class RepositoriesController < ApplicationController
repo_name = @repository.name
flash[:notice] = "The repository was deleted"
@repository.destroy
- current_user.create_event(Action::DELETE_REPOSITORY, @project, repo_name)
+ @project.create_event(Action::DELETE_REPOSITORY, @project, current_user, repo_name)
else
flash[:error] = "You're not the owner of this repository"
end
diff --git a/app/models/action.rb b/app/models/action.rb
index feb0fd0..9ec892f 100644
--- a/app/models/action.rb
+++ b/app/models/action.rb
@@ -30,7 +30,7 @@ class Action
when DELETE_REPOSITORY
"delete repository"
when COMMIT
- "delete commit"
+ "commit"
when CREATE_BRANCH
"create branch"
when DELETE_BRANCH
diff --git a/app/models/event.rb b/app/models/event.rb
index 6cf798e..4b8e8f3 100755
--- a/app/models/event.rb
+++ b/app/models/event.rb
@@ -1,4 +1,5 @@
class Event < ActiveRecord::Base
belongs_to :user
+ belongs_to :project
belongs_to :target, :polymorphic => true
end
diff --git a/app/models/project.rb b/app/models/project.rb
index 35e9a2f..343ba98 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -9,7 +9,7 @@ class Project < ActiveRecord::Base
:class_name => "Repository"
has_many :repository_clones, :conditions => ["mainline = ?", false],
:class_name => "Repository"
- has_many :events, :as => :target, :dependent => :destroy
+ has_many :events, :order => "created_at asc"
is_indexed :fields => ["title", "description", "slug"],
:concatenate => [
@@ -133,6 +133,10 @@ class Project < ActiveRecord::Base
}
super({:procs => [info]}.merge(opts))
end
+
+ def create_event(action_id, target, user, data = nil, body = nil)
+ events.create(:action => action_id, :target => target, :user => user, :body => body, :data => data)
+ end
protected
def create_mainline_repository
diff --git a/app/models/user.rb b/app/models/user.rb
index fe453bb..8ae08b9 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -120,10 +120,6 @@ class User < ActiveRecord::Base
super({:except => [:activation_code, :crypted_password, :remember_token, :remember_token_expires_at, :salt, :ssh_key_id]}.merge(opts))
end
- def create_event(action_id, target, data = nil, body = nil)
- events.create(:action => action_id, :target => target, :body => body, :data => data)
- end
-
protected
# before filter
def encrypt_password
diff --git a/app/views/events/_events.html.erb b/app/views/events/_events.html.erb
index ae2b306..27a3c36 100644
--- a/app/views/events/_events.html.erb
+++ b/app/views/events/_events.html.erb
@@ -4,7 +4,7 @@
<li>
<div style="margin: 20px; padding-bottom: 10px;" >
<% unless action.empty? %>
- <%= link_to event.user.login, user_path(event.user) %> <%= action %> <%= time_ago_in_words(event.date) %>
+ <%= link_to event.user.login, user_path(event.user) %> <%= action %> <%= time_ago_in_words(event.created_at) %>
<% end %><br/>
<div style="float: left; margin: 5px;">
<%= gravatar(event.user.email, :size => 32) %>
diff --git a/data/hooks/post-receive b/data/hooks/post-receive
index 86151a5..a7e78e8 100755
--- a/data/hooks/post-receive
+++ b/data/hooks/post-receive
@@ -70,6 +70,7 @@ while line = gets
user = User.find_by_email(hash[:email])
if user.nil?
+ # TODO: no user should be ok, no need to skip
$stdout.puts "** The email '#{hash[:email]}' is not registered."
next
end
@@ -122,10 +123,10 @@ while line = gets
next unless action_id
- puts "#{hash[:author]}: #{Action.name(action_id)} #{ref} on #{slug} [#{hash[:date]}]"
- puts " #{hash[:message]}"
+ # puts "#{hash[:author]}: #{Action.name(action_id)} #{ref} on #{slug} [#{hash[:date]}]"
+ # puts " #{hash[:message]}"
- user.create_event(action_id, repository, ref, hash[:message])
+ project.create_event(action_id, repository, user, ref, hash[:message])
end
puts "=> Thanks! http://#{GitoriousConfig['gitorious_host']}/events"
diff --git a/db/migrate/024_create_events.rb b/db/migrate/024_create_events.rb
index 7f734ad..1d513de 100644
--- a/db/migrate/024_create_events.rb
+++ b/db/migrate/024_create_events.rb
@@ -2,6 +2,7 @@ class CreateEvents < ActiveRecord::Migration
def self.up
create_table :events do |t|
t.integer :user_id, :null => false
+ t.integer :project_id, :null => false
t.integer :action, :null => false
t.string :data # Additional data
t.text :body
@@ -13,6 +14,7 @@ class CreateEvents < ActiveRecord::Migration
end
add_index :events, :user_id
+ add_index :events, :project_id
end
def self.down
diff --git a/spec/controllers/events_controller_spec.rb b/spec/controllers/events_controller_spec.rb
index 6e34bee..8ca2d3e 100644
--- a/spec/controllers/events_controller_spec.rb
+++ b/spec/controllers/events_controller_spec.rb
@@ -12,7 +12,7 @@ describe EventsController do
end
it "shows news" do
- users(:johan).create_event(Action::CREATE_PROJECT, @repository, "", "")
+ projects(:johans).create_event(Action::CREATE_PROJECT, @repository, users(:johan), "", "")
do_get
response.should be_success
end
diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb
index 5548512..d59be01 100644
--- a/spec/models/event_spec.rb
+++ b/spec/models/event_spec.rb
@@ -5,6 +5,7 @@ describe Event do
@event = new_event
@user = users(:johan)
@repository = repositories(:johans)
+ @project = @repository.project
end
def new_event(opts={})
@@ -13,21 +14,13 @@ describe Event do
:body => "blabla"
}.merge(opts))
c.user = opts[:user] || users(:johan)
+ c.project = opts[:project] || @project
c
end
it "should have valid associations" do
@event.should have_valid_associations
- end
-
- it "should create an event from the action name" do
- @user.create_event(Action::CREATE_PROJECT, @repository, "", "").should_not == nil
- end
-
- it "should create an event even without a valid id" do
- @user.create_event(52342, @repository).should_not == nil
- end
-
+ end
end
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 1e90f6d..9f33bf3 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -113,5 +113,34 @@ describe Project do
project.send(attr).should be_blank
end
end
+
+ describe "Project events" do
+ before(:each) do
+ @project = projects(:johans)
+ @user = users(:johan)
+ @repository = @project.repositories.first
+ end
+
+ it "should create an event from the action name" do
+ @project.create_event(Action::CREATE_PROJECT, @repository, @user, "", "").should_not == nil
+ end
+
+ it "should create an event even without a valid id" do
+ @project.create_event(52342, @repository, @user).should_not == nil
+ end
+
+ it "creates valid attributes on the event" do
+ e = @project.create_event(Action::COMMIT, @repository, @user, "somedata", "a body")
+ e.should be_valid
+ e.new_record?.should == false
+ e.reload
+ e.action.should == Action::COMMIT
+ e.target.should == @repository
+ e.project.should == @project
+ e.user.should == @user
+ e.data.should == "somedata"
+ e.body.should == "a body"
+ end
+ end
end