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
1c5876eb
Commit
1c5876eb
authored
Jan 28, 2013
by
Dmitriy Zaporozhets
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Do gitolite calls async. Remove satellite with project remove
parent
b4f16faa
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
90 additions
and
52 deletions
+90
-52
Procfile
Procfile
+1
-1
app/contexts/projects/create_context.rb
app/contexts/projects/create_context.rb
+3
-9
app/models/project.rb
app/models/project.rb
+11
-5
app/models/users_project.rb
app/models/users_project.rb
+1
-1
app/observers/project_observer.rb
app/observers/project_observer.rb
+1
-0
app/workers/gitolite_worker.rb
app/workers/gitolite_worker.rb
+10
-0
app/workers/post_receive.rb
app/workers/post_receive.rb
+8
-7
lib/gitlab/backend/gitolite.rb
lib/gitlab/backend/gitolite.rb
+11
-3
lib/gitlab/backend/gitolite_config.rb
lib/gitlab/backend/gitolite_config.rb
+15
-23
lib/gitlab/popen.rb
lib/gitlab/popen.rb
+18
-0
lib/gitlab/satellite/satellite.rb
lib/gitlab/satellite/satellite.rb
+10
-2
lib/tasks/sidekiq.rake
lib/tasks/sidekiq.rake
+1
-1
No files found.
Procfile
View file @
1c5876eb
web: bundle exec unicorn_rails -p $PORT
worker: bundle exec sidekiq -q post_receive,mailer,system_hook,project_web_hook,common,default
worker: bundle exec sidekiq -q post_receive,mailer,system_hook,project_web_hook,common,default
,gitolite
app/contexts/projects/create_context.rb
View file @
1c5876eb
...
...
@@ -32,16 +32,10 @@ module Projects
@project
.
namespace_id
=
current_user
.
namespace_id
end
Project
.
transaction
do
@project
.
creator
=
current_user
@project
.
save!
@project
.
creator
=
current_user
# Add user as project master
@project
.
users_projects
.
create!
(
project_access:
UsersProject
::
MASTER
,
user:
current_user
)
# when project saved no team member exist so
# project repository should be updated after first user add
@project
.
update_repository
if
@project
.
save
@project
.
users_projects
.
create
(
project_access:
UsersProject
::
MASTER
,
user:
current_user
)
end
@project
...
...
app/models/project.rb
View file @
1c5876eb
...
...
@@ -299,6 +299,9 @@ class Project < ActiveRecord::Base
def
trigger_post_receive
(
oldrev
,
newrev
,
ref
,
user
)
data
=
post_receive_data
(
oldrev
,
newrev
,
ref
,
user
)
# Create satellite
self
.
satellite
.
create
unless
self
.
satellite
.
exists?
# Create push event
self
.
observe_push
(
data
)
...
...
@@ -313,9 +316,6 @@ class Project < ActiveRecord::Base
self
.
execute_services
(
data
.
dup
)
end
# Create satellite
self
.
satellite
.
create
unless
self
.
satellite
.
exists?
# Discover the default branch, but only if it hasn't already been set to
# something else
if
repository
&&
default_branch
.
nil?
...
...
@@ -460,11 +460,17 @@ class Project < ActiveRecord::Base
end
def
update_repository
gitolite
.
update_repository
(
self
)
GitoliteWorker
.
perform_async
(
:update_repository
,
self
.
id
)
end
def
destroy_repository
gitolite
.
remove_repository
(
self
)
GitoliteWorker
.
perform_async
(
:remove_repository
,
self
.
path_with_namespace
)
end
def
repo_exists?
...
...
app/models/users_project.rb
View file @
1c5876eb
...
...
@@ -129,7 +129,7 @@ class UsersProject < ActiveRecord::Base
end
def
update_repository
gitolite
.
update_repository
(
project
)
project
.
update_repository
end
def
project_access_human
...
...
app/observers/project_observer.rb
View file @
1c5876eb
...
...
@@ -10,6 +10,7 @@ class ProjectObserver < ActiveRecord::Observer
def
after_destroy
(
project
)
log_info
(
"Project
\"
#{
project
.
name
}
\"
was removed"
)
project
.
satellite
.
destroy
project
.
destroy_repository
end
...
...
app/workers/gitolite_worker.rb
0 → 100644
View file @
1c5876eb
class
GitoliteWorker
include
Sidekiq
::
Worker
include
Gitolited
sidekiq_options
queue: :gitolite
def
perform
(
action
,
arg
)
gitolite
.
send
(
action
,
arg
)
end
end
app/workers/post_receive.rb
View file @
1c5876eb
...
...
@@ -13,13 +13,14 @@ class PostReceive
# Ignore push from non-gitlab users
user
=
if
identifier
.
eql?
Gitlab
.
config
.
gitolite
.
admin_key
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
)
else
Key
.
find_by_identifier
(
identifier
).
try
(
:user
)
end
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
)
else
Key
.
find_by_identifier
(
identifier
).
try
(
:user
)
end
return
false
unless
user
project
.
trigger_post_receive
(
oldrev
,
newrev
,
ref
,
user
)
...
...
lib/gitlab/backend/gitolite.rb
View file @
1c5876eb
...
...
@@ -22,7 +22,8 @@ module Gitlab
end
end
def
update_repository
project
def
update_repository
project_id
project
=
Project
.
find
(
project_id
)
config
.
update_project!
(
project
)
end
...
...
@@ -33,8 +34,15 @@ module Gitlab
end
end
def
remove_repository
project
config
.
destroy_project!
(
project
)
# Remove repository from gitolite
#
# name - project path with namespace
#
# Ex.
# remove_repository("gitlab/gitlab-ci")
#
def
remove_repository
(
name
)
config
.
destroy_project!
(
name
)
end
def
url_to_repo
path
...
...
lib/gitlab/backend/gitolite_config.rb
View file @
1c5876eb
...
...
@@ -4,6 +4,8 @@ require 'fileutils'
module
Gitlab
class
GitoliteConfig
include
Gitlab
::
Popen
class
PullError
<
StandardError
;
end
class
PushError
<
StandardError
;
end
class
BrokenGitolite
<
StandardError
;
end
...
...
@@ -87,12 +89,14 @@ module Gitlab
Gitlab
::
GitLogger
.
error
(
message
)
end
def
destroy_project
(
project
)
# do rm-rf only if repository exists
if
project
.
repository
FileUtils
.
rm_rf
(
project
.
repository
.
path_to_repo
)
end
conf
.
rm_repo
(
project
.
path_with_namespace
)
def
path_to_repo
(
name
)
File
.
join
(
Gitlab
.
config
.
gitolite
.
repos_path
,
"
#{
name
}
.git"
)
end
def
destroy_project
(
name
)
full_path
=
path_to_repo
(
name
)
FileUtils
.
rm_rf
(
full_path
)
if
File
.
exists?
(
full_path
)
conf
.
rm_repo
(
name
)
end
def
clean_repo
repo_name
...
...
@@ -210,14 +214,14 @@ module Gitlab
end
def
push
output
,
status
=
popen
(
'git add -A'
)
output
,
status
=
popen
(
'git add -A'
,
tmp_conf_path
)
raise
"Git add failed."
unless
status
.
zero?
# git commit returns 0 on success, and 1 if there is nothing to commit
output
,
status
=
popen
(
'git commit -m "GitLab"'
)
output
,
status
=
popen
(
'git commit -m "GitLab"'
,
tmp_conf_path
)
raise
"Git add failed."
unless
[
0
,
1
].
include?
(
status
)
output
,
status
=
popen
(
'git push'
)
output
,
status
=
popen
(
'git push'
,
tmp_conf_path
)
if
output
=~
/remote\: FATAL/
raise
BrokenGitolite
,
output
...
...
@@ -230,20 +234,8 @@ module Gitlab
end
end
def
popen
(
cmd
,
path
=
nil
)
path
||=
File
.
join
(
config_tmp_dir
,
'gitolite'
)
vars
=
{
"PWD"
=>
path
}
options
=
{
:chdir
=>
path
}
@cmd_output
=
""
@cmd_status
=
0
Open3
.
popen3
(
vars
,
cmd
,
options
)
do
|
stdin
,
stdout
,
stderr
,
wait_thr
|
@cmd_status
=
wait_thr
.
value
.
exitstatus
@cmd_output
<<
stdout
.
read
@cmd_output
<<
stderr
.
read
end
return
@cmd_output
,
@cmd_status
def
tmp_conf_path
File
.
join
(
config_tmp_dir
,
'gitolite'
)
end
end
end
lib/gitlab/popen.rb
0 → 100644
View file @
1c5876eb
module
Gitlab
module
Popen
def
popen
(
cmd
,
path
)
vars
=
{
"PWD"
=>
path
}
options
=
{
:chdir
=>
path
}
@cmd_output
=
""
@cmd_status
=
0
Open3
.
popen3
(
vars
,
cmd
,
options
)
do
|
stdin
,
stdout
,
stderr
,
wait_thr
|
@cmd_status
=
wait_thr
.
value
.
exitstatus
@cmd_output
<<
stdout
.
read
@cmd_output
<<
stderr
.
read
end
return
@cmd_output
,
@cmd_status
end
end
end
lib/gitlab/satellite/satellite.rb
View file @
1c5876eb
...
...
@@ -3,6 +3,8 @@ module Gitlab
module
Satellite
class
Satellite
include
Gitlab
::
Popen
PARKING_BRANCH
=
"__parking_branch"
attr_accessor
:project
...
...
@@ -24,8 +26,10 @@ module Gitlab
end
def
create
create_cmd
=
"git clone
#{
project
.
url_to_repo
}
#{
path
}
"
if
system
(
create_cmd
)
output
,
status
=
popen
(
"git clone
#{
project
.
url_to_repo
}
#{
path
}
"
,
Gitlab
.
config
.
satellites
.
path
)
if
status
.
zero?
true
else
Gitlab
::
GitLogger
.
error
(
"Failed to create satellite for
#{
project
.
name_with_namespace
}
"
)
...
...
@@ -66,6 +70,10 @@ module Gitlab
@repo
||=
Grit
::
Repo
.
new
(
path
)
end
def
destroy
FileUtils
.
rm_rf
(
path
)
end
private
# Clear the working directory
...
...
lib/tasks/sidekiq.rake
View file @
1c5876eb
...
...
@@ -6,7 +6,7 @@ namespace :sidekiq do
desc
"GITLAB | Start sidekiq"
task
:start
do
run
"nohup bundle exec sidekiq -q post_receive,mailer,system_hook,project_web_hook,common,default -e
#{
Rails
.
env
}
-P
#{
pidfile
}
>>
#{
Rails
.
root
.
join
(
"log"
,
"sidekiq.log"
)
}
2>&1 &"
run
"nohup bundle exec sidekiq -q post_receive,mailer,system_hook,project_web_hook,
gitolite,
common,default -e
#{
Rails
.
env
}
-P
#{
pidfile
}
>>
#{
Rails
.
root
.
join
(
"log"
,
"sidekiq.log"
)
}
2>&1 &"
end
def
pidfile
...
...
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