Send author to post hook. Display push activity to dashboard
This commit is contained in:
parent
796784c7c8
commit
bb164ebf1b
15 changed files with 107 additions and 11 deletions
|
@ -626,3 +626,9 @@ p.time {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
.event_feed {
|
||||
ul {
|
||||
margin-left:50px;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,8 @@ class DashboardController < ApplicationController
|
|||
@user = current_user
|
||||
@issues = current_user.assigned_issues.opened.order("created_at DESC").limit(10)
|
||||
@issues = @issues.includes(:author, :project)
|
||||
|
||||
@events = Event.where(:project_id => @projects.map(&:id)).recent.limit(20)
|
||||
end
|
||||
|
||||
# Get authored or assigned open merge requests
|
||||
|
|
|
@ -69,7 +69,10 @@ class IssuesController < ApplicationController
|
|||
@issue.author = current_user
|
||||
@issue.save
|
||||
|
||||
respond_with(@issue)
|
||||
respond_to do |format|
|
||||
format.html { redirect_to project_issue_path(@project, @issue) }
|
||||
format.js
|
||||
end
|
||||
end
|
||||
|
||||
def update
|
||||
|
|
|
@ -11,6 +11,8 @@ class Event < ActiveRecord::Base
|
|||
|
||||
serialize :data
|
||||
|
||||
scope :recent, order("created_at DESC")
|
||||
|
||||
def self.determine_action(record)
|
||||
if [Issue, MergeRequest].include? record.class
|
||||
Event::Created
|
||||
|
@ -18,6 +20,38 @@ class Event < ActiveRecord::Base
|
|||
Event::Commented
|
||||
end
|
||||
end
|
||||
|
||||
def push?
|
||||
action == self.class::Pushed
|
||||
end
|
||||
|
||||
def new_branch?
|
||||
data[:before] =~ /^00000/
|
||||
end
|
||||
|
||||
def commit_from
|
||||
data[:before]
|
||||
end
|
||||
|
||||
def commit_to
|
||||
data[:after]
|
||||
end
|
||||
|
||||
def branch_name
|
||||
@branch_name ||= data[:ref].gsub("refs/heads/", "")
|
||||
end
|
||||
|
||||
def pusher
|
||||
User.find_by_id(data[:user_id])
|
||||
end
|
||||
|
||||
def commits
|
||||
@commits ||= data[:commits].map do |commit|
|
||||
project.commit(commit[:id])
|
||||
end
|
||||
end
|
||||
|
||||
delegate :id, :name, :email, :to => :pusher, :prefix => true, :allow_nil => true
|
||||
end
|
||||
# == Schema Information
|
||||
#
|
||||
|
|
|
@ -14,6 +14,7 @@ class Key < ActiveRecord::Base
|
|||
before_save :set_identifier
|
||||
after_save :update_repository
|
||||
after_destroy :repository_delete_key
|
||||
delegate :id, :name, :email, :to => :user, :prefix => true
|
||||
|
||||
def set_identifier
|
||||
if is_deploy_key
|
||||
|
|
|
@ -90,8 +90,8 @@ class Project < ActiveRecord::Base
|
|||
[GIT_HOST['host'], code].join("/")
|
||||
end
|
||||
|
||||
def observe_push(oldrev, newrev, ref)
|
||||
data = web_hook_data(oldrev, newrev, ref)
|
||||
def observe_push(oldrev, newrev, ref, author_key_id)
|
||||
data = web_hook_data(oldrev, newrev, ref, author_key_id)
|
||||
|
||||
Event.create(
|
||||
:project => self,
|
||||
|
@ -100,22 +100,25 @@ class Project < ActiveRecord::Base
|
|||
)
|
||||
end
|
||||
|
||||
def execute_web_hooks(oldrev, newrev, ref)
|
||||
def execute_web_hooks(oldrev, newrev, ref, author_key_id)
|
||||
ref_parts = ref.split('/')
|
||||
|
||||
# Return if this is not a push to a branch (e.g. new commits)
|
||||
return if ref_parts[1] !~ /heads/ || oldrev == "00000000000000000000000000000000"
|
||||
|
||||
data = web_hook_data(oldrev, newrev, ref)
|
||||
data = web_hook_data(oldrev, newrev, ref, author_key_id)
|
||||
|
||||
web_hooks.each { |web_hook| web_hook.execute(data) }
|
||||
end
|
||||
|
||||
def web_hook_data(oldrev, newrev, ref)
|
||||
def web_hook_data(oldrev, newrev, ref, author_key_id)
|
||||
key = Key.find_by_identifier(author_key_id)
|
||||
data = {
|
||||
before: oldrev,
|
||||
after: newrev,
|
||||
ref: ref,
|
||||
user_id: key.user_id,
|
||||
user_name: key.user_name,
|
||||
repository: {
|
||||
name: name,
|
||||
url: web_url,
|
||||
|
|
|
@ -16,7 +16,7 @@ class UsersProject < ActiveRecord::Base
|
|||
validates_presence_of :user_id
|
||||
validates_presence_of :project_id
|
||||
|
||||
delegate :name, :email, :to => :user, :prefix => true
|
||||
delegate :id, :name, :email, :to => :user, :prefix => true
|
||||
|
||||
def self.bulk_import(project, user_ids, project_access, repo_access)
|
||||
UsersProject.transaction do
|
||||
|
|
19
app/views/dashboard/_events_feed.html.haml
Normal file
19
app/views/dashboard/_events_feed.html.haml
Normal file
|
@ -0,0 +1,19 @@
|
|||
- @events.each do |event|
|
||||
.wll.event_feed
|
||||
- if event.push?
|
||||
- if event.new_branch?
|
||||
User pushed new branch
|
||||
- else
|
||||
= image_tag gravatar_icon(event.pusher_email), :class => "avatar"
|
||||
#{event.pusher_name} pushed to
|
||||
= link_to project_commits_path(event.project, :ref => event.branch_name) do
|
||||
%strong= event.branch_name
|
||||
%span.cgray
|
||||
= time_ago_in_words(event.created_at)
|
||||
ago.
|
||||
- if event.commits.count > 1
|
||||
= link_to compare_project_commits_path(event.project, :from => event.commits.last, :to => event.commits.first) do
|
||||
Compare #{event.commits.last.id[0..8]}...#{event.commits.first.id[0..8]}
|
||||
- @project = event.project
|
||||
%ul.unstyled
|
||||
= render event.commits
|
|
@ -54,3 +54,12 @@
|
|||
%hr
|
||||
.row
|
||||
.dashboard_block= render "dashboard/issues_feed"
|
||||
|
||||
- unless @events.blank?
|
||||
%div.dashboard_category
|
||||
%h3
|
||||
Activities
|
||||
|
||||
%hr
|
||||
.row
|
||||
.dashboard_block= render "dashboard/events_feed"
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
class PostReceive
|
||||
@queue = :post_receive
|
||||
|
||||
def self.perform(reponame, oldrev, newrev, ref)
|
||||
def self.perform(reponame, oldrev, newrev, ref, author_key_id)
|
||||
project = Project.find_by_path(reponame)
|
||||
return false if project.nil?
|
||||
|
||||
project.observe_push(oldrev, newrev, ref)
|
||||
project.execute_web_hooks(oldrev, newrev, ref)
|
||||
project.observe_push(oldrev, newrev, ref, author_key_id)
|
||||
project.execute_web_hooks(oldrev, newrev, ref, author_key_id)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue