rosa-build/app/models/git_hook.rb

65 lines
2.0 KiB
Ruby

# -*- encoding : utf-8 -*-
class GitHook
attr_reader :repo, :newrev, :oldrev, :newrev_type, :oldrev_type, :refname,
:change_type, :rev, :rev_type, :refname_type, :owner, :project
include Resque::Plugins::Status
def initialize(owner_uname, repo, newrev, oldrev, ref, newrev_type, oldrev_type = nil)
@repo, @newrev, @oldrev, @refname, @newrev_type, @oldrev_type = repo, newrev, oldrev, ref, newrev_type, oldrev_type
if @owner = User.where(:uname => owner_uname).first || Group.where(:uname => owner_uname).first!
@project = @owner.own_projects.where(:name => repo).first!
end
@change_type = git_change_type
git_revision_types
commit_type
end
def git_change_type
if @oldrev =~ /0+$/
return 'create'
elsif @newrev =~ /0+$/
return 'delete'
else
return 'update'
end
end
def git_revision_types
case @change_type
when 'create', 'update'
@rev = @newrev
@rev_type = @newrev_type
when 'delete'
@rev = @oldrev
@rev_type = @oldrev_type
end
end
def commit_type
if @refname =~ /refs\/tags\/*/ && @rev_type == 'commit'
# un-annotated tag
@refname_type= 'tag'
#~ short_refname=refname + '##refs/tags/'
elsif @refname =~ /refs\/tags\/*/ && @rev_type == 'tag'
# annotated tag
@refname_type="annotated tag"
#~ short_refname= refname + '##refs/tags/'
elsif @refname =~ /refs\/heads\/*/ && @rev_type == 'commit'
# branch
@refname_type= 'branch'
elsif @refname =~ /refs\/remotes\/*'/ && @rev_type == 'commit'
# tracking branch
@refname_type="tracking branch"
@short_refname= @refname + '##refs/remotes/'
else
# Anything else (is there anything else?)
@refname_type= "*** Unknown type of update to $refname (#{rev_type})"
end
end
def self.process(*args)
ActivityFeedObserver.instance.after_create(args.size > 1 ? GitHook.new(*args) : args.first)
end
end