Commit bed70a93f51cda78e7a4b9adae75d10c3763af30

Authored by Dmitriy Zaporozhets
2 parents 05044658 c9b64974

Merge branch 'master' of dev.gitlabhq.com:gitlabhq

app/assets/stylesheets/common.scss
@@ -599,7 +599,7 @@ p.time { @@ -599,7 +599,7 @@ p.time {
599 } 599 }
600 } 600 }
601 .dashboard_block { 601 .dashboard_block {
602 - width:700px; 602 + width:840px;
603 margin:auto; 603 margin:auto;
604 604
605 .wll { 605 .wll {
app/controllers/issues_controller.rb
@@ -76,7 +76,7 @@ class IssuesController < ApplicationController @@ -76,7 +76,7 @@ class IssuesController < ApplicationController
76 end 76 end
77 77
78 def update 78 def update
79 - @issue.update_attributes(params[:issue]) 79 + @issue.update_attributes(params[:issue].merge(:author_id_of_changes => current_user.id))
80 80
81 respond_to do |format| 81 respond_to do |format|
82 format.js 82 format.js
app/controllers/merge_requests_controller.rb
@@ -87,7 +87,7 @@ class MergeRequestsController < ApplicationController @@ -87,7 +87,7 @@ class MergeRequestsController < ApplicationController
87 87
88 def update 88 def update
89 respond_to do |format| 89 respond_to do |format|
90 - if @merge_request.update_attributes(params[:merge_request]) 90 + if @merge_request.update_attributes(params[:merge_request].merge(:author_id_of_changes => current_user.id))
91 format.html { redirect_to [@project, @merge_request], notice: 'Merge request was successfully updated.' } 91 format.html { redirect_to [@project, @merge_request], notice: 'Merge request was successfully updated.' }
92 format.json { head :ok } 92 format.json { head :ok }
93 else 93 else
app/models/activity_observer.rb
1 class ActivityObserver < ActiveRecord::Observer 1 class ActivityObserver < ActiveRecord::Observer
2 - observe :issue, :merge_request, :note 2 + observe :issue, :merge_request
3 3
4 def after_create(record) 4 def after_create(record)
5 Event.create( 5 Event.create(
6 :project => record.project, 6 :project => record.project,
7 :target_id => record.id, 7 :target_id => record.id,
8 :target_type => record.class.name, 8 :target_type => record.class.name,
9 - :action => Event.determine_action(record) 9 + :action => Event.determine_action(record),
  10 + :author_id => record.author_id
10 ) 11 )
11 end 12 end
  13 +
  14 + def after_save(record)
  15 + if record.changed.include?("closed")
  16 + Event.create(
  17 + :project => record.project,
  18 + :target_id => record.id,
  19 + :target_type => record.class.name,
  20 + :action => (record.closed ? Event::Closed : Event::Reopened),
  21 + :author_id => record.author_id_of_changes
  22 + )
  23 + end
  24 + end
12 end 25 end
app/models/event.rb
1 class Event < ActiveRecord::Base 1 class Event < ActiveRecord::Base
  2 + default_scope where("author_id IS NOT NULL")
  3 +
2 Created = 1 4 Created = 1
3 Updated = 2 5 Updated = 2
4 Closed = 3 6 Closed = 3
@@ -26,13 +28,22 @@ class Event &lt; ActiveRecord::Base @@ -26,13 +28,22 @@ class Event &lt; ActiveRecord::Base
26 # - new issue 28 # - new issue
27 # - merge request 29 # - merge request
28 def allowed? 30 def allowed?
29 - push? || new_issue? || new_merge_request? 31 + push? || new_issue? || new_merge_request? ||
  32 + changed_merge_request? || changed_issue?
30 end 33 end
31 34
32 def push? 35 def push?
33 action == self.class::Pushed 36 action == self.class::Pushed
34 end 37 end
35 38
  39 + def closed?
  40 + action == self.class::Closed
  41 + end
  42 +
  43 + def reopened?
  44 + action == self.class::Reopened
  45 + end
  46 +
36 def new_tag? 47 def new_tag?
37 data[:ref]["refs/tags"] 48 data[:ref]["refs/tags"]
38 end 49 end
@@ -57,10 +68,6 @@ class Event &lt; ActiveRecord::Base @@ -57,10 +68,6 @@ class Event &lt; ActiveRecord::Base
57 @tag_name ||= data[:ref].gsub("refs/tags/", "") 68 @tag_name ||= data[:ref].gsub("refs/tags/", "")
58 end 69 end
59 70
60 - def pusher  
61 - User.find_by_id(data[:user_id])  
62 - end  
63 -  
64 def new_issue? 71 def new_issue?
65 target_type == "Issue" && 72 target_type == "Issue" &&
66 action == Created 73 action == Created
@@ -71,6 +78,16 @@ class Event &lt; ActiveRecord::Base @@ -71,6 +78,16 @@ class Event &lt; ActiveRecord::Base
71 action == Created 78 action == Created
72 end 79 end
73 80
  81 + def changed_merge_request?
  82 + target_type == "MergeRequest" &&
  83 + [Closed, Reopened].include?(action)
  84 + end
  85 +
  86 + def changed_issue?
  87 + target_type == "Issue" &&
  88 + [Closed, Reopened].include?(action)
  89 + end
  90 +
74 def issue 91 def issue
75 target if target_type == "Issue" 92 target if target_type == "Issue"
76 end 93 end
@@ -80,7 +97,7 @@ class Event &lt; ActiveRecord::Base @@ -80,7 +97,7 @@ class Event &lt; ActiveRecord::Base
80 end 97 end
81 98
82 def author 99 def author
83 - target.author 100 + @author ||= User.find(author_id)
84 end 101 end
85 102
86 def commits 103 def commits
@@ -89,7 +106,6 @@ class Event &lt; ActiveRecord::Base @@ -89,7 +106,6 @@ class Event &lt; ActiveRecord::Base
89 end 106 end
90 end 107 end
91 108
92 - delegate :id, :name, :email, :to => :pusher, :prefix => true, :allow_nil => true  
93 delegate :name, :email, :to => :author, :prefix => true, :allow_nil => true 109 delegate :name, :email, :to => :author, :prefix => true, :allow_nil => true
94 delegate :title, :to => :issue, :prefix => true, :allow_nil => true 110 delegate :title, :to => :issue, :prefix => true, :allow_nil => true
95 delegate :title, :to => :merge_request, :prefix => true, :allow_nil => true 111 delegate :title, :to => :merge_request, :prefix => true, :allow_nil => true
app/models/issue.rb
@@ -5,6 +5,7 @@ class Issue &lt; ActiveRecord::Base @@ -5,6 +5,7 @@ class Issue &lt; ActiveRecord::Base
5 has_many :notes, :as => :noteable, :dependent => :destroy 5 has_many :notes, :as => :noteable, :dependent => :destroy
6 6
7 attr_protected :author, :author_id, :project, :project_id 7 attr_protected :author, :author_id, :project, :project_id
  8 + attr_accessor :author_id_of_changes
8 9
9 validates_presence_of :project_id 10 validates_presence_of :project_id
10 validates_presence_of :assignee_id 11 validates_presence_of :assignee_id
app/models/merge_request.rb
@@ -5,6 +5,7 @@ class MergeRequest &lt; ActiveRecord::Base @@ -5,6 +5,7 @@ class MergeRequest &lt; ActiveRecord::Base
5 has_many :notes, :as => :noteable, :dependent => :destroy 5 has_many :notes, :as => :noteable, :dependent => :destroy
6 6
7 attr_protected :author, :author_id, :project, :project_id 7 attr_protected :author, :author_id, :project, :project_id
  8 + attr_accessor :author_id_of_changes
8 9
9 validates_presence_of :project_id 10 validates_presence_of :project_id
10 validates_presence_of :assignee_id 11 validates_presence_of :assignee_id
app/models/project.rb
@@ -68,7 +68,8 @@ class Project &lt; ActiveRecord::Base @@ -68,7 +68,8 @@ class Project &lt; ActiveRecord::Base
68 Event.create( 68 Event.create(
69 :project => self, 69 :project => self,
70 :action => Event::Pushed, 70 :action => Event::Pushed,
71 - :data => data 71 + :data => data,
  72 + :author_id => Key.find_by_identifier(author_key_id).user.id
72 ) 73 )
73 end 74 end
74 75
@@ -259,7 +260,7 @@ class Project &lt; ActiveRecord::Base @@ -259,7 +260,7 @@ class Project &lt; ActiveRecord::Base
259 260
260 def commit(commit_id = nil) 261 def commit(commit_id = nil)
261 commit = if commit_id 262 commit = if commit_id
262 - repo.commits(commit_id).first 263 + repo.commit(commit_id)
263 else 264 else
264 repo.commits.first 265 repo.commits.first
265 end 266 end
app/views/dashboard/index.html.haml
@@ -20,8 +20,8 @@ @@ -20,8 +20,8 @@
20 .row 20 .row
21 .dashboard_block 21 .dashboard_block
22 .row 22 .row
23 - .span9= render "dashboard/projects_feed"  
24 - .span3.right 23 + .span10= render "dashboard/projects_feed"
  24 + .span4.right
25 - if current_user.can_create_project? 25 - if current_user.can_create_project?
26 .alert-message.block-message.warning 26 .alert-message.block-message.warning
27 You can create up to 27 You can create up to
app/views/events/_event.html.haml
@@ -2,7 +2,11 @@ @@ -2,7 +2,11 @@
2 .event_feed 2 .event_feed
3 - if event.new_issue? 3 - if event.new_issue?
4 = render "events/event_new_issue", :event => event 4 = render "events/event_new_issue", :event => event
5 - - if event.new_merge_request? 5 + - elsif event.new_merge_request?
6 = render "events/event_new_merge_request", :event => event 6 = render "events/event_new_merge_request", :event => event
  7 + - elsif event.changed_merge_request?
  8 + = render "events/event_changed_merge_request", :event => event
  9 + - elsif event.changed_issue?
  10 + = render "events/event_changed_issue", :event => event
7 - elsif event.push? 11 - elsif event.push?
8 = render "events/event_push", :event => event 12 = render "events/event_push", :event => event
app/views/events/_event_changed_issue.html.haml 0 → 100644
@@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
  1 += image_tag gravatar_icon(event.author_email), :class => "avatar"
  2 +%strong #{event.author_name}
  3 +- if event.closed?
  4 + closed
  5 +- else
  6 + reopened
  7 +issue
  8 += link_to project_issue_path(event.project, event.issue) do
  9 + %strong= truncate event.issue_title
  10 +at
  11 +%strong= link_to event.project.name, event.project
  12 +%span.cgray
  13 + = time_ago_in_words(event.created_at)
  14 + ago.
app/views/events/_event_changed_merge_request.html.haml 0 → 100644
@@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
  1 += image_tag gravatar_icon(event.author_email), :class => "avatar"
  2 +%strong #{event.author_name}
  3 +- if event.closed?
  4 + closed
  5 +- else
  6 + reopened
  7 +merge request
  8 += link_to project_merge_request_path(event.project, event.merge_request) do
  9 + %strong= truncate event.merge_request_title
  10 +at
  11 +%strong= link_to event.project.name, event.project
  12 +%span.cgray
  13 + = time_ago_in_words(event.created_at)
  14 + ago.
  15 +%br
  16 +%span.label= event.merge_request.source_branch
  17 +&rarr;
  18 +%span.label= event.merge_request.target_branch
  19 +
app/views/events/_event_push.html.haml
1 - if event.new_branch? || event.new_tag? 1 - if event.new_branch? || event.new_tag?
2 - = image_tag gravatar_icon(event.pusher_email), :class => "avatar"  
3 - %strong #{event.pusher_name} 2 + = image_tag gravatar_icon(event.author_email), :class => "avatar"
  3 + %strong #{event.author_name}
4 pushed new 4 pushed new
5 - if event.new_tag? 5 - if event.new_tag?
6 tag 6 tag
@@ -16,8 +16,8 @@ @@ -16,8 +16,8 @@
16 = time_ago_in_words(event.created_at) 16 = time_ago_in_words(event.created_at)
17 ago. 17 ago.
18 - else 18 - else
19 - = image_tag gravatar_icon(event.pusher_email), :class => "avatar"  
20 - %strong #{event.pusher_name} 19 + = image_tag gravatar_icon(event.author_email), :class => "avatar"
  20 + %strong #{event.author_name}
21 pushed to 21 pushed to
22 = link_to project_commits_path(event.project, :ref => event.branch_name) do 22 = link_to project_commits_path(event.project, :ref => event.branch_name) do
23 %strong= event.branch_name 23 %strong= event.branch_name
@@ -31,6 +31,10 @@ @@ -31,6 +31,10 @@
31 Compare #{event.commits.first.commit.id[0..8]}...#{event.commits.last.id[0..8]} 31 Compare #{event.commits.first.commit.id[0..8]}...#{event.commits.last.id[0..8]}
32 - @project = event.project 32 - @project = event.project
33 %ul.unstyled 33 %ul.unstyled
34 - = render event.commits 34 + - if event.commits.size > 4
  35 + = render event.commits[0..2]
  36 + %li ... and #{event.commits.size - 3} more commits
  37 + - else
  38 + = render event.commits
35 39
36 40
db/migrate/20120307095918_add_author_id_to_event.rb 0 → 100644
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
  1 +class AddAuthorIdToEvent < ActiveRecord::Migration
  2 + def change
  3 + add_column :events, :author_id, :integer, :null => true
  4 + end
  5 +end
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 # 11 #
12 # It's strongly recommended to check this file into your version control system. 12 # It's strongly recommended to check this file into your version control system.
13 13
14 -ActiveRecord::Schema.define(:version => 20120301185805) do 14 +ActiveRecord::Schema.define(:version => 20120307095918) do
15 15
16 create_table "events", :force => true do |t| 16 create_table "events", :force => true do |t|
17 t.string "target_type" 17 t.string "target_type"
@@ -22,6 +22,7 @@ ActiveRecord::Schema.define(:version =&gt; 20120301185805) do @@ -22,6 +22,7 @@ ActiveRecord::Schema.define(:version =&gt; 20120301185805) do
22 t.datetime "created_at", :null => false 22 t.datetime "created_at", :null => false
23 t.datetime "updated_at", :null => false 23 t.datetime "updated_at", :null => false
24 t.integer "action" 24 t.integer "action"
  25 + t.integer "author_id"
25 end 26 end
26 27
27 create_table "issues", :force => true do |t| 28 create_table "issues", :force => true do |t|