summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2012-03-07 21:27:38 +0200
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2012-03-07 21:27:38 +0200
commitbed70a93f51cda78e7a4b9adae75d10c3763af30 (patch)
treeb4a5b65b9e133ce4b8cc0f8947bbd6427490a0d6
parent05044658b398b10b9430579a2775878698b011bd (diff)
parentc9b64974c09cc32065280297570be9f57dfc2b31 (diff)
downloadgitlab-ce-bed70a93f51cda78e7a4b9adae75d10c3763af30.tar.gz
Merge branch 'master' of dev.gitlabhq.com:gitlabhq
-rw-r--r--app/assets/stylesheets/common.scss2
-rw-r--r--app/controllers/issues_controller.rb2
-rw-r--r--app/controllers/merge_requests_controller.rb2
-rw-r--r--app/models/activity_observer.rb17
-rw-r--r--app/models/event.rb30
-rw-r--r--app/models/issue.rb1
-rw-r--r--app/models/merge_request.rb1
-rw-r--r--app/models/project.rb5
-rw-r--r--app/views/dashboard/index.html.haml4
-rw-r--r--app/views/events/_event.html.haml6
-rw-r--r--app/views/events/_event_changed_issue.html.haml14
-rw-r--r--app/views/events/_event_changed_merge_request.html.haml19
-rw-r--r--app/views/events/_event_push.html.haml14
-rw-r--r--db/migrate/20120307095918_add_author_id_to_event.rb5
-rw-r--r--db/schema.rb3
15 files changed, 102 insertions, 23 deletions
diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss
index aa5f2120d39..a42fe7f8da2 100644
--- a/app/assets/stylesheets/common.scss
+++ b/app/assets/stylesheets/common.scss
@@ -599,7 +599,7 @@ p.time {
}
}
.dashboard_block {
- width:700px;
+ width:840px;
margin:auto;
.wll {
diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb
index 4e3be259463..53d8b74da8b 100644
--- a/app/controllers/issues_controller.rb
+++ b/app/controllers/issues_controller.rb
@@ -76,7 +76,7 @@ class IssuesController < ApplicationController
end
def update
- @issue.update_attributes(params[:issue])
+ @issue.update_attributes(params[:issue].merge(:author_id_of_changes => current_user.id))
respond_to do |format|
format.js
diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb
index 1cf75876426..9d5a401d06d 100644
--- a/app/controllers/merge_requests_controller.rb
+++ b/app/controllers/merge_requests_controller.rb
@@ -87,7 +87,7 @@ class MergeRequestsController < ApplicationController
def update
respond_to do |format|
- if @merge_request.update_attributes(params[:merge_request])
+ if @merge_request.update_attributes(params[:merge_request].merge(:author_id_of_changes => current_user.id))
format.html { redirect_to [@project, @merge_request], notice: 'Merge request was successfully updated.' }
format.json { head :ok }
else
diff --git a/app/models/activity_observer.rb b/app/models/activity_observer.rb
index 465641619e5..324d8207d22 100644
--- a/app/models/activity_observer.rb
+++ b/app/models/activity_observer.rb
@@ -1,12 +1,25 @@
class ActivityObserver < ActiveRecord::Observer
- observe :issue, :merge_request, :note
+ observe :issue, :merge_request
def after_create(record)
Event.create(
:project => record.project,
:target_id => record.id,
:target_type => record.class.name,
- :action => Event.determine_action(record)
+ :action => Event.determine_action(record),
+ :author_id => record.author_id
)
end
+
+ def after_save(record)
+ if record.changed.include?("closed")
+ Event.create(
+ :project => record.project,
+ :target_id => record.id,
+ :target_type => record.class.name,
+ :action => (record.closed ? Event::Closed : Event::Reopened),
+ :author_id => record.author_id_of_changes
+ )
+ end
+ end
end
diff --git a/app/models/event.rb b/app/models/event.rb
index c5c08df600b..8ab127c02a0 100644
--- a/app/models/event.rb
+++ b/app/models/event.rb
@@ -1,4 +1,6 @@
class Event < ActiveRecord::Base
+ default_scope where("author_id IS NOT NULL")
+
Created = 1
Updated = 2
Closed = 3
@@ -26,13 +28,22 @@ class Event < ActiveRecord::Base
# - new issue
# - merge request
def allowed?
- push? || new_issue? || new_merge_request?
+ push? || new_issue? || new_merge_request? ||
+ changed_merge_request? || changed_issue?
end
def push?
action == self.class::Pushed
end
+ def closed?
+ action == self.class::Closed
+ end
+
+ def reopened?
+ action == self.class::Reopened
+ end
+
def new_tag?
data[:ref]["refs/tags"]
end
@@ -57,10 +68,6 @@ class Event < ActiveRecord::Base
@tag_name ||= data[:ref].gsub("refs/tags/", "")
end
- def pusher
- User.find_by_id(data[:user_id])
- end
-
def new_issue?
target_type == "Issue" &&
action == Created
@@ -71,6 +78,16 @@ class Event < ActiveRecord::Base
action == Created
end
+ def changed_merge_request?
+ target_type == "MergeRequest" &&
+ [Closed, Reopened].include?(action)
+ end
+
+ def changed_issue?
+ target_type == "Issue" &&
+ [Closed, Reopened].include?(action)
+ end
+
def issue
target if target_type == "Issue"
end
@@ -80,7 +97,7 @@ class Event < ActiveRecord::Base
end
def author
- target.author
+ @author ||= User.find(author_id)
end
def commits
@@ -89,7 +106,6 @@ class Event < ActiveRecord::Base
end
end
- delegate :id, :name, :email, :to => :pusher, :prefix => true, :allow_nil => true
delegate :name, :email, :to => :author, :prefix => true, :allow_nil => true
delegate :title, :to => :issue, :prefix => true, :allow_nil => true
delegate :title, :to => :merge_request, :prefix => true, :allow_nil => true
diff --git a/app/models/issue.rb b/app/models/issue.rb
index aa0a2acc1e6..4210297c763 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -5,6 +5,7 @@ class Issue < ActiveRecord::Base
has_many :notes, :as => :noteable, :dependent => :destroy
attr_protected :author, :author_id, :project, :project_id
+ attr_accessor :author_id_of_changes
validates_presence_of :project_id
validates_presence_of :assignee_id
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 8af462427b8..978727243f6 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -5,6 +5,7 @@ class MergeRequest < ActiveRecord::Base
has_many :notes, :as => :noteable, :dependent => :destroy
attr_protected :author, :author_id, :project, :project_id
+ attr_accessor :author_id_of_changes
validates_presence_of :project_id
validates_presence_of :assignee_id
diff --git a/app/models/project.rb b/app/models/project.rb
index d9a9284e059..b7445db06c1 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -68,7 +68,8 @@ class Project < ActiveRecord::Base
Event.create(
:project => self,
:action => Event::Pushed,
- :data => data
+ :data => data,
+ :author_id => Key.find_by_identifier(author_key_id).user.id
)
end
@@ -259,7 +260,7 @@ class Project < ActiveRecord::Base
def commit(commit_id = nil)
commit = if commit_id
- repo.commits(commit_id).first
+ repo.commit(commit_id)
else
repo.commits.first
end
diff --git a/app/views/dashboard/index.html.haml b/app/views/dashboard/index.html.haml
index c7fbc8fd748..d0f80eefe50 100644
--- a/app/views/dashboard/index.html.haml
+++ b/app/views/dashboard/index.html.haml
@@ -20,8 +20,8 @@
.row
.dashboard_block
.row
- .span9= render "dashboard/projects_feed"
- .span3.right
+ .span10= render "dashboard/projects_feed"
+ .span4.right
- if current_user.can_create_project?
.alert-message.block-message.warning
You can create up to
diff --git a/app/views/events/_event.html.haml b/app/views/events/_event.html.haml
index 23a8601bd75..f091fff5a9e 100644
--- a/app/views/events/_event.html.haml
+++ b/app/views/events/_event.html.haml
@@ -2,7 +2,11 @@
.event_feed
- if event.new_issue?
= render "events/event_new_issue", :event => event
- - if event.new_merge_request?
+ - elsif event.new_merge_request?
= render "events/event_new_merge_request", :event => event
+ - elsif event.changed_merge_request?
+ = render "events/event_changed_merge_request", :event => event
+ - elsif event.changed_issue?
+ = render "events/event_changed_issue", :event => event
- elsif event.push?
= render "events/event_push", :event => event
diff --git a/app/views/events/_event_changed_issue.html.haml b/app/views/events/_event_changed_issue.html.haml
new file mode 100644
index 00000000000..65cfebbd76b
--- /dev/null
+++ b/app/views/events/_event_changed_issue.html.haml
@@ -0,0 +1,14 @@
+= image_tag gravatar_icon(event.author_email), :class => "avatar"
+%strong #{event.author_name}
+- if event.closed?
+ closed
+- else
+ reopened
+issue
+= link_to project_issue_path(event.project, event.issue) do
+ %strong= truncate event.issue_title
+at
+%strong= link_to event.project.name, event.project
+%span.cgray
+ = time_ago_in_words(event.created_at)
+ ago.
diff --git a/app/views/events/_event_changed_merge_request.html.haml b/app/views/events/_event_changed_merge_request.html.haml
new file mode 100644
index 00000000000..a55e609c2cf
--- /dev/null
+++ b/app/views/events/_event_changed_merge_request.html.haml
@@ -0,0 +1,19 @@
+= image_tag gravatar_icon(event.author_email), :class => "avatar"
+%strong #{event.author_name}
+- if event.closed?
+ closed
+- else
+ reopened
+merge request
+= link_to project_merge_request_path(event.project, event.merge_request) do
+ %strong= truncate event.merge_request_title
+at
+%strong= link_to event.project.name, event.project
+%span.cgray
+ = time_ago_in_words(event.created_at)
+ ago.
+%br
+%span.label= event.merge_request.source_branch
+&rarr;
+%span.label= event.merge_request.target_branch
+
diff --git a/app/views/events/_event_push.html.haml b/app/views/events/_event_push.html.haml
index b48429f425b..c59b482f5a5 100644
--- a/app/views/events/_event_push.html.haml
+++ b/app/views/events/_event_push.html.haml
@@ -1,6 +1,6 @@
- if event.new_branch? || event.new_tag?
- = image_tag gravatar_icon(event.pusher_email), :class => "avatar"
- %strong #{event.pusher_name}
+ = image_tag gravatar_icon(event.author_email), :class => "avatar"
+ %strong #{event.author_name}
pushed new
- if event.new_tag?
tag
@@ -16,8 +16,8 @@
= time_ago_in_words(event.created_at)
ago.
- else
- = image_tag gravatar_icon(event.pusher_email), :class => "avatar"
- %strong #{event.pusher_name}
+ = image_tag gravatar_icon(event.author_email), :class => "avatar"
+ %strong #{event.author_name}
pushed to
= link_to project_commits_path(event.project, :ref => event.branch_name) do
%strong= event.branch_name
@@ -31,6 +31,10 @@
Compare #{event.commits.first.commit.id[0..8]}...#{event.commits.last.id[0..8]}
- @project = event.project
%ul.unstyled
- = render event.commits
+ - if event.commits.size > 4
+ = render event.commits[0..2]
+ %li ... and #{event.commits.size - 3} more commits
+ - else
+ = render event.commits
diff --git a/db/migrate/20120307095918_add_author_id_to_event.rb b/db/migrate/20120307095918_add_author_id_to_event.rb
new file mode 100644
index 00000000000..1d24d41e424
--- /dev/null
+++ b/db/migrate/20120307095918_add_author_id_to_event.rb
@@ -0,0 +1,5 @@
+class AddAuthorIdToEvent < ActiveRecord::Migration
+ def change
+ add_column :events, :author_id, :integer, :null => true
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 8838b2191fb..45e18a68cf3 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20120301185805) do
+ActiveRecord::Schema.define(:version => 20120307095918) do
create_table "events", :force => true do |t|
t.string "target_type"
@@ -22,6 +22,7 @@ ActiveRecord::Schema.define(:version => 20120301185805) do
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "action"
+ t.integer "author_id"
end
create_table "issues", :force => true do |t|