Commit a1704273ecd8809f918e5776f4bc27490169ae2a
1 parent
348eb125
Exists in
master
and in
4 other branches
Refactor post-receive worker
Showing
2 changed files
with
32 additions
and
18 deletions
Show diff stats
app/workers/post_receive.rb
| 1 | 1 | class PostReceive |
| 2 | 2 | include Sidekiq::Worker |
| 3 | + include Gitlab::Identifier | |
| 3 | 4 | |
| 4 | 5 | sidekiq_options queue: :post_receive |
| 5 | 6 | |
| ... | ... | @@ -8,7 +9,7 @@ class PostReceive |
| 8 | 9 | if repo_path.start_with?(Gitlab.config.gitlab_shell.repos_path.to_s) |
| 9 | 10 | repo_path.gsub!(Gitlab.config.gitlab_shell.repos_path.to_s, "") |
| 10 | 11 | else |
| 11 | - 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}\"") | |
| 12 | + log("Check gitlab.yml config for correct gitlab_shell.repos_path variable. \"#{Gitlab.config.gitlab_shell.repos_path}\" does not match \"#{repo_path}\"") | |
| 12 | 13 | end |
| 13 | 14 | |
| 14 | 15 | repo_path.gsub!(/.git$/, "") |
| ... | ... | @@ -17,31 +18,21 @@ class PostReceive |
| 17 | 18 | project = Project.find_with_namespace(repo_path) |
| 18 | 19 | |
| 19 | 20 | if project.nil? |
| 20 | - Gitlab::GitLogger.error("POST-RECEIVE: Triggered hook for non-existing project with full path \"#{repo_path} \"") | |
| 21 | + log("Triggered hook for non-existing project with full path \"#{repo_path} \"") | |
| 21 | 22 | return false |
| 22 | 23 | end |
| 23 | 24 | |
| 24 | - user = if identifier.blank? | |
| 25 | - # Local push from gitlab | |
| 26 | - email = project.repository.commit(newrev).author_email rescue nil | |
| 27 | - User.find_by_email(email) if email | |
| 28 | - | |
| 29 | - elsif identifier =~ /\Auser-\d+\Z/ | |
| 30 | - # git push over http | |
| 31 | - user_id = identifier.gsub("user-", "") | |
| 32 | - User.find_by_id(user_id) | |
| 33 | - | |
| 34 | - elsif identifier =~ /\Akey-\d+\Z/ | |
| 35 | - # git push over ssh | |
| 36 | - key_id = identifier.gsub("key-", "") | |
| 37 | - Key.find_by_id(key_id).try(:user) | |
| 38 | - end | |
| 25 | + user = identify(identifier, project, newrev) | |
| 39 | 26 | |
| 40 | 27 | unless user |
| 41 | - Gitlab::GitLogger.error("POST-RECEIVE: Triggered hook for non-existing user \"#{identifier} \"") | |
| 28 | + log("Triggered hook for non-existing user \"#{identifier} \"") | |
| 42 | 29 | return false |
| 43 | 30 | end |
| 44 | 31 | |
| 45 | 32 | GitPushService.new.execute(project, user, oldrev, newrev, ref) |
| 46 | 33 | end |
| 34 | + | |
| 35 | + def log(message) | |
| 36 | + Gitlab::GitLogger.error("POST-RECEIVE: #{message}") | |
| 37 | + end | |
| 47 | 38 | end | ... | ... |
| ... | ... | @@ -0,0 +1,23 @@ |
| 1 | +# Detect user based on identifier like | |
| 2 | +# key-13 or user-36 or last commit | |
| 3 | +module Gitlab | |
| 4 | + module Indentifier | |
| 5 | + def identify(identifier, project, newrev) | |
| 6 | + if identifier.blank? | |
| 7 | + # Local push from gitlab | |
| 8 | + email = project.repository.commit(newrev).author_email rescue nil | |
| 9 | + User.find_by_email(email) if email | |
| 10 | + | |
| 11 | + elsif identifier =~ /\Auser-\d+\Z/ | |
| 12 | + # git push over http | |
| 13 | + user_id = identifier.gsub("user-", "") | |
| 14 | + User.find_by_id(user_id) | |
| 15 | + | |
| 16 | + elsif identifier =~ /\Akey-\d+\Z/ | |
| 17 | + # git push over ssh | |
| 18 | + key_id = identifier.gsub("key-", "") | |
| 19 | + Key.find_by_id(key_id).try(:user) | |
| 20 | + end | |
| 21 | + end | |
| 22 | + end | |
| 23 | +end | ... | ... |