Skip to content

Commit 6cae215

Browse files
author
GitLab Bot
committed
Add latest changes from gitlab-org/gitlab@master
1 parent 84f9f0c commit 6cae215

File tree

70 files changed

+1698
-580
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+1698
-580
lines changed

.rubocop_todo/rspec/missing_feature_category.yml

-1
Original file line numberDiff line numberDiff line change
@@ -7019,7 +7019,6 @@ RSpec/MissingFeatureCategory:
70197019
- 'spec/rubocop/cop/safe_params_spec.rb'
70207020
- 'spec/rubocop/cop/scalability/bulk_perform_with_context_spec.rb'
70217021
- 'spec/rubocop/cop/scalability/cron_worker_context_spec.rb'
7022-
- 'spec/rubocop/cop/scalability/file_uploads_spec.rb'
70237022
- 'spec/rubocop/cop/scalability/idempotent_worker_spec.rb'
70247023
- 'spec/rubocop/cop/sidekiq_api_usage_spec.rb'
70257024
- 'spec/rubocop/cop/sidekiq_load_balancing/worker_data_consistency_spec.rb'

.rubocop_todo/style/arguments_forwarding.yml

-15
This file was deleted.

.rubocop_todo/style/empty_method.yml

-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,6 @@ Style/EmptyMethod:
106106
- 'ee/app/controllers/projects/security/sast_configuration_controller.rb'
107107
- 'ee/app/controllers/projects/settings/slacks_controller.rb'
108108
- 'ee/app/controllers/registrations/company_controller.rb'
109-
- 'ee/app/controllers/registrations/verification_controller.rb'
110109
- 'ee/app/controllers/subscriptions/groups_controller.rb'
111110
- 'ee/app/controllers/trials_controller.rb'
112111
- 'ee/app/controllers/users/identity_verification_controller.rb'

.rubocop_todo/style/mutable_constant.yml

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ Style/MutableConstant:
5252
- 'rubocop/cop/scalability/idempotent_worker.rb'
5353
- 'rubocop/cop/sidekiq_load_balancing/worker_data_consistency.rb'
5454
- 'scripts/lib/glfm/constants.rb'
55+
- 'scripts/lint-docs-blueprints.rb'
5556
- 'scripts/perf/gc/collect_gc_stats.rb'
5657
- 'spec/support/helpers/jira_integration_helpers.rb'
5758
- 'tooling/danger/stable_branch.rb'

.rubocop_todo/style/redundant_freeze.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -227,8 +227,8 @@ Style/RedundantFreeze:
227227
- 'rubocop/cop/inject_enterprise_edition_module.rb'
228228
- 'rubocop/cop/project_path_helper.rb'
229229
- 'rubocop/cop/qa/selector_usage.rb'
230+
- 'scripts/lint-docs-blueprints.rb'
230231
- 'scripts/qa/testcases-check'
231-
- 'scripts/review_apps/automated_cleanup.rb'
232232
- 'scripts/validate_migration_timestamps'
233233
- 'spec/contracts/provider/helpers/contract_source_helper.rb'
234234
- 'spec/initializers/secret_token_spec.rb'
@@ -240,4 +240,5 @@ Style/RedundantFreeze:
240240
- 'tooling/danger/datateam.rb'
241241
- 'tooling/danger/specs.rb'
242242
- 'tooling/danger/stable_branch.rb'
243+
- 'tooling/lib/tooling/kubernetes_client.rb'
243244
- 'tooling/lib/tooling/mappings/view_to_js_mappings.rb'

GITALY_SERVER_VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
fe20fe12a1c82a668585e0181593f896b187ea36
1+
10880feb242899156d4a1d5224cb445f1ff6680c

