Skip to content

Commit 2891cef

Browse files
author
GitLab Bot
committed
Add latest changes from gitlab-org/gitlab@master
1 parent 577ba42 commit 2891cef

File tree

31 files changed

+420
-174
lines changed

31 files changed

+420
-174
lines changed

app/assets/stylesheets/performance_bar.scss

+1-18
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383
}
8484
}
8585

86-
.current-host.canary {
86+
.canary {
8787
color: $perf-bar-canary-text;
8888
}
8989

@@ -127,23 +127,6 @@
127127
}
128128
}
129129

130-
.css-truncate {
131-
&.css-truncate-target,
132-
.css-truncate-target {
133-
display: inline-block;
134-
max-width: 125px;
135-
overflow: hidden;
136-
text-overflow: ellipsis;
137-
white-space: nowrap;
138-
vertical-align: top;
139-
}
140-
141-
&.expandable:hover .css-truncate-target,
142-
&.expandable:hover.css-truncate-target {
143-
max-width: 10000px !important;
144-
}
145-
}
146-
147130
.performance-bar-modal {
148131
.modal-body {
149132
padding: 0;

app/mailers/emails/members.rb

-15
Original file line numberDiff line numberDiff line change
@@ -35,21 +35,6 @@ def member_access_granted_email(member_source_type, member_id)
3535
subject: subject("Access to the #{member_source.human_name} #{member_source.model_name.singular} was granted"))
3636
end
3737

38-
def member_access_denied_email(member_source_type, source_id, user_id)
39-
@member_source_type = member_source_type
40-
@member_source = member_source_class.find(source_id)
41-
42-
user = User.find(user_id)
43-
44-
@source_hidden = !member_source.readable_by?(user)
45-
46-
human_name = @source_hidden ? 'Hidden' : member_source.human_name
47-
48-
email_with_layout(
49-
to: user.notification_email_for(notification_group),
50-
subject: subject("Access to the #{human_name} #{member_source.model_name.singular} was denied"))
51-
end
52-
5338
def member_invite_accepted_email(member_source_type, member_id)
5439
@member_source_type = member_source_type
5540
@member_id = member_id
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# frozen_string_literal: true
2+
3+
module Members
4+
class AccessDeniedMailer < ApplicationMailer
5+
helper EmailsHelper
6+
7+
helper_method :member_source, :source_hidden?
8+
9+
layout 'mailer'
10+
11+
def email
12+
return unless member.notifiable?(:subscription)
13+
14+
mail_with_locale(
15+
to: user.notification_email_for(member_source.notification_group),
16+
subject: EmailsHelper.subject_with_suffix([email_subject_text])
17+
)
18+
end
19+
20+
private
21+
22+
delegate :source, to: :member, prefix: true
23+
delegate :user, to: :member
24+
25+
def source_hidden?
26+
!member_source.readable_by?(user)
27+
end
28+
29+
def member
30+
params[:member]
31+
end
32+
33+
def email_subject_text
34+
human_name = source_hidden? ? 'Hidden' : member_source.human_name
35+
36+
"Access to the #{human_name} #{member_source.model_name.singular} was denied"
37+
end
38+
end
39+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# frozen_string_literal: true
2+
3+
module Members
4+
class AccessDeniedMailerPreview < ActionMailer::Preview
5+
def public_source_email
6+
Members::AccessDeniedMailer.with(member: public_member).email.message # rubocop:disable CodeReuse/ActiveRecord -- false positive
7+
end
8+
9+
def private_source_email
10+
Members::AccessDeniedMailer.with(member: private_member).email.message # rubocop:disable CodeReuse/ActiveRecord -- false positive
11+
end
12+
13+
private
14+
15+
def public_member
16+
# may need to create one if this doesn't find any
17+
member(Group.public_only)
18+
end
19+
20+
def private_member
21+
# may need to create one if this doesn't find any
22+
member(Group.private_only)
23+
end
24+
25+
def member(scope)
26+
scope.with_request_group_members.last.request_group_members.last
27+
end
28+
end
29+
end

app/mailers/previews/notify_preview.rb

+1-5
Original file line numberDiff line numberDiff line change
@@ -160,10 +160,6 @@ def changed_milestone_merge_request_email
160160
Notify.changed_milestone_merge_request_email(user.id, merge_request.id, milestone, user.id)
161161
end
162162

163-
def member_access_denied_email
164-
Notify.member_access_denied_email('project', project.id, user.id).message
165-
end
166-
167163
def member_access_granted_email
168164
Notify.member_access_granted_email(member.source_type, member.id).message
169165
end
@@ -469,7 +465,7 @@ def group
469465
end
470466

471467
def member
472-
@member ||= Member.non_invite.last
468+
@member ||= Member.non_invite.non_request.last
473469
end
474470

475471
def key

app/models/group.rb

+9
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ def self.supported_keyset_orderings
4040
has_many :all_owner_members, -> { non_request.all_owners }, as: :source, class_name: 'GroupMember'
4141
has_many :group_members, -> { non_request.non_minimal_access }, dependent: :destroy, as: :source # rubocop:disable Cop/ActiveRecordDependent
4242
has_many :non_invite_group_members, -> { non_request.non_minimal_access.non_invite }, class_name: 'GroupMember', as: :source
43+
has_many :request_group_members, -> do
44+
request.non_minimal_access
45+
end, inverse_of: :group, class_name: 'GroupMember', as: :source
46+
4347
has_many :namespace_members, -> { non_request.non_minimal_access.unscope(where: %i[source_id source_type]) },
4448
foreign_key: :member_namespace_id, inverse_of: :group, class_name: 'GroupMember'
4549
alias_method :members, :group_members
@@ -184,6 +188,7 @@ def of_ancestors_and_self
184188
scope :with_non_archived_projects, -> { includes(:non_archived_projects) }
185189

186190
scope :with_non_invite_group_members, -> { includes(:non_invite_group_members) }
191+
scope :with_request_group_members, -> { includes(:request_group_members) }
187192

188193
scope :by_id, ->(groups) { where(id: groups) }
189194

@@ -1007,6 +1012,10 @@ def readme_project
10071012
end
10081013
strong_memoize_attr :readme_project
10091014

1015+
def notification_group
1016+
self
1017+
end
1018+
10101019
def group_readme
10111020
readme_project&.repository&.readme
10121021
end

app/models/project.rb

+1
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ class Project < ApplicationRecord
189189
belongs_to :creator, class_name: 'User'
190190
belongs_to :organization, class_name: 'Organizations::Organization'
191191
belongs_to :group, -> { where(type: Group.sti_name) }, foreign_key: 'namespace_id'
192+
alias_method :notification_group, :group
192193
belongs_to :namespace
193194
# Sync deletion via DB Trigger to ensure we do not have
194195
# a project without a project_namespace (or vice-versa)

app/services/members/destroy_service.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def a_group_owner?(member)
9191

9292
def delete_member_associations(member, skip_subresources, skip_saml_identity)
9393
if member.request? && member.user != current_user
94-
notification_service.decline_access_request(member)
94+
Members::AccessDeniedMailer.with(member: member).email.deliver_later # rubocop:disable CodeReuse/ActiveRecord -- false positive
9595
end
9696

9797
delete_subresources(member) unless skip_subresources

app/services/notification_service.rb

-6
Original file line numberDiff line numberDiff line change
@@ -512,12 +512,6 @@ def new_access_request(member)
512512
recipients.each { |recipient| deliver_access_request_email(recipient, member) }
513513
end
514514

515-
def decline_access_request(member)
516-
return true unless member.notifiable?(:subscription)
517-
518-
mailer.member_access_denied_email(member.real_source_type, member.source_id, member.user_id).deliver_later
519-
end
520-
521515
def decline_invite(member)
522516
# Must always send, regardless of project/namespace configuration since it's a
523517
# response to the user's action.
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
%tr
22
%td.text-content
33
%p
4-
- target_to_join = @source_hidden ? content_tag(:span, _('Hidden'), class: :highlight) : link_to(member_source.human_name, member_source.web_url, class: :highlight)
4+
- target_to_join = source_hidden? ? content_tag(:span, _('Hidden'), class: :highlight) : link_to(member_source.human_name, member_source.web_url, class: :highlight)
55
- denied_tag = content_tag :span, _('denied'), class: :highlight
66
= s_('Notify|Your request to join the %{target_to_join} %{target_type} has been %{denied_tag}.').html_safe % { target_to_join: target_to_join, target_type: member_source.model_name.singular, denied_tag: denied_tag }
77

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Your request to join the <%= source_hidden? ? 'Hidden' : member_source.human_name %> <%= member_source.model_name.singular %> has been denied.
2+
3+
<%= member_source.web_url unless source_hidden? %>

app/views/notify/member_access_denied_email.text.erb

-3
This file was deleted.

config/sidekiq_queues.yml

+2
Original file line numberDiff line numberDiff line change
@@ -747,6 +747,8 @@
747747
- 1
748748
- - search_zoekt_index_marked_as_to_delete_event
749749
- 1
750+
- - search_zoekt_index_over_watermark_event
751+
- 1
750752
- - search_zoekt_indexing_task
751753
- 1
752754
- - search_zoekt_initial_indexing_event
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# frozen_string_literal: true
2+
3+
class AddWatermarkLevelIndexToZoektIndices < Gitlab::Database::Migration[2.2]
4+
INDEX_NAME = 'index_zoekt_indices_on_watermark_level_reserved_storage_bytes'
5+
6+
milestone '17.5'
7+
disable_ddl_transaction!
8+
9+
def up
10+
add_concurrent_index :zoekt_indices,
11+
[:watermark_level, :id],
12+
where: "reserved_storage_bytes > 0",
13+
name: INDEX_NAME
14+
end
15+
16+
def down
17+
remove_concurrent_index_by_name(:zoekt_indices, INDEX_NAME)
18+
end
19+
end

db/schema_migrations/20241001142307

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
502579d75df644c4472a046abd744ed287410624e4fc47cfe764e9a753462c95

db/structure.sql

+2
Original file line numberDiff line numberDiff line change
@@ -31487,6 +31487,8 @@ CREATE INDEX index_zoekt_indices_on_replica_id ON zoekt_indices USING btree (zoe
3148731487

3148831488
CREATE UNIQUE INDEX index_zoekt_indices_on_state_and_id ON zoekt_indices USING btree (state, id);
3148931489

31490+
CREATE INDEX index_zoekt_indices_on_watermark_level_reserved_storage_bytes ON zoekt_indices USING btree (watermark_level, id) WHERE (reserved_storage_bytes > 0);
31491+
3149031492
CREATE UNIQUE INDEX index_zoekt_indices_on_zoekt_node_id_and_id ON zoekt_indices USING btree (zoekt_node_id, id);
3149131493

3149231494
CREATE INDEX index_zoekt_nodes_on_last_seen_at ON zoekt_nodes USING btree (last_seen_at);

doc/api/import.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -253,8 +253,8 @@ curl --request POST \
253253
--data '{
254254
"bitbucket_username": "bitbucket_username",
255255
"bitbucket_app_password": "bitbucket_app_password",
256-
"repo_path": "username/my_project"
257-
"target_namespace": "my_group/my_subgroup"
256+
"repo_path": "username/my_project",
257+
"target_namespace": "my_group/my_subgroup",
258258
"new_name": "new_project_name"
259259
}'
260260
```

0 commit comments

Comments
 (0)