Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
d005242d
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,发现更多精彩内容 >>
提交
d005242d
编写于
10月 25, 2012
作者:
D
Dmitriy Zaporozhets
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1803 from gitlabhq/api_merge_request
Api for merge request
上级
fe6d122d
4281de36
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
385 addition
and
0 deletion
+385
-0
doc/api/merge_requests.md
doc/api/merge_requests.md
+194
-0
lib/api.rb
lib/api.rb
+1
-0
lib/api/entities.rb
lib/api/entities.rb
+10
-0
lib/api/merge_requests.rb
lib/api/merge_requests.rb
+118
-0
spec/requests/api/merge_requests_spec.rb
spec/requests/api/merge_requests_spec.rb
+62
-0
未找到文件。
doc/api/merge_requests.md
0 → 100644
浏览文件 @
d005242d
## List merge requests
Get all MR for this project.
```
GET /projects/:id/merge_requests
```
Parameters:
+
`id`
(required) - The ID or code name of a project
```
json
[
{
"id"
:
1
,
"target_branch"
:
"master"
,
"source_branch"
:
"test1"
,
"project_id"
:
3
,
"title"
:
"test1"
,
"closed"
:
true
,
"merged"
:
false
,
"author"
:{
"id"
:
1
,
"email"
:
"admin@local.host"
,
"name"
:
"Administrator"
,
"blocked"
:
false
,
"created_at"
:
"2012-04-29T08:46:00Z"
},
"assignee"
:{
"id"
:
1
,
"email"
:
"admin@local.host"
,
"name"
:
"Administrator"
,
"blocked"
:
false
,
"created_at"
:
"2012-04-29T08:46:00Z"
}
}
]
```
## Show MR
Show information about MR.
```
GET /projects/:id/merge_request/:merge_request_id
```
Parameters:
+
`id`
(required) - The ID or code name of a project
+
`merge_request_id`
(required) - The ID of MR
```
json
{
"id"
:
1
,
"target_branch"
:
"master"
,
"source_branch"
:
"test1"
,
"project_id"
:
3
,
"title"
:
"test1"
,
"closed"
:
true
,
"merged"
:
false
,
"author"
:{
"id"
:
1
,
"email"
:
"admin@local.host"
,
"name"
:
"Administrator"
,
"blocked"
:
false
,
"created_at"
:
"2012-04-29T08:46:00Z"
},
"assignee"
:{
"id"
:
1
,
"email"
:
"admin@local.host"
,
"name"
:
"Administrator"
,
"blocked"
:
false
,
"created_at"
:
"2012-04-29T08:46:00Z"
}
}
```
## Create MR
Create MR.
```
POST /projects/:id/merge_requests
```
Parameters:
+
`id`
(required) - The ID or code name of a project
+
`source_branch`
(required) - The source branch
+
`target_branch`
(required) - The target branch
+
`assignee_id`
- Assignee user ID
+
`title`
(required) - Title of MR
```
json
{
"id"
:
1
,
"target_branch"
:
"master"
,
"source_branch"
:
"test1"
,
"project_id"
:
3
,
"title"
:
"test1"
,
"closed"
:
true
,
"merged"
:
false
,
"author"
:{
"id"
:
1
,
"email"
:
"admin@local.host"
,
"name"
:
"Administrator"
,
"blocked"
:
false
,
"created_at"
:
"2012-04-29T08:46:00Z"
},
"assignee"
:{
"id"
:
1
,
"email"
:
"admin@local.host"
,
"name"
:
"Administrator"
,
"blocked"
:
false
,
"created_at"
:
"2012-04-29T08:46:00Z"
}
}
```
## Update MR
Update MR. You can change branches, title, or even close the MR.
```
PUT /projects/:id/merge_request/:merge_request_id
```
Parameters:
+
`id`
(required) - The ID or code name of a project
+
`merge_request_id`
(required) - ID of MR
+
`source_branch`
- The source branch
+
`target_branch`
- The target branch
+
`assignee_id`
- Assignee user ID
+
`title`
- Title of MR
+
`closed`
- Status of MR. true - closed
```
json
{
"id"
:
1
,
"target_branch"
:
"master"
,
"source_branch"
:
"test1"
,
"project_id"
:
3
,
"title"
:
"test1"
,
"closed"
:
true
,
"merged"
:
false
,
"author"
:{
"id"
:
1
,
"email"
:
"admin@local.host"
,
"name"
:
"Administrator"
,
"blocked"
:
false
,
"created_at"
:
"2012-04-29T08:46:00Z"
},
"assignee"
:{
"id"
:
1
,
"email"
:
"admin@local.host"
,
"name"
:
"Administrator"
,
"blocked"
:
false
,
"created_at"
:
"2012-04-29T08:46:00Z"
}
}
```
## Post comment to MR
Post comment to MR
```
POST /projects/:id/merge_request/:merge_request_id/comments
```
Parameters:
+
`id`
(required) - The ID or code name of a project
+
`merge_request_id`
(required) - ID of MR
+
`note`
(required) - Text of comment
Will return created note with status
`201 Created`
on success, or
`404 Not found`
on fail.
```
json
{
"author"
:{
"id"
:
1
,
"email"
:
"admin@local.host"
,
"name"
:
"Administrator"
,
"blocked"
:
false
,
"created_at"
:
"2012-04-29T08:46:00Z"
},
"note"
:
"text1"
}
```
lib/api.rb
浏览文件 @
d005242d
...
...
@@ -18,5 +18,6 @@ module Gitlab
mount
Issues
mount
Milestones
mount
Session
mount
MergeRequests
end
end
lib/api/entities.rb
浏览文件 @
d005242d
...
...
@@ -63,5 +63,15 @@ module Gitlab
class
SSHKey
<
Grape
::
Entity
expose
:id
,
:title
,
:key
end
class
MergeRequest
<
Grape
::
Entity
expose
:id
,
:target_branch
,
:source_branch
,
:project_id
,
:title
,
:closed
,
:merged
expose
:author
,
:assignee
,
using:
Entities
::
UserBasic
end
class
Note
<
Grape
::
Entity
expose
:author
,
using:
Entities
::
UserBasic
expose
:note
end
end
end
lib/api/merge_requests.rb
0 → 100644
浏览文件 @
d005242d
module
Gitlab
# MergeRequest API
class
MergeRequests
<
Grape
::
API
before
{
authenticate!
}
resource
:projects
do
# List merge requests
#
# Parameters:
# id (required) - The ID or code name of a project
#
# Example:
# GET /projects/:id/merge_requests
#
get
":id/merge_requests"
do
authorize!
:read_merge_request
,
user_project
present
paginate
(
user_project
.
merge_requests
),
with:
Entities
::
MergeRequest
end
# Show MR
#
# Parameters:
# id (required) - The ID or code name of a project
# merge_request_id (required) - The ID of MR
#
# Example:
# GET /projects/:id/merge_request/:merge_request_id
#
get
":id/merge_request/:merge_request_id"
do
merge_request
=
user_project
.
merge_requests
.
find
(
params
[
:merge_request_id
])
authorize!
:read_merge_request
,
merge_request
present
merge_request
,
with:
Entities
::
MergeRequest
end
# Create MR
#
# Parameters:
#
# id (required) - The ID or code name of a project
# source_branch (required) - The source branch
# target_branch (required) - The target branch
# assignee_id - Assignee user ID
# title (required) - Title of MR
#
# Example:
# POST /projects/:id/merge_requests
#
post
":id/merge_requests"
do
authorize!
:write_merge_request
,
user_project
attrs
=
attributes_for_keys
[
:source_branch
,
:target_branch
,
:assignee_id
,
:title
]
merge_request
=
user_project
.
merge_requests
.
new
(
attrs
)
merge_request
.
author
=
current_user
if
merge_request
.
save
merge_request
.
reload_code
present
merge_request
,
with:
Entities
::
MergeRequest
else
not_found!
end
end
# Update MR
#
# Parameters:
# id (required) - The ID or code name of a project
# merge_request_id (required) - ID of MR
# source_branch - The source branch
# target_branch - The target branch
# assignee_id - Assignee user ID
# title - Title of MR
# closed - Status of MR. true - closed
# Example:
# PUT /projects/:id/merge_request/:merge_request_id
#
put
":id/merge_request/:merge_request_id"
do
attrs
=
attributes_for_keys
[
:source_branch
,
:target_branch
,
:assignee_id
,
:title
,
:closed
]
merge_request
=
user_project
.
merge_requests
.
find
(
params
[
:merge_request_id
])
authorize!
:modify_merge_request
,
merge_request
if
merge_request
.
update_attributes
attrs
merge_request
.
reload_code
merge_request
.
mark_as_unchecked
present
merge_request
,
with:
Entities
::
MergeRequest
else
not_found!
end
end
# Post comment to merge request
#
# Parameters:
# id (required) - The ID or code name of a project
# merge_request_id (required) - ID of MR
# note (required) - Text of comment
# Examples:
# POST /projects/:id/merge_request/:merge_request_id/comments
#
post
":id/merge_request/:merge_request_id/comments"
do
merge_request
=
user_project
.
merge_requests
.
find
(
params
[
:merge_request_id
])
note
=
merge_request
.
notes
.
new
(
note:
params
[
:note
],
project_id:
user_project
.
id
)
note
.
author
=
current_user
if
note
.
save
present
note
,
with:
Entities
::
Note
else
not_found!
end
end
end
end
end
spec/requests/api/merge_requests_spec.rb
0 → 100644
浏览文件 @
d005242d
require
"spec_helper"
describe
Gitlab
::
API
do
include
ApiHelpers
let
(
:user
)
{
Factory
:user
}
let!
(
:project
)
{
Factory
:project
,
owner:
user
}
let!
(
:merge_request
)
{
Factory
:merge_request
,
author:
user
,
assignee:
user
,
project:
project
,
title:
"Test"
}
before
{
project
.
add_access
(
user
,
:read
)
}
describe
"GET /projects/:id/merge_requests"
do
context
"when unauthenticated"
do
it
"should return authentication error"
do
get
api
(
"/projects/
#{
project
.
code
}
/merge_requests"
)
response
.
status
.
should
==
401
end
end
context
"when authenticated"
do
it
"should return an array of merge_requests"
do
get
api
(
"/projects/
#{
project
.
code
}
/merge_requests"
,
user
)
response
.
status
.
should
==
200
json_response
.
should
be_an
Array
json_response
.
first
[
'title'
].
should
==
merge_request
.
title
end
end
end
describe
"GET /projects/:id/merge_request/:merge_request_id"
do
it
"should return merge_request"
do
get
api
(
"/projects/
#{
project
.
code
}
/merge_request/
#{
merge_request
.
id
}
"
,
user
)
response
.
status
.
should
==
200
json_response
[
'title'
].
should
==
merge_request
.
title
end
end
describe
"POST /projects/:id/merge_requests"
do
it
"should return merge_request"
do
post
api
(
"/projects/
#{
project
.
code
}
/merge_requests"
,
user
),
title:
'Test merge_request'
,
source_branch:
"stable"
,
target_branch:
"master"
,
author:
user
response
.
status
.
should
==
201
json_response
[
'title'
].
should
==
'Test merge_request'
end
end
describe
"PUT /projects/:id/merge_request/:merge_request_id"
do
it
"should return merge_request"
do
put
api
(
"/projects/
#{
project
.
code
}
/merge_request/
#{
merge_request
.
id
}
"
,
user
),
title:
"New title"
response
.
status
.
should
==
200
json_response
[
'title'
].
should
==
'New title'
end
end
describe
"POST /projects/:id/merge_request/:merge_request_id/comments"
do
it
"should return comment"
do
post
api
(
"/projects/
#{
project
.
code
}
/merge_request/
#{
merge_request
.
id
}
/comments"
,
user
),
note:
"My comment"
response
.
status
.
should
==
201
json_response
[
'note'
].
should
==
'My comment'
end
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录