GITLAB_ELASTICSEARCH_INDEXER_VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4.0.0
1+
4.1.0
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,23 @@
11
<script>
2-
import {
3-
GlAvatarLabeled,
4-
GlDropdown,
5-
GlDropdownItem,
6-
GlDropdownText,
7-
GlSearchBoxByType,
8-
} from '@gitlab/ui';
2+
import { GlAvatarLabeled, GlCollapsibleListbox } from '@gitlab/ui';
93
import { debounce } from 'lodash';
104
import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
115
import { s__ } from '~/locale';
126
import { getProjects } from '~/rest_api';
137
import { SEARCH_DELAY, GROUP_FILTERS } from '../constants';
148
9+
// We can have GlCollapsibleListbox dropdown panel with full
10+
// width once we implement
11+
// https://gitlab.com/gitlab-org/gitlab-ui/-/issues/2133
12+
// https://gitlab.com/gitlab-org/gitlab/-/issues/390411
1513
export default {
1614
name: 'ProjectSelect',
1715
components: {
1816
GlAvatarLabeled,
19-
GlDropdown,
20-
GlDropdownItem,
21-
GlDropdownText,
22-
GlSearchBoxByType,
17+
GlCollapsibleListbox,
2318
},
2419
model: {
25-
prop: 'selectedProject',
20+
prop: 'selectedProjectId',
2621
},
2722
props: {
2823
groupsFilter: {
@@ -41,18 +36,21 @@ export default {
4136
return {
4237
isFetching: false,
4338
projects: [],
44-
selectedProject: {},
39+
selectedProjectId: '',
4540
searchTerm: '',
4641
errorMessage: '',
4742
};
4843
},
4944
computed: {
5045
selectedProjectName() {
51-
return this.selectedProject.name || this.$options.i18n.dropdownText;
46+
return this.selectedProject.nameWithNamespace || this.$options.i18n.dropdownText;
5247
},
5348
isFetchResultEmpty() {
5449
return this.projects.length === 0 && !this.isFetching;
5550
},
51+
selectedProject() {
52+
return this.projects.find((prj) => prj.id === this.selectedProjectId) || {};
53+
},
5654
},
5755
watch: {
5856
searchTerm() {
@@ -70,10 +68,14 @@ export default {
7068
.then((response) => {
7169
this.projects = response.data.map((project) => ({
7270
...convertObjectPropsToCamelCase(project),
73-
name: project.name_with_namespace,
71+
text: project.name_with_namespace,
72+
value: project.id,
7473
}));
7574
})
7675
.catch(() => {
76+
// To be displayed in GlCollapsibleListbox once we implement
77+
// https://gitlab.com/gitlab-org/gitlab-ui/-/issues/2132
78+
// https://gitlab.com/gitlab-org/gitlab/-/issues/389974
7779
this.errorMessage = this.$options.i18n.errorFetchingProjects;
7880
})
7981
.finally(() => {
@@ -83,9 +85,7 @@ export default {
8385
fetchProjects() {
8486
return getProjects(this.searchTerm, this.$options.defaultFetchOptions);
8587
},
86-
selectProject(project) {
87-
this.selectedProject = project;
88-
88+
selectProject() {
8989
this.$emit('input', this.selectedProject);
9090
},
9191
},
@@ -104,40 +104,28 @@ export default {
104104
};
105105
</script>
106106
<template>
107-
<div>
108-
<gl-dropdown
109-
data-testid="project-select-dropdown"
110-
:text="selectedProjectName"
111-
toggle-class="gl-mb-2"
112-
block
113-
menu-class="gl-w-full!"
114-
>
115-
<gl-search-box-by-type
116-
v-model="searchTerm"
117-
:is-loading="isFetching"
118-
:placeholder="$options.i18n.searchPlaceholder"
119-
data-qa-selector="project_select_dropdown_search_field"
107+
<gl-collapsible-listbox
108+
v-model="selectedProjectId"
109+
searchable
110+
:items="projects"
111+
:searching="isFetching"
112+
:toggle-text="selectedProjectName"
113+
:search-placeholder="$options.i18n.searchPlaceholder"
114+
:no-results-text="$options.i18n.emptySearchResult"
115+
data-testid="project-select-dropdown"
116+
data-qa-selector="project_select_dropdown"
117+
class="gl-collapsible-listbox-w-full"
118+
@search="searchTerm = $event"
119+
@select="selectProject"
120+
>
121+
<template #list-item="{ item }">
122+
<gl-avatar-labeled
123+
:label="item.text"
124+
:src="item.avatarUrl"
125+
:entity-id="item.id"
126+
:entity-name="item.name"
127+
:size="32"
120128
/>
121-
<gl-dropdown-item
122-
v-for="project in projects"
123-
:key="project.id"
124-
:name="project.name"
125-
@click="selectProject(project)"
126-
>
127-
<gl-avatar-labeled
128-
:label="project.name"
129-
:src="project.avatarUrl"
130-
:entity-id="project.id"
131-
:entity-name="project.name"
132-
:size="32"
133-
/>
134-
</gl-dropdown-item>
135-
<gl-dropdown-text v-if="errorMessage" data-testid="error-message">
136-
<span class="gl-text-gray-500">{{ errorMessage }}</span>
137-
</gl-dropdown-text>
138-
<gl-dropdown-text v-else-if="isFetchResultEmpty" data-testid="empty-result-message">
139-
<span class="gl-text-gray-500">{{ $options.i18n.emptySearchResult }}</span>
140-
</gl-dropdown-text>
141-
</gl-dropdown>
142-
</div>
129+
</template>
130+
</gl-collapsible-listbox>
143131
</template>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#import "~/graphql_shared/fragments/user.fragment.graphql"
2+
#import "~/work_items/graphql/work_item_note.fragment.graphql"
3+
4+
fragment WorkItemDiscussionNote on Note {
5+
id
6+
bodyHtml
7+
system
8+
internal
9+
systemNoteIconName
10+
createdAt
11+
author {
12+
...User
13+
}
14+
userPermissions {
15+
adminNote
16+
}
17+
discussion {
18+
id
19+
notes {
20+
nodes {
21+
...WorkItemNote
22+
}
23+
}
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#import "~/work_items/graphql/work_item_discussion_note.fragment.graphql"
2+
3+
subscription workItemNoteCreated($noteableId: NoteableID) {
4+
workItemNoteCreated(noteableId: $noteableId) {
5+
...WorkItemDiscussionNote
6+
}
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
subscription workItemNoteDeleted($noteableId: NoteableID) {
2+
workItemNoteDeleted(noteableId: $noteableId) {
3+
id
4+
discussionId
5+
lastDiscussionNote
6+
}
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#import "~/work_items/graphql/work_item_note.fragment.graphql"
2+
3+
subscription workItemNoteUpdated($noteableId: NoteableID) {
4+
workItemNoteUpdated(noteableId: $noteableId) {
5+
...WorkItemNote
6+
}
7+
}

app/controllers/concerns/membership_actions.rb

+12-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ module MembershipActions
66

77
def update
88
update_params = params.require(root_params_key).permit(:access_level, :expires_at)
9-
member = membershipable.members_and_requesters.find(params[:id])
9+
member = members_and_requesters.find(params[:id])
1010
result = Members::UpdateService
1111
.new(current_user, update_params)
1212
.execute(member)
@@ -30,7 +30,7 @@ def update
3030
end
3131

3232
def destroy
33-
member = membershipable.members_and_requesters.find(params[:id])
33+
member = members_and_requesters.find(params[:id])
3434
skip_subresources = !ActiveRecord::Type::Boolean.new.cast(params.delete(:remove_sub_memberships))
3535
# !! is used in case unassign_issuables contains empty string which would result in nil
3636
unassign_issuables = !!ActiveRecord::Type::Boolean.new.cast(params.delete(:unassign_issuables))
@@ -71,7 +71,7 @@ def request_access
7171
end
7272

7373
def approve_access_request
74-
access_requester = membershipable.requesters.find(params[:id])
74+
access_requester = requesters.find(params[:id])
7575
Members::ApproveAccessRequestService
7676
.new(current_user, params)
7777
.execute(access_requester)
@@ -81,7 +81,7 @@ def approve_access_request
8181

8282
# rubocop: disable CodeReuse/ActiveRecord
8383
def leave
84-
member = membershipable.members_and_requesters.find_by!(user_id: current_user.id)
84+
member = members_and_requesters.find_by!(user_id: current_user.id)
8585
Members::DestroyService.new(current_user).execute(member)
8686

8787
notice =
@@ -140,6 +140,14 @@ def plain_source_type
140140
raise NotImplementedError
141141
end
142142

143+
def members_and_requesters
144+
membershipable.members_and_requesters
145+
end
146+
147+
def requesters
148+
membershipable.requesters
149+
end
150+
143151
def requested_relations(inherited_permissions = :with_inherited_permissions)
144152
case params[inherited_permissions].presence
145153
when 'exclude'

app/controllers/import/github_controller.rb

+1-7
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,7 @@ def create
7979
def realtime_changes
8080
Gitlab::PollingInterval.set_header(response, interval: 3_000)
8181

82-
render json: already_added_projects.map { |project|
83-
{
84-
id: project.id,
85-
import_status: project.import_status,
86-
stats: ::Gitlab::GithubImport::ObjectCounter.summary(project)
87-
}
88-
}
82+
render json: Import::GithubRealtimeRepoSerializer.new.represent(already_added_projects)
8983
end
9084

9185
def cancel

app/controllers/projects/project_members_controller.rb

+13-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def filter_params
4747
end
4848

4949
def membershipable_members
50-
project.members
50+
query_members_via_project_namespace_enabled? ? project.namespace_members : project.members
5151
end
5252

5353
def plain_source_type
@@ -65,6 +65,18 @@ def members_page_url
6565
def root_params_key
6666
:project_member
6767
end
68+
69+
def members_and_requesters
70+
query_members_via_project_namespace_enabled? ? project.namespace_members_and_requesters : super
71+
end
72+
73+
def requesters
74+
query_members_via_project_namespace_enabled? ? project.namespace_requesters : super
75+
end
76+
77+
def query_members_via_project_namespace_enabled?
78+
Feature.enabled?(:project_members_index_by_project_namespace, project)
79+
end
6880
end
6981

7082
Projects::ProjectMembersController.prepend_mod_with('Projects::ProjectMembersController')

app/graphql/graphql_triggers.rb

+15-9
Original file line numberDiff line numberDiff line change
@@ -29,27 +29,33 @@ def self.issuable_milestone_updated(issuable)
2929
GitlabSchema.subscriptions.trigger('issuableMilestoneUpdated', { issuable_id: issuable.to_gid }, issuable)
3030
end
3131

32+
def self.work_item_note_created(work_item_gid, note_data)
33+
GitlabSchema.subscriptions.trigger('workItemNoteCreated', { noteable_id: work_item_gid }, note_data)
34+
end
35+
36+
def self.work_item_note_deleted(work_item_gid, note_data)
37+
GitlabSchema.subscriptions.trigger('workItemNoteDeleted', { noteable_id: work_item_gid }, note_data)
38+
end
39+
40+
def self.work_item_note_updated(work_item_gid, note_data)
41+
GitlabSchema.subscriptions.trigger('workItemNoteUpdated', { noteable_id: work_item_gid }, note_data)
42+
end
43+
3244
def self.merge_request_reviewers_updated(merge_request)
3345
GitlabSchema.subscriptions.trigger(
34-
'mergeRequestReviewersUpdated',
35-
{ issuable_id: merge_request.to_gid },
36-
merge_request
46+
'mergeRequestReviewersUpdated', { issuable_id: merge_request.to_gid }, merge_request
3747
)
3848
end
3949

4050
def self.merge_request_merge_status_updated(merge_request)
4151
GitlabSchema.subscriptions.trigger(
42-
'mergeRequestMergeStatusUpdated',
43-
{ issuable_id: merge_request.to_gid },
44-
merge_request
52+
'mergeRequestMergeStatusUpdated', { issuable_id: merge_request.to_gid }, merge_request
4553
)
4654
end
4755

4856
def self.merge_request_approval_state_updated(merge_request)
4957
GitlabSchema.subscriptions.trigger(
50-
'mergeRequestApprovalStateUpdated',
51-
{ issuable_id: merge_request.to_gid },
52-
merge_request
58+
'mergeRequestApprovalStateUpdated', { issuable_id: merge_request.to_gid }, merge_request
5359
)
5460
end
5561
end

0 commit comments

Comments
 (0)