Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
710c4886
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,发现更多精彩内容 >>
提交
710c4886
编写于
6月 20, 2016
作者:
D
Douwe Maan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Automatically update diff note positions when MR is pushed to
上级
8d7dc26d
变更
5
显示空白变更内容
内联
并排
Showing
5 changed file
with
94 addition
and
9 deletion
+94
-9
app/models/diff_note.rb
app/models/diff_note.rb
+21
-1
app/models/merge_request.rb
app/models/merge_request.rb
+40
-5
app/services/merge_requests/refresh_service.rb
app/services/merge_requests/refresh_service.rb
+2
-2
app/services/merge_requests/reopen_service.rb
app/services/merge_requests/reopen_service.rb
+1
-1
app/services/notes/diff_position_update_service.rb
app/services/notes/diff_position_update_service.rb
+30
-0
未找到文件。
app/models/diff_note.rb
浏览文件 @
710c4886
...
...
@@ -12,7 +12,7 @@ class DiffNote < Note
validate
:positions_complete
validate
:verify_supported
before_validation
:set_original_position
,
on: :create
before_validation
:set_original_position
,
:update_position
,
on: :create
before_validation
:set_line_code
class
<<
self
...
...
@@ -71,6 +71,26 @@ class DiffNote < Note
self
.
position
.
diff_refs
==
diff_refs
end
def
update_position
return
unless
supported?
return
if
for_commit?
return
if
active?
Notes
::
DiffPositionUpdateService
.
new
(
self
.
project
,
nil
,
old_diff_refs:
self
.
position
.
diff_refs
,
new_diff_refs:
self
.
noteable
.
diff_refs
,
paths:
self
.
position
.
paths
).
execute
(
self
)
end
def
update_position!
update_position
&&
Gitlab
::
Timeless
.
timeless
(
self
,
&
:save
)
end
private
def
supported?
...
...
app/models/merge_request.rb
浏览文件 @
710c4886
...
...
@@ -288,14 +288,23 @@ class MergeRequest < ActiveRecord::Base
def
update_merge_request_diff
if
source_branch_changed?
||
target_branch_changed?
reload_
code
reload_
diff
end
end
def
reload_code
if
merge_request_diff
&&
open
?
def
reload_diff
return
unless
merge_request_diff
&&
open
?
old_diff_refs
=
self
.
diff_refs
merge_request_diff
.
reload_content
end
new_diff_refs
=
self
.
diff_refs
update_diff_notes_positions
(
old_diff_refs:
old_diff_refs
,
new_diff_refs:
new_diff_refs
)
end
def
check_if_can_be_merged
...
...
@@ -646,6 +655,32 @@ class MergeRequest < ActiveRecord::Base
diff_refs
&&
diff_refs
.
complete?
end
def
update_diff_notes_positions
(
old_diff_refs
:,
new_diff_refs
:)
return
unless
support_new_diff_notes?
return
if
new_diff_refs
==
old_diff_refs
active_diff_notes
=
self
.
notes
.
diff_notes
.
select
do
|
note
|
note
.
new_diff_note?
&&
note
.
active?
(
old_diff_refs
)
end
return
if
active_diff_notes
.
empty?
paths
=
active_diff_notes
.
flat_map
{
|
n
|
n
.
diff_file
.
paths
}.
uniq
service
=
Notes
::
DiffPositionUpdateService
.
new
(
self
.
project
,
nil
,
old_diff_refs:
old_diff_refs
,
new_diff_refs:
new_diff_refs
,
paths:
paths
)
active_diff_notes
.
each
do
|
note
|
service
.
execute
(
note
)
Gitlab
::
Timeless
.
timeless
(
note
,
&
:save
)
end
end
def
keep_around_commit
project
.
repository
.
keep_around
(
self
.
merge_commit_sha
)
end
...
...
app/services/merge_requests/refresh_service.rb
浏览文件 @
710c4886
...
...
@@ -60,7 +60,7 @@ module MergeRequests
merge_requests
.
each
do
|
merge_request
|
if
merge_request
.
source_branch
==
@branch_name
||
force_push?
merge_request
.
reload_
code
merge_request
.
reload_
diff
merge_request
.
mark_as_unchecked
else
mr_commit_ids
=
merge_request
.
commits
.
map
(
&
:id
)
...
...
@@ -68,7 +68,7 @@ module MergeRequests
matches
=
mr_commit_ids
&
push_commit_ids
if
matches
.
any?
merge_request
.
reload_
code
merge_request
.
reload_
diff
merge_request
.
mark_as_unchecked
else
merge_request
.
mark_as_unchecked
...
...
app/services/merge_requests/reopen_service.rb
浏览文件 @
710c4886
...
...
@@ -6,7 +6,7 @@ module MergeRequests
create_note
(
merge_request
)
notification_service
.
reopen_mr
(
merge_request
,
current_user
)
execute_hooks
(
merge_request
,
'reopen'
)
merge_request
.
reload_
code
merge_request
.
reload_
diff
merge_request
.
mark_as_unchecked
end
...
...
app/services/notes/diff_position_update_service.rb
0 → 100644
浏览文件 @
710c4886
module
Notes
class
DiffPositionUpdateService
<
BaseService
def
execute
(
note
)
new_position
=
tracer
.
trace
(
note
.
position
)
# Don't update the position if the type doesn't match, since that means
# the diff line commented on was changed, and the comment is now outdated
old_position
=
note
.
position
if
new_position
&&
new_position
!=
old_position
&&
new_position
.
type
==
old_position
.
type
note
.
position
=
new_position
end
note
end
private
def
tracer
@tracer
||=
Gitlab
::
Diff
::
PositionTracer
.
new
(
repository:
project
.
repository
,
old_diff_refs:
params
[
:old_diff_refs
],
new_diff_refs:
params
[
:new_diff_refs
],
paths:
params
[
:paths
]
)
end
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录