2011-12-13 01:03:26 +01:00
class PostReceive
2013-01-09 06:14:05 +01:00
include Sidekiq :: Worker
2012-01-03 23:42:14 +01:00
2013-01-09 06:14:05 +01:00
sidekiq_options queue : :post_receive
def perform ( repo_path , oldrev , newrev , ref , identifier )
2013-01-29 10:32:05 +01:00
if repo_path . start_with? ( Gitlab . config . gitolite . repos_path . to_s )
repo_path . gsub! ( Gitlab . config . gitolite . repos_path . to_s , " " )
else
Gitlab :: GitLogger . error ( " POST-RECEIVE: Check gitlab.yml config for correct gitolite.repos_path variable. \" #{ Gitlab . config . gitolite . repos_path } \" does not match \" #{ repo_path } \" " )
end
2012-12-09 09:34:46 +01:00
repo_path . gsub! ( / .git$ / , " " )
repo_path . gsub! ( / ^ \/ / , " " )
2012-12-08 19:48:33 +01:00
project = Project . find_with_namespace ( repo_path )
2013-01-29 10:32:05 +01:00
if project . nil?
Gitlab :: GitLogger . error ( " POST-RECEIVE: Triggered hook for non-existing project with full path \" #{ repo_path } \" " )
return false
end
2011-12-14 17:38:52 +01:00
2012-02-29 22:04:09 +01:00
# Ignore push from non-gitlab users
2012-12-15 01:16:25 +01:00
user = if identifier . eql? Gitlab . config . gitolite . admin_key
2013-01-28 16:22:45 +01:00
email = project . repository . commit ( newrev ) . author . email rescue nil
User . find_by_email ( email ) if email
elsif / ^[A-Z0-9._%a-z \ -]+@(?:[A-Z0-9a-z \ -]+ \ .)+[A-Za-z]{2,4}$ / . match ( identifier )
User . find_by_email ( identifier )
2013-02-05 11:47:50 +01:00
elsif identifier =~ / key /
key_id = identifier . gsub ( " key- " , " " )
Key . find_by_id ( key_id ) . try ( :user )
2013-01-28 16:22:45 +01:00
end
2013-02-04 15:19:37 +01:00
unless user
Gitlab :: GitLogger . error ( " POST-RECEIVE: Triggered hook for non-existing user \" #{ identifier } \" " )
return false
end
2012-02-29 22:04:09 +01:00
2012-07-02 10:44:45 +02:00
project . trigger_post_receive ( oldrev , newrev , ref , user )
2011-12-13 01:03:26 +01:00
end
end