Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
6d460aa2
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,体验更适合开发者的 AI 搜索 >>
提交
6d460aa2
编写于
11月 28, 2011
作者:
D
Dmitriy Zaporozhets
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
merge request entity
上级
22442039
变更
21
隐藏空白更改
内联
并排
Showing
21 changed file
with
322 addition
and
37 deletion
+322
-37
app/assets/javascripts/merge_requests.js.coffee
app/assets/javascripts/merge_requests.js.coffee
+3
-0
app/assets/stylesheets/issues.css.scss
app/assets/stylesheets/issues.css.scss
+2
-0
app/assets/stylesheets/merge_requests.css.scss
app/assets/stylesheets/merge_requests.css.scss
+10
-0
app/assets/stylesheets/projects.css.scss
app/assets/stylesheets/projects.css.scss
+15
-0
app/controllers/merge_requests_controller.rb
app/controllers/merge_requests_controller.rb
+73
-0
app/helpers/merge_requests_helper.rb
app/helpers/merge_requests_helper.rb
+2
-0
app/models/ability.rb
app/models/ability.rb
+4
-1
app/models/merge_request.rb
app/models/merge_request.rb
+36
-0
app/models/project.rb
app/models/project.rb
+1
-0
app/views/layouts/project.html.haml
app/views/layouts/project.html.haml
+4
-0
app/views/merge_requests/_form.html.haml
app/views/merge_requests/_form.html.haml
+39
-0
app/views/merge_requests/edit.html.haml
app/views/merge_requests/edit.html.haml
+1
-0
app/views/merge_requests/index.html.haml
app/views/merge_requests/index.html.haml
+25
-0
app/views/merge_requests/new.html.haml
app/views/merge_requests/new.html.haml
+1
-0
app/views/merge_requests/show.html.haml
app/views/merge_requests/show.html.haml
+59
-0
config/routes.rb
config/routes.rb
+1
-0
db/migrate/20111127155345_create_merge_requests.rb
db/migrate/20111127155345_create_merge_requests.rb
+15
-0
db/schema.rb
db/schema.rb
+15
-1
spec/helpers/application_helper_spec.rb
spec/helpers/application_helper_spec.rb
+0
-35
spec/models/merge_request_spec.rb
spec/models/merge_request_spec.rb
+5
-0
spec/requests/merge_requests_spec.rb
spec/requests/merge_requests_spec.rb
+11
-0
未找到文件。
app/assets/javascripts/merge_requests.js.coffee
0 → 100644
浏览文件 @
6d460aa2
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
app/assets/stylesheets/issues.css.scss
浏览文件 @
6d460aa2
...
...
@@ -58,6 +58,8 @@
padding
:
0
;
}
body
.project-page
.merge-request-form-holder
table
.no-borders
tr
,
body
.project-page
.merge-request-form-holder
table
.no-borders
td
,
body
.project-page
.issue-form-holder
table
.no-borders
tr
,
body
.project-page
.issue-form-holder
table
.no-borders
td
,
body
.project-page
.new_snippet
table
tr
,
...
...
app/assets/stylesheets/merge_requests.css.scss
0 → 100644
浏览文件 @
6d460aa2
// Place all the styles related to the MergeRequests controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
.merge-request-form-holder
{
select
{
width
:
300px
;
}
}
app/assets/stylesheets/projects.css.scss
浏览文件 @
6d460aa2
...
...
@@ -155,6 +155,8 @@ input.ssh_project_url {
}
/** FORM INPUTS **/
.new_merge_request
,
.edit_merge_request
,
.user_new
,
.new_key
,
.new_issue
,
...
...
@@ -384,6 +386,19 @@ body.dashboard.project-page .news-feed .project-updates a.project-update span.up
body
.dashboard.project-page
.news-feed
.project-updates
a
.project-update
span
.update-author
strong
{
font-weight
:
bold
;
font-style
:
normal
;}
/* eo Dashboard Page */
/** Merge requests */
body
.project-page
.merge-request-commits
{
margin-bottom
:
20px
;
display
:
block
;
width
:
100%
;}
body
.project-page
.merge-request-commits
.data
{
padding
:
0
}
body
.project-page
.merge-request-commits
a
.commit
{
padding
:
10px
;
border-bottom
:
1px
solid
#eee
;
overflow
:
hidden
;
display
:
block
;}
body
.project-page
.merge-request-commits
a
.commit
:last-child
{
border-bottom
:
0
}
body
.project-page
.merge-request-commits
a
.commit
img
{
float
:
left
;
margin-right
:
10px
;}
body
.project-page
.merge-request-commits
a
.commit
span
.update-title
,
.dashboard-page
.news-feed
.project-updates
li
a
span
.update-author
{
display
:
block
;}
body
.project-page
.merge-request-commits
a
.commit
span
.update-title
{
margin-bottom
:
10px
}
body
.project-page
.merge-request-commits
a
.commit
span
.update-author
{
color
:
#999
;
font-weight
:
normal
;
font-style
:
italic
;}
body
.project-page
.merge-request-commits
a
.commit
span
.update-author
strong
{
font-weight
:
bold
;
font-style
:
normal
;}
body
.project-page
.team_member_new
.span-6
,
.team_member_edit
.span-6
{
padding
:
10px
0
;
}
body
.projects-page
input
.text.git-url.project_list_url
{
width
:
165px
;
}
...
...
app/controllers/merge_requests_controller.rb
0 → 100644
浏览文件 @
6d460aa2
class
MergeRequestsController
<
ApplicationController
before_filter
:authenticate_user!
before_filter
:project
before_filter
:merge_request
,
:only
=>
[
:edit
,
:update
,
:destroy
,
:show
]
layout
"project"
# Authorize
before_filter
:add_project_abilities
before_filter
:authorize_read_project!
before_filter
:authorize_write_project!
,
:only
=>
[
:new
,
:create
,
:edit
,
:update
]
def
index
@merge_requests
=
@project
.
merge_requests
.
all
end
def
show
unless
@project
.
repo
.
heads
.
map
(
&
:name
).
include?
(
@merge_request
.
target_branch
)
&&
@project
.
repo
.
heads
.
map
(
&
:name
).
include?
(
@merge_request
.
source_branch
)
head
(
404
)
and
return
end
@commits
=
@project
.
repo
.
commits_between
(
@merge_request
.
target_branch
,
@merge_request
.
source_branch
).
map
{
|
c
|
Commit
.
new
(
c
)}
end
def
new
@merge_request
=
@project
.
merge_requests
.
new
end
def
edit
end
def
create
@merge_request
=
@project
.
merge_requests
.
new
(
params
[
:merge_request
])
@merge_request
.
author
=
current_user
respond_to
do
|
format
|
if
@merge_request
.
save
format
.
html
{
redirect_to
[
@project
,
@merge_request
],
notice:
'Merge request was successfully created.'
}
format
.
json
{
render
json:
@merge_request
,
status: :created
,
location:
@merge_request
}
else
format
.
html
{
render
action:
"new"
}
format
.
json
{
render
json:
@merge_request
.
errors
,
status: :unprocessable_entity
}
end
end
end
def
update
respond_to
do
|
format
|
if
@merge_request
.
update_attributes
(
params
[
:merge_request
])
format
.
html
{
redirect_to
[
@project
,
@merge_request
],
notice:
'Merge request was successfully updated.'
}
format
.
json
{
head
:ok
}
else
format
.
html
{
render
action:
"edit"
}
format
.
json
{
render
json:
@merge_request
.
errors
,
status: :unprocessable_entity
}
end
end
end
def
destroy
@merge_request
.
destroy
respond_to
do
|
format
|
format
.
html
{
redirect_to
project_merge_requests_url
(
@project
)
}
format
.
json
{
head
:ok
}
end
end
protected
def
merge_request
@merge_request
||=
@project
.
merge_requests
.
find
(
params
[
:id
])
end
end
app/helpers/merge_requests_helper.rb
0 → 100644
浏览文件 @
6d460aa2
module
MergeRequestsHelper
end
app/models/ability.rb
浏览文件 @
6d460aa2
...
...
@@ -17,6 +17,7 @@ class Ability
:read_issue
,
:read_snippet
,
:read_team_member
,
:read_merge_request
,
:read_note
]
if
project
.
readers
.
include?
(
user
)
...
...
@@ -24,6 +25,7 @@ class Ability
:write_project
,
:write_issue
,
:write_snippet
,
:write_merge_request
,
:write_note
]
if
project
.
writers
.
include?
(
user
)
...
...
@@ -32,6 +34,7 @@ class Ability
:admin_issue
,
:admin_snippet
,
:admin_team_member
,
:admin_merge_request
,
:admin_note
]
if
project
.
admins
.
include?
(
user
)
...
...
@@ -39,7 +42,7 @@ class Ability
end
class
<<
self
[
:issue
,
:note
,
:snippet
].
each
do
|
name
|
[
:issue
,
:note
,
:snippet
,
:merge_request
].
each
do
|
name
|
define_method
"
#{
name
}
_abilities"
do
|
user
,
subject
|
if
subject
.
author
==
user
[
...
...
app/models/merge_request.rb
0 → 100644
浏览文件 @
6d460aa2
class
MergeRequest
<
ActiveRecord
::
Base
belongs_to
:project
belongs_to
:author
,
:class_name
=>
"User"
belongs_to
:assignee
,
:class_name
=>
"User"
has_many
:notes
,
:as
=>
:noteable
attr_protected
:author
,
:author_id
,
:project
,
:project_id
validates_presence_of
:project_id
validates_presence_of
:assignee_id
validates_presence_of
:author_id
validates_presence_of
:source_branch
validates_presence_of
:target_branch
delegate
:name
,
:email
,
:to
=>
:author
,
:prefix
=>
true
delegate
:name
,
:email
,
:to
=>
:assignee
,
:prefix
=>
true
validates
:title
,
:presence
=>
true
,
:length
=>
{
:within
=>
0
..
255
}
scope
:opened
,
where
(
:closed
=>
false
)
scope
:closed
,
where
(
:closed
=>
true
)
scope
:assigned
,
lambda
{
|
u
|
where
(
:assignee_id
=>
u
.
id
)}
def
new?
today?
&&
created_at
==
updated_at
end
end
app/models/project.rb
浏览文件 @
6d460aa2
...
...
@@ -3,6 +3,7 @@ require "grit"
class
Project
<
ActiveRecord
::
Base
belongs_to
:owner
,
:class_name
=>
"User"
has_many
:merge_requests
,
:dependent
=>
:destroy
has_many
:issues
,
:dependent
=>
:destroy
,
:order
=>
"position"
has_many
:users_projects
,
:dependent
=>
:destroy
has_many
:users
,
:through
=>
:users_projects
...
...
app/views/layouts/project.html.haml
浏览文件 @
6d460aa2
...
...
@@ -39,6 +39,10 @@
Wall
-
if
@project
.
common_notes
.
today
.
count
>
0
%span
{
:class
=>
"number"
}=
@project
.
common_notes
.
today
.
count
=
link_to
project_merge_requests_path
(
@project
),
:class
=>
(
controller
.
controller_name
==
"merge_requests"
)
?
"current"
:
nil
do
Merge Requests
-
if
@project
.
merge_requests
.
opened
.
count
>
0
%span
{
:class
=>
"number"
}=
@project
.
merge_requests
.
opened
.
count
=
link_to
project_snippets_path
(
@project
),
:class
=>
(
controller
.
controller_name
==
"snippets"
)
?
"current"
:
nil
do
Snippets
-
if
@project
.
snippets
.
non_expired
.
count
>
0
...
...
app/views/merge_requests/_form.html.haml
0 → 100644
浏览文件 @
6d460aa2
%div
.merge-request-form-holder
.ui-box.width-100p
%h3
=
@merge_request
.
new_record?
?
"New Merge Request"
:
"Edit Merge Request #
#{
@merge_request
.
id
}
"
=
form_for
[
@project
,
@merge_request
]
do
|
f
|
.data
%table
.no-borders
-
if
@merge_request
.
errors
.
any?
%tr
%td
Errors
%td
#error_explanation
-
@merge_request
.
errors
.
full_messages
.
each
do
|
msg
|
%span
=
msg
%br
%tr
%td
=
f
.
label
:title
%td
=
f
.
text_field
:title
%tr
%td
=
f
.
label
:target_branch
,
"From"
%td
=
f
.
select
(
:target_branch
,
@project
.
heads
.
map
(
&
:name
),
{
:include_blank
=>
"Select branch"
})
%tr
%td
=
f
.
label
:source_branch
,
"To"
%td
=
f
.
select
(
:source_branch
,
@project
.
heads
.
map
(
&
:name
),
{
:include_blank
=>
"Select branch"
})
%tr
%td
=
f
.
label
:assignee_id
,
"Assign to"
%td
=
f
.
select
(
:assignee_id
,
@project
.
users
.
all
.
collect
{
|
p
|
[
p
.
name
,
p
.
id
]
},
{
:include_blank
=>
"Select user"
})
.buttons
=
f
.
submit
'Save'
,
:class
=>
"grey-button"
.right
=
link_to
'Back'
,
project_merge_requests_path
(
@project
),
:class
=>
"grey-button"
:javascript
$
(
function
(){
$
(
'
select#merge_request_assignee_id
'
).
chosen
();
$
(
'
select#merge_request_source_branch
'
).
chosen
();
$
(
'
select#merge_request_target_branch
'
).
chosen
();
});
app/views/merge_requests/edit.html.haml
0 → 100644
浏览文件 @
6d460aa2
=
render
'form'
app/views/merge_requests/index.html.haml
0 → 100644
浏览文件 @
6d460aa2
%table
%thead
%th
Target branch
%th
Source branch
%th
Author
%th
Assignee
%th
Title
%th
%th
%th
-
@merge_requests
.
each
do
|
merge_request
|
%tr
%td
=
merge_request
.
target_branch
%td
=
merge_request
.
source_branch
%td
=
merge_request
.
author_id
%td
=
merge_request
.
assignee_id
%td
=
merge_request
.
title
%td
=
link_to
'Show'
,
[
@project
,
merge_request
]
%td
=
link_to
'Edit'
,
edit_project_merge_request_path
(
@project
,
merge_request
)
%td
=
link_to
'Destroy'
,
[
@project
,
merge_request
],
:confirm
=>
'Are you sure?'
,
:method
=>
:delete
%br
=
link_to
'New Merge request'
,
new_project_merge_request_path
(
@project
)
app/views/merge_requests/new.html.haml
0 → 100644
浏览文件 @
6d460aa2
=
render
'form'
app/views/merge_requests/show.html.haml
0 → 100644
浏览文件 @
6d460aa2
.merge-request-show-holder.ui-box.width-100p
%h3
=
"Merge Request #
#{
@merge_request
.
id
}
:"
=
"'
#{
@merge_request
.
source_branch
}
'"
→
=
"'
#{
@merge_request
.
target_branch
}
'"
.right
-
if
@merge_request
.
closed
%span
.tag.high
Resolved
-
else
%span
.tag.today
Open
.data
%p
=
@merge_request
.
title
-
if
@merge_request
.
author
==
@merge_request
.
assignee
=
image_tag
gravatar_icon
(
@merge_request
.
assignee_email
),
:width
=>
20
,
:style
=>
"padding:0 5px;"
=
@merge_request
.
assignee_name
-
else
=
image_tag
gravatar_icon
(
@merge_request
.
author_email
),
:width
=>
20
,
:style
=>
"padding:0 5px;"
=
@merge_request
.
author_name
→
=
image_tag
gravatar_icon
(
@merge_request
.
assignee_email
),
:width
=>
20
,
:style
=>
"padding:0 5px;"
=
@merge_request
.
assignee_name
.right
%cite
.cgray
=
@merge_request
.
created_at
.
stamp
(
"21 Aug 2011, 11:15pm"
)
.clear
.buttons
-
if
can?
current_user
,
:write_project
,
@project
-
if
@merge_request
.
closed
=
link_to
'Reopen'
,
project_merge_request_path
(
@project
,
@merge_request
,
:merge_request
=>
{
:closed
=>
false
},
:status_only
=>
true
),
:method
=>
:put
,
:class
=>
"grey-button"
-
else
=
link_to
'Resolve'
,
project_merge_request_path
(
@project
,
@merge_request
,
:merge_request
=>
{
:closed
=>
true
},
:status_only
=>
true
),
:method
=>
:put
,
:class
=>
"grey-button"
.right
=
link_to
'Edit'
,
edit_project_merge_request_path
(
@project
,
@merge_request
),
:class
=>
"grey-button positive"
.clear
%br
%br
-
if
@commits
.
size
>
0
.merge-request-commits.ui-box.width-100p
-
@commits
.
each
do
|
commit
|
%a
{
:class
=>
"commit"
,
:href
=>
project_commit_path
(
@project
,
:id
=>
commit
.
id
)
}
-
if
commit
.
author_email
=
image_tag
gravatar_icon
(
commit
.
author_email
),
:class
=>
"left"
,
:width
=>
40
,
:style
=>
"padding-right:5px;"
-
else
=
image_tag
"no_avatar.png"
,
:class
=>
"left"
,
:width
=>
40
,
:style
=>
"padding-right:5px;"
%span
.update-title
=
commit
.
id
.
to_s
%span
.update-author
%strong
=
commit
.
author_name
authored
=
time_ago_in_words
(
commit
.
created_at
)
ago
.clear
config/routes.rb
浏览文件 @
6d460aa2
...
...
@@ -59,6 +59,7 @@ Gitlab::Application.routes.draw do
end
end
resources
:merge_requests
resources
:snippets
resources
:commits
resources
:team_members
...
...
db/migrate/20111127155345_create_merge_requests.rb
0 → 100644
浏览文件 @
6d460aa2
class
CreateMergeRequests
<
ActiveRecord
::
Migration
def
change
create_table
:merge_requests
do
|
t
|
t
.
string
:target_branch
,
:null
=>
false
t
.
string
:source_branch
,
:null
=>
false
t
.
integer
:project_id
,
:null
=>
false
t
.
integer
:author_id
t
.
integer
:assignee_id
t
.
string
:title
t
.
boolean
:closed
,
:default
=>
false
,
:null
=>
false
t
.
timestamps
end
end
end
db/schema.rb
浏览文件 @
6d460aa2
...
...
@@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
ActiveRecord
::
Schema
.
define
(
:version
=>
2011112
4115339
)
do
ActiveRecord
::
Schema
.
define
(
:version
=>
2011112
7155345
)
do
create_table
"features"
,
:force
=>
true
do
|
t
|
t
.
string
"name"
...
...
@@ -21,6 +21,8 @@ ActiveRecord::Schema.define(:version => 20111124115339) do
t
.
integer
"project_id"
t
.
datetime
"created_at"
t
.
datetime
"updated_at"
t
.
string
"version"
t
.
integer
"status"
,
:default
=>
0
,
:null
=>
false
end
create_table
"issues"
,
:force
=>
true
do
|
t
|
...
...
@@ -45,6 +47,18 @@ ActiveRecord::Schema.define(:version => 20111124115339) do
t
.
string
"identifier"
end
create_table
"merge_requests"
,
:force
=>
true
do
|
t
|
t
.
string
"target_branch"
,
:null
=>
false
t
.
string
"source_branch"
,
:null
=>
false
t
.
integer
"project_id"
,
:null
=>
false
t
.
integer
"author_id"
t
.
integer
"assignee_id"
t
.
string
"title"
t
.
boolean
"closed"
,
:default
=>
false
,
:null
=>
false
t
.
datetime
"created_at"
t
.
datetime
"updated_at"
end
create_table
"notes"
,
:force
=>
true
do
|
t
|
t
.
text
"note"
t
.
string
"noteable_id"
...
...
spec/helpers/application_helper_spec.rb
已删除
100644 → 0
浏览文件 @
22442039
require
'spec_helper'
describe
ApplicationHelper
do
context
".gravatar_icon"
do
context
"over http"
do
it
"returns the correct URL to www.gravatar.com"
do
expected
=
"http://www.gravatar.com/avatar/f7daa65b2aa96290bb47c4d68d11fe6a?s=40&d=identicon"
# Pretend we're running over HTTP
helper
.
stub
(
:request
)
do
request
=
double
(
'request'
)
request
.
stub
(
:ssl?
)
{
false
}
request
end
helper
.
gravatar_icon
(
"admin@local.host"
).
should
==
expected
end
end
context
"over https"
do
it
"returns the correct URL to secure.gravatar.com"
do
expected
=
"https://secure.gravatar.com/avatar/f7daa65b2aa96290bb47c4d68d11fe6a?s=40&d=identicon"
# Pretend we're running over HTTPS
helper
.
stub
(
:request
)
do
request
=
double
(
'request'
)
request
.
stub
(
:ssl?
)
{
true
}
request
end
helper
.
gravatar_icon
(
"admin@local.host"
).
should
==
expected
end
end
end
end
spec/models/merge_request_spec.rb
0 → 100644
浏览文件 @
6d460aa2
require
'spec_helper'
describe
MergeRequest
do
pending
"add some examples to (or delete)
#{
__FILE__
}
"
end
spec/requests/merge_requests_spec.rb
0 → 100644
浏览文件 @
6d460aa2
require
'spec_helper'
describe
"MergeRequests"
do
describe
"GET /merge_requests"
do
it
"works! (now write some real specs)"
do
# Run the generator again with the --webrat flag if you want to use webrat methods/matchers
get
merge_requests_path
response
.
status
.
should
be
(
200
)
end
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录