diff options
-rw-r--r-- | app/workers/post_receive.rb | 27 | ||||
-rw-r--r-- | lib/gitlab/identifier.rb | 23 |
2 files changed, 32 insertions, 18 deletions
diff --git a/app/workers/post_receive.rb b/app/workers/post_receive.rb index 132f1a6d7e9..6416aa608ec 100644 --- a/app/workers/post_receive.rb +++ b/app/workers/post_receive.rb @@ -1,5 +1,6 @@ class PostReceive include Sidekiq::Worker + include Gitlab::Identifier sidekiq_options queue: :post_receive @@ -8,7 +9,7 @@ class PostReceive if repo_path.start_with?(Gitlab.config.gitlab_shell.repos_path.to_s) repo_path.gsub!(Gitlab.config.gitlab_shell.repos_path.to_s, "") else - Gitlab::GitLogger.error("POST-RECEIVE: Check gitlab.yml config for correct gitlab_shell.repos_path variable. \"#{Gitlab.config.gitlab_shell.repos_path}\" does not match \"#{repo_path}\"") + log("Check gitlab.yml config for correct gitlab_shell.repos_path variable. \"#{Gitlab.config.gitlab_shell.repos_path}\" does not match \"#{repo_path}\"") end repo_path.gsub!(/.git$/, "") @@ -17,31 +18,21 @@ class PostReceive project = Project.find_with_namespace(repo_path) if project.nil? - Gitlab::GitLogger.error("POST-RECEIVE: Triggered hook for non-existing project with full path \"#{repo_path} \"") + log("Triggered hook for non-existing project with full path \"#{repo_path} \"") return false end - user = if identifier.blank? - # Local push from gitlab - email = project.repository.commit(newrev).author_email rescue nil - User.find_by_email(email) if email - - elsif identifier =~ /\Auser-\d+\Z/ - # git push over http - user_id = identifier.gsub("user-", "") - User.find_by_id(user_id) - - elsif identifier =~ /\Akey-\d+\Z/ - # git push over ssh - key_id = identifier.gsub("key-", "") - Key.find_by_id(key_id).try(:user) - end + user = identify(identifier, project, newrev) unless user - Gitlab::GitLogger.error("POST-RECEIVE: Triggered hook for non-existing user \"#{identifier} \"") + log("Triggered hook for non-existing user \"#{identifier} \"") return false end GitPushService.new.execute(project, user, oldrev, newrev, ref) end + + def log(message) + Gitlab::GitLogger.error("POST-RECEIVE: #{message}") + end end diff --git a/lib/gitlab/identifier.rb b/lib/gitlab/identifier.rb new file mode 100644 index 00000000000..19cb5c38a53 --- /dev/null +++ b/lib/gitlab/identifier.rb @@ -0,0 +1,23 @@ +# Detect user based on identifier like +# key-13 or user-36 or last commit +module Gitlab + module Indentifier + def identify(identifier, project, newrev) + if identifier.blank? + # Local push from gitlab + email = project.repository.commit(newrev).author_email rescue nil + User.find_by_email(email) if email + + elsif identifier =~ /\Auser-\d+\Z/ + # git push over http + user_id = identifier.gsub("user-", "") + User.find_by_id(user_id) + + elsif identifier =~ /\Akey-\d+\Z/ + # git push over ssh + key_id = identifier.gsub("key-", "") + Key.find_by_id(key_id).try(:user) + end + end + end +end |