Открыть боковую панель
Захаров Дмитрий Сергеевич
Gitlab
Коммиты
736f70e4
Коммит
736f70e4
создал
Май 09, 2017
по автору
Jose Ivan Vargas
Просмотр файлов
Port of prevent-project-transfer to EE
владелец
97f17efa
Изменения
7
Скрыть пробелы
Построчно
Рядом
app/assets/javascripts/dispatcher.js
Просмотр файла @
736f70e4
...
...
@@ -43,6 +43,7 @@ import Group from './group';
import
GroupName
from
'
./group_name
'
;
import
GroupsList
from
'
./groups_list
'
;
import
ProjectsList
from
'
./projects_list
'
;
import
setupProjectEdit
from
'
./project_edit
'
;
import
MiniPipelineGraph
from
'
./mini_pipeline_graph_dropdown
'
;
import
BlobLinePermalinkUpdater
from
'
./blob/blob_line_permalink_updater
'
;
import
Landing
from
'
./landing
'
;
...
...
@@ -264,6 +265,9 @@ import ApproversSelect from './approvers_select';
new
TreeView
();
}
break
;
case
'
projects:edit
'
:
setupProjectEdit
();
break
;
case
'
projects:pipelines:builds
'
:
case
'
projects:pipelines:failures
'
:
case
'
projects:pipelines:show
'
:
...
...
app/assets/javascripts/project_edit.js
0 → 100644
Просмотр файла @
736f70e4
export
default
function
setupProjectEdit
()
{
const
$transferForm
=
$
(
'
.js-project-transfer-form
'
);
const
$selectNamespace
=
$transferForm
.
find
(
'
.select2
'
);
$selectNamespace
.
on
(
'
change
'
,
()
=>
{
$transferForm
.
find
(
'
:submit
'
).
prop
(
'
disabled
'
,
!
$selectNamespace
.
val
());
});
$selectNamespace
.
trigger
(
'
change
'
);
}
app/services/projects/transfer_service.rb
Просмотр файла @
736f70e4
...
...
@@ -12,12 +12,13 @@ class TransferService < BaseService
TransferError
=
Class
.
new
(
StandardError
)
def
execute
(
new_namespace
)
if
allowed_transfer?
(
current_user
,
project
,
new_namespace
)
transfer
(
project
,
new_namespace
)
else
project
.
errors
.
add
(
:new_namespace
,
'is invalid'
)
false
if
new_namespace
.
blank?
raise
TransferError
,
'Please select a new namespace for your project.'
end
unless
allowed_transfer?
(
current_user
,
project
,
new_namespace
)
raise
TransferError
,
'Transfer failed, please contact an admin.'
end
transfer
(
project
,
new_namespace
)
rescue
Projects
::
TransferService
::
TransferError
=>
ex
project
.
reload
project
.
errors
.
add
(
:new_namespace
,
ex
.
message
)
...
...
app/views/projects/edit.html.haml
Просмотр файла @
736f70e4
...
...
@@ -268,14 +268,16 @@
.row.prepend-top-default
.col-lg-3
%h4
.prepend-top-0.danger-title
Transfer project
Transfer project to new group
%p
.append-bottom-0
Please select the group you want to transfer this project to in the dropdown to the right.
.col-lg-9
=
form_for
([
@project
.
namespace
.
becomes
(
Namespace
),
@project
],
url:
transfer_namespace_project_path
(
@project
.
namespace
,
@project
),
method: :put
,
remote:
true
)
do
|
f
|
=
form_for
([
@project
.
namespace
.
becomes
(
Namespace
),
@project
],
url:
transfer_namespace_project_path
(
@project
.
namespace
,
@project
),
method: :put
,
remote:
true
,
html:
{
class:
'js-project-transfer-form'
}
)
do
|
f
|
.form-group
=
label_tag
:new_namespace_id
,
nil
,
class:
'label-light'
do
%span
N
amespace
%span
Select a new n
amespace
.form-group
=
select_tag
:new_namespace_id
,
namespaces_options
(
@project
.
namespace_id
),
{
prompt:
'Choose a project namespace'
,
class:
'select2'
}
=
select_tag
:new_namespace_id
,
namespaces_options
(
nil
),
include_blank:
true
,
class:
'select2'
%ul
%li
Be careful. Changing the project's namespace can have unintended side effects.
%li
You can only transfer the project to namespaces you manage.
...
...
changelogs/unreleased/prevent-project-transfer.yml
0 → 100644
Просмотр файла @
736f70e4
---
title
:
Prevent project transfers if a new group is not selected
merge_request
:
author
:
spec/controllers/projects_controller_spec.rb
Просмотр файла @
736f70e4
...
...
@@ -247,6 +247,50 @@
end
end
describe
'#transfer'
do
render_views
let
(
:project
)
{
create
(
:project
)
}
let
(
:admin
)
{
create
(
:admin
)
}
let
(
:new_namespace
)
{
create
(
:namespace
)
}
it
'updates namespace'
do
sign_in
(
admin
)
put
:transfer
,
namespace_id:
project
.
namespace
.
path
,
new_namespace_id:
new_namespace
.
id
,
id:
project
.
path
,
format: :js
project
.
reload
expect
(
project
.
namespace
).
to
eq
(
new_namespace
)
expect
(
response
).
to
have_http_status
(
200
)
end
context
'when new namespace is empty'
do
it
'project namespace is not changed'
do
controller
.
instance_variable_set
(
:@project
,
project
)
sign_in
(
admin
)
old_namespace
=
project
.
namespace
put
:transfer
,
namespace_id:
old_namespace
.
path
,
new_namespace_id:
nil
,
id:
project
.
path
,
format: :js
project
.
reload
expect
(
project
.
namespace
).
to
eq
(
old_namespace
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
flash
[
:alert
]).
to
eq
'Please select a new namespace for your project.'
end
end
end
describe
"#destroy"
do
let
(
:admin
)
{
create
(
:admin
)
}
...
...
spec/services/projects/transfer_service_spec.rb
Просмотр файла @
736f70e4
...
...
@@ -26,6 +26,7 @@
it
{
expect
(
@result
).
to
eq
false
}
it
{
expect
(
project
.
namespace
).
to
eq
(
user
.
namespace
)
}
it
{
expect
(
project
.
errors
.
messages
[
:new_namespace
][
0
]).
to
eq
'Please select a new namespace for your project.'
}
end
context
'disallow transfering of project with tags'
do
...
...
Редактирование
Предварительный просмотр
Поддерживает Markdown
0%
Попробовать снова
или
прикрепить новый файл
.
Отмена
You are about to add
0
people
to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Отмена
Пожалуйста,
зарегистрируйтесь
или
войдите
чтобы прокомментировать