summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-08-07 14:44:54 +0000
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-08-07 14:44:54 +0000
commit4773f38e28c91dbbb6e5e385e0c403877298bfed (patch)
tree586ae3380337aee5a757eee2134f22fb77844692
parent0d5d80b735eb18ae79eb2bfe26c08896d53db414 (diff)
parentfd2f907b0171c9c70b3a514d0452d2027980319e (diff)
downloadgitlab-ce-4773f38e28c91dbbb6e5e385e0c403877298bfed.tar.gz
Merge branch 'improve-merge-requests' into 'master'
Improve merge requests - [x] Fetch merge request refs by IID - [x] Ability to fetch any merge request - [x] Link commits and diffs in merge request to target project - [x] Improve merge request UI and command line instructions - [x] Check merge request widget loading test coverage double See merge request !1115
-rw-r--r--app/assets/javascripts/merge_request_widget.js.coffee6
-rw-r--r--app/assets/stylesheets/pages/merge_requests.scss144
-rw-r--r--app/helpers/merge_requests_helper.rb10
-rw-r--r--app/models/merge_request.rb2
-rw-r--r--app/models/merge_request_diff.rb4
-rw-r--r--app/views/projects/merge_requests/_show.html.haml51
-rw-r--r--app/views/projects/merge_requests/show/_commits.html.haml2
-rw-r--r--app/views/projects/merge_requests/show/_diffs.html.haml2
-rw-r--r--app/views/projects/merge_requests/widget/_heading.html.haml37
-rw-r--r--app/views/projects/merge_requests/widget/open/_accept.html.haml6
-rw-r--r--app/views/projects/merge_requests/widget/open/_conflicts.html.haml9
-rw-r--r--doc/workflow/README.md1
-rw-r--r--doc/workflow/merge_requests.md40
13 files changed, 154 insertions, 160 deletions
diff --git a/app/assets/javascripts/merge_request_widget.js.coffee b/app/assets/javascripts/merge_request_widget.js.coffee
index c68a2a9d047..995a2f24093 100644
--- a/app/assets/javascripts/merge_request_widget.js.coffee
+++ b/app/assets/javascripts/merge_request_widget.js.coffee
@@ -49,10 +49,8 @@ class @MergeRequestWidget
@setMergeButtonClass('btn-danger')
showCiCoverage: (coverage) ->
- cov_html = $('<span>')
- cov_html.addClass('ci-coverage')
- cov_html.text('Coverage ' + coverage + '%')
- $('.ci_widget:visible').append(cov_html)
+ text = 'Coverage ' + coverage + '%'
+ $('.ci_widget:visible .ci-coverage').text(text)
setMergeButtonClass: (css_class) ->
$('.accept_merge_request').removeClass("btn-create").addClass(css_class)
diff --git a/app/assets/stylesheets/pages/merge_requests.scss b/app/assets/stylesheets/pages/merge_requests.scss
index 6185dabd39b..9af8227a52f 100644
--- a/app/assets/stylesheets/pages/merge_requests.scss
+++ b/app/assets/stylesheets/pages/merge_requests.scss
@@ -1,9 +1,15 @@
-
- /**
- * MR -> show: Automerge widget
+/**
+ * MR -> show: Automerge widget
*
*/
.mr-state-widget {
+ background: #FAFAFA;
+ margin-bottom: 20px;
+ color: #666;
+ border: 1px solid #e5e5e5;
+ @include box-shadow(0 1px 1px rgba(0, 0, 0, 0.05));
+ @include border-radius(3px);
+
form {
margin-bottom: 0;
.clearfix {
@@ -20,16 +26,67 @@
display: inline-block;
margin: 0;
margin-left: 20px;
- padding: 10px 0;
+ padding: 5px;
line-height: 20px;
- font-weight: bold;
.remove_source_checkbox {
margin: 0;
- font-weight: bold;
}
}
}
+
+ .ci_widget {
+ border-bottom: 1px solid #EEE;
+
+ i {
+ margin-right: 4px;
+ }
+
+ &.ci-success {
+ color: $gl-success;
+ }
+
+ &.ci-skipped {
+ background-color: #eee;
+ color: #888;
+ }
+
+ &.ci-pending,
+ &.ci-running {
+ color: $gl-warning;
+ }
+
+ &.ci-failed,
+ &.ci-canceled,
+ &.ci-error {
+ color: $gl-danger;
+ }
+ }
+
+ .mr-widget-body,
+ .ci_widget,
+ .mr-widget-footer {
+ padding: 15px;
+ }
+
+ .mr-widget-body {
+ h4 {
+ font-weight: bold;
+ margin: 5px 0;
+ }
+
+ p:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ .mr-widget-footer {
+ border-top: 1px solid #EEE;
+ }
+
+ .ci-coverage {
+ float: right;
+ }
}
@media(min-width: $screen-sm-max) {
@@ -58,23 +115,10 @@
}
.label-branch {
- @include border-radius(4px);
- padding: 3px 4px;
- border: none;
- background: $hover;
- color: #333;
+ color: #222;
font-family: $monospace_font;
- font-weight: normal;
+ font-weight: bold;
overflow: hidden;
-
- .label-project {
- @include border-radius-left(4px);
- padding: 3px 4px;
- background: #279;
- position: relative;
- left: -4px;
- letter-spacing: -1px;
- }
}
.mr-list {
@@ -121,64 +165,6 @@
display: none;
}
-.mr-state-widget {
- font-size: 13px;
- background: #FAFAFA;
- margin-bottom: 20px;
- color: #666;
- border: 1px solid #e5e5e5;
- @include box-shadow(0 1px 1px rgba(0, 0, 0, 0.05));
- @include border-radius(3px);
-
- .ci_widget {
- padding: 10px 15px;
- font-size: 15px;
- border-bottom: 1px solid #EEE;
-
- &.ci-success {
- color: $gl-success;
- }
-
- &.ci-skipped {
- background-color: #eee;
- color: #888;
- }
-
- &.ci-pending,
- &.ci-running {
- color: $gl-warning;
- }
-
- &.ci-failed,
- &.ci-canceled,
- &.ci-error {
- color: $gl-danger;
- }
- }
-
- .mr-widget-body {
- padding: 10px 15px;
-
- h4 {
- font-weight: bold;
- margin: 5px 0;
- }
-
- p:last-child {
- margin-bottom: 0;
- }
- }
-
- .mr-widget-footer {
- padding: 10px 15px;
- border-top: 1px solid #EEE;
- }
-
- .ci-coverage {
- float: right;
- }
-}
-
.merge-request-show-labels {
a {
margin-right: 5px;
diff --git a/app/helpers/merge_requests_helper.rb b/app/helpers/merge_requests_helper.rb
index 45ee4fe4135..f8169b4f288 100644
--- a/app/helpers/merge_requests_helper.rb
+++ b/app/helpers/merge_requests_helper.rb
@@ -61,4 +61,14 @@ module MergeRequestsHelper
}
)
end
+
+ def source_branch_with_namespace(merge_request)
+ if merge_request.for_fork?
+ namespace = link_to(merge_request.source_project_namespace,
+ project_path(merge_request.source_project))
+ namespace + ":#{merge_request.source_branch}"
+ else
+ merge_request.source_branch
+ end
+ end
end
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 631a2d887cc..467b90861f9 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -432,7 +432,7 @@ class MergeRequest < ActiveRecord::Base
target_project.repository.fetch_ref(
source_project.repository.path_to_repo,
"refs/heads/#{source_branch}",
- "refs/merge-requests/#{id}/head"
+ "refs/merge-requests/#{iid}/head"
)
end
diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb
index 2177f972ca3..e317c8eac4d 100644
--- a/app/models/merge_request_diff.rb
+++ b/app/models/merge_request_diff.rb
@@ -161,8 +161,8 @@ class MergeRequestDiff < ActiveRecord::Base
def compare_result
@compare_result ||=
begin
- # Update ref if merge request is from fork
- merge_request.fetch_ref if merge_request.for_fork?
+ # Update ref for merge request
+ merge_request.fetch_ref
# Get latest sha of branch from source project
source_sha = merge_request.source_project.commit(source_branch).sha
diff --git a/app/views/projects/merge_requests/_show.html.haml b/app/views/projects/merge_requests/_show.html.haml
index c57eee14143..2662e3aff6b 100644
--- a/app/views/projects/merge_requests/_show.html.haml
+++ b/app/views/projects/merge_requests/_show.html.haml
@@ -6,40 +6,25 @@
= render "projects/merge_requests/show/mr_box"
%hr
.append-bottom-20
- .slead
- %span From
- - if @merge_request.for_fork?
- %strong.label-branch<
- - if @merge_request.source_project
- = link_to @merge_request.source_project_namespace, namespace_project_path(@merge_request.source_project.namespace, @merge_request.source_project)
- - else
- \ #{@merge_request.source_project_namespace}
- \:#{@merge_request.source_branch}
+ - if @merge_request.open?
+ .btn-group.btn-group-sm.pull-right
+ %a.btn.btn-sm.dropdown-toggle{ data: {toggle: :dropdown} }
+ = icon('download')
+ Download as
+ %span.caret
+ %ul.dropdown-menu
+ %li= link_to "Email Patches", merge_request_path(@merge_request, format: :patch)
+ %li= link_to "Plain Diff", merge_request_path(@merge_request, format: :diff)
+ .light
+ %div
+ %span From
+ %span.label-branch #{source_branch_with_namespace(@merge_request)}
%span into
- %strong.label-branch #{@merge_request.target_project_namespace}:#{@merge_request.target_branch}
- - else
- %strong.label-branch #{@merge_request.source_branch}
- %span into
- %strong.label-branch #{@merge_request.target_branch}
- - if @merge_request.open?
- .btn-group.btn-group-sm.pull-right
- %a.btn.btn-sm.dropdown-toggle{ data: {toggle: :dropdown} }
- = icon('download')
- Download as
- %span.caret
- %ul.dropdown-menu
- %li= link_to "Email Patches", merge_request_path(@merge_request, format: :patch)
- %li= link_to "Plain Diff", merge_request_path(@merge_request, format: :diff)
-
- - if @merge_request.open? and @merge_request.source_branch_exists?
- .append-bottom-20
- .slead
- %span
- Fetch the branch with
- %strong.label-branch<
- git fetch
- \ #{@merge_request.source_project.http_url_to_repo}
- \ #{@merge_request.source_branch}
+ %span.label-branch #{@merge_request.target_branch}
+ - if @merge_request.open? && !@merge_request.branch_missing?
+ %div
+ If you want to try or merge this request manually, you can use the
+ = link_to "command line", "#modal_merge_info", class: "how_to_merge_link vlink", title: "How To Merge", "data-toggle" => "modal"
= render "projects/merge_requests/show/how_to_merge"
= render "projects/merge_requests/widget/show.html.haml"
diff --git a/app/views/projects/merge_requests/show/_commits.html.haml b/app/views/projects/merge_requests/show/_commits.html.haml
index 3b7f283daf0..a71b181a6a5 100644
--- a/app/views/projects/merge_requests/show/_commits.html.haml
+++ b/app/views/projects/merge_requests/show/_commits.html.haml
@@ -1 +1 @@
-= render "projects/commits/commits", project: @merge_request.source_project
+= render "projects/commits/commits", project: @merge_request.project
diff --git a/app/views/projects/merge_requests/show/_diffs.html.haml b/app/views/projects/merge_requests/show/_diffs.html.haml
index 786b5f39063..626970f39be 100644
--- a/app/views/projects/merge_requests/show/_diffs.html.haml
+++ b/app/views/projects/merge_requests/show/_diffs.html.haml
@@ -1,5 +1,5 @@
- if @merge_request_diff.collected?
- = render "projects/diffs/diffs", diffs: @merge_request.diffs, project: @merge_request.source_project
+ = render "projects/diffs/diffs", diffs: @merge_request.diffs, project: @merge_request.project
- elsif @merge_request_diff.empty?
.nothing-here-block Nothing to merge from #{@merge_request.source_branch} into #{@merge_request.target_branch}
- else
diff --git a/app/views/projects/merge_requests/widget/_heading.html.haml b/app/views/projects/merge_requests/widget/_heading.html.haml
index f04eac0e3bb..17d529766e6 100644
--- a/app/views/projects/merge_requests/widget/_heading.html.haml
+++ b/app/views/projects/merge_requests/widget/_heading.html.haml
@@ -1,28 +1,14 @@
- if @merge_request.has_ci?
.mr-widget-heading
- .ci_widget.ci-success{style: "display:none"}
- = icon("check")
- %span CI build passed
- for #{@merge_request.last_commit_short_sha}.
- = link_to "View build page", ci_build_details_path(@merge_request), :"data-no-turbolink" => "data-no-turbolink"
-
- .ci_widget.ci-skipped{style: "display:none"}
- = icon("check")
- %span CI build skipped
- for #{@merge_request.last_commit_short_sha}.
- = link_to "View build page", ci_build_details_path(@merge_request), :"data-no-turbolink" => "data-no-turbolink"
-
- .ci_widget.ci-failed{style: "display:none"}
- = icon("times")
- %span CI build failed
- for #{@merge_request.last_commit_short_sha}.
- = link_to "View build page", ci_build_details_path(@merge_request), :"data-no-turbolink" => "data-no-turbolink"
-
- - [:running, :pending].each do |status|
+ - [:success, :skipped, :canceled, :failed, :running, :pending].each do |status|
.ci_widget{class: "ci-#{status}", style: "display:none"}
- = icon("clock-o")
+ - if status == :success
+ = icon("check-circle")
+ - else
+ = icon("circle")
%span CI build #{status}
for #{@merge_request.last_commit_short_sha}.
+ %span.ci-coverage
= link_to "View build page", ci_build_details_path(@merge_request), :"data-no-turbolink" => "data-no-turbolink"
.ci_widget
@@ -30,19 +16,12 @@
Checking for CI status for #{@merge_request.last_commit_short_sha}
.ci_widget.ci-not_found{style: "display:none"}
- = icon("times")
+ = icon("times-circle")
%span Can not find commit in the CI server
for #{@merge_request.last_commit_short_sha}.
-
-
- .ci_widget.ci-canceled{style: "display:none"}
- = icon("times")
- %span CI build canceled
- for #{@merge_request.last_commit_short_sha}.
- = link_to "View build page", ci_build_details_path(@merge_request), :"data-no-turbolink" => "data-no-turbolink"
.ci_widget.ci-error{style: "display:none"}
- = icon("times")
+ = icon("times-circle")
%span Cannot connect to the CI server. Please check your settings and try again.
:coffeescript
diff --git a/app/views/projects/merge_requests/widget/open/_accept.html.haml b/app/views/projects/merge_requests/widget/open/_accept.html.haml
index 3c0cd25ba07..1be98cbe8de 100644
--- a/app/views/projects/merge_requests/widget/open/_accept.html.haml
+++ b/app/views/projects/merge_requests/widget/open/_accept.html.haml
@@ -18,12 +18,6 @@
text: @merge_request.merge_commit_message,
rows: 14, hint: true
- %br
- .light
- If you want to merge this request manually, you can use the
- %strong
- = link_to "command line", "#modal_merge_info", class: "how_to_merge_link vlink", title: "How To Merge", "data-toggle" => "modal"
-
:coffeescript
$('.accept-mr-form').on 'ajax:before', ->
btn = $('.accept_merge_request')
diff --git a/app/views/projects/merge_requests/widget/open/_conflicts.html.haml b/app/views/projects/merge_requests/widget/open/_conflicts.html.haml
index 7dc3b4eb2cc..440a7aa1c61 100644
--- a/app/views/projects/merge_requests/widget/open/_conflicts.html.haml
+++ b/app/views/projects/merge_requests/widget/open/_conflicts.html.haml
@@ -1,10 +1,11 @@
+%h4
+ This merge request contains merge conflicts that must be resolved.
+
- if @merge_request.can_be_merged_by?(current_user)
- %h4
- This merge request contains merge conflicts that must be resolved.
%p
You can merge it manually using the
%strong
= link_to "command line", "#modal_merge_info", class: "how_to_merge_link vlink", title: "How To Merge", "data-toggle" => "modal"
- else
- %strong This merge request contains merge conflicts that must be resolved.
- Only those with write access to this repository can merge merge requests.
+ %p
+ Only those with write access to this repository can merge merge requests.
diff --git a/doc/workflow/README.md b/doc/workflow/README.md
index 3915198ad2a..5b8d72dfd34 100644
--- a/doc/workflow/README.md
+++ b/doc/workflow/README.md
@@ -13,4 +13,5 @@
- [Project users](add-user/add-user.md)
- [Protected branches](protected_branches.md)
- [Web Editor](web_editor.md)
+- [Merge Requests](merge_requests.md)
- ["Work In Progress" Merge Requests](wip_merge_requests.md)
diff --git a/doc/workflow/merge_requests.md b/doc/workflow/merge_requests.md
new file mode 100644
index 00000000000..751e19da7f1
--- /dev/null
+++ b/doc/workflow/merge_requests.md
@@ -0,0 +1,40 @@
+# Merge Requests
+
+Merge requests allow you to exchange changes you made to source code
+
+## Checkout merge requests locally
+
+Locate the section for your GitLab remote in the `.git/config` file. It looks like this:
+
+```
+[remote "origin"]
+ url = https://gitlab.com/gitlab-org/gitlab-ce.git
+ fetch = +refs/heads/*:refs/remotes/origin/*
+```
+
+Now add the line `fetch = +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*` to this section.
+
+It should looks like this:
+
+```
+[remote "origin"]
+ url = https://gitlab.com/gitlab-org/gitlab-ce.git
+ fetch = +refs/heads/*:refs/remotes/origin/*
+ fetch = +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*
+```
+
+Now you can fetch all the merge requests requests:
+
+```
+$ git fetch origin
+From https://gitlab.com/gitlab-org/gitlab-ce.git
+ * [new ref] refs/merge-requests/1/head -> origin/merge-requests/1
+ * [new ref] refs/merge-requests/2/head -> origin/merge-requests/2
+...
+```
+
+To check out a particular merge request:
+
+```
+$ git checkout origin/merge-requests/1
+```