mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-16 16:16:43 +10:00
Merge branch 'master' of github.com:gitlabhq/gitlabhq
This commit is contained in:
@@ -10,6 +10,7 @@ v 7.11.0 (unreleased)
|
||||
- Add "Reply quoting selected text" shortcut key (`r`)
|
||||
- Fix bug causing `@whatever` inside an issue's first code block to be picked up as a user mention.
|
||||
- Fix bug causing `@whatever` inside an inline code snippet (backtick-style) to be picked up as a user mention.
|
||||
- Added GitLab Event header for project hooks
|
||||
-
|
||||
- Show Atom feed buttons everywhere where applicable.
|
||||
- Add project activity atom feed.
|
||||
@@ -23,8 +24,9 @@ v 7.11.0 (unreleased)
|
||||
- Improve new project command options (Ben Bodenmiller)
|
||||
- Prevent sending empty messages to HipChat (Chulki Lee)
|
||||
- Improve UI for mobile phones on dashboard and project pages
|
||||
- Add room notification and message color option for HipChat
|
||||
|
||||
v 7.10.0 (unreleased)
|
||||
v 7.10.0
|
||||
- Ignore submodules that are defined in .gitmodules but are checked in as directories.
|
||||
- Allow projects to be imported from Google Code.
|
||||
- Remove access control for uploaded images to fix broken images in emails (Hannes Rosenögger)
|
||||
|
||||
@@ -33,7 +33,7 @@ class Admin::HooksController < Admin::ApplicationController
|
||||
owner_name: "Someone",
|
||||
owner_email: "example@gitlabhq.com"
|
||||
}
|
||||
@hook.execute(data)
|
||||
@hook.execute(data, 'system_hooks')
|
||||
|
||||
redirect_to :back
|
||||
end
|
||||
|
||||
@@ -6,7 +6,8 @@ class Projects::ServicesController < Projects::ApplicationController
|
||||
:description, :issues_url, :new_issue_url, :restrict_to_branch, :channel,
|
||||
:colorize_messages, :channels,
|
||||
:push_events, :issues_events, :merge_requests_events, :tag_push_events,
|
||||
:note_events, :send_from_committer_email, :disable_diffs, :external_wiki_url]
|
||||
:note_events, :send_from_committer_email, :disable_diffs, :external_wiki_url,
|
||||
:notify, :color]
|
||||
# Authorize
|
||||
before_action :authorize_admin_project!
|
||||
before_action :service, only: [:edit, :update, :test]
|
||||
|
||||
@@ -30,12 +30,15 @@ class WebHook < ActiveRecord::Base
|
||||
validates :url, presence: true,
|
||||
format: { with: /\A#{URI.regexp(%w(http https))}\z/, message: "should be a valid url" }
|
||||
|
||||
def execute(data)
|
||||
def execute(data, hook_name)
|
||||
parsed_url = URI.parse(url)
|
||||
if parsed_url.userinfo.blank?
|
||||
WebHook.post(url,
|
||||
body: data.to_json,
|
||||
headers: { "Content-Type" => "application/json" },
|
||||
headers: {
|
||||
"Content-Type" => "application/json",
|
||||
"X-Gitlab-Event" => hook_name.singularize.titleize
|
||||
},
|
||||
verify: false)
|
||||
else
|
||||
post_url = url.gsub("#{parsed_url.userinfo}@", "")
|
||||
@@ -45,7 +48,10 @@ class WebHook < ActiveRecord::Base
|
||||
}
|
||||
WebHook.post(post_url,
|
||||
body: data.to_json,
|
||||
headers: { "Content-Type" => "application/json" },
|
||||
headers: {
|
||||
"Content-Type" => "application/json",
|
||||
"X-Gitlab-Event" => hook_name.singularize.titleize
|
||||
},
|
||||
verify: false,
|
||||
basic_auth: auth)
|
||||
end
|
||||
@@ -54,7 +60,7 @@ class WebHook < ActiveRecord::Base
|
||||
false
|
||||
end
|
||||
|
||||
def async_execute(data)
|
||||
Sidekiq::Client.enqueue(ProjectWebHookWorker, id, data)
|
||||
def async_execute(data, hook_name)
|
||||
Sidekiq::Client.enqueue(ProjectWebHookWorker, id, data, hook_name)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -483,7 +483,7 @@ class Project < ActiveRecord::Base
|
||||
|
||||
def execute_hooks(data, hooks_scope = :push_hooks)
|
||||
hooks.send(hooks_scope).each do |hook|
|
||||
hook.async_execute(data)
|
||||
hook.async_execute(data, hooks_scope.to_s)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
class HipchatService < Service
|
||||
MAX_COMMITS = 3
|
||||
|
||||
prop_accessor :token, :room, :server
|
||||
prop_accessor :token, :room, :server, :notify, :color
|
||||
validates :token, presence: true, if: :activated?
|
||||
|
||||
def title
|
||||
@@ -39,6 +39,8 @@ class HipchatService < Service
|
||||
[
|
||||
{ type: 'text', name: 'token', placeholder: 'Room token' },
|
||||
{ type: 'text', name: 'room', placeholder: 'Room name or ID' },
|
||||
{ type: 'checkbox', name: 'notify' },
|
||||
{ type: 'select', name: 'color', choices: ['yellow', 'red', 'green', 'purple', 'gray', 'random'] },
|
||||
{ type: 'text', name: 'server',
|
||||
placeholder: 'Leave blank for default. https://hipchat.example.com' }
|
||||
]
|
||||
@@ -52,7 +54,7 @@ class HipchatService < Service
|
||||
return unless supported_events.include?(data[:object_kind])
|
||||
message = create_message(data)
|
||||
return unless message.present?
|
||||
gate[room].send('GitLab', message)
|
||||
gate[room].send('GitLab', message, message_options)
|
||||
end
|
||||
|
||||
private
|
||||
@@ -63,6 +65,10 @@ class HipchatService < Service
|
||||
@gate ||= HipChat::Client.new(token, options)
|
||||
end
|
||||
|
||||
def message_options
|
||||
{ notify: notify.present? && notify == '1', color: color || 'yellow' }
|
||||
end
|
||||
|
||||
def create_message(data)
|
||||
object_kind = data[:object_kind]
|
||||
|
||||
|
||||
@@ -7,12 +7,12 @@ class SystemHooksService
|
||||
|
||||
def execute_hooks(data)
|
||||
SystemHook.all.each do |sh|
|
||||
async_execute_hook sh, data
|
||||
async_execute_hook(sh, data, 'system_hooks')
|
||||
end
|
||||
end
|
||||
|
||||
def async_execute_hook(hook, data)
|
||||
Sidekiq::Client.enqueue(SystemHookWorker, hook.id, data)
|
||||
def async_execute_hook(hook, data, hook_name)
|
||||
Sidekiq::Client.enqueue(SystemHookWorker, hook.id, data, hook_name)
|
||||
end
|
||||
|
||||
def build_event_data(model, event)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
class TestHookService
|
||||
def execute(hook, current_user)
|
||||
data = Gitlab::PushDataBuilder.build_sample(hook.project, current_user)
|
||||
hook.execute(data)
|
||||
hook.execute(data, 'push_hooks')
|
||||
end
|
||||
end
|
||||
|
||||
@@ -3,8 +3,8 @@ class ProjectWebHookWorker
|
||||
|
||||
sidekiq_options queue: :project_web_hook
|
||||
|
||||
def perform(hook_id, data)
|
||||
def perform(hook_id, data, hook_name)
|
||||
data = data.with_indifferent_access
|
||||
WebHook.find(hook_id).execute(data)
|
||||
WebHook.find(hook_id).execute(data, hook_name)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -3,7 +3,7 @@ class SystemHookWorker
|
||||
|
||||
sidekiq_options queue: :system_hook
|
||||
|
||||
def perform(hook_id, data)
|
||||
SystemHook.find(hook_id).execute data
|
||||
def perform(hook_id, data, hook_name)
|
||||
SystemHook.find(hook_id).execute(data, hook_name)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -7,11 +7,11 @@ If correctly setup, emails that require an action will be marked in Gmail.
|
||||

