Commit 5f2562df authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'master' of github.com:gitlabhq/gitlabhq

parents d891b23e f6f58cfb
Please view this file on the master branch, on stable branches it's out of date. Please view this file on the master branch, on stable branches it's out of date.
v 7.14.0 (unreleased) v 7.14.0 (unreleased)
- Provide more feedback what went wrong if HipChat service failed test (Stan Hu)
- Disable turbolinks when linking to Bitbucket import status (Stan Hu) - Disable turbolinks when linking to Bitbucket import status (Stan Hu)
- Fix broken code import and display error messages if something went wrong with creating project (Stan Hu) - Fix broken code import and display error messages if something went wrong with creating project (Stan Hu)
- Fix corrupted binary files when using API files endpoint (Stan Hu) - Fix corrupted binary files when using API files endpoint (Stan Hu)
...@@ -29,12 +30,8 @@ v 7.14.0 (unreleased) ...@@ -29,12 +30,8 @@ v 7.14.0 (unreleased)
- Return comments in created order in merge request API (Stan Hu) - Return comments in created order in merge request API (Stan Hu)
- Expire Rails cache entries after two weeks to prevent endless Redis growth - Expire Rails cache entries after two weeks to prevent endless Redis growth
- Add support for destroying project milestones (Stan Hu) - Add support for destroying project milestones (Stan Hu)
- Add fetch command to the MR page.
- Allow custom backup archive permissions - Allow custom backup archive permissions
- Add fetch command to the MR page
- Add project star and fork count, group avatar URL and user/group web URL attributes to API - Add project star and fork count, group avatar URL and user/group web URL attributes to API
- Fix bug causing Bitbucket importer to crash when OAuth application had been removed.
- Add fetch command to the MR page.
- Show who last edited a comment if it wasn't the original author - Show who last edited a comment if it wasn't the original author
- Send notification to all participants when MR is merged. - Send notification to all participants when MR is merged.
- Add ability to manage user email addresses via the API. - Add ability to manage user email addresses via the API.
...@@ -56,6 +53,13 @@ v 7.14.0 (unreleased) ...@@ -56,6 +53,13 @@ v 7.14.0 (unreleased)
- Include branch/tag name in archive file and directory name - Include branch/tag name in archive file and directory name
- Add dropzone upload progress - Add dropzone upload progress
- Add a label for merged branches on branches page (Florent Baldino) - Add a label for merged branches on branches page (Florent Baldino)
- Detect .mkd and .mkdn files as markdown (Ben Boeckel)
v 7.13.5
- Satellites reverted
v 7.13.4
- Allow users to send abuse reports
v 7.13.3 v 7.13.3
- Fix bug causing Bitbucket importer to crash when OAuth application had been removed. - Fix bug causing Bitbucket importer to crash when OAuth application had been removed.
......
7.13.0.pre 7.14.0.pre
...@@ -24,8 +24,3 @@ class @Project ...@@ -24,8 +24,3 @@ class @Project
$.cookie('hide_no_password_message', 'false', { path: path }) $.cookie('hide_no_password_message', 'false', { path: path })
$(@).parents('.no-password-message').remove() $(@).parents('.no-password-message').remove()
e.preventDefault() e.preventDefault()
$('.js-toggle-clone-holder').on 'click', (e) ->
cloneHolder.toggle()
cloneHolder.hide() unless $('.empty-project').length
...@@ -39,10 +39,13 @@ class Projects::ServicesController < Projects::ApplicationController ...@@ -39,10 +39,13 @@ class Projects::ServicesController < Projects::ApplicationController
def test def test
data = Gitlab::PushDataBuilder.build_sample(project, current_user) data = Gitlab::PushDataBuilder.build_sample(project, current_user)
if @service.execute(data) outcome = @service.test(data)
if outcome[:success]
message = { notice: 'We sent a request to the provided URL' } message = { notice: 'We sent a request to the provided URL' }
else else
message = { alert: 'We tried to send a request to the provided URL but an error occured' } error_message = "We tried to send a request to the provided URL but an error occurred"
error_message << ": #{outcome[:result]}" if outcome[:result].present?
message = { alert: error_message }
end end
redirect_to :back, message redirect_to :back, message
......
...@@ -360,6 +360,10 @@ class Note < ActiveRecord::Base ...@@ -360,6 +360,10 @@ class Note < ActiveRecord::Base
create_new_cross_references!(project, author) create_new_cross_references!(project, author)
end end
def system?
read_attribute(:system)
end
def editable? def editable?
!read_attribute(:system) !read_attribute(:system)
end end
......
...@@ -60,6 +60,16 @@ class HipchatService < Service ...@@ -60,6 +60,16 @@ class HipchatService < Service
gate[room].send('GitLab', message, message_options) gate[room].send('GitLab', message, message_options)
end end
def test(data)
begin
result = execute(data)
rescue StandardError => error
return { success: false, result: error }
end
{ success: true, result: result }
end
private private
def gate def gate
......
...@@ -87,10 +87,16 @@ class Service < ActiveRecord::Base ...@@ -87,10 +87,16 @@ class Service < ActiveRecord::Base
%w(push tag_push issue merge_request) %w(push tag_push issue merge_request)
end end
def execute def execute(data)
# implement inside child # implement inside child
end end
def test(data)
# default implementation
result = execute(data)
{ success: result.present?, result: result }
end
def can_test? def can_test?
!project.empty_repo? !project.empty_repo?
end end
......
...@@ -20,11 +20,6 @@ ...@@ -20,11 +20,6 @@
Forked from Forked from
= forked_from_project.namespace.try(:name) = forked_from_project.namespace.try(:name)
- if can? current_user, :download_code, @project
= link_to "#", class: 'btn js-toggle-clone-holder' do
= icon('cloud-download fw')
Clone
- if can? current_user, :download_code, @project - if can? current_user, :download_code, @project
= link_to archive_namespace_project_repository_path(@project.namespace, @project, ref: @ref, format: 'zip'), class: 'btn', rel: 'nofollow' do = link_to archive_namespace_project_repository_path(@project.namespace, @project, ref: @ref, format: 'zip'), class: 'btn', rel: 'nofollow' do
= icon('download fw') = icon('download fw')
......
...@@ -22,19 +22,19 @@ ...@@ -22,19 +22,19 @@
%li= link_to "Email Patches", merge_request_path(@merge_request, format: :patch) %li= link_to "Email Patches", merge_request_path(@merge_request, format: :patch)
%li= link_to "Plain Diff", merge_request_path(@merge_request, format: :diff) %li= link_to "Plain Diff", merge_request_path(@merge_request, format: :diff)
.light .light
%div
%span Request to merge %span Request to merge
%span.label-branch #{source_branch_with_namespace(@merge_request)} %span.label-branch #{source_branch_with_namespace(@merge_request)}
%span into %span into
%span.label-branch #{@merge_request.target_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/show/how_to_merge"
= render "projects/merge_requests/widget/show.html.haml" = render "projects/merge_requests/widget/show.html.haml"
- if @merge_request.open? && @merge_request.can_be_merged?
.light
You can also accept this merge request manually using the
= link_to "command line", "#modal_merge_info", class: "how_to_merge_link vlink", title: "How To Merge", "data-toggle" => "modal"
- if @commits.present? - if @commits.present?
%ul.nav.nav-tabs.merge-request-tabs %ul.nav.nav-tabs.merge-request-tabs
%li.notes-tab %li.notes-tab
......
...@@ -23,4 +23,3 @@ ...@@ -23,4 +23,3 @@
btn = $('.accept_merge_request') btn = $('.accept_merge_request')
btn.disable() btn.disable()
btn.html("<i class='fa fa-spinner fa-spin'></i> Merge in progress") btn.html("<i class='fa fa-spinner fa-spin'></i> Merge in progress")
...@@ -31,7 +31,10 @@ Parameters: ...@@ -31,7 +31,10 @@ Parameters:
"state": "active", "state": "active",
"created_at": "2013-09-30T13:46:01Z" "created_at": "2013-09-30T13:46:01Z"
}, },
"created_at": "2013-10-02T09:22:45Z" "created_at": "2013-10-02T09:22:45Z",
"system": true,
"upvote": false,
"downvote": false
}, },
{ {
"id": 305, "id": 305,
...@@ -45,7 +48,10 @@ Parameters: ...@@ -45,7 +48,10 @@ Parameters:
"state": "active", "state": "active",
"created_at": "2013-09-30T13:46:01Z" "created_at": "2013-09-30T13:46:01Z"
}, },
"created_at": "2013-10-02T09:56:03Z" "created_at": "2013-10-02T09:56:03Z",
"system": false,
"upvote": false,
"downvote": false
} }
] ]
``` ```
......
...@@ -205,6 +205,9 @@ module API ...@@ -205,6 +205,9 @@ module API
expose :attachment_identifier, as: :attachment expose :attachment_identifier, as: :attachment
expose :author, using: Entities::UserBasic expose :author, using: Entities::UserBasic
expose :created_at expose :created_at
expose :system?, as: :system
expose :upvote?, as: :upvote
expose :downvote?, as: :downvote
end end
class MRNote < Grape::Entity class MRNote < Grape::Entity
......
...@@ -21,7 +21,7 @@ module Gitlab ...@@ -21,7 +21,7 @@ module Gitlab
# #
# Returns boolean # Returns boolean
def gitlab_markdown?(filename) def gitlab_markdown?(filename)
filename.downcase.end_with?(*%w(.mdown .md .markdown)) filename.downcase.end_with?(*%w(.mdown .mkd .mkdn .md .markdown))
end end
# Public: Determines if the given filename has AsciiDoc extension. # Public: Determines if the given filename has AsciiDoc extension.
......
require 'spec_helper'
describe Projects::ServicesController do
let(:project) { create(:project) }
let(:user) { create(:user) }
let(:service) { create(:service, project: project) }
before do
sign_in(user)
project.team << [user, :master]
controller.instance_variable_set(:@project, project)
controller.instance_variable_set(:@service, service)
request.env["HTTP_REFERER"] = "/"
end
describe "#test" do
context 'success' do
it "should redirect and show success message" do
expect(service).to receive(:test).and_return({ success: true, result: 'done' })
get :test, namespace_id: project.namespace.id, project_id: project.id, id: service.id, format: :html
expect(response.status).to redirect_to('/')
expect(flash[:notice]).to eq('We sent a request to the provided URL')
end
end
context 'failure' do
it "should redirect and show failure message" do
expect(service).to receive(:test).and_return({ success: false, result: 'Bad test' })
get :test, namespace_id: project.namespace.id, project_id: project.id, id: service.id, format: :html
expect(response.status).to redirect_to('/')
expect(flash[:alert]).to eq('We tried to send a request to the provided URL but an error occurred: Bad test')
end
end
end
end
...@@ -15,7 +15,7 @@ describe Gitlab::MarkupHelper do ...@@ -15,7 +15,7 @@ describe Gitlab::MarkupHelper do
end end
describe '#gitlab_markdown?' do describe '#gitlab_markdown?' do
%w(mdown md markdown).each do |type| %w(mdown mkd mkdn md markdown).each do |type|
it "returns true for #{type} files" do it "returns true for #{type} files" do
expect(Gitlab::MarkupHelper.gitlab_markdown?("README.#{type}")).to be_truthy expect(Gitlab::MarkupHelper.gitlab_markdown?("README.#{type}")).to be_truthy
end end
......
...@@ -47,6 +47,14 @@ describe HipchatService do ...@@ -47,6 +47,14 @@ describe HipchatService do
WebMock.stub_request(:post, api_url) WebMock.stub_request(:post, api_url)
end end
it 'should test and return errors' do
allow(hipchat).to receive(:execute).and_raise(StandardError, 'no such room')
result = hipchat.test(push_sample_data)
expect(result[:success]).to be_falsey
expect(result[:result].to_s).to eq('no such room')
end
it 'should use v1 if version is provided' do it 'should use v1 if version is provided' do
allow(hipchat).to receive(:api_version).and_return('v1') allow(hipchat).to receive(:api_version).and_return('v1')
expect(HipChat::Client).to receive(:new). expect(HipChat::Client).to receive(:new).
......
...@@ -46,6 +46,16 @@ describe Service do ...@@ -46,6 +46,16 @@ describe Service do
describe :can_test do describe :can_test do
it { expect(@testable).to eq(true) } it { expect(@testable).to eq(true) }
end end
describe :test do
let(:data) { 'test' }
it 'test runs execute' do
expect(@service).to receive(:execute).with(data)
@service.test(data)
end
end
end end
describe "With commits" do describe "With commits" do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment