Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-06-06 15:07:34 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-06-06 15:07:34 +0300
commit4958d96e262f6b31b2850123e4949536555b2d29 (patch)
tree28fe9a1fed009a569806c705e4810a33979cbd6a /app
parent95de7177f2d5844e4aa399fea9a59d4ba6b4b1f1 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/admin/abuse_report/components/report_actions.vue14
-rw-r--r--app/assets/javascripts/admin/abuse_report/components/report_header.vue1
-rw-r--r--app/assets/javascripts/admin/abuse_report/constants.js4
-rw-r--r--app/assets/javascripts/diffs/components/diff_content.vue25
-rw-r--r--app/assets/javascripts/diffs/components/diff_file.vue5
-rw-r--r--app/assets/javascripts/diffs/store/actions.js5
-rw-r--r--app/assets/javascripts/groups/components/app.vue4
-rw-r--r--app/assets/javascripts/groups/components/overview_tabs.vue2
-rw-r--r--app/assets/javascripts/groups/index.js5
-rw-r--r--app/assets/javascripts/notes/mixins/diff_line_note_form.js3
-rw-r--r--app/assets/javascripts/repository/components/fork_info.vue3
-rw-r--r--app/assets/javascripts/work_items/components/work_item_description.vue173
-rw-r--r--app/controllers/projects/blob_controller.rb1
-rw-r--r--app/controllers/projects/tree_controller.rb1
-rw-r--r--app/controllers/projects_controller.rb1
-rw-r--r--app/finders/template_finder.rb11
-rw-r--r--app/graphql/mutations/projects/sync_fork.rb3
-rw-r--r--app/helpers/avatars_helper.rb19
-rw-r--r--app/models/blob.rb1
-rw-r--r--app/models/blob_viewer/metrics_dashboard_yml.rb45
-rw-r--r--app/views/dashboard/groups/_groups.html.haml2
-rw-r--r--app/views/explore/groups/_groups.html.haml2
-rw-r--r--app/views/projects/network/show.json.erb2
23 files changed, 142 insertions, 190 deletions
diff --git a/app/assets/javascripts/admin/abuse_report/components/report_actions.vue b/app/assets/javascripts/admin/abuse_report/components/report_actions.vue
index 25b22afbf84..57d5d46ceb4 100644
--- a/app/assets/javascripts/admin/abuse_report/components/report_actions.vue
+++ b/app/assets/javascripts/admin/abuse_report/components/report_actions.vue
@@ -13,6 +13,7 @@ import { getContentWrapperHeight } from '~/lib/utils/dom_utils';
import { DRAWER_Z_INDEX } from '~/lib/utils/constants';
import {
ACTIONS_I18N,
+ NO_ACTION,
USER_ACTION_OPTIONS,
REASON_OPTIONS,
STATUS_OPEN,
@@ -40,6 +41,10 @@ export default {
GlDrawer,
},
props: {
+ user: {
+ type: Object,
+ required: true,
+ },
report: {
type: Object,
required: true,
@@ -66,6 +71,12 @@ export default {
isOpen() {
return this.report.status === STATUS_OPEN;
},
+ isNotCurrentUser() {
+ return this.user.username !== gon.current_username;
+ },
+ userActionOptions() {
+ return this.isNotCurrentUser ? USER_ACTION_OPTIONS : [NO_ACTION];
+ },
},
methods: {
toggleActionsDrawer() {
@@ -111,7 +122,6 @@ export default {
},
},
i18n: ACTIONS_I18N,
- userActionOptions: USER_ACTION_OPTIONS,
reasonOptions: REASON_OPTIONS,
DRAWER_Z_INDEX,
};
@@ -144,7 +154,7 @@ export default {
id="action"
v-model="form.user_action"
data-testid="action-select"
- :options="$options.userActionOptions"
+ :options="userActionOptions"
:state="validationState.action"
@change="validateAction"
/>
diff --git a/app/assets/javascripts/admin/abuse_report/components/report_header.vue b/app/assets/javascripts/admin/abuse_report/components/report_header.vue
index 1b9a6a1df6a..624dcd47650 100644
--- a/app/assets/javascripts/admin/abuse_report/components/report_header.vue
+++ b/app/assets/javascripts/admin/abuse_report/components/report_header.vue
@@ -81,6 +81,7 @@ export default {
{{ $options.i18n.adminProfile }}
</gl-button>
<report-actions
+ :user="user"
:report="report"
class="gl-sm-ml-3 gl-mt-3 gl-sm-mt-0"
@closeReport="closeReport"
diff --git a/app/assets/javascripts/admin/abuse_report/constants.js b/app/assets/javascripts/admin/abuse_report/constants.js
index fb2acd5921d..b290581598a 100644
--- a/app/assets/javascripts/admin/abuse_report/constants.js
+++ b/app/assets/javascripts/admin/abuse_report/constants.js
@@ -24,8 +24,10 @@ export const ACTIONS_I18N = {
requiredFieldFeedback: __('This field is required.'),
};
+export const NO_ACTION = { value: '', text: s__('AbuseReport|No action') };
+
export const USER_ACTION_OPTIONS = [
- { value: '', text: s__('AbuseReport|No action') },
+ NO_ACTION,
{ value: 'block_user', text: s__('AbuseReport|Block user') },
{ value: 'ban_user', text: s__('AbuseReport|Ban user') },
{ value: 'delete_user', text: s__('AbuseReport|Delete user') },
diff --git a/app/assets/javascripts/diffs/components/diff_content.vue b/app/assets/javascripts/diffs/components/diff_content.vue
index d7b63d205dc..676944ee86a 100644
--- a/app/assets/javascripts/diffs/components/diff_content.vue
+++ b/app/assets/javascripts/diffs/components/diff_content.vue
@@ -1,5 +1,5 @@
<script>
-import { GlLoadingIcon } from '@gitlab/ui';
+import { GlLoadingIcon, GlButton } from '@gitlab/ui';
import { mapActions, mapGetters, mapState } from 'vuex';
import { mapParallel } from 'ee_else_ce/diffs/components/diff_row_utils';
import DiffFileDrafts from '~/batch_comments/components/diff_file_drafts.vue';
@@ -21,6 +21,7 @@ import ImageDiffOverlay from './image_diff_overlay.vue';
export default {
components: {
GlLoadingIcon,
+ GlButton,
DiffView,
DiffViewer,
NoteForm,
@@ -59,7 +60,10 @@ export default {
return this.diffFile.viewer.name;
},
isTextFile() {
- return this.diffViewerMode === diffViewerModes.text;
+ return this.diffViewerMode === diffViewerModes.text && !this.diffFile.viewer.whitespace_only;
+ },
+ isWhitespaceOnly() {
+ return this.diffFile.viewer.whitespace_only;
},
noPreview() {
return this.diffViewerMode === diffViewerModes.no_preview;
@@ -122,6 +126,23 @@ export default {
/>
<gl-loading-icon v-if="diffFile.renderingLines" size="lg" class="mt-3" />
</template>
+ <div
+ v-else-if="isWhitespaceOnly"
+ class="gl-bg-gray-10 gl--flex-center gl-h-13"
+ data-testid="diff-whitespace-only-state"
+ >
+ {{ __('Contains only whitespace changes.') }}
+ <gl-button
+ category="tertiary"
+ variant="info"
+ size="small"
+ class="gl-ml-3"
+ data-testid="diff-load-file-button"
+ @click="$emit('load-file', { w: '0' })"
+ >
+ {{ __('Show changes') }}
+ </gl-button>
+ </div>
<not-diffable-viewer v-else-if="notDiffable" />
<no-preview-viewer v-else-if="noPreview" />
<diff-viewer
diff --git a/app/assets/javascripts/diffs/components/diff_file.vue b/app/assets/javascripts/diffs/components/diff_file.vue
index 596381f1de4..430c67abced 100644
--- a/app/assets/javascripts/diffs/components/diff_file.vue
+++ b/app/assets/javascripts/diffs/components/diff_file.vue
@@ -278,12 +278,12 @@ export default {
this.requestDiff();
}
},
- requestDiff() {
+ requestDiff(params = {}) {
const { idState, file } = this;
idState.isLoadingCollapsedDiff = true;
- this.loadCollapsedDiff(file)
+ this.loadCollapsedDiff({ file, params })
.then(() => {
idState.isLoadingCollapsedDiff = false;
idState.hasLoadedCollapsedDiff = true;
@@ -461,6 +461,7 @@ export default {
:class="hasBodyClasses.content"
:diff-file="file"
:help-page-path="helpPagePath"
+ @load-file="requestDiff"
/>
</template>
</div>
diff --git a/app/assets/javascripts/diffs/store/actions.js b/app/assets/javascripts/diffs/store/actions.js
index 9fd816b971b..3d27bb180e6 100644
--- a/app/assets/javascripts/diffs/store/actions.js
+++ b/app/assets/javascripts/diffs/store/actions.js
@@ -525,11 +525,12 @@ export const scrollToLineIfNeededParallel = (_, line) => {
}
};
-export const loadCollapsedDiff = ({ commit, getters, state }, file) => {
+export const loadCollapsedDiff = ({ commit, getters, state }, { file, params = {} }) => {
const versionPath = state.mergeRequestDiff?.version_path;
const loadParams = {
commit_id: getters.commitId,
w: state.showWhitespace ? '0' : '1',
+ ...params,
};
if (versionPath) {
@@ -830,7 +831,7 @@ export const toggleFullDiff = ({ dispatch, commit, getters, state }, filePath) =
commit(types.REQUEST_FULL_DIFF, filePath);
if (file.isShowingFullFile) {
- dispatch('loadCollapsedDiff', file)
+ dispatch('loadCollapsedDiff', { file })
.then(() => dispatch('assignDiscussionsToDiff', getters.getDiffFileDiscussions(file)))
.catch(() => dispatch('receiveFullDiffError', filePath));
} else {
diff --git a/app/assets/javascripts/groups/components/app.vue b/app/assets/javascripts/groups/components/app.vue
index 82eddf5603f..ebfffdaaf50 100644
--- a/app/assets/javascripts/groups/components/app.vue
+++ b/app/assets/javascripts/groups/components/app.vue
@@ -41,10 +41,6 @@ export default {
type: Object,
required: true,
},
- hideProjects: {
- type: Boolean,
- required: true,
- },
},
data() {
return {
diff --git a/app/assets/javascripts/groups/components/overview_tabs.vue b/app/assets/javascripts/groups/components/overview_tabs.vue
index 79a2e11b0bb..982dab45117 100644
--- a/app/assets/javascripts/groups/components/overview_tabs.vue
+++ b/app/assets/javascripts/groups/components/overview_tabs.vue
@@ -176,7 +176,7 @@ export default {
:title="title"
:lazy="lazy"
>
- <groups-app :action="key" :service="service" :store="store" :hide-projects="false">
+ <groups-app :action="key" :service="service" :store="store">
<template v-if="emptyStateComponent" #empty-state>
<component :is="emptyStateComponent" />
</template>
diff --git a/app/assets/javascripts/groups/index.js b/app/assets/javascripts/groups/index.js
index f4981c020cd..df2a23dc0f7 100644
--- a/app/assets/javascripts/groups/index.js
+++ b/app/assets/javascripts/groups/index.js
@@ -73,17 +73,15 @@ export default (containerId = 'js-groups-tree', endpoint, action = '') => {
},
data() {
const { dataset } = dataEl || this.$options.el;
- const hideProjects = parseBoolean(dataset.hideProjects);
const showSchemaMarkup = parseBoolean(dataset.showSchemaMarkup);
const renderEmptyState = parseBoolean(dataset.renderEmptyState);
const service = new GroupsService(endpoint || dataset.endpoint);
- const store = new GroupsStore({ hideProjects, showSchemaMarkup });
+ const store = new GroupsStore({ hideProjects: true, showSchemaMarkup });
return {
action,
store,
service,
- hideProjects,
renderEmptyState,
loading: true,
containerId,
@@ -120,7 +118,6 @@ export default (containerId = 'js-groups-tree', endpoint, action = '') => {
action: this.action,
store: this.store,
service: this.service,
- hideProjects: this.hideProjects,
renderEmptyState: this.renderEmptyState,
containerId: this.containerId,
},
diff --git a/app/assets/javascripts/notes/mixins/diff_line_note_form.js b/app/assets/javascripts/notes/mixins/diff_line_note_form.js
index 0509ff24959..20ffcda282a 100644
--- a/app/assets/javascripts/notes/mixins/diff_line_note_form.js
+++ b/app/assets/javascripts/notes/mixins/diff_line_note_form.js
@@ -15,7 +15,7 @@ export default {
}),
...mapGetters('diffs', ['getDiffFileByHash']),
...mapGetters('batchComments', ['shouldRenderDraftRowInDiscussion', 'draftForDiscussion']),
- ...mapState('diffs', ['commit']),
+ ...mapState('diffs', ['commit', 'showWhitespace']),
},
methods: {
...mapActions('diffs', ['cancelCommentForm']),
@@ -67,6 +67,7 @@ export default {
positionType,
...this.diffFileCommentForm,
lineRange,
+ showWhitespace: this.showWhitespace,
});
const diffFileHeadSha = this.commit && this?.diffFile?.diff_refs?.head_sha;
diff --git a/app/assets/javascripts/repository/components/fork_info.vue b/app/assets/javascripts/repository/components/fork_info.vue
index e4a10784bd5..42108e8dfba 100644
--- a/app/assets/javascripts/repository/components/fork_info.vue
+++ b/app/assets/javascripts/repository/components/fork_info.vue
@@ -3,7 +3,6 @@ import { GlIcon, GlLink, GlSkeletonLoader, GlLoadingIcon, GlSprintf, GlButton }
import { s__, sprintf, n__ } from '~/locale';
import { createAlert, VARIANT_INFO } from '~/alert';
import syncForkMutation from '~/repository/mutations/sync_fork.mutation.graphql';
-import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import eventHub from '../event_hub';
import {
POLLING_INTERVAL_DEFAULT,
@@ -43,7 +42,6 @@ export default {
ConflictsModal,
GlLoadingIcon,
},
- mixins: [glFeatureFlagMixin()],
apollo: {
project: {
query: forkDetailsQuery,
@@ -198,7 +196,6 @@ export default {
},
hasUpdateButton() {
return (
- this.glFeatures.synchronizeFork &&
this.canSyncBranch &&
((this.sourceName && this.forkDetails && this.behind) || this.isUnknownDivergence)
);
diff --git a/app/assets/javascripts/work_items/components/work_item_description.vue b/app/assets/javascripts/work_items/components/work_item_description.vue
index 988a28704d4..61dec21cae4 100644
--- a/app/assets/javascripts/work_items/components/work_item_description.vue
+++ b/app/assets/javascripts/work_items/components/work_item_description.vue
@@ -1,5 +1,5 @@
<script>
-import { GlAlert, GlButton, GlFormGroup } from '@gitlab/ui';
+import { GlAlert, GlButton, GlForm, GlFormGroup } from '@gitlab/ui';
import * as Sentry from '@sentry/browser';
import { helpPagePath } from '~/helpers/help_page_helper';
import { getDraft, clearDraft, updateDraft } from '~/lib/utils/autosave';
@@ -7,8 +7,6 @@ import { confirmAction } from '~/lib/utils/confirm_via_gl_modal/confirm_via_gl_m
import { __, s__ } from '~/locale';
import EditedAt from '~/issues/show/components/edited.vue';
import Tracking from '~/tracking';
-import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
-import MarkdownField from '~/vue_shared/components/markdown/field.vue';
import MarkdownEditor from '~/vue_shared/components/markdown/markdown_editor.vue';
import { autocompleteDataSources, markdownPreviewPath } from '../utils';
import workItemDescriptionSubscription from '../graphql/work_item_description.subscription.graphql';
@@ -22,12 +20,12 @@ export default {
EditedAt,
GlAlert,
GlButton,
+ GlForm,
GlFormGroup,
MarkdownEditor,
- MarkdownField,
WorkItemDescriptionRendered,
},
- mixins: [glFeatureFlagMixin(), Tracking.mixin()],
+ mixins: [Tracking.mixin()],
inject: ['fullPath'],
props: {
workItemId: {
@@ -227,111 +225,84 @@ export default {
<template>
<div>
- <gl-form-group
- v-if="isEditing"
- class="gl-mb-5 gl-border-t gl-pt-6 common-note-form"
- :label="__('Description')"
- label-for="work-item-description"
- >
- <markdown-editor
- v-if="glFeatures.workItemsMvc"
- class="gl-my-5"
- :value="descriptionText"
- :render-markdown-path="markdownPreviewPath"
- :markdown-docs-path="$options.markdownDocsPath"
- :form-field-props="formFieldProps"
- :quick-actions-docs-path="$options.quickActionsDocsPath"
- :autocomplete-data-sources="autocompleteDataSources"
- enable-autocomplete
- supports-quick-actions
- autofocus
- @input="setDescriptionText"
- @keydown.meta.enter="updateWorkItem"
- @keydown.ctrl.enter="updateWorkItem"
- />
- <markdown-field
- v-else
- can-attach-file
- :textarea-value="descriptionText"
- :is-submitting="isSubmitting"
- :markdown-preview-path="markdownPreviewPath"
- :markdown-docs-path="$options.markdownDocsPath"
- :quick-actions-docs-path="$options.quickActionsDocsPath"
- :autocomplete-data-sources="autocompleteDataSources"
- class="gl-my-5"
+ <gl-form v-if="isEditing" @submit.prevent="updateWorkItem" @reset.prevent="cancelEditing">
+ <gl-form-group
+ class="gl-mb-5 gl-border-t gl-pt-6 common-note-form"
+ :label="__('Description')"
+ label-for="work-item-description"
>
- <template #textarea>
- <textarea
- v-bind="formFieldProps"
- ref="textarea"
- v-model="descriptionText"
- :disabled="isSubmitting"
- class="note-textarea js-gfm-input js-autosize markdown-area"
- dir="auto"
- data-supports-quick-actions="true"
- @keydown.meta.enter="updateWorkItem"
- @keydown.ctrl.enter="updateWorkItem"
- @keydown.exact.esc.stop="cancelEditing"
- @input="onInput"
- ></textarea>
- </template>
- </markdown-field>
- <div class="gl-display-flex">
- <gl-alert
- v-if="hasConflicts"
- :dismissible="false"
- variant="danger"
- class="gl-w-full"
- data-testid="work-item-description-conflicts"
- >
- <p>
- {{
- s__(
- "WorkItem|Someone edited the description at the same time you did. If you save it will overwrite their changes. Please confirm you'd like to save your edits.",
- )
- }}
- </p>
- <details class="gl-mb-5">
- <summary class="gl-text-blue-500">{{ s__('WorkItem|View current version') }}</summary>
- <textarea
- class="note-textarea js-gfm-input js-autosize markdown-area gl-p-3"
- readonly
- :value="conflictedDescription"
- ></textarea>
- </details>
- <template #actions>
+ <markdown-editor
+ class="gl-my-5"
+ :value="descriptionText"
+ :render-markdown-path="markdownPreviewPath"
+ :markdown-docs-path="$options.markdownDocsPath"
+ :form-field-props="formFieldProps"
+ :quick-actions-docs-path="$options.quickActionsDocsPath"
+ :autocomplete-data-sources="autocompleteDataSources"
+ enable-autocomplete
+ supports-quick-actions
+ autofocus
+ @input="setDescriptionText"
+ @keydown.meta.enter="updateWorkItem"
+ @keydown.ctrl.enter="updateWorkItem"
+ />
+ <div class="gl-display-flex">
+ <gl-alert
+ v-if="hasConflicts"
+ :dismissible="false"
+ variant="danger"
+ class="gl-w-full"
+ data-testid="work-item-description-conflicts"
+ >
+ <p>
+ {{
+ s__(
+ "WorkItem|Someone edited the description at the same time you did. If you save it will overwrite their changes. Please confirm you'd like to save your edits.",
+ )
+ }}
+ </p>
+ <details class="gl-mb-5">
+ <summary class="gl-text-blue-500">{{ s__('WorkItem|View current version') }}</summary>
+ <textarea
+ class="note-textarea js-gfm-input js-autosize markdown-area gl-p-3"
+ readonly
+ :value="conflictedDescription"
+ ></textarea>
+ </details>
+ <template #actions>
+ <gl-button
+ category="primary"
+ variant="confirm"
+ :loading="isSubmitting"
+ data-testid="save-description"
+ @click="updateWorkItem"
+ >{{ s__('WorkItem|Save and overwrite') }}
+ </gl-button>
+ <gl-button
+ category="secondary"
+ class="gl-ml-3"
+ data-testid="cancel"
+ @click="cancelEditing"
+ >{{ s__('WorkItem|Discard changes') }}
+ </gl-button>
+ </template>
+ </gl-alert>
+ <template v-else>
<gl-button
category="primary"
variant="confirm"
:loading="isSubmitting"
data-testid="save-description"
- @click="updateWorkItem"
- >{{ s__('WorkItem|Save and overwrite') }}
+ type="submit"
+ >{{ __('Save') }}
</gl-button>
- <gl-button
- category="secondary"
- class="gl-ml-3"
- data-testid="cancel"
- @click="cancelEditing"
- >{{ s__('WorkItem|Discard changes') }}
+ <gl-button category="tertiary" class="gl-ml-3" data-testid="cancel" type="reset"
+ >{{ __('Cancel') }}
</gl-button>
</template>
- </gl-alert>
- <template v-else>
- <gl-button
- category="primary"
- variant="confirm"
- :loading="isSubmitting"
- data-testid="save-description"
- @click="updateWorkItem"
- >{{ __('Save') }}
- </gl-button>
- <gl-button category="tertiary" class="gl-ml-3" data-testid="cancel" @click="cancelEditing"
- >{{ __('Cancel') }}
- </gl-button>
- </template>
- </div>
- </gl-form-group>
+ </div>
+ </gl-form-group>
+ </gl-form>
<work-item-description-rendered
v-else
:work-item-description="workItemDescription"
diff --git a/app/controllers/projects/blob_controller.rb b/app/controllers/projects/blob_controller.rb
index 727a4e0251d..28393e1f365 100644
--- a/app/controllers/projects/blob_controller.rb
+++ b/app/controllers/projects/blob_controller.rb
@@ -49,7 +49,6 @@ class Projects::BlobController < Projects::ApplicationController
before_action do
push_frontend_feature_flag(:highlight_js, @project)
- push_frontend_feature_flag(:synchronize_fork, @project&.fork_source)
push_frontend_feature_flag(:explain_code_chat, current_user)
push_licensed_feature(:file_locks) if @project.licensed_feature_available?(:file_locks)
end
diff --git a/app/controllers/projects/tree_controller.rb b/app/controllers/projects/tree_controller.rb
index 495241df912..c8f698d6193 100644
--- a/app/controllers/projects/tree_controller.rb
+++ b/app/controllers/projects/tree_controller.rb
@@ -18,7 +18,6 @@ class Projects::TreeController < Projects::ApplicationController
before_action do
push_frontend_feature_flag(:highlight_js, @project)
- push_frontend_feature_flag(:synchronize_fork, @project.fork_source)
push_frontend_feature_flag(:explain_code_chat, current_user)
push_licensed_feature(:file_locks) if @project.licensed_feature_available?(:file_locks)
end
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index e925e16c004..81f205a6457 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -38,7 +38,6 @@ class ProjectsController < Projects::ApplicationController
before_action do
push_frontend_feature_flag(:highlight_js, @project)
- push_frontend_feature_flag(:synchronize_fork, @project&.fork_source)
push_frontend_feature_flag(:remove_monitor_metrics, @project)
push_frontend_feature_flag(:explain_code_chat, current_user)
push_frontend_feature_flag(:ci_namespace_catalog_experimental, @project)
diff --git a/app/finders/template_finder.rb b/app/finders/template_finder.rb
index c9b5711949f..a8dd2cde20f 100644
--- a/app/finders/template_finder.rb
+++ b/app/finders/template_finder.rb
@@ -27,14 +27,9 @@ class TemplateFinder
end
def type_allowed?(type)
- case type.to_s
- when 'licenses'
- true
- when 'metrics_dashboard_ymls'
- !Feature.enabled?(:remove_monitor_metrics)
- else
- VENDORED_TEMPLATES.key?(type)
- end
+ return true if type.to_s == 'licenses'
+
+ VENDORED_TEMPLATES.key?(type)
end
end
diff --git a/app/graphql/mutations/projects/sync_fork.rb b/app/graphql/mutations/projects/sync_fork.rb
index 4520f6388c5..6a4ec4a26b8 100644
--- a/app/graphql/mutations/projects/sync_fork.rb
+++ b/app/graphql/mutations/projects/sync_fork.rb
@@ -22,9 +22,6 @@ module Mutations
def resolve(project_path:, target_branch:)
project = authorized_find!(project_path, target_branch)
- return respond(nil, ['Feature flag is disabled']) unless Feature.enabled?(:synchronize_fork,
- project.fork_source)
-
return respond(nil, ['Target branch does not exist']) unless project.repository.branch_exists?(target_branch)
details_resolver = Resolvers::Projects::ForkDetailsResolver.new(object: project, context: context, field: nil)
diff --git a/app/helpers/avatars_helper.rb b/app/helpers/avatars_helper.rb
index 17f995ec0ad..d62498aea0b 100644
--- a/app/helpers/avatars_helper.rb
+++ b/app/helpers/avatars_helper.rb
@@ -27,11 +27,17 @@ module AvatarsHelper
end
end
- def avatar_icon_for_email(email = nil, size = nil, scale = 2, only_path: true)
+ def avatar_icon_for_email(email = nil, size = nil, scale = 2, only_path: true, by_commit_email: false)
return default_avatar if email.blank?
Gitlab::AvatarCache.by_email(email, size, scale, only_path) do
- avatar_icon_by_user_email_or_gravatar(email, size, scale, only_path: only_path)
+ avatar_icon_by_user_email_or_gravatar(
+ email,
+ size,
+ scale,
+ only_path: only_path,
+ by_commit_email: by_commit_email
+ )
end
end
@@ -115,8 +121,13 @@ module AvatarsHelper
private
- def avatar_icon_by_user_email_or_gravatar(email, size, scale, only_path:)
- user = User.with_public_email(email).first
+ def avatar_icon_by_user_email_or_gravatar(email, size, scale, only_path:, by_commit_email: false)
+ user =
+ if by_commit_email
+ User.find_by_any_email(email)
+ else
+ User.with_public_email(email).first
+ end
if user
avatar_icon_for_user(user, size, scale, only_path: only_path)
diff --git a/app/models/blob.rb b/app/models/blob.rb
index 20d7c230aa2..e6496e21175 100644
--- a/app/models/blob.rb
+++ b/app/models/blob.rb
@@ -54,7 +54,6 @@ class Blob < SimpleDelegator
BlobViewer::License,
BlobViewer::Contributing,
BlobViewer::Changelog,
- BlobViewer::MetricsDashboardYml,
BlobViewer::CargoToml,
BlobViewer::Cartfile,
diff --git a/app/models/blob_viewer/metrics_dashboard_yml.rb b/app/models/blob_viewer/metrics_dashboard_yml.rb
deleted file mode 100644
index b63f3022198..00000000000
--- a/app/models/blob_viewer/metrics_dashboard_yml.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-# frozen_string_literal: true
-
-module BlobViewer
- class MetricsDashboardYml < Base
- include ServerSide
- include Gitlab::Utils::StrongMemoize
- include Auxiliary
-
- self.partial_name = 'metrics_dashboard_yml'
- self.loading_partial_name = 'metrics_dashboard_yml_loading'
- self.file_types = %i(metrics_dashboard)
- self.binary = false
-
- def self.can_render?(blob, verify_binary: true)
- super && !Feature.enabled?(:remove_monitor_metrics)
- end
-
- def valid?
- errors.blank?
- end
-
- def errors
- strong_memoize(:errors) do
- prepare!
- parse_blob_data
- end
- end
-
- private
-
- def parse_blob_data
- old_metrics_dashboard_validation
- end
-
- def old_metrics_dashboard_validation
- yaml = ::Gitlab::Config::Loader::Yaml.new(blob.data).load_raw!
- ::PerformanceMonitoring::PrometheusDashboard.from_json(yaml)
- []
- rescue Gitlab::Config::Loader::FormatError => e
- ["YAML syntax: #{e.message}"]
- rescue ActiveModel::ValidationError => e
- e.model.errors.messages.map { |messages| messages.join(': ') }
- end
- end
-end
diff --git a/app/views/dashboard/groups/_groups.html.haml b/app/views/dashboard/groups/_groups.html.haml
index 601b6a8b1a7..ea7cd75152d 100644
--- a/app/views/dashboard/groups/_groups.html.haml
+++ b/app/views/dashboard/groups/_groups.html.haml
@@ -1,2 +1,2 @@
.js-groups-list-holder
- #js-groups-tree{ data: { hide_projects: 'true', endpoint: dashboard_groups_path(format: :json), path: dashboard_groups_path, form_sel: 'form#group-filter-form', filter_sel: '.js-groups-list-filter', holder_sel: '.js-groups-list-holder', dropdown_sel: '.js-group-filter-dropdown-wrap' } }
+ #js-groups-tree{ data: { endpoint: dashboard_groups_path(format: :json), path: dashboard_groups_path, form_sel: 'form#group-filter-form', filter_sel: '.js-groups-list-filter', holder_sel: '.js-groups-list-holder', dropdown_sel: '.js-group-filter-dropdown-wrap' } }
diff --git a/app/views/explore/groups/_groups.html.haml b/app/views/explore/groups/_groups.html.haml
index bb2bd193565..3291129fd69 100644
--- a/app/views/explore/groups/_groups.html.haml
+++ b/app/views/explore/groups/_groups.html.haml
@@ -1,3 +1,3 @@
.js-groups-list-holder
- #js-groups-tree{ data: { hide_projects: 'true', endpoint: explore_groups_path(format: :json), path: explore_groups_path, form_sel: 'form#group-filter-form', filter_sel: '.js-groups-list-filter', holder_sel: '.js-groups-list-holder', dropdown_sel: '.js-group-filter-dropdown-wrap' } }
+ #js-groups-tree{ data: { endpoint: explore_groups_path(format: :json), path: explore_groups_path, form_sel: 'form#group-filter-form', filter_sel: '.js-groups-list-filter', holder_sel: '.js-groups-list-holder', dropdown_sel: '.js-group-filter-dropdown-wrap' } }
= gl_loading_icon(size: 'md', css_class: 'gl-mt-6')
diff --git a/app/views/projects/network/show.json.erb b/app/views/projects/network/show.json.erb
index 93b3c9911e2..7b5119d92e4 100644
--- a/app/views/projects/network/show.json.erb
+++ b/app/views/projects/network/show.json.erb
@@ -9,7 +9,7 @@
author: {
name: c.author_name,
email: c.author_email,
- icon: image_path(avatar_icon_for_email(c.author_email, 20))
+ icon: image_path(avatar_icon_for_email(c.author_email, 20, by_commit_email: true))
},
time: c.time,
space: c.spaces.first,