|
||||
|
||||
To get this functioning, you need to be registered with Google.
|
||||
[See how to register with google in this document.](https://developers.google.com/gmail/markup/registering-with-google)
|
||||
[See how to register with Google in this document.](https://developers.google.com/gmail/markup/registering-with-google)
|
||||
|
||||
To aid the registering with google, GitLab offers a rake task that will send an email to google whitelisting email address from your GitLab server.
|
||||
To aid the registering with Google, GitLab offers a rake task that will send an email to Google whitelisting email address from your GitLab server.
|
||||
|
||||
To check what would be sent to the google email address, run the rake task:
|
||||
To check what would be sent to the Google email address, run the rake task:
|
||||
|
||||
```bash
|
||||
bundle exec rake gitlab:mail_google_schema_whitelisting RAILS_ENV=production
|
||||
@@ -19,7 +19,7 @@ bundle exec rake gitlab:mail_google_schema_whitelisting RAILS_ENV=production
|
||||
|
||||
**This will not send the email but give you the output of how the mail will look.**
|
||||
|
||||
Copy the output of the rake task to [google email markup tester](https://www.google.com/webmasters/markup-tester/u/0/) and press "Validate".
|
||||
Copy the output of the rake task to [Google email markup tester](https://www.google.com/webmasters/markup-tester/u/0/) and press "Validate".
|
||||
|
||||
If you receive "No errors detected" message from the tester you can send the email using:
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ module API
|
||||
owner_name: "Someone",
|
||||
owner_email: "example@gitlabhq.com"
|
||||
}
|
||||
@hook.execute(data)
|
||||
@hook.execute(data, 'system_hooks')
|
||||
data
|
||||
end
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ module Gitlab
|
||||
events = Event.reorder(nil).contributions.where(author_id: user.id).
|
||||
where("created_at > ?", date_from).where(project_id: projects).
|
||||
group('date(created_at)').
|
||||
select('date(created_at), count(id) as total_amount').
|
||||
select('date(created_at) as date, count(id) as total_amount').
|
||||
map(&:attributes)
|
||||
|
||||
dates = (1.year.ago.to_date..(Date.today + 1.day)).to_a
|
||||
|
||||
@@ -282,7 +282,8 @@ namespace :gitlab do
|
||||
def check_redis_version
|
||||
print "Redis version >= 2.0.0? ... "
|
||||
|
||||
if run_and_match(%W(redis-cli --version), /redis-cli 2.\d.\d/)
|
||||
redis_version = run(%W(redis-cli --version))
|
||||
if redis_version.try(:match, /redis-cli 2.\d.\d/) || redis_version.try(:match, /redis-cli 3.\d.\d/)
|
||||
puts "yes".green
|
||||
else
|
||||
puts "no".red
|
||||
|
||||
@@ -52,22 +52,26 @@ describe ProjectHook do
|
||||
end
|
||||
|
||||
it "POSTs to the web hook URL" do
|
||||
@project_hook.execute(@data)
|
||||
expect(WebMock).to have_requested(:post, @project_hook.url).once
|
||||
@project_hook.execute(@data, 'push_hooks')
|
||||
expect(WebMock).to have_requested(:post, @project_hook.url).
|
||||
with(headers: {'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'Push Hook'}).
|
||||
once
|
||||
end
|
||||
|
||||
it "POSTs the data as JSON" do
|
||||
json = @data.to_json
|
||||
|
||||
@project_hook.execute(@data)
|
||||
expect(WebMock).to have_requested(:post, @project_hook.url).with(body: json).once
|
||||
@project_hook.execute(@data, 'push_hooks')
|
||||
expect(WebMock).to have_requested(:post, @project_hook.url).
|
||||
with(headers: {'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'Push Hook'}).
|
||||
once
|
||||
end
|
||||
|
||||
it "catches exceptions" do
|
||||
expect(WebHook).to receive(:post).and_raise("Some HTTP Post error")
|
||||
|
||||
expect {
|
||||
@project_hook.execute(@data)
|
||||
@project_hook.execute(@data, 'push_hooks')
|
||||
}.to raise_error
|
||||
end
|
||||
end
|
||||
|
||||
@@ -213,5 +213,21 @@ describe HipchatService do
|
||||
"<pre>snippet note</pre>")
|
||||
end
|
||||
end
|
||||
|
||||
context "#message_options" do
|
||||
it "should be set to the defaults" do
|
||||
expect(hipchat.send(:message_options)).to eq({notify: false, color: 'yellow'})
|
||||
end
|
||||
|
||||
it "should set notfiy to true" do
|
||||
hipchat.stub(notify: '1')
|
||||
expect(hipchat.send(:message_options)).to eq({notify: true, color: 'yellow'})
|
||||
end
|
||||
|
||||
it "should set the color" do
|
||||
hipchat.stub(color: 'red')
|
||||
expect(hipchat.send(:message_options)).to eq({notify: false, color: 'red'})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user