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 | class PostReceive | 1 | class PostReceive |
2 | include Sidekiq::Worker | 2 | include Sidekiq::Worker |
3 | + include Gitlab::Identifier | ||
3 | 4 | ||
4 | sidekiq_options queue: :post_receive | 5 | sidekiq_options queue: :post_receive |
5 | 6 | ||
@@ -8,7 +9,7 @@ class PostReceive | @@ -8,7 +9,7 @@ class PostReceive | ||
8 | if repo_path.start_with?(Gitlab.config.gitlab_shell.repos_path.to_s) | 9 | if repo_path.start_with?(Gitlab.config.gitlab_shell.repos_path.to_s) |
9 | repo_path.gsub!(Gitlab.config.gitlab_shell.repos_path.to_s, "") | 10 | repo_path.gsub!(Gitlab.config.gitlab_shell.repos_path.to_s, "") |
10 | else | 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 | end | 13 | end |
13 | 14 | ||
14 | repo_path.gsub!(/.git$/, "") | 15 | repo_path.gsub!(/.git$/, "") |
@@ -17,31 +18,21 @@ class PostReceive | @@ -17,31 +18,21 @@ class PostReceive | ||
17 | project = Project.find_with_namespace(repo_path) | 18 | project = Project.find_with_namespace(repo_path) |
18 | 19 | ||
19 | if project.nil? | 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 | return false | 22 | return false |
22 | end | 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 | unless user | 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 | return false | 29 | return false |
43 | end | 30 | end |
44 | 31 | ||
45 | GitPushService.new.execute(project, user, oldrev, newrev, ref) | 32 | GitPushService.new.execute(project, user, oldrev, newrev, ref) |
46 | end | 33 | end |
34 | + | ||
35 | + def log(message) | ||
36 | + Gitlab::GitLogger.error("POST-RECEIVE: #{message}") | ||
37 | + end | ||
47 | end | 38 | end |
@@ -0,0 +1,23 @@ | @@ -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 |