Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Jérome Perrin
gitlab-ce
Commits
f54bf003
Commit
f54bf003
authored
Mar 17, 2016
by
Gabriel Mazetto
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Back-porting PostReceive refactor made for EE
🍺
parent
6349f490
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
79 additions
and
27 deletions
+79
-27
app/workers/post_receive.rb
app/workers/post_receive.rb
+19
-27
lib/gitlab/git_post_receive.rb
lib/gitlab/git_post_receive.rb
+60
-0
No files found.
app/workers/post_receive.rb
View file @
f54bf003
class
PostReceive
include
Sidekiq
::
Worker
include
Gitlab
::
Identifier
sidekiq_options
queue: :post_receive
...
...
@@ -11,50 +10,43 @@ class PostReceive
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\z/
,
""
)
repo_path
.
gsub!
(
/\A\//
,
""
)
post_received
=
Gitlab
::
GitPostReceive
.
new
(
repo_path
,
identifier
,
changes
)
project
=
Project
.
find_with_namespace
(
repo_path
)
if
project
.
nil?
if
post_received
.
project
.
nil?
log
(
"Triggered hook for non-existing project with full path
\"
#{
repo_path
}
\"
"
)
return
false
end
changes
=
Base64
.
decode64
(
changes
)
unless
changes
.
include?
(
" "
)
changes
=
utf8_encode_changes
(
changes
)
changes
=
changes
.
lines
if
post_received
.
wiki?
# Nothing defined here yet.
elsif
post_received
.
regular_project?
process_project_changes
(
post_received
)
else
log
(
"Triggered hook for unidentifiable repository type with full path
\"
#{
repo_path
}
\"
"
)
false
end
end
changes
.
each
do
|
change
|
def
process_project_changes
(
post_received
)
post_received
.
changes
.
each
do
|
change
|
oldrev
,
newrev
,
ref
=
change
.
strip
.
split
(
' '
)
@user
||=
identify
(
identifier
,
project
,
newrev
)
@user
||=
post_received
.
identify
(
newrev
)
unless
@user
log
(
"Triggered hook for non-existing user
\"
#{
identifier
}
\"
"
)
log
(
"Triggered hook for non-existing user
\"
#{
post_received
.
identifier
}
\"
"
)
return
false
end
if
Gitlab
::
Git
.
tag_ref?
(
ref
)
GitTagPushService
.
new
.
execute
(
project
,
@user
,
oldrev
,
newrev
,
ref
)
GitTagPushService
.
new
.
execute
(
p
ost_received
.
p
roject
,
@user
,
oldrev
,
newrev
,
ref
)
else
GitPushService
.
new
(
project
,
@user
,
oldrev:
oldrev
,
newrev:
newrev
,
ref:
ref
).
execute
GitPushService
.
new
(
p
ost_received
.
p
roject
,
@user
,
oldrev:
oldrev
,
newrev:
newrev
,
ref:
ref
).
execute
end
end
end
def
utf8_encode_changes
(
changes
)
changes
=
changes
.
dup
changes
.
force_encoding
(
"UTF-8"
)
return
changes
if
changes
.
valid_encoding?
# Convert non-UTF-8 branch/tag names to UTF-8 so they can be dumped as JSON.
detection
=
CharlockHolmes
::
EncodingDetector
.
detect
(
changes
)
return
changes
unless
detection
&&
detection
[
:encoding
]
CharlockHolmes
::
Converter
.
convert
(
changes
,
detection
[
:encoding
],
'UTF-8'
)
end
private
def
log
(
message
)
Gitlab
::
GitLogger
.
error
(
"POST-RECEIVE:
#{
message
}
"
)
...
...
lib/gitlab/git_post_receive.rb
0 → 100644
View file @
f54bf003
module
Gitlab
class
GitPostReceive
include
Gitlab
::
Identifier
attr_reader
:repo_path
,
:identifier
,
:changes
,
:project
def
initialize
(
repo_path
,
identifier
,
changes
)
repo_path
.
gsub!
(
/\.git\z/
,
''
)
repo_path
.
gsub!
(
/\A\//
,
''
)
@repo_path
=
repo_path
@identifier
=
identifier
@changes
=
deserialize_changes
(
changes
)
retrieve_project_and_type
end
def
wiki?
@type
==
:wiki
end
def
regular_project?
@type
==
:project
end
def
identify
(
revision
)
super
(
identifier
,
project
,
revision
)
end
private
def
retrieve_project_and_type
@type
=
:project
@project
=
Project
.
find_with_namespace
(
@repo_path
)
if
@repo_path
.
end_with?
(
'.wiki'
)
&&
!
@project
@type
=
:wiki
@project
=
Project
.
find_with_namespace
(
@repo_path
.
gsub
(
/\.wiki\z/
,
''
))
end
end
def
deserialize_changes
(
changes
)
changes
=
Base64
.
decode64
(
changes
)
unless
changes
.
include?
(
' '
)
changes
=
utf8_encode_changes
(
changes
)
changes
.
lines
end
def
utf8_encode_changes
(
changes
)
changes
=
changes
.
dup
changes
.
force_encoding
(
'UTF-8'
)
return
changes
if
changes
.
valid_encoding?
# Convert non-UTF-8 branch/tag names to UTF-8 so they can be dumped as JSON.
detection
=
CharlockHolmes
::
EncodingDetector
.
detect
(
changes
)
return
changes
unless
detection
&&
detection
[
:encoding
]
CharlockHolmes
::
Converter
.
convert
(
changes
,
detection
[
:encoding
],
'UTF-8'
)
end
end
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment