Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
90d49705
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,发现更多精彩内容 >>
提交
90d49705
编写于
7月 10, 2013
作者:
D
Dmitriy Zaporozhets
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #4515 from amacarthur/fork-admin
Additon of apis for fork administration.
上级
d2d566b1
ea5a006f
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
138 addition
and
3 deletion
+138
-3
doc/api/projects.md
doc/api/projects.md
+25
-0
lib/api/entities.rb
lib/api/entities.rb
+7
-0
lib/api/helpers.rb
lib/api/helpers.rb
+3
-3
lib/api/projects.rb
lib/api/projects.rb
+36
-0
spec/requests/api/projects_spec.rb
spec/requests/api/projects_spec.rb
+67
-0
未找到文件。
doc/api/projects.md
浏览文件 @
90d49705
...
...
@@ -453,3 +453,28 @@ Parameters:
+
`id`
(required) - The ID of the project.
+
`branch`
(required) - The name of the branch.
## Admin fork relation
Allows modification of the forked relationship between existing projects. . Available only for admins.
### Create a forked from/to relation between existing projects.
```
POST /projects/:id/fork/:forked_from_id
```
Parameters:
+
`id`
(required) - The ID of the project
+
`forked_from_id:`
(required) - The ID of the project that was forked from
### Delete an existing forked from relationship
```
DELETE /projects/:id/fork
```
Parameter:
+
`id`
(required) - The ID of the project
\ No newline at end of file
lib/api/entities.rb
浏览文件 @
90d49705
...
...
@@ -25,6 +25,12 @@ module API
expose
:id
,
:url
,
:created_at
end
class
ForkedFromProject
<
Grape
::
Entity
expose
:id
expose
:name
,
:name_with_namespace
expose
:path
,
:path_with_namespace
end
class
Project
<
Grape
::
Entity
expose
:id
,
:description
,
:default_branch
,
:public
,
:ssh_url_to_repo
,
:http_url_to_repo
,
:web_url
expose
:owner
,
using:
Entities
::
UserBasic
...
...
@@ -32,6 +38,7 @@ module API
expose
:path
,
:path_with_namespace
expose
:issues_enabled
,
:merge_requests_enabled
,
:wall_enabled
,
:wiki_enabled
,
:created_at
,
:last_activity_at
expose
:namespace
expose
:forked_from_project
,
using:
Entities
::
ForkedFromProject
,
:if
=>
lambda
{
|
project
,
options
|
project
.
forked?
}
end
class
ProjectMember
<
UserBasic
...
...
lib/api/helpers.rb
浏览文件 @
90d49705
...
...
@@ -5,12 +5,12 @@ module API
end
def
user_project
@project
||=
find_project
@project
||=
find_project
(
params
[
:id
])
@project
||
not_found!
end
def
find_project
project
=
Project
.
find_by_id
(
params
[
:id
])
||
Project
.
find_with_namespace
(
params
[
:id
]
)
def
find_project
(
id
)
project
=
Project
.
find_by_id
(
id
)
||
Project
.
find_with_namespace
(
id
)
if
project
&&
can?
(
current_user
,
:read_project
,
project
)
project
...
...
lib/api/projects.rb
浏览文件 @
90d49705
...
...
@@ -121,6 +121,42 @@ module API
end
# Mark this project as forked from another
#
# Parameters:
# id: (required) - The ID of the project being marked as a fork
# forked_from_id: (required) - The ID of the project it was forked from
# Example Request:
# POST /projects/:id/fork/:forked_from_id
post
":id/fork/:forked_from_id"
do
authenticated_as_admin!
forked_from_project
=
find_project
(
params
[
:forked_from_id
])
unless
forked_from_project
.
nil?
if
user_project
.
forked_from_project
.
nil?
user_project
.
create_forked_project_link
(
forked_to_project_id:
user_project
.
id
,
forked_from_project_id:
forked_from_project
.
id
)
else
render_api_error!
(
"Project already forked"
,
409
)
end
else
not_found!
end
end
# Remove a forked_from relationship
#
# Parameters:
# id: (required) - The ID of the project being marked as a fork
# Example Request:
# DELETE /projects/:id/fork
delete
":id/fork"
do
authenticated_as_admin!
unless
user_project
.
forked_project_link
.
nil?
user_project
.
forked_project_link
.
destroy
end
end
# Get a project team members
#
# Parameters:
...
...
spec/requests/api/projects_spec.rb
浏览文件 @
90d49705
...
...
@@ -595,4 +595,71 @@ describe API::API do
end
end
end
describe
:fork_admin
do
let
(
:project_fork_target
)
{
create
(
:project
)
}
let
(
:project_fork_source
)
{
create
(
:project
,
public:
true
)
}
describe
"POST /projects/:id/fork/:forked_from_id"
do
let
(
:new_project_fork_source
)
{
create
(
:project
,
public:
true
)
}
it
"shouldn't available for non admin users"
do
post
api
(
"/projects/
#{
project_fork_target
.
id
}
/fork/
#{
project_fork_source
.
id
}
"
,
user
)
response
.
status
.
should
==
403
end
it
"should allow project to be forked from an existing project"
do
project_fork_target
.
forked?
.
should_not
be_true
post
api
(
"/projects/
#{
project_fork_target
.
id
}
/fork/
#{
project_fork_source
.
id
}
"
,
admin
)
response
.
status
.
should
==
201
project_fork_target
.
reload
project_fork_target
.
forked_from_project
.
id
.
should
==
project_fork_source
.
id
project_fork_target
.
forked_project_link
.
should_not
be_nil
project_fork_target
.
forked?
.
should
be_true
end
it
"should fail if forked_from project which does not exist"
do
post
api
(
"/projects/
#{
project_fork_target
.
id
}
/fork/9999"
,
admin
)
response
.
status
.
should
==
404
end
it
"should fail with 409 if already forked"
do
post
api
(
"/projects/
#{
project_fork_target
.
id
}
/fork/
#{
project_fork_source
.
id
}
"
,
admin
)
project_fork_target
.
reload
project_fork_target
.
forked_from_project
.
id
.
should
==
project_fork_source
.
id
post
api
(
"/projects/
#{
project_fork_target
.
id
}
/fork/
#{
new_project_fork_source
.
id
}
"
,
admin
)
response
.
status
.
should
==
409
project_fork_target
.
reload
project_fork_target
.
forked_from_project
.
id
.
should
==
project_fork_source
.
id
project_fork_target
.
forked?
.
should
be_true
end
end
describe
"DELETE /projects/:id/fork"
do
it
"shouldn't available for non admin users"
do
delete
api
(
"/projects/
#{
project_fork_target
.
id
}
/fork"
,
user
)
response
.
status
.
should
==
403
end
it
"should make forked project unforked"
do
post
api
(
"/projects/
#{
project_fork_target
.
id
}
/fork/
#{
project_fork_source
.
id
}
"
,
admin
)
project_fork_target
.
reload
project_fork_target
.
forked_from_project
.
should_not
be_nil
project_fork_target
.
forked?
.
should
be_true
delete
api
(
"/projects/
#{
project_fork_target
.
id
}
/fork"
,
admin
)
response
.
status
.
should
==
200
project_fork_target
.
reload
project_fork_target
.
forked_from_project
.
should
be_nil
project_fork_target
.
forked?
.
should_not
be_true
end
it
"should be idempotent if not forked"
do
project_fork_target
.
forked_from_project
.
should
be_nil
delete
api
(
"/projects/
#{
project_fork_target
.
id
}
/fork"
,
admin
)
response
.
status
.
should
==
200
project_fork_target
.
reload
.
forked_from_project
.
should
be_nil
end
end
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录