Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
30b36c92
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
30b36c92
编写于
3月 15, 2016
作者:
J
Jacob Vosmaer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Use an exception to pass messages
上级
0beae70e
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
42 addition
and
23 deletion
+42
-23
app/controllers/projects_controller.rb
app/controllers/projects_controller.rb
+10
-5
app/services/git_push_service.rb
app/services/git_push_service.rb
+1
-0
app/services/projects/housekeeping_service.rb
app/services/projects/housekeeping_service.rb
+10
-9
spec/services/git_push_service_spec.rb
spec/services/git_push_service_spec.rb
+18
-6
spec/services/projects/housekeeping_service_spec.rb
spec/services/projects/housekeeping_service_spec.rb
+3
-3
未找到文件。
app/controllers/projects_controller.rb
浏览文件 @
30b36c92
...
...
@@ -170,12 +170,17 @@ class ProjectsController < ApplicationController
end
def
housekeeping
message
=
::
Projects
::
HousekeepingService
.
new
(
@project
).
execute
::
Projects
::
HousekeepingService
.
new
(
@project
).
execute
respond_to
do
|
format
|
flash
[
:notice
]
=
message
format
.
html
{
redirect_to
project_path
(
@project
)
}
end
redirect_to
(
project_path
(
@project
),
notice:
"Housekeeping successfully started"
)
rescue
::
Projects
::
HousekeepingService
::
LeaseTaken
=>
ex
redirect_to
(
edit_project_path
(
@project
),
alert:
ex
.
to_s
)
end
def
toggle_star
...
...
app/services/git_push_service.rb
浏览文件 @
30b36c92
...
...
@@ -79,6 +79,7 @@ class GitPushService < BaseService
housekeeping
=
Projects
::
HousekeepingService
.
new
(
@project
)
housekeeping
.
increment!
housekeeping
.
execute
if
housekeeping
.
needed?
rescue
Projects
::
HousekeepingService
::
LeaseTaken
end
def
process_default_branch
...
...
app/services/projects/housekeeping_service.rb
浏览文件 @
30b36c92
...
...
@@ -11,20 +11,22 @@ module Projects
LEASE_TIMEOUT
=
3600
class
LeaseTaken
<
StandardError
def
to_s
"Somebody already triggered housekeeping for this project in the past
#{
LEASE_TIMEOUT
/
60
}
minutes"
end
end
def
initialize
(
project
)
@project
=
project
end
def
execute
if
!
try_obtain_lease
return
"Housekeeping was already triggered in the past
#{
LEASE_TIMEOUT
/
60
}
minutes"
end
raise
LeaseTaken
if
!
try_obtain_lease
GitlabShellWorker
.
perform_async
(
:gc
,
@project
.
path_with_namespace
)
@project
.
pushes_since_gc
=
0
@project
.
save!
"Housekeeping successfully started"
ensure
@project
.
update_column
(
:pushes_since_gc
,
0
)
end
def
needed?
...
...
@@ -32,8 +34,7 @@ module Projects
end
def
increment!
@project
.
pushes_since_gc
+=
1
@project
.
save!
@project
.
increment!
(
:pushes_since_gc
)
end
private
...
...
spec/services/git_push_service_spec.rb
浏览文件 @
30b36c92
...
...
@@ -402,7 +402,7 @@ describe GitPushService, services: true do
end
describe
"housekeeping"
do
let
(
:housekeeping
)
{
instance_double
(
'Projects::HousekeepingService'
,
increment!:
nil
,
needed?:
false
)
}
let
(
:housekeeping
)
{
Projects
::
HousekeepingService
.
new
(
project
)
}
before
do
allow
(
Projects
::
HousekeepingService
).
to
receive
(
:new
).
and_return
(
housekeeping
)
...
...
@@ -414,16 +414,28 @@ describe GitPushService, services: true do
execute_service
(
project
,
user
,
@oldrev
,
@newrev
,
@ref
)
end
it
'performs housekeeping when needed'
do
expect
(
housekeeping
).
to
receive
(
:needed?
).
and_return
(
true
)
expect
(
housekeeping
).
to
receive
(
:execute
)
context
'when housekeeping is needed'
do
before
do
allow
(
housekeeping
).
to
receive
(
:needed?
).
and_return
(
true
)
end
execute_service
(
project
,
user
,
@oldrev
,
@newrev
,
@ref
)
it
'performs housekeeping'
do
expect
(
housekeeping
).
to
receive
(
:execute
)
execute_service
(
project
,
user
,
@oldrev
,
@newrev
,
@ref
)
end
it
'does not raise an exception'
do
allow
(
housekeeping
).
to
receive
(
:try_obtain_lease
).
and_return
(
false
)
execute_service
(
project
,
user
,
@oldrev
,
@newrev
,
@ref
)
end
end
it
'increments the push counter'
do
expect
(
housekeeping
).
to
receive
(
:increment!
)
execute_service
(
project
,
user
,
@oldrev
,
@newrev
,
@ref
)
end
end
...
...
spec/services/projects/housekeeping_service_spec.rb
浏览文件 @
30b36c92
...
...
@@ -14,7 +14,7 @@ describe Projects::HousekeepingService do
expect
(
subject
).
to
receive
(
:try_obtain_lease
).
and_return
(
true
)
expect
(
GitlabShellWorker
).
to
receive
(
:perform_async
).
with
(
:gc
,
project
.
path_with_namespace
)
expect
(
subject
.
execute
).
to
include
(
'successfully started'
)
subject
.
execute
expect
(
project
.
pushes_since_gc
).
to
eq
(
0
)
end
...
...
@@ -22,8 +22,8 @@ describe Projects::HousekeepingService do
expect
(
subject
).
to
receive
(
:try_obtain_lease
).
and_return
(
false
)
expect
(
GitlabShellWorker
).
not_to
receive
(
:perform_async
)
expect
(
subject
.
execute
).
to
include
(
'already triggered'
)
expect
(
project
.
pushes_since_gc
).
to
eq
(
3
)
expect
{
subject
.
execute
}.
to
raise_error
(
Projects
::
HousekeepingService
::
LeaseTaken
)
expect
(
project
.
pushes_since_gc
).
to
eq
(
0
)
end
end
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录