summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-05-18 17:58:22 +0300
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-05-18 17:58:22 +0300
commitf5f0ed55bd7bf7d034282c5b3e7f02ca725a4ffa (patch)
treea71f62ba4b8af746a38f135de8383e2a9c403b06
parent307a6ba57f20f7a0ac02bbf9f7a50edff04cf6e5 (diff)
parentf93190429743f66d2a085891d51d004b390b4491 (diff)
downloadgitlab-ce-f5f0ed55bd7bf7d034282c5b3e7f02ca725a4ffa.tar.gz
Merge branch 'master' of gitlab.com:gitlab-org/gitlab-ce
-rw-r--r--CHANGELOG4
-rw-r--r--app/assets/javascripts/application.js.coffee4
-rw-r--r--app/assets/stylesheets/pages/projects.scss2
-rw-r--r--app/controllers/projects/issues_controller.rb10
-rw-r--r--app/controllers/projects/merge_requests_controller.rb10
-rw-r--r--app/models/concerns/participable.rb20
-rw-r--r--app/services/notification_service.rb23
-rw-r--r--app/views/shared/_visibility_radios.html.haml2
-rw-r--r--app/views/shared/snippets/_form.html.haml2
-rw-r--r--db/migrate/20150406133311_add_invite_data_to_member.rb13
-rw-r--r--db/migrate/20150417122318_remove_import_data_from_project.rb6
-rw-r--r--db/migrate/20150425173433_add_default_snippet_visibility_to_app_settings.rb6
-rw-r--r--docker/single/Dockerfile1
-rw-r--r--docker/single/assets/gitlab.rb37
-rw-r--r--lib/gitlab/search_results.rb16
-rw-r--r--spec/services/issues/close_service_spec.rb2
-rw-r--r--spec/services/issues/update_service_spec.rb2
-rw-r--r--spec/services/notification_service_spec.rb15
18 files changed, 140 insertions, 35 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 15bfe570f1a..2c368751376 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -45,8 +45,8 @@ v 7.11.0 (unreleased)
- Fix bug where avatar filenames were not actually deleted from the database during removal (Stan Hu)
- Fix bug where Slack service channel was not saved in admin template settings. (Stan Hu)
- Protect OmniAuth request phase against CSRF.
- -
- -
+ - Don't send notifications to mentioned users that don't have access to the project in question.
+ - Add search issues/MR by number
- Move snippets UI to fluid layout
- Improve UI for sidebar. Increase separation between navigation and content
- Improve new project command options (Ben Bodenmiller)
diff --git a/app/assets/javascripts/application.js.coffee b/app/assets/javascripts/application.js.coffee
index bb9da147018..caf18c0d860 100644
--- a/app/assets/javascripts/application.js.coffee
+++ b/app/assets/javascripts/application.js.coffee
@@ -140,8 +140,8 @@ $ ->
# Place the logo tooltip on the right when collapsed, bottom when expanded
$el.parents('header').hasClass('header-collapsed') and 'right' or 'bottom'
else
- # Otherwise use the data-placement attribute like normal
- $el.data('placement')
+ # Otherwise use the data-placement attribute, or 'bottom' if undefined
+ $el.data('placement') or 'bottom'
})
# Form submitter
diff --git a/app/assets/stylesheets/pages/projects.scss b/app/assets/stylesheets/pages/projects.scss
index 49e5aad1f67..16b9814a0fc 100644
--- a/app/assets/stylesheets/pages/projects.scss
+++ b/app/assets/stylesheets/pages/projects.scss
@@ -129,7 +129,7 @@
}
.option-descr {
- margin-left: 24px;
+ margin-left: 36px;
color: $gray;
}
}
diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb
index c524e1a0ea3..7d168aa827b 100644
--- a/app/controllers/projects/issues_controller.rb
+++ b/app/controllers/projects/issues_controller.rb
@@ -19,7 +19,15 @@ class Projects::IssuesController < Projects::ApplicationController
def index
terms = params['issue_search']
@issues = get_issues_collection
- @issues = @issues.full_search(terms) if terms.present?
+
+ if terms.present?
+ if terms =~ /\A#(\d+)\z/
+ @issues = @issues.where(iid: $1)
+ else
+ @issues = @issues.full_search(terms)
+ end
+ end
+
@issues = @issues.page(params[:page]).per(PER_PAGE)
respond_to do |format|
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index 5b93e95866a..c7467e9b2f5 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -19,7 +19,15 @@ class Projects::MergeRequestsController < Projects::ApplicationController
def index
terms = params['issue_search']
@merge_requests = get_merge_requests_collection
- @merge_requests = @merge_requests.full_search(terms) if terms.present?
+
+ if terms.present?
+ if terms =~ /\A[#!](\d+)\z/
+ @merge_requests = @merge_requests.where(iid: $1)
+ else
+ @merge_requests = @merge_requests.full_search(terms)
+ end
+ end
+
@merge_requests = @merge_requests.page(params[:page]).per(PER_PAGE)
respond_to do |format|
diff --git a/app/models/concerns/participable.rb b/app/models/concerns/participable.rb
index a4832204f7b..9f667f47e0d 100644
--- a/app/models/concerns/participable.rb
+++ b/app/models/concerns/participable.rb
@@ -35,8 +35,8 @@ module Participable
end
end
- def participants(current_user = self.author)
- self.class.participant_attrs.flat_map do |attr|
+ def participants(current_user = self.author, project = self.project)
+ participants = self.class.participant_attrs.flat_map do |attr|
meth = method(attr)
value =
@@ -46,20 +46,28 @@ module Participable
meth.call
end
- participants_for(value, current_user)
+ participants_for(value, current_user, project)
end.compact.uniq
+
+ if project
+ participants.select! do |user|
+ user.can?(:read_project, project)
+ end
+ end
+
+ participants
end
private
- def participants_for(value, current_user = nil)
+ def participants_for(value, current_user = nil, project = nil)
case value
when User
[value]
when Enumerable, ActiveRecord::Relation
- value.flat_map { |v| participants_for(v, current_user) }
+ value.flat_map { |v| participants_for(v, current_user, project) }
when Participable
- value.participants(current_user)
+ value.participants(current_user, project)
end
end
end
diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb
index 0d7ffbeebd9..312b56eb87b 100644
--- a/app/services/notification_service.rb
+++ b/app/services/notification_service.rb
@@ -91,10 +91,14 @@ class NotificationService
# * project team members with notification level higher then Participating
#
def merge_mr(merge_request, current_user)
- recipients = reject_muted_users([merge_request.author, merge_request.assignee], merge_request.target_project)
+ recipients = [merge_request.author, merge_request.assignee]
+
+ recipients = add_project_watchers(recipients, merge_request.target_project)
+ recipients = reject_muted_users(recipients, merge_request.target_project)
+
recipients = add_subscribed_users(recipients, merge_request)
recipients = reject_unsubscribed_users(recipients, merge_request)
- recipients = recipients.concat(project_watchers(merge_request.target_project)).uniq
+
recipients.delete(current_user)
recipients.each do |recipient|
@@ -137,20 +141,17 @@ class NotificationService
recipients = recipients.concat(participants)
# Merge project watchers
- recipients = recipients.concat(project_watchers(note.project)).compact.uniq
+ recipients = add_project_watchers(recipients, note.project)
# Reject users with Mention notification level, except those mentioned in _this_ note.
recipients = reject_mention_users(recipients - note.mentioned_users, note.project)
recipients = recipients + note.mentioned_users
- # Reject mutes users
recipients = reject_muted_users(recipients, note.project)
recipients = add_subscribed_users(recipients, note.noteable)
-
recipients = reject_unsubscribed_users(recipients, note.noteable)
- # Reject author
recipients.delete(note.author)
# build notify method like 'note_commit_email'
@@ -287,6 +288,10 @@ class NotificationService
users
end
+ def add_project_watchers(recipients, project)
+ recipients.concat(project_watchers(project)).compact.uniq
+ end
+
# Remove users with disabled notifications from array
# Also remove duplications and nil recipients
def reject_muted_users(users, project = nil)
@@ -403,11 +408,13 @@ class NotificationService
[target.author, target.assignee]
end
- recipients = reject_muted_users(recipients, project)
+ recipients = add_project_watchers(recipients, project)
recipients = reject_mention_users(recipients, project)
+ recipients = reject_muted_users(recipients, project)
+
recipients = add_subscribed_users(recipients, target)
- recipients = recipients.concat(project_watchers(project)).uniq
recipients = reject_unsubscribed_users(recipients, target)
+
recipients
end
diff --git a/app/views/shared/_visibility_radios.html.haml b/app/views/shared/_visibility_radios.html.haml
index b07c4d20f12..02416125a72 100644
--- a/app/views/shared/_visibility_radios.html.haml
+++ b/app/views/shared/_visibility_radios.html.haml
@@ -1,7 +1,7 @@
- Gitlab::VisibilityLevel.values.each do |level|
.radio
- restricted = restricted_visibility_levels.include?(level)
- = label model_method, level do
+ = form.label "#{model_method}_#{level}" do
= form.radio_button model_method, level, checked: (selected_level == level), disabled: restricted
= visibility_level_icon(level)
.option-title
diff --git a/app/views/shared/snippets/_form.html.haml b/app/views/shared/snippets/_form.html.haml
index 6783587bda9..9610f9ce414 100644
--- a/app/views/shared/snippets/_form.html.haml
+++ b/app/views/shared/snippets/_form.html.haml
@@ -11,7 +11,7 @@
.col-sm-10= f.text_field :title, placeholder: "Example Snippet", class: 'form-control', required: true
= render 'shared/visibility_level', f: f, visibility_level: visibility_level, can_change_visibility_level: true, form_model: @snippet
-
+
.form-group
.file-editor
= f.label :file_name, "File", class: 'control-label'
diff --git a/db/migrate/20150406133311_add_invite_data_to_member.rb b/db/migrate/20150406133311_add_invite_data_to_member.rb
index 3452fd45c4f..5d3e856ddce 100644
--- a/db/migrate/20150406133311_add_invite_data_to_member.rb
+++ b/db/migrate/20150406133311_add_invite_data_to_member.rb
@@ -1,5 +1,5 @@
class AddInviteDataToMember < ActiveRecord::Migration
- def change
+ def up
add_column :members, :created_by_id, :integer
add_column :members, :invite_email, :string
add_column :members, :invite_token, :string
@@ -9,4 +9,15 @@ class AddInviteDataToMember < ActiveRecord::Migration
add_index :members, :invite_token, unique: true
end
+
+ def down
+ remove_index :members, :invite_token
+
+ change_column :members, :user_id, :integer, null: false
+
+ remove_column :members, :invite_accepted_at
+ remove_column :members, :invite_token
+ remove_column :members, :invite_email
+ remove_column :members, :created_by_id
+ end
end
diff --git a/db/migrate/20150417122318_remove_import_data_from_project.rb b/db/migrate/20150417122318_remove_import_data_from_project.rb
index c275b49d228..46cf63593c9 100644
--- a/db/migrate/20150417122318_remove_import_data_from_project.rb
+++ b/db/migrate/20150417122318_remove_import_data_from_project.rb
@@ -1,5 +1,9 @@
class RemoveImportDataFromProject < ActiveRecord::Migration
- def change
+ def up
remove_column :projects, :import_data
end
+
+ def down
+ add_column :projects, :import_data, :text
+ end
end
diff --git a/db/migrate/20150425173433_add_default_snippet_visibility_to_app_settings.rb b/db/migrate/20150425173433_add_default_snippet_visibility_to_app_settings.rb
index 51237354d9f..8f1b0cc8935 100644
--- a/db/migrate/20150425173433_add_default_snippet_visibility_to_app_settings.rb
+++ b/db/migrate/20150425173433_add_default_snippet_visibility_to_app_settings.rb
@@ -1,7 +1,11 @@
class AddDefaultSnippetVisibilityToAppSettings < ActiveRecord::Migration
- def change
+ def up
add_column :application_settings, :default_snippet_visibility, :integer
visibility = Settings.gitlab.default_projects_features['visibility_level']
execute("update application_settings set default_snippet_visibility = #{visibility}")
end
+
+ def down
+ remove_column :application_settings, :default_snippet_visibility
+ end
end
diff --git a/docker/single/Dockerfile b/docker/single/Dockerfile
index 89224572534..a6cbf131237 100644
--- a/docker/single/Dockerfile
+++ b/docker/single/Dockerfile
@@ -28,6 +28,7 @@ EXPOSE 80 22
# Copy assets
COPY assets/wrapper /usr/local/bin/
+COPY assets/gitlab.rb /etc/gitlab/
# Wrapper to handle signal, trigger runit and reconfigure GitLab
CMD ["/usr/local/bin/wrapper"]
diff --git a/docker/single/assets/gitlab.rb b/docker/single/assets/gitlab.rb
new file mode 100644
index 00000000000..ef84e7832d6
--- /dev/null
+++ b/docker/single/assets/gitlab.rb
@@ -0,0 +1,37 @@
+# External URL should be your Docker instance.
+# By default, GitLab will use the Docker container hostname.
+# Always use port 80 here to force the internal nginx to bind port 80,
+# even if you intend to use another port in Docker.
+# external_url "http://192.168.59.103/"
+
+# Prevent Postgres from trying to allocate 25% of total memory
+postgresql['shared_buffers'] = '1MB'
+
+# Configure GitLab to redirect PostgreSQL logs to the data volume
+postgresql['log_directory'] = '/var/log/gitlab/postgresql'
+
+# Some configuration of GitLab
+# You can find more at https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md#configuration
+gitlab_rails['gitlab_email_from'] = 'gitlab@example.com'
+gitlab_rails['gitlab_support_email'] = 'support@example.com'
+gitlab_rails['time_zone'] = 'Europe/Paris'
+
+# SMTP settings
+# You must use an external server, the Docker container does not install an SMTP server
+gitlab_rails['smtp_enable'] = true
+gitlab_rails['smtp_address'] = "smtp.example.com"
+gitlab_rails['smtp_port'] = 587
+gitlab_rails['smtp_user_name'] = "user"
+gitlab_rails['smtp_password'] = "password"
+gitlab_rails['smtp_domain'] = "example.com"
+gitlab_rails['smtp_authentication'] = "plain"
+gitlab_rails['smtp_enable_starttls_auto'] = true
+
+# Enable LDAP authentication
+# gitlab_rails['ldap_enabled'] = true
+# gitlab_rails['ldap_host'] = 'ldap.example.com'
+# gitlab_rails['ldap_port'] = 389
+# gitlab_rails['ldap_method'] = 'plain' # 'ssl' or 'plain'
+# gitlab_rails['ldap_allow_username_or_email_login'] = false
+# gitlab_rails['ldap_uid'] = 'uid'
+# gitlab_rails['ldap_base'] = 'ou=users,dc=example,dc=com'
diff --git a/lib/gitlab/search_results.rb b/lib/gitlab/search_results.rb
index 75a3dfe37c3..06245374bc8 100644
--- a/lib/gitlab/search_results.rb
+++ b/lib/gitlab/search_results.rb
@@ -51,11 +51,23 @@ module Gitlab
end
def issues
- Issue.where(project_id: limit_project_ids).full_search(query).order('updated_at DESC')
+ issues = Issue.where(project_id: limit_project_ids)
+ if query =~ /#(\d+)\z/
+ issues = issues.where(iid: $1)
+ else
+ issues = issues.full_search(query)
+ end
+ issues.order('updated_at DESC')
end
def merge_requests
- MergeRequest.in_projects(limit_project_ids).full_search(query).order('updated_at DESC')
+ merge_requests = MergeRequest.in_projects(limit_project_ids)
+ if query =~ /[#!](\d+)\z/
+ merge_requests = merge_requests.where(iid: $1)
+ else
+ merge_requests = merge_requests.full_search(query)
+ end
+ merge_requests.order('updated_at DESC')
end
def default_scope
diff --git a/spec/services/issues/close_service_spec.rb b/spec/services/issues/close_service_spec.rb
index d15dff1b52b..0e5ae724bf7 100644
--- a/spec/services/issues/close_service_spec.rb
+++ b/spec/services/issues/close_service_spec.rb
@@ -1,10 +1,10 @@
require 'spec_helper'
describe Issues::CloseService do
- let(:project) { create(:empty_project) }
let(:user) { create(:user) }
let(:user2) { create(:user) }
let(:issue) { create(:issue, assignee: user2) }
+ let(:project) { issue.project }
before do
project.team << [user, :master]
diff --git a/spec/services/issues/update_service_spec.rb b/spec/services/issues/update_service_spec.rb
index 22b89bec96d..6fc69e93628 100644
--- a/spec/services/issues/update_service_spec.rb
+++ b/spec/services/issues/update_service_spec.rb
@@ -1,11 +1,11 @@
require 'spec_helper'
describe Issues::UpdateService do
- let(:project) { create(:empty_project) }
let(:user) { create(:user) }
let(:user2) { create(:user) }
let(:issue) { create(:issue) }
let(:label) { create(:label) }
+ let(:project) { issue.project }
before do
project.team << [user, :master]
diff --git a/spec/services/notification_service_spec.rb b/spec/services/notification_service_spec.rb
index 2a54b2e920a..62a99d15952 100644
--- a/spec/services/notification_service_spec.rb
+++ b/spec/services/notification_service_spec.rb
@@ -31,7 +31,8 @@ describe NotificationService do
describe 'Notes' do
context 'issue note' do
- let(:issue) { create(:issue, assignee: create(:user)) }
+ let(:project) { create(:empty_project, :public) }
+ let(:issue) { create(:issue, project: project, assignee: create(:user)) }
let(:mentioned_issue) { create(:issue, assignee: issue.assignee) }
let(:note) { create(:note_on_issue, noteable: issue, project_id: issue.project_id, note: '@mention referenced') }
@@ -101,7 +102,8 @@ describe NotificationService do
end
context 'issue note mention' do
- let(:issue) { create(:issue, assignee: create(:user)) }
+ let(:project) { create(:empty_project, :public) }
+ let(:issue) { create(:issue, project: project, assignee: create(:user)) }
let(:mentioned_issue) { create(:issue, assignee: issue.assignee) }
let(:note) { create(:note_on_issue, noteable: issue, project_id: issue.project_id, note: '@all mentioned') }
@@ -145,7 +147,8 @@ describe NotificationService do
end
context 'commit note' do
- let(:note) { create(:note_on_commit) }
+ let(:project) { create(:project, :public) }
+ let(:note) { create(:note_on_commit, project: project) }
before do
build_team(note.project)
@@ -192,7 +195,8 @@ describe NotificationService do
end
describe 'Issues' do
- let(:issue) { create :issue, assignee: create(:user), description: 'cc @participant' }
+ let(:project) { create(:empty_project, :public) }
+ let(:issue) { create :issue, project: project, assignee: create(:user), description: 'cc @participant' }
before do
build_team(issue.project)
@@ -295,7 +299,8 @@ describe NotificationService do
end
describe 'Merge Requests' do
- let(:merge_request) { create :merge_request, assignee: create(:user) }
+ let(:project) { create(:project, :public) }
+ let(:merge_request) { create :merge_request, source_project: project, assignee: create(:user) }
before do
build_team(merge_request.target_project)