Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
543845f7
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 搜索 >>
提交
543845f7
编写于
2月 04, 2016
作者:
P
Pierre de La Morinerie
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Indicate how much an MR branch diverges from the target branch
上级
566ea854
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
146 addition
and
1 deletion
+146
-1
CHANGELOG
CHANGELOG
+1
-0
app/models/merge_request.rb
app/models/merge_request.rb
+23
-0
app/views/projects/merge_requests/_show.html.haml
app/views/projects/merge_requests/_show.html.haml
+2
-0
features/project/merge_requests.feature
features/project/merge_requests.feature
+10
-0
features/steps/project/merge_requests.rb
features/steps/project/merge_requests.rb
+28
-1
features/steps/shared/paths.rb
features/steps/shared/paths.rb
+8
-0
spec/factories/merge_requests.rb
spec/factories/merge_requests.rb
+10
-0
spec/models/merge_request_spec.rb
spec/models/merge_request_spec.rb
+64
-0
未找到文件。
CHANGELOG
浏览文件 @
543845f7
...
...
@@ -6,6 +6,7 @@ v 8.6.0 (unreleased)
- Fix issue when pushing to projects ending in .wiki
- Fix avatar stretching by providing a cropping feature (Johann Pardanaud)
- Don't load all of GitLab in mail_room
- Indicate how much an MR diverged from the target branch (Pierre de La Morinerie)
- Strip leading and trailing spaces in URL validator (evuez)
- Return empty array instead of 404 when commit has no statuses in commit status API
- Update documentation to reflect Guest role not being enforced on internal projects
...
...
app/models/merge_request.rb
浏览文件 @
543845f7
...
...
@@ -524,6 +524,29 @@ class MergeRequest < ActiveRecord::Base
end
end
def
diverged_commits_count
cache
=
Rails
.
cache
.
read
(
:"merge_request_
#{
id
}
_diverged_commits"
)
if
cache
.
blank?
||
cache
[
:source_sha
]
!=
source_sha
||
cache
[
:target_sha
]
!=
target_sha
cache
=
{
source_sha:
source_sha
,
target_sha:
target_sha
,
diverged_commits_count:
compute_diverged_commits_count
}
Rails
.
cache
.
write
(
:"merge_request_
#{
id
}
_diverged_commits"
,
cache
)
end
cache
[
:diverged_commits_count
]
end
def
compute_diverged_commits_count
Gitlab
::
Git
::
Commit
.
between
(
target_project
.
repository
.
raw_repository
,
source_sha
,
target_sha
).
size
end
def
diverged_from_target_branch?
diverged_commits_count
>
0
end
def
ci_commit
@ci_commit
||=
source_project
.
ci_commit
(
last_commit
.
id
)
if
last_commit
&&
source_project
end
...
...
app/views/projects/merge_requests/_show.html.haml
浏览文件 @
543845f7
...
...
@@ -34,6 +34,8 @@
%span
into
=
link_to
namespace_project_commits_path
(
@project
.
namespace
,
@project
,
@merge_request
.
target_branch
),
class:
"label-branch"
do
=
@merge_request
.
target_branch
-
if
@merge_request
.
open?
&&
@merge_request
.
diverged_from_target_branch?
%span
(
#{
pluralize
(
@merge_request
.
diverged_commits_count
,
'commit'
)
}
behind)
=
render
"projects/merge_requests/show/how_to_merge"
=
render
"projects/merge_requests/widget/show.html.haml"
...
...
features/project/merge_requests.feature
浏览文件 @
543845f7
...
...
@@ -26,6 +26,16 @@ Feature: Project Merge Requests
When
I visit project
"Shop"
merge requests page
Then
I should see
"other_branch"
branch
Scenario
:
I
should not see the numbers of diverged commits if the branch is rebased on the target
Given
project
"Shop"
have
"Bug NS-07"
open merge request with rebased branch
When
I visit merge request page
"Bug NS-07"
Then
I should not see the diverged commits count
Scenario
:
I
should see the numbers of diverged commits if the branch diverged from the target
Given
project
"Shop"
have
"Bug NS-08"
open merge request with diverged branch
When
I visit merge request page
"Bug NS-08"
Then
I should see the diverged commits count
Scenario
:
I
should see rejected merge requests
Given
I click link
"Closed"
Then
I should see
"Feature NS-03"
in merge requests
...
...
features/steps/project/merge_requests.rb
浏览文件 @
543845f7
...
...
@@ -60,7 +60,6 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
expect
(
page
).
not_to
have_content
"Feature NS-03"
end
step
'I should not see "Bug NS-04" in merge requests'
do
expect
(
page
).
not_to
have_content
"Bug NS-04"
end
...
...
@@ -121,6 +120,22 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
author:
project
.
users
.
first
)
end
step
'project "Shop" have "Bug NS-07" open merge request with rebased branch'
do
create
(
:merge_request
,
:rebased
,
title:
"Bug NS-07"
,
source_project:
project
,
target_project:
project
,
author:
project
.
users
.
first
)
end
step
'project "Shop" have "Bug NS-08" open merge request with diverged branch'
do
create
(
:merge_request
,
:diverged
,
title:
"Bug NS-08"
,
source_project:
project
,
target_project:
project
,
author:
project
.
users
.
first
)
end
step
'project "Shop" have "Feature NS-03" closed merge request'
do
create
(
:closed_merge_request
,
title:
"Feature NS-03"
,
...
...
@@ -490,6 +505,18 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
end
end
step
'I should see the diverged commits count'
do
page
.
within
".mr-source-target"
do
expect
(
page
).
to
have_content
/([0-9]+ commits behind)/
end
end
step
'I should not see the diverged commits count'
do
page
.
within
".mr-source-target"
do
expect
(
page
).
not_to
have_content
/([0-9]+ commit[s]? behind)/
end
end
step
'I should see "Bug NS-05" at the top'
do
expect
(
page
.
find
(
'ul.content-list.mr-list li.merge-request:first-child'
)).
to
have_content
(
"Bug NS-05"
)
end
...
...
features/steps/shared/paths.rb
浏览文件 @
543845f7
...
...
@@ -395,6 +395,14 @@ module SharedPaths
visit
merge_request_path
(
"Bug NS-05"
)
end
step
'I visit merge request page "Bug NS-07"'
do
visit
merge_request_path
(
"Bug NS-07"
)
end
step
'I visit merge request page "Bug NS-08"'
do
visit
merge_request_path
(
"Bug NS-08"
)
end
step
'I visit merge request page "Bug CO-01"'
do
mr
=
MergeRequest
.
find_by
(
title:
"Bug CO-01"
)
visit
namespace_project_merge_request_path
(
mr
.
target_project
.
namespace
,
mr
.
target_project
,
mr
)
...
...
spec/factories/merge_requests.rb
浏览文件 @
543845f7
...
...
@@ -69,6 +69,16 @@ FactoryGirl.define do
target_branch
"master"
end
trait
:rebased
do
source_branch
"markdown"
target_branch
"improve/awesome"
end
trait
:diverged
do
source_branch
"feature"
target_branch
"master"
end
trait
:merge_when_build_succeeds
do
merge_when_build_succeeds
true
merge_user
author
...
...
spec/models/merge_request_spec.rb
浏览文件 @
543845f7
...
...
@@ -274,6 +274,70 @@ describe MergeRequest, models: true do
end
end
describe
'#diverged_commits_count'
do
let
(
:project
)
{
create
(
:project
)
}
let
(
:fork_project
)
{
create
(
:project
,
forked_from_project:
project
)
}
context
'diverged on same repository'
do
subject
(
:merge_request_with_divergence
)
{
create
(
:merge_request
,
:diverged
,
source_project:
project
,
target_project:
project
)
}
it
'counts commits that are on target branch but not on source branch'
do
expect
(
subject
.
diverged_commits_count
).
to
eq
(
5
)
end
end
context
'diverged on fork'
do
subject
(
:merge_request_fork_with_divergence
)
{
create
(
:merge_request
,
:diverged
,
source_project:
fork_project
,
target_project:
project
)
}
it
'counts commits that are on target branch but not on source branch'
do
expect
(
subject
.
diverged_commits_count
).
to
eq
(
5
)
end
end
context
'rebased on fork'
do
subject
(
:merge_request_rebased
)
{
create
(
:merge_request
,
:rebased
,
source_project:
fork_project
,
target_project:
project
)
}
it
'counts commits that are on target branch but not on source branch'
do
expect
(
subject
.
diverged_commits_count
).
to
eq
(
0
)
end
end
describe
'caching'
do
before
(
:example
)
do
allow
(
Rails
).
to
receive
(
:cache
).
and_return
(
ActiveSupport
::
Cache
::
MemoryStore
.
new
)
end
it
'caches the output'
do
expect
(
subject
).
to
receive
(
:compute_diverged_commits_count
).
once
.
and_return
(
2
)
subject
.
diverged_commits_count
subject
.
diverged_commits_count
end
it
'invalidates the cache when the source sha changes'
do
expect
(
subject
).
to
receive
(
:compute_diverged_commits_count
).
twice
.
and_return
(
2
)
subject
.
diverged_commits_count
allow
(
subject
).
to
receive
(
:source_sha
).
and_return
(
'123abc'
)
subject
.
diverged_commits_count
end
it
'invalidates the cache when the target sha changes'
do
expect
(
subject
).
to
receive
(
:compute_diverged_commits_count
).
twice
.
and_return
(
2
)
subject
.
diverged_commits_count
allow
(
subject
).
to
receive
(
:target_sha
).
and_return
(
'123abc'
)
subject
.
diverged_commits_count
end
end
end
it_behaves_like
'an editable mentionable'
do
subject
{
create
(
:merge_request
)
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录