Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
f0f3246a
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,发现更多精彩内容 >>
提交
f0f3246a
编写于
6月 28, 2019
作者:
E
Eugenia Grieff
提交者:
Douwe Maan
6月 28, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Do not change updated_at on an issue when reordering on an issue board
上级
dbd86f00
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
71 addition
and
13 deletion
+71
-13
app/models/concerns/relative_positioning.rb
app/models/concerns/relative_positioning.rb
+2
-2
app/services/issuable_base_service.rb
app/services/issuable_base_service.rb
+11
-2
changelogs/unreleased/44949-do-not-update-updated_at-on-an-issue-when-reordering-it.yml
...-not-update-updated_at-on-an-issue-when-reordering-it.yml
+5
-0
spec/support/shared_examples/services/boards/issues_move_service.rb
...rt/shared_examples/services/boards/issues_move_service.rb
+53
-9
未找到文件。
app/models/concerns/relative_positioning.rb
浏览文件 @
f0f3246a
...
...
@@ -25,7 +25,7 @@ module RelativePositioning
relative_position
=
position_between
(
max_relative_position
,
MAX_POSITION
)
object
.
relative_position
=
relative_position
max_relative_position
=
relative_position
object
.
save
object
.
save
(
touch:
false
)
end
end
end
...
...
@@ -159,7 +159,7 @@ module RelativePositioning
def
save_positionable_neighbours
return
unless
@positionable_neighbours
status
=
@positionable_neighbours
.
all?
(
&
:save
)
status
=
@positionable_neighbours
.
all?
{
|
issue
|
issue
.
save
(
touch:
false
)
}
@positionable_neighbours
=
nil
status
...
...
app/services/issuable_base_service.rb
浏览文件 @
f0f3246a
...
...
@@ -205,7 +205,7 @@ class IssuableBaseService < BaseService
end
if
issuable
.
changed?
||
params
.
present?
issuable
.
assign_attributes
(
params
.
merge
(
updated_by:
current_user
)
)
issuable
.
assign_attributes
(
params
)
if
has_title_or_description_changed?
(
issuable
)
issuable
.
assign_attributes
(
last_edited_at:
Time
.
now
,
last_edited_by:
current_user
)
...
...
@@ -213,11 +213,16 @@ class IssuableBaseService < BaseService
before_update
(
issuable
)
# Do not touch when saving the issuable if only changes position within a list. We should call
# this method at this point to capture all possible changes.
should_touch
=
update_timestamp?
(
issuable
)
issuable
.
updated_by
=
current_user
if
should_touch
# We have to perform this check before saving the issuable as Rails resets
# the changed fields upon calling #save.
update_project_counters
=
issuable
.
project
&&
update_project_counter_caches?
(
issuable
)
if
issuable
.
with_transaction_returning_status
{
issuable
.
save
}
if
issuable
.
with_transaction_returning_status
{
issuable
.
save
(
touch:
should_touch
)
}
# We do not touch as it will affect a update on updated_at field
ActiveRecord
::
Base
.
no_touching
do
Issuable
::
CommonSystemNotesService
.
new
(
project
,
current_user
).
execute
(
issuable
,
old_labels:
old_associations
[
:labels
])
...
...
@@ -402,4 +407,8 @@ class IssuableBaseService < BaseService
def
ensure_milestone_available
(
issuable
)
issuable
.
milestone_id
=
nil
unless
issuable
.
milestone_available?
end
def
update_timestamp?
(
issuable
)
issuable
.
changes
.
keys
!=
[
"relative_position"
]
end
end
changelogs/unreleased/44949-do-not-update-updated_at-on-an-issue-when-reordering-it.yml
0 → 100644
浏览文件 @
f0f3246a
---
title
:
Will not update issue timestamps when changing positions in a list
merge_request
:
29677
author
:
type
:
changed
spec/support/shared_examples/services/boards/issues_move_service.rb
浏览文件 @
f0f3246a
shared_examples
'issues move service'
do
|
group
|
shared_examples
'updating timestamps'
do
it
'updates updated_at'
do
expect
{
described_class
.
new
(
parent
,
user
,
params
).
execute
(
issue
)}
.
to
change
{
issue
.
reload
.
updated_at
}
end
end
context
'when moving an issue between lists'
do
let
(
:issue
)
{
create
(
:labeled_issue
,
project:
project
,
labels:
[
bug
,
development
])
}
let
(
:params
)
{
{
board_id:
board1
.
id
,
from_list_id:
list1
.
id
,
to_list_id:
list2
.
id
}
}
it_behaves_like
'updating timestamps'
it
'delegates the label changes to Issues::UpdateService'
do
service
=
double
(
:service
)
expect
(
Issues
::
UpdateService
).
to
receive
(
:new
).
and_return
(
service
)
...
...
@@ -24,6 +33,8 @@ shared_examples 'issues move service' do |group|
let
(
:issue
)
{
create
(
:labeled_issue
,
project:
project
,
labels:
[
bug
,
development
,
testing
,
regression
])
}
let
(
:params
)
{
{
board_id:
board1
.
id
,
from_list_id:
list2
.
id
,
to_list_id:
closed
.
id
}
}
it_behaves_like
'updating timestamps'
it
'delegates the close proceedings to Issues::CloseService'
do
expect_any_instance_of
(
Issues
::
CloseService
).
to
receive
(
:execute
).
with
(
issue
).
once
...
...
@@ -46,6 +57,8 @@ shared_examples 'issues move service' do |group|
let
(
:issue
)
{
create
(
:labeled_issue
,
project:
project
,
labels:
[
bug
,
development
,
testing
,
regression
],
milestone:
milestone
)
}
let
(
:params
)
{
{
board_id:
board1
.
id
,
from_list_id:
list2
.
id
,
to_list_id:
backlog
.
id
}
}
it_behaves_like
'updating timestamps'
it
'keeps labels and milestone'
do
described_class
.
new
(
parent
,
user
,
params
).
execute
(
issue
)
issue
.
reload
...
...
@@ -59,6 +72,8 @@ shared_examples 'issues move service' do |group|
let
(
:issue
)
{
create
(
:labeled_issue
,
:closed
,
project:
project
,
labels:
[
bug
])
}
let
(
:params
)
{
{
board_id:
board1
.
id
,
from_list_id:
closed
.
id
,
to_list_id:
list2
.
id
}
}
it_behaves_like
'updating timestamps'
it
'delegates the re-open proceedings to Issues::ReopenService'
do
expect_any_instance_of
(
Issues
::
ReopenService
).
to
receive
(
:execute
).
with
(
issue
).
once
...
...
@@ -75,10 +90,13 @@ shared_examples 'issues move service' do |group|
end
context
'when moving to same list'
do
let
(
:issue
)
{
create
(
:labeled_issue
,
project:
project
,
labels:
[
bug
,
development
])
}
let
(
:issue1
)
{
create
(
:labeled_issue
,
project:
project
,
labels:
[
bug
,
development
])
}
let
(
:issue2
)
{
create
(
:labeled_issue
,
project:
project
,
labels:
[
bug
,
development
])
}
let
(
:params
)
{
{
board_id:
board1
.
id
,
from_list_id:
list1
.
id
,
to_list_id:
list1
.
id
}
}
let
(
:assignee
)
{
create
(
:user
)
}
let
(
:params
)
{
{
board_id:
board1
.
id
,
from_list_id:
list1
.
id
,
to_list_id:
list1
.
id
}
}
let
(
:issue1
)
{
create
(
:labeled_issue
,
project:
project
,
labels:
[
bug
,
development
])
}
let
(
:issue2
)
{
create
(
:labeled_issue
,
project:
project
,
labels:
[
bug
,
development
])
}
let
(
:issue
)
do
create
(
:labeled_issue
,
project:
project
,
labels:
[
bug
,
development
],
assignees:
[
assignee
])
end
it
'returns false'
do
expect
(
described_class
.
new
(
parent
,
user
,
params
).
execute
(
issue
)).
to
eq
false
...
...
@@ -90,18 +108,36 @@ shared_examples 'issues move service' do |group|
expect
(
issue
.
reload
.
labels
).
to
contain_exactly
(
bug
,
development
)
end
it
'sorts issues'
do
[
issue
,
issue1
,
issue2
].
each
do
|
issue
|
issue
.
move_to_end
&&
issue
.
save!
end
it
'keeps issues assignees'
do
described_class
.
new
(
parent
,
user
,
params
).
execute
(
issue
)
expect
(
issue
.
reload
.
assignees
).
to
contain_exactly
(
assignee
)
end
params
.
merge!
(
move_after_id:
issue1
.
id
,
move_before_id:
issue2
.
id
)
it
'sorts issues'
do
reorder_issues
(
params
,
issues:
[
issue
,
issue1
,
issue2
])
described_class
.
new
(
parent
,
user
,
params
).
execute
(
issue
)
expect
(
issue
.
relative_position
).
to
be_between
(
issue1
.
relative_position
,
issue2
.
relative_position
)
end
it
'does not update updated_at'
do
reorder_issues
(
params
,
issues:
[
issue
,
issue1
,
issue2
])
updated_at
=
issue
.
updated_at
updated_at1
=
issue1
.
updated_at
updated_at2
=
issue2
.
updated_at
Timecop
.
travel
(
1
.
minute
.
from_now
)
do
described_class
.
new
(
parent
,
user
,
params
).
execute
(
issue
)
end
expect
(
issue
.
reload
.
updated_at
.
change
(
usec:
0
)).
to
eq
updated_at
.
change
(
usec:
0
)
expect
(
issue1
.
reload
.
updated_at
.
change
(
usec:
0
)).
to
eq
updated_at1
.
change
(
usec:
0
)
expect
(
issue2
.
reload
.
updated_at
.
change
(
usec:
0
)).
to
eq
updated_at2
.
change
(
usec:
0
)
end
if
group
context
'when on a group board'
do
it
'sends the board_group_id parameter'
do
...
...
@@ -114,5 +150,13 @@ shared_examples 'issues move service' do |group|
end
end
end
def
reorder_issues
(
params
,
issues:
[])
issues
.
each
do
|
issue
|
issue
.
move_to_end
&&
issue
.
save!
end
params
.
merge!
(
move_after_id:
issues
[
1
].
id
,
move_before_id:
issues
[
2
].
id
)
end
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录