107 lines
1.6 KiB
Ruby
107 lines
1.6 KiB
Ruby
# == PushEvent role
|
|
#
|
|
# Extends Event model functionality by providing extra methods related to push events
|
|
#
|
|
# Used by Event
|
|
#
|
|
module PushEvent
|
|
def valid_push?
|
|
data[:ref]
|
|
rescue => ex
|
|
false
|
|
end
|
|
|
|
def tag?
|
|
data[:ref]["refs/tags"]
|
|
end
|
|
|
|
def branch?
|
|
data[:ref]["refs/heads"]
|
|
end
|
|
|
|
def new_branch?
|
|
commit_from =~ /^00000/
|
|
end
|
|
|
|
def new_ref?
|
|
commit_from =~ /^00000/
|
|
end
|
|
|
|
def rm_ref?
|
|
commit_to =~ /^00000/
|
|
end
|
|
|
|
def md_ref?
|
|
!(rm_ref? || new_ref?)
|
|
end
|
|
|
|
def commit_from
|
|
data[:before]
|
|
end
|
|
|
|
def commit_to
|
|
data[:after]
|
|
end
|
|
|
|
def ref_name
|
|
if tag?
|
|
tag_name
|
|
else
|
|
branch_name
|
|
end
|
|
end
|
|
|
|
def branch_name
|
|
@branch_name ||= data[:ref].gsub("refs/heads/", "")
|
|
end
|
|
|
|
def tag_name
|
|
@tag_name ||= data[:ref].gsub("refs/tags/", "")
|
|
end
|
|
|
|
# Max 20 commits from push DESC
|
|
def commits
|
|
@commits ||= data[:commits].map { |commit| project.commit(commit[:id]) }.reverse
|
|
end
|
|
|
|
def commits_count
|
|
data[:total_commits_count] || commits.count || 0
|
|
end
|
|
|
|
def ref_type
|
|
tag? ? "tag" : "branch"
|
|
end
|
|
|
|
def push_action_name
|
|
if new_ref?
|
|
"pushed new"
|
|
elsif rm_ref?
|
|
"deleted"
|
|
else
|
|
"pushed to"
|
|
end
|
|
end
|
|
|
|
def parent_commit
|
|
project.commit(commit_from)
|
|
rescue => ex
|
|
nil
|
|
end
|
|
|
|
def last_commit
|
|
project.commit(commit_to)
|
|
rescue => ex
|
|
nil
|
|
end
|
|
|
|
def push_with_commits?
|
|
md_ref? && commits.any? && parent_commit && last_commit
|
|
rescue Grit::NoSuchPathError
|
|
false
|
|
end
|
|
|
|
def last_push_to_non_root?
|
|
branch? && project.default_branch != branch_name
|
|
end
|
|
end
|