Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Jérome Perrin
gitlab-ce
Commits
4917dc64
Commit
4917dc64
authored
May 08, 2014
by
Dmitriy Zaporozhets
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch '2-step-mr' into 'master'
2 step merge request process
parents
4673d980
536373ad
Changes
15
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
229 additions
and
76 deletions
+229
-76
app/assets/javascripts/project_users_select.js.coffee
app/assets/javascripts/project_users_select.js.coffee
+1
-1
app/assets/stylesheets/sections/merge_requests.scss
app/assets/stylesheets/sections/merge_requests.scss
+0
-1
app/controllers/projects/merge_requests_controller.rb
app/controllers/projects/merge_requests_controller.rb
+20
-4
app/helpers/issues_helper.rb
app/helpers/issues_helper.rb
+1
-1
app/helpers/selects_helper.rb
app/helpers/selects_helper.rb
+2
-2
app/models/merge_request.rb
app/models/merge_request.rb
+8
-0
app/views/projects/merge_requests/_form.html.haml
app/views/projects/merge_requests/_form.html.haml
+20
-43
app/views/projects/merge_requests/_new_compare.html.haml
app/views/projects/merge_requests/_new_compare.html.haml
+84
-0
app/views/projects/merge_requests/_new_submit.html.haml
app/views/projects/merge_requests/_new_submit.html.haml
+82
-0
app/views/projects/merge_requests/branch_from.js.haml
app/views/projects/merge_requests/branch_from.js.haml
+0
-5
app/views/projects/merge_requests/new.html.haml
app/views/projects/merge_requests/new.html.haml
+4
-3
app/views/projects/merge_requests/show/_mr_title.html.haml
app/views/projects/merge_requests/show/_mr_title.html.haml
+1
-1
features/project/forked_merge_requests.feature
features/project/forked_merge_requests.feature
+1
-2
features/steps/project/forked_merge_requests.rb
features/steps/project/forked_merge_requests.rb
+3
-12
features/steps/project/merge_requests.rb
features/steps/project/merge_requests.rb
+2
-1
No files found.
app/assets/javascripts/project_users_select.js.coffee
View file @
4917dc64
@
projectUsersSelect
=
init
:
->
$
(
'.ajax-project-users-select'
).
each
(
i
,
select
)
->
project_id
=
$
(
'body'
).
data
(
'project-id'
)
project_id
=
$
(
select
).
data
(
'project-id'
)
||
$
(
'body'
).
data
(
'project-id'
)
$
(
select
).
select2
placeholder
:
$
(
select
).
data
(
'placeholder'
)
||
"Search for a user"
...
...
app/assets/stylesheets/sections/merge_requests.scss
View file @
4917dc64
...
...
@@ -31,7 +31,6 @@
.mr_source_commit
,
.mr_target_commit
{
margin-top
:
10px
;
.commit
{
margin
:
0
;
padding
:
2px
0
;
...
...
app/controllers/projects/merge_requests_controller.rb
View file @
4917dc64
...
...
@@ -62,11 +62,27 @@ class Projects::MergeRequestsController < Projects::ApplicationController
@merge_request
.
source_project
=
@project
unless
@merge_request
.
source_project
@merge_request
.
target_project
||=
(
@project
.
forked_from_project
||
@project
)
@target_branches
=
@merge_request
.
target_project
.
nil?
?
[]
:
@merge_request
.
target_project
.
repository
.
branch_names
@merge_request
.
target_branch
||=
@merge_request
.
target_project
.
default_branch
@source_project
=
@merge_request
.
source_project
@merge_request
if
@merge_request
.
target_branch
&&
@merge_request
.
source_branch
compare_action
=
Gitlab
::
Satellite
::
CompareAction
.
new
(
current_user
,
@merge_request
.
target_project
,
@merge_request
.
target_branch
,
@merge_request
.
source_project
,
@merge_request
.
source_branch
)
@commits
=
compare_action
.
commits
@commits
.
map!
{
|
commit
|
Commit
.
new
(
commit
)
}
@commit
=
@commits
.
first
@diffs
=
compare_action
.
diffs
@merge_request
.
title
=
@merge_request
.
source_branch
.
titleize
.
humanize
@target_project
=
@merge_request
.
target_project
@target_repo
=
@target_project
.
repository
end
end
def
edit
...
...
@@ -80,7 +96,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController
@merge_request
=
MergeRequests
::
CreateService
.
new
(
project
,
current_user
,
params
[
:merge_request
]).
execute
if
@merge_request
.
valid?
redirect_to
[
@merge_request
.
target_project
,
@merge_request
]
,
notice:
'Merge request was successfully created.'
redirect_to
project_merge_request_path
(
@merge_request
.
target_project
,
@merge_request
)
,
notice:
'Merge request was successfully created.'
else
@source_project
=
@merge_request
.
source_project
@target_project
=
@merge_request
.
target_project
...
...
app/helpers/issues_helper.rb
View file @
4917dc64
...
...
@@ -82,7 +82,7 @@ module IssuesHelper
end
def
milestone_options
object
options_from_collection_for_select
(
@
project
.
milestones
.
active
,
'id'
,
'title'
,
object
.
milestone_id
)
options_from_collection_for_select
(
object
.
project
.
milestones
.
active
,
'id'
,
'title'
,
object
.
milestone_id
)
end
def
issue_box_class
(
item
)
...
...
app/helpers/selects_helper.rb
View file @
4917dc64
...
...
@@ -14,7 +14,7 @@ module SelectsHelper
css_class
<<
(
opts
[
:class
]
||
''
)
value
=
opts
[
:selected
]
||
''
placeholder
=
opts
[
:placeholder
]
||
'Select user'
hidden_field_tag
(
id
,
value
,
class:
css_class
,
'data-placeholder'
=>
placeholder
)
project_id
=
opts
[
:project_id
]
||
@project
.
id
hidden_field_tag
(
id
,
value
,
class:
css_class
,
'data-placeholder'
=>
placeholder
,
'data-project-id'
=>
project_id
)
end
end
app/models/merge_request.rb
View file @
4917dc64
...
...
@@ -253,6 +253,14 @@ class MergeRequest < ActiveRecord::Base
end
end
def
target_project_namespace
if
target_project
&&
target_project
.
namespace
target_project
.
namespace
.
path
else
"(removed)"
end
end
def
source_branch_exists?
return
false
unless
self
.
source_project
...
...
app/views/projects/merge_requests/_form.html.haml
View file @
4917dc64
...
...
@@ -14,33 +14,6 @@
-
@merge_request
.
errors
.
full_messages
.
each
do
|
msg
|
%div
=
msg
.merge-request-branches
.form-group
=
label_tag
nil
,
class:
'control-label'
do
From
.col-sm-10
.clearfix
.pull-left
=
f
.
select
(
:source_project_id
,
[[
@merge_request
.
source_project_path
,
@merge_request
.
source_project
.
id
]]
,
{},
{
class:
'source_project select2 span3'
,
disabled:
@merge_request
.
persisted?
})
.pull-left
=
f
.
select
(
:source_branch
,
@merge_request
.
source_branches
,
{
include_blank:
"Select branch"
},
{
class:
'source_branch select2 span2'
})
.mr_source_commit
%br
.form-group
=
label_tag
nil
,
class:
'control-label'
do
To
.col-sm-10
.clearfix
.pull-left
-
projects
=
@project
.
forked_from_project
.
nil?
?
[
@project
]
:
[
@project
,
@project
.
forked_from_project
]
=
f
.
select
(
:target_project_id
,
options_from_collection_for_select
(
projects
,
'id'
,
'path_with_namespace'
,
f
.
object
.
target_project_id
),
{},
{
class:
'target_project select2 span3'
,
disabled:
@merge_request
.
persisted?
})
.pull-left
=
f
.
select
(
:target_branch
,
@merge_request
.
target_branches
,
{
include_blank:
"Select branch"
},
{
class:
'target_branch select2 span2'
})
.mr_target_commit
%hr
.merge-request-form-info
.form-group
=
f
.
label
:title
,
class:
'control-label'
do
...
...
@@ -51,6 +24,23 @@
.col-sm-10
=
f
.
text_area
:description
,
class:
"form-control js-gfm-input"
,
rows:
14
%p
.hint
Description is parsed with
#{
link_to
"GitLab Flavored Markdown"
,
help_markdown_path
,
target:
'_blank'
}
.
%hr
.form-group
.issue-assignee
=
f
.
label
:assignee_id
,
class:
'control-label'
do
%i
.icon-user
Assign to
.col-sm-10
=
project_users_select_tag
(
'merge_request[assignee_id]'
,
placeholder:
'Select a user'
,
class:
'custom-form-control'
,
selected:
@merge_request
.
assignee_id
)
=
link_to
'Assign to me'
,
'#'
,
class:
'btn btn-small assign-to-me-link'
.form-group
.issue-milestone
=
f
.
label
:milestone_id
,
class:
'control-label'
do
%i
.icon-time
Milestone
.col-sm-10
=
f
.
select
(
:milestone_id
,
milestone_options
(
@merge_request
),
{
include_blank:
"Select milestone"
},
{
class:
'select2'
})
.form-actions
-
if
@merge_request
.
new_record?
...
...
@@ -66,20 +56,7 @@
:javascript
disableButtonIfEmptyField
(
"
#merge_request_title
"
,
"
.btn-save
"
);
var
source_branch
=
$
(
"
#merge_request_source_branch
"
)
,
target_branch
=
$
(
"
#merge_request_target_branch
"
)
,
target_project
=
$
(
"
#merge_request_target_project_id
"
);
$
.
get
(
"
#{
branch_from_project_merge_requests_path
(
@source_project
)
}
"
,
{
ref
:
source_branch
.
val
()
});
$
.
get
(
"
#{
branch_to_project_merge_requests_path
(
@source_project
)
}
"
,
{
target_project_id
:
target_project
.
val
(),
ref
:
target_branch
.
val
()
});
target_project
.
on
(
"
change
"
,
function
()
{
$
.
get
(
"
#{
update_branches_project_merge_requests_path
(
@source_project
)
}
"
,
{
target_project_id
:
$
(
this
).
val
()
});
});
source_branch
.
on
(
"
change
"
,
function
()
{
$
.
get
(
"
#{
branch_from_project_merge_requests_path
(
@source_project
)
}
"
,
{
ref
:
$
(
this
).
val
()
});
});
target_branch
.
on
(
"
change
"
,
function
()
{
$
.
get
(
"
#{
branch_to_project_merge_requests_path
(
@source_project
)
}
"
,
{
target_project_id
:
target_project
.
val
(),
ref
:
$
(
this
).
val
()
});
$
(
'
.assign-to-me-link
'
).
on
(
'
click
'
,
function
(
e
){
$
(
'
#merge_request_assignee_id
'
).
val
(
"
#{
current_user
.
id
}
"
).
trigger
(
"
change
"
);
e
.
preventDefault
();
});
app/views/projects/merge_requests/_new_compare.html.haml
0 → 100644
View file @
4917dc64
%h3
.page-title
Compare branches for new Merge Request
%hr
=
form_for
[
@project
,
@merge_request
],
url:
new_project_merge_request_path
(
@project
),
method: :get
,
html:
{
class:
"merge-request-form form-inline"
}
do
|
f
|
.hide.alert.alert-danger.mr-compare-errors
.merge-request-branches.row
.col-md-6
.panel.panel-default
.panel-heading
%strong
Source branch
.panel-body
=
f
.
select
(
:source_project_id
,
[[
@merge_request
.
source_project_path
,
@merge_request
.
source_project
.
id
]]
,
{},
{
class:
'source_project select2 span3'
,
disabled:
@merge_request
.
persisted?
})
=
f
.
select
(
:source_branch
,
@merge_request
.
source_branches
,
{
include_blank:
"Select branch"
},
{
class:
'source_branch select2 span2'
})
.panel-footer
.mr_source_commit
.col-md-6
.panel.panel-default
.panel-heading
%strong
Target branch
.panel-body
-
projects
=
@project
.
forked_from_project
.
nil?
?
[
@project
]
:
[
@project
,
@project
.
forked_from_project
]
=
f
.
select
(
:target_project_id
,
options_from_collection_for_select
(
projects
,
'id'
,
'path_with_namespace'
,
f
.
object
.
target_project_id
),
{},
{
class:
'target_project select2 span3'
,
disabled:
@merge_request
.
persisted?
})
=
f
.
select
(
:target_branch
,
@merge_request
.
target_branches
,
{
include_blank:
"Select branch"
},
{
class:
'target_branch select2 span2'
})
.panel-footer
.mr_target_commit
-
if
@merge_request
.
errors
.
any?
.alert.alert-danger
-
@merge_request
.
errors
.
full_messages
.
each
do
|
msg
|
%div
=
msg
-
if
@merge_request
.
source_branch
.
present?
&&
@merge_request
.
target_branch
.
present?
.light-well
%center
%h4
There isn't anything to merge.
%p
.slead
-
if
@merge_request
.
source_branch
==
@merge_request
.
target_branch
You'll need to use different branch names to get a valid comparison.
-
else
%span
.label-branch
#{
@merge_request
.
source_branch
}
and
%span
.label-branch
#{
@merge_request
.
target_branch
}
are the same.
%hr
=
f
.
submit
'Compare branches'
,
class:
"btn btn-primary mr-compare-btn"
:javascript
var
source_branch
=
$
(
"
#merge_request_source_branch
"
)
,
target_branch
=
$
(
"
#merge_request_target_branch
"
)
,
target_project
=
$
(
"
#merge_request_target_project_id
"
);
$
.
get
(
"
#{
branch_from_project_merge_requests_path
(
@source_project
)
}
"
,
{
ref
:
source_branch
.
val
()
});
$
.
get
(
"
#{
branch_to_project_merge_requests_path
(
@source_project
)
}
"
,
{
target_project_id
:
target_project
.
val
(),
ref
:
target_branch
.
val
()
});
target_project
.
on
(
"
change
"
,
function
()
{
$
.
get
(
"
#{
update_branches_project_merge_requests_path
(
@source_project
)
}
"
,
{
target_project_id
:
$
(
this
).
val
()
});
});
source_branch
.
on
(
"
change
"
,
function
()
{
$
.
get
(
"
#{
branch_from_project_merge_requests_path
(
@source_project
)
}
"
,
{
ref
:
$
(
this
).
val
()
});
$
(
"
.mr-compare-errors
"
).
fadeOut
();
$
(
"
.mr-compare-btn
"
).
enable
();
});
target_branch
.
on
(
"
change
"
,
function
()
{
$
.
get
(
"
#{
branch_to_project_merge_requests_path
(
@source_project
)
}
"
,
{
target_project_id
:
target_project
.
val
(),
ref
:
$
(
this
).
val
()
});
$
(
"
.mr-compare-errors
"
).
fadeOut
();
$
(
"
.mr-compare-btn
"
).
enable
();
});
:coffeescript
$(".merge-request-form").on 'submit', ->
if $("#merge_request_source_branch").val() is "" or $('#merge_request_target_branch').val() is ""
$(".mr-compare-errors").html("You must select source and target branch to proceed")
$(".mr-compare-errors").fadeIn()
event.preventDefault()
return
app/views/projects/merge_requests/_new_submit.html.haml
0 → 100644
View file @
4917dc64
%h3
.page-title
New merge request
%p
.slead
From
%strong
.monospace
#{
@merge_request
.
source_project_namespace
}
:
#{
@merge_request
.
source_branch
}
into
%strong
.monospace
#{
@merge_request
.
target_project_namespace
}
:
#{
@merge_request
.
target_branch
}
%span
.pull-right
=
link_to
'Change branches'
,
new_project_merge_request_path
(
@project
)
=
form_for
[
@project
,
@merge_request
],
html:
{
class:
"merge-request-form"
}
do
|
f
|
.panel.panel-default
.panel-body
.form-group
.light
=
f
.
label
:title
do
=
"Title *"
=
f
.
text_field
:title
,
class:
"form-control input-lg js-gfm-input"
,
maxlength:
255
,
rows:
5
,
required:
true
.form-group
.light
=
f
.
label
:description
,
"Description"
=
f
.
text_area
:description
,
class:
"form-control js-gfm-input"
,
rows:
10
%p
.hint
Description is parsed with
#{
link_to
"GitLab Flavored Markdown"
,
help_markdown_path
,
target:
'_blank'
}
.
.form-group
.issue-assignee
=
f
.
label
:assignee_id
do
%i
.icon-user
Assign to
%div
=
project_users_select_tag
(
'merge_request[assignee_id]'
,
placeholder:
'Select a user'
,
class:
'custom-form-control'
,
selected:
@merge_request
.
assignee_id
,
project_id:
@merge_request
.
target_project_id
)
=
link_to
'Assign to me'
,
'#'
,
class:
'btn btn-small assign-to-me-link'
.form-group
.issue-milestone
=
f
.
label
:milestone_id
do
%i
.icon-time
Milestone
%div
=
f
.
select
(
:milestone_id
,
milestone_options
(
@merge_request
),
{
include_blank:
"Select milestone"
},
{
class:
'select2'
})
.panel-footer
-
if
@target_repo
.
contribution_guide
-
contribution_guide_url
=
project_blob_path
(
@target_project
,
tree_join
(
@target_repo
.
root_ref
,
@target_repo
.
contribution_guide
.
name
))
%p
Please review the
%strong
#{
link_to
"guidelines for contribution"
,
contribution_guide_url
}
to this repository.
=
f
.
hidden_field
:source_project_id
=
f
.
hidden_field
:target_project_id
=
f
.
hidden_field
:target_branch
=
f
.
hidden_field
:source_branch
=
f
.
submit
'Submit merge request'
,
class:
"btn btn-create"
.mr-compare
%div
.ui-box
.title
Commits (
#{
@commits
.
count
}
)
-
if
@commits
.
size
>
MergeRequestDiff
::
COMMITS_SAFE_SIZE
%ul
.well-list
-
Commit
.
decorate
(
@commits
.
first
(
MergeRequestDiff
::
COMMITS_SAFE_SIZE
)).
each
do
|
commit
|
=
render
"projects/commits/inline_commit"
,
commit:
commit
,
project:
@project
%li
.warning-row.unstyled
other
#{
@commits
.
size
-
MergeRequestDiff
::
COMMITS_SAFE_SIZE
}
commits hidden to prevent performance issues.
-
else
%ul
.well-list
=
render
Commit
.
decorate
(
@commits
),
project:
@project
%h4
Changes
-
if
@diffs
.
present?
=
render
"projects/commits/diffs"
,
diffs:
@diffs
,
project:
@project
-
elsif
@commits
.
size
>
MergeRequestDiff
::
COMMITS_SAFE_SIZE
.bs-callout.bs-callout-danger
%h4
This comparison includes more than
#{
MergeRequestDiff
::
COMMITS_SAFE_SIZE
}
commits.
%p
To preserve performance the line changes are not shown.
:javascript
$
(
'
.assign-to-me-link
'
).
on
(
'
click
'
,
function
(
e
){
$
(
'
#merge_request_assignee_id
'
).
val
(
"
#{
current_user
.
id
}
"
).
trigger
(
"
change
"
);
e
.
preventDefault
();
});
app/views/projects/merge_requests/branch_from.js.haml
View file @
4917dc64
:plain
$(".mr_source_commit").html("
#{
commit_to_html
(
@commit
,
@source_project
,
false
)
}
");
var mrTitle = $('#merge_request_title');
if(mrTitle.val().length == 0) {
mrTitle.val("
#{
params
[
:ref
].
titleize
.
humanize
}
");
}
app/views/projects/merge_requests/new.html.haml
View file @
4917dc64
%h3
.page-title
New Merge Request
%hr
=
render
'form'
-
if
@commits
.
present?
=
render
'new_submit'
-
else
=
render
'new_compare'
app/views/projects/merge_requests/show/_mr_title.html.haml
View file @
4917dc64
...
...
@@ -39,4 +39,4 @@
-
else
%span
=
@merge_request
.
source_branch
→
%span
h
=
@merge_request
.
target_branch
%span
=
@merge_request
.
target_branch
features/project/forked_merge_requests.feature
View file @
4917dc64
...
...
@@ -30,7 +30,6 @@ Feature: Project Forked Merge Requests
Given
I visit project
"Forked Shop"
merge requests page
And
I click link
"New Merge Request"
And
I fill out an invalid
"Merge Request On Forked Project"
merge request
And
I submit the merge request
Then
I should see validation errors
@javascript
...
...
features/steps/project/forked_merge_requests.rb
View file @
4917dc64
...
...
@@ -53,6 +53,7 @@ class ProjectForkedMergeRequests < Spinach::FeatureSteps
find
(
:select
,
"merge_request_source_branch"
,
{}).
value
.
should
==
'master'
find
(
:select
,
"merge_request_target_branch"
,
{}).
value
.
should
==
'stable'
click_button
"Compare branches"
fill_in
"merge_request_title"
,
with:
"Merge Request On Forked Project"
end
...
...
@@ -148,29 +149,19 @@ class ProjectForkedMergeRequests < Spinach::FeatureSteps
current_path
.
should
==
edit_project_merge_request_path
(
@project
,
@merge_request
)
page
.
should
have_content
"Edit merge request #
#{
@merge_request
.
id
}
"
find
(
"#merge_request_title"
).
value
.
should
==
"Merge Request On Forked Project"
find
(
"#merge_request_source_project_id"
).
value
.
should
==
@forked_project
.
id
.
to_s
find
(
"#merge_request_target_project_id"
).
value
.
should
==
@project
.
id
.
to_s
find
(
"#merge_request_source_branch"
).
value
.
should
have_content
"master"
verify_commit_link
(
".mr_source_commit"
,
@forked_project
)
find
(
"#merge_request_target_branch"
).
value
.
should
have_content
"stable"
verify_commit_link
(
".mr_target_commit"
,
@project
)
end
step
'I fill out an invalid "Merge Request On Forked Project" merge request'
do
#If this isn't filled in the rest of the validations won't be triggered
fill_in
"merge_request_title"
,
with:
"Merge Request On Forked Project"
select
"Select branch"
,
from:
"merge_request_target_branch"
find
(
:select
,
"merge_request_source_project_id"
,
{}).
value
.
should
==
@forked_project
.
id
.
to_s
find
(
:select
,
"merge_request_target_project_id"
,
{}).
value
.
should
==
project
.
id
.
to_s
find
(
:select
,
"merge_request_source_branch"
,
{}).
value
.
should
==
""
find
(
:select
,
"merge_request_target_branch"
,
{}).
value
.
should
==
""
click_button
"Compare branches"
end
step
'I should see validation errors'
do
page
.
should
have_content
"Source branch can't be blank"
page
.
should
have_content
"Target branch can't be blank"
page
.
should
have_content
"You must select source and target branch"
end
step
'the target repository should be the original repository'
do
...
...
features/steps/project/merge_requests.rb
View file @
4917dc64
...
...
@@ -61,9 +61,10 @@ class ProjectMergeRequests < Spinach::FeatureSteps
end
step
'I submit new merge request "Wiki Feature"'
do
fill_in
"merge_request_title"
,
with:
"Wiki Feature"
select
"master"
,
from:
"merge_request_source_branch"
select
"notes_refactoring"
,
from:
"merge_request_target_branch"
click_button
"Compare branches"
fill_in
"merge_request_title"
,
with:
"Wiki Feature"
click_button
"Submit merge request"
end
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment