diff options
author | Luke Bennett <lukeeeebennettplus@gmail.com> | 2018-07-19 09:52:54 +0100 |
---|---|---|
committer | Luke Bennett <lukeeeebennettplus@gmail.com> | 2018-07-19 09:52:54 +0100 |
commit | fb511b66d689dd4dda0dff10759344f39e81ef8a (patch) | |
tree | 612955e40636e0623e497f8036f55b8f2de27acc /app | |
parent | 820c37716b6190db6c09e1be1a836df5554db518 (diff) | |
parent | 98eccfc44c597ba14939659ca3b9150197129961 (diff) | |
download | gitlab-ce-fb511b66d689dd4dda0dff10759344f39e81ef8a.tar.gz |
Merge remote-tracking branch 'origin/master' into 45443-unable-to-save-user-profile-update-with-safari
Diffstat (limited to 'app')
249 files changed, 1242 insertions, 164 deletions
diff --git a/app/assets/javascripts/autosave.js b/app/assets/javascripts/autosave.js index fa00a3cf386..e8c59fab609 100644 --- a/app/assets/javascripts/autosave.js +++ b/app/assets/javascripts/autosave.js @@ -53,4 +53,8 @@ export default class Autosave { return window.localStorage.removeItem(this.key); } + + dispose() { + this.field.off('input'); + } } diff --git a/app/assets/javascripts/clusters/clusters_bundle.js b/app/assets/javascripts/clusters/clusters_bundle.js index 8139aa69fc7..e565af800d0 100644 --- a/app/assets/javascripts/clusters/clusters_bundle.js +++ b/app/assets/javascripts/clusters/clusters_bundle.js @@ -162,8 +162,10 @@ export default class Clusters { if (type === 'password') { this.tokenField.setAttribute('type', 'text'); + this.showTokenButton.textContent = s__('ClusterIntegration|Hide'); } else { this.tokenField.setAttribute('type', 'password'); + this.showTokenButton.textContent = s__('ClusterIntegration|Show'); } } diff --git a/app/assets/javascripts/diffs/components/diff_line_gutter_content.vue b/app/assets/javascripts/diffs/components/diff_line_gutter_content.vue index ad838a32518..0fe0007057b 100644 --- a/app/assets/javascripts/diffs/components/diff_line_gutter_content.vue +++ b/app/assets/javascripts/diffs/components/diff_line_gutter_content.vue @@ -77,7 +77,8 @@ export default { diffViewType: state => state.diffs.diffViewType, diffFiles: state => state.diffs.diffFiles, }), - ...mapGetters(['isLoggedIn', 'discussionsByLineCode']), + ...mapGetters(['isLoggedIn']), + ...mapGetters('diffs', ['discussionsByLineCode']), lineHref() { return this.lineCode ? `#${this.lineCode}` : '#'; }, @@ -189,7 +190,6 @@ export default { </button> <a v-if="lineNumber" - v-once :data-linenumber="lineNumber" :href="lineHref" > diff --git a/app/assets/javascripts/diffs/components/diff_line_note_form.vue b/app/assets/javascripts/diffs/components/diff_line_note_form.vue index 32f9516d332..cbe4551d06b 100644 --- a/app/assets/javascripts/diffs/components/diff_line_note_form.vue +++ b/app/assets/javascripts/diffs/components/diff_line_note_form.vue @@ -1,17 +1,17 @@ <script> -import $ from 'jquery'; import { mapState, mapGetters, mapActions } from 'vuex'; import createFlash from '~/flash'; import { s__ } from '~/locale'; import noteForm from '../../notes/components/note_form.vue'; import { getNoteFormData } from '../store/utils'; -import Autosave from '../../autosave'; -import { DIFF_NOTE_TYPE, NOTE_TYPE } from '../constants'; +import autosave from '../../notes/mixins/autosave'; +import { DIFF_NOTE_TYPE } from '../constants'; export default { components: { noteForm, }, + mixins: [autosave], props: { diffFileHash: { type: String, @@ -41,28 +41,35 @@ export default { }, mounted() { if (this.isLoggedIn) { - const noteableData = this.getNoteableData; const keys = [ - NOTE_TYPE, - this.noteableType, - noteableData.id, - noteableData.diff_head_sha, + this.noteableData.diff_head_sha, DIFF_NOTE_TYPE, - noteableData.source_project_id, + this.noteableData.source_project_id, this.line.lineCode, ]; - this.autosave = new Autosave($(this.$refs.noteForm.$refs.textarea), keys); + this.initAutoSave(this.noteableData, keys); } }, methods: { ...mapActions('diffs', ['cancelCommentForm']), ...mapActions(['saveNote', 'refetchDiscussionById']), - handleCancelCommentForm() { - this.autosave.reset(); + handleCancelCommentForm(shouldConfirm, isDirty) { + if (shouldConfirm && isDirty) { + const msg = s__('Notes|Are you sure you want to cancel creating this comment?'); + + // eslint-disable-next-line no-alert + if (!window.confirm(msg)) { + return; + } + } + this.cancelCommentForm({ lineCode: this.line.lineCode, }); + this.$nextTick(() => { + this.resetAutoSave(); + }); }, handleSaveNote(note) { const selectedDiffFile = this.getDiffFileByHash(this.diffFileHash); diff --git a/app/assets/javascripts/diffs/components/inline_diff_comment_row.vue b/app/assets/javascripts/diffs/components/inline_diff_comment_row.vue index ca265dd892c..a6f011ff31e 100644 --- a/app/assets/javascripts/diffs/components/inline_diff_comment_row.vue +++ b/app/assets/javascripts/diffs/components/inline_diff_comment_row.vue @@ -26,13 +26,16 @@ export default { ...mapState({ diffLineCommentForms: state => state.diffs.diffLineCommentForms, }), - ...mapGetters(['discussionsByLineCode']), + ...mapGetters('diffs', ['discussionsByLineCode']), discussions() { return this.discussionsByLineCode[this.line.lineCode] || []; }, className() { return this.discussions.length ? '' : 'js-temp-notes-holder'; }, + hasCommentForm() { + return this.diffLineCommentForms[this.line.lineCode]; + }, }, }; </script> @@ -53,7 +56,7 @@ export default { :discussions="discussions" /> <diff-line-note-form - v-if="diffLineCommentForms[line.lineCode]" + v-if="hasCommentForm" :diff-file-hash="diffFileHash" :line="line" :note-target-line="line" diff --git a/app/assets/javascripts/diffs/components/inline_diff_table_row.vue b/app/assets/javascripts/diffs/components/inline_diff_table_row.vue index 0197a510ef1..0e306f39a9f 100644 --- a/app/assets/javascripts/diffs/components/inline_diff_table_row.vue +++ b/app/assets/javascripts/diffs/components/inline_diff_table_row.vue @@ -101,7 +101,6 @@ export default { class="diff-line-num new_line" /> <td - v-once :class="line.type" class="line_content" v-html="line.richText" diff --git a/app/assets/javascripts/diffs/components/inline_diff_view.vue b/app/assets/javascripts/diffs/components/inline_diff_view.vue index 9fd19b74cd7..8e491d293e5 100644 --- a/app/assets/javascripts/diffs/components/inline_diff_view.vue +++ b/app/assets/javascripts/diffs/components/inline_diff_view.vue @@ -20,8 +20,7 @@ export default { }, }, computed: { - ...mapGetters('diffs', ['commitId']), - ...mapGetters(['discussionsByLineCode']), + ...mapGetters('diffs', ['commitId', 'discussionsByLineCode']), ...mapState({ diffLineCommentForms: state => state.diffs.diffLineCommentForms, }), diff --git a/app/assets/javascripts/diffs/components/parallel_diff_comment_row.vue b/app/assets/javascripts/diffs/components/parallel_diff_comment_row.vue index cc5248c25d9..05e5cafc717 100644 --- a/app/assets/javascripts/diffs/components/parallel_diff_comment_row.vue +++ b/app/assets/javascripts/diffs/components/parallel_diff_comment_row.vue @@ -26,7 +26,7 @@ export default { ...mapState({ diffLineCommentForms: state => state.diffs.diffLineCommentForms, }), - ...mapGetters(['discussionsByLineCode']), + ...mapGetters('diffs', ['discussionsByLineCode']), leftLineCode() { return this.line.left.lineCode; }, diff --git a/app/assets/javascripts/diffs/components/parallel_diff_table_row.vue b/app/assets/javascripts/diffs/components/parallel_diff_table_row.vue index ee5bb4d8d05..0031cedc68f 100644 --- a/app/assets/javascripts/diffs/components/parallel_diff_table_row.vue +++ b/app/assets/javascripts/diffs/components/parallel_diff_table_row.vue @@ -119,7 +119,6 @@ export default { class="diff-line-num old_line" /> <td - v-once :id="line.left.lineCode" :class="parallelViewLeftLineType" class="line_content parallel left-side" @@ -140,7 +139,6 @@ export default { class="diff-line-num new_line" /> <td - v-once :id="line.right.lineCode" :class="line.right.type" class="line_content parallel right-side" diff --git a/app/assets/javascripts/diffs/components/parallel_diff_view.vue b/app/assets/javascripts/diffs/components/parallel_diff_view.vue index 32528c9e7ab..8f8d6bbc818 100644 --- a/app/assets/javascripts/diffs/components/parallel_diff_view.vue +++ b/app/assets/javascripts/diffs/components/parallel_diff_view.vue @@ -21,8 +21,7 @@ export default { }, }, computed: { - ...mapGetters('diffs', ['commitId']), - ...mapGetters(['discussionsByLineCode']), + ...mapGetters('diffs', ['commitId', 'discussionsByLineCode']), ...mapState({ diffLineCommentForms: state => state.diffs.diffLineCommentForms, }), diff --git a/app/assets/javascripts/diffs/store/getters.js b/app/assets/javascripts/diffs/store/getters.js index 855de79adf8..d3881fa1a0a 100644 --- a/app/assets/javascripts/diffs/store/getters.js +++ b/app/assets/javascripts/diffs/store/getters.js @@ -1,5 +1,7 @@ import _ from 'underscore'; +import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils'; import { PARALLEL_DIFF_VIEW_TYPE, INLINE_DIFF_VIEW_TYPE } from '../constants'; +import { getDiffRefsByLineCode } from './utils'; export const isParallelView = state => state.diffViewType === PARALLEL_DIFF_VIEW_TYPE; @@ -56,6 +58,44 @@ export const getDiffFileDiscussions = (state, getters, rootState, rootGetters) = discussion.diff_discussion && _.isEqual(discussion.diff_file.file_hash, diff.fileHash), ) || []; +/** + * Returns an Object with discussions by their diff line code + * To avoid rendering outdated discussions on the Changes tab we should do a bunch of SHA + * comparisions. `note.position.formatter` have the current version diff refs but + * `note.original_position.formatter` will have the first version's diff refs. + * If line diff refs matches with one of them, we should render it as a discussion on Changes tab. + * + * @param {Object} diff + * @returns {Array} + */ +export const discussionsByLineCode = (state, getters, rootState, rootGetters) => { + const diffRefsByLineCode = getDiffRefsByLineCode(state.diffFiles); + + return rootGetters.discussions.reduce((acc, note) => { + const isDiffDiscussion = note.diff_discussion; + const hasLineCode = note.line_code; + const isResolvable = note.resolvable; + const diffRefs = diffRefsByLineCode[note.line_code]; + + if (isDiffDiscussion && hasLineCode && isResolvable && diffRefs) { + const refs = convertObjectPropsToCamelCase(note.position.formatter); + const originalRefs = convertObjectPropsToCamelCase(note.original_position.formatter); + + if (_.isEqual(refs, diffRefs) || _.isEqual(originalRefs, diffRefs)) { + const lineCode = note.line_code; + + if (acc[lineCode]) { + acc[lineCode].push(note); + } else { + acc[lineCode] = [note]; + } + } + } + + return acc; + }, {}); +}; + // prevent babel-plugin-rewire from generating an invalid default during karma∂ tests export const getDiffFileByHash = state => fileHash => state.diffFiles.find(file => file.fileHash === fileHash); diff --git a/app/assets/javascripts/diffs/store/utils.js b/app/assets/javascripts/diffs/store/utils.js index d9589baa76e..82082ac508a 100644 --- a/app/assets/javascripts/diffs/store/utils.js +++ b/app/assets/javascripts/diffs/store/utils.js @@ -173,3 +173,24 @@ export function trimFirstCharOfLineContent(line = {}) { return parsedLine; } + +export function getDiffRefsByLineCode(diffFiles) { + return diffFiles.reduce((acc, diffFile) => { + const { baseSha, headSha, startSha } = diffFile.diffRefs; + const { newPath, oldPath } = diffFile; + + // We can only use highlightedDiffLines to create the map of diff lines because + // highlightedDiffLines will also include every parallel diff line in it. + if (diffFile.highlightedDiffLines) { + diffFile.highlightedDiffLines.forEach(line => { + const { lineCode, oldLine, newLine } = line; + + if (lineCode) { + acc[lineCode] = { baseSha, headSha, startSha, newPath, oldPath, oldLine, newLine }; + } + }); + } + + return acc; + }, {}); +} diff --git a/app/assets/javascripts/ide/components/new_dropdown/button.vue b/app/assets/javascripts/ide/components/new_dropdown/button.vue index 7682b34ce4d..ff114e47741 100644 --- a/app/assets/javascripts/ide/components/new_dropdown/button.vue +++ b/app/assets/javascripts/ide/components/new_dropdown/button.vue @@ -38,6 +38,7 @@ export default { <button :aria-label="label" type="button" + class="btn-blank" @click.stop.prevent="clicked" > <icon diff --git a/app/assets/javascripts/monitoring/components/graph/flag.vue b/app/assets/javascripts/monitoring/components/graph/flag.vue index 92fe98508ad..1e6803abf3a 100644 --- a/app/assets/javascripts/monitoring/components/graph/flag.vue +++ b/app/assets/javascripts/monitoring/components/graph/flag.vue @@ -125,6 +125,7 @@ export default { :class="flagOrientation" class="prometheus-graph-flag popover" > + <div class="arrow-shadow"></div> <div class="arrow"></div> <div class="popover-title"> <h5 v-if="deploymentFlagData"> diff --git a/app/assets/javascripts/monitoring/stores/monitoring_store.js b/app/assets/javascripts/monitoring/stores/monitoring_store.js index 748b8cb6e6e..176f7d9eef2 100644 --- a/app/assets/javascripts/monitoring/stores/monitoring_store.js +++ b/app/assets/javascripts/monitoring/stores/monitoring_store.js @@ -1,7 +1,10 @@ import _ from 'underscore'; function sortMetrics(metrics) { - return _.chain(metrics).sortBy('title').sortBy('weight').value(); + return _.chain(metrics) + .sortBy('title') + .sortBy('weight') + .value(); } function normalizeMetrics(metrics) { @@ -39,7 +42,9 @@ export default class MonitoringStore { } storeEnvironmentsData(environmentsData = []) { - this.environmentsData = environmentsData; + this.environmentsData = environmentsData.filter( + environment => !!environment.latest.last_deployment, + ); } getMetricsCount() { diff --git a/app/assets/javascripts/notes/components/note_form.vue b/app/assets/javascripts/notes/components/note_form.vue index 26482a02e00..abcd4422d7c 100644 --- a/app/assets/javascripts/notes/components/note_form.vue +++ b/app/assets/javascripts/notes/components/note_form.vue @@ -7,7 +7,7 @@ import issuableStateMixin from '../mixins/issuable_state'; import resolvable from '../mixins/resolvable'; export default { - name: 'IssueNoteForm', + name: 'NoteForm', components: { issueWarning, markdownField, diff --git a/app/assets/javascripts/notes/components/noteable_discussion.vue b/app/assets/javascripts/notes/components/noteable_discussion.vue index bee635398b3..2f1a68731c7 100644 --- a/app/assets/javascripts/notes/components/noteable_discussion.vue +++ b/app/assets/javascripts/notes/components/noteable_discussion.vue @@ -6,6 +6,7 @@ import nextDiscussionsSvg from 'icons/_next_discussion.svg'; import { convertObjectPropsToCamelCase, scrollToElement } from '~/lib/utils/common_utils'; import { truncateSha } from '~/lib/utils/text_utility'; import systemNote from '~/vue_shared/components/notes/system_note.vue'; +import { s__ } from '~/locale'; import Flash from '../../flash'; import { SYSTEM_NOTE } from '../constants'; import userAvatarLink from '../../vue_shared/components/user_avatar/user_avatar_link.vue'; @@ -144,19 +145,17 @@ export default { return this.isDiffDiscussion ? '' : 'card discussion-wrapper'; }, }, - mounted() { - if (this.isReplying) { - this.initAutoSave(this.transformedDiscussion); - } - }, - updated() { - if (this.isReplying) { - if (!this.autosave) { - this.initAutoSave(this.transformedDiscussion); + watch: { + isReplying() { + if (this.isReplying) { + this.$nextTick(() => { + // Pass an extra key to separate reply and note edit forms + this.initAutoSave(this.transformedDiscussion, ['Reply']); + }); } else { - this.setAutoSave(); + this.disposeAutoSave(); } - } + }, }, created() { this.resolveDiscussionsSvg = resolveDiscussionsSvg; @@ -194,16 +193,18 @@ export default { showReplyForm() { this.isReplying = true; }, - cancelReplyForm(shouldConfirm) { - if (shouldConfirm && this.$refs.noteForm.isDirty) { + cancelReplyForm(shouldConfirm, isDirty) { + if (shouldConfirm && isDirty) { + const msg = s__('Notes|Are you sure you want to cancel creating this comment?'); + // eslint-disable-next-line no-alert - if (!window.confirm('Are you sure you want to cancel creating this comment?')) { + if (!window.confirm(msg)) { return; } } - this.resetAutoSave(); this.isReplying = false; + this.resetAutoSave(); }, saveReply(noteText, form, callback) { const postData = { @@ -420,7 +421,8 @@ Please check your network connection and try again.`; :is-editing="false" save-button-title="Comment" @handleFormUpdate="saveReply" - @cancelForm="cancelReplyForm" /> + @cancelForm="cancelReplyForm" + /> <note-signed-out-widget v-if="!canReply" /> </div> </div> diff --git a/app/assets/javascripts/notes/mixins/autosave.js b/app/assets/javascripts/notes/mixins/autosave.js index 36cc8d5d056..4f45f912479 100644 --- a/app/assets/javascripts/notes/mixins/autosave.js +++ b/app/assets/javascripts/notes/mixins/autosave.js @@ -4,12 +4,18 @@ import { capitalizeFirstCharacter } from '../../lib/utils/text_utility'; export default { methods: { - initAutoSave(noteable) { - this.autosave = new Autosave($(this.$refs.noteForm.$refs.textarea), [ + initAutoSave(noteable, extraKeys = []) { + let keys = [ 'Note', - capitalizeFirstCharacter(noteable.noteable_type), + capitalizeFirstCharacter(noteable.noteable_type || noteable.noteableType), noteable.id, - ]); + ]; + + if (extraKeys) { + keys = keys.concat(extraKeys); + } + + this.autosave = new Autosave($(this.$refs.noteForm.$refs.textarea), keys); }, resetAutoSave() { this.autosave.reset(); @@ -17,5 +23,8 @@ export default { setAutoSave() { this.autosave.save(); }, + disposeAutoSave() { + this.autosave.dispose(); + }, }, }; diff --git a/app/assets/javascripts/notes/stores/getters.js b/app/assets/javascripts/notes/stores/getters.js index 5c65e1c3bb5..e9e95dd4219 100644 --- a/app/assets/javascripts/notes/stores/getters.js +++ b/app/assets/javascripts/notes/stores/getters.js @@ -28,18 +28,6 @@ export const notesById = state => return acc; }, {}); -export const discussionsByLineCode = state => - state.discussions.reduce((acc, note) => { - if (note.diff_discussion && note.line_code && note.resolvable) { - // For context about line notes: there might be multiple notes with the same line code - const items = acc[note.line_code] || []; - items.push(note); - - Object.assign(acc, { [note.line_code]: items }); - } - return acc; - }, {}); - export const noteableType = state => { const { ISSUE_NOTEABLE_TYPE, MERGE_REQUEST_NOTEABLE_TYPE, EPIC_NOTEABLE_TYPE } = constants; diff --git a/app/assets/javascripts/vue_shared/components/icon.vue b/app/assets/javascripts/vue_shared/components/icon.vue index c42c4a1fbe7..e7ff76c8218 100644 --- a/app/assets/javascripts/vue_shared/components/icon.vue +++ b/app/assets/javascripts/vue_shared/components/icon.vue @@ -1,24 +1,40 @@ <script> -/* This is a re-usable vue component for rendering a svg sprite - icon - Sample configuration: - - <icon - name="retry" - :size="32" - css-classes="top" - /> - -*/ // only allow classes in images.scss e.g. s12 const validSizes = [8, 12, 16, 18, 24, 32, 48, 72]; +let iconValidator = () => true; + +/* + During development/tests we want to validate that we are just using icons that are actually defined +*/ +if (process.env.NODE_ENV !== 'production') { + // eslint-disable-next-line global-require + const data = require('@gitlab-org/gitlab-svgs/dist/icons.json'); + const { icons } = data; + iconValidator = value => { + if (icons.includes(value)) { + return true; + } + // eslint-disable-next-line no-console + console.warn(`Icon '${value}' is not a known icon of @gitlab/gitlab-svg`); + return false; + }; +} +/** This is a re-usable vue component for rendering a svg sprite icon + * @example + * <icon + * name="retry" + * :size="32" + * css-classes="top" + * /> + */ export default { props: { name: { type: String, required: true, + validator: iconValidator, }, size: { @@ -83,6 +99,6 @@ export default { :x="x" :y="y" > - <use v-bind="{ 'xlink:href':spriteHref }" /> + <use v-bind="{ 'xlink:href':spriteHref }"/> </svg> </template> diff --git a/app/assets/javascripts/vue_shared/components/reports/help_popover.vue b/app/assets/javascripts/vue_shared/components/reports/help_popover.vue new file mode 100644 index 00000000000..c5faa29fd2a --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/reports/help_popover.vue @@ -0,0 +1,48 @@ +<script> +import $ from 'jquery'; +import Icon from '~/vue_shared/components/icon.vue'; +import { inserted } from '~/feature_highlight/feature_highlight_helper'; +import { mouseenter, debouncedMouseleave, togglePopover } from '~/shared/popover'; + +export default { + name: 'ReportsHelpPopover', + components: { + Icon, + }, + props: { + options: { + type: Object, + required: true, + }, + }, + mounted() { + const $el = $(this.$el); + + $el + .popover({ + html: true, + trigger: 'focus', + container: 'body', + placement: 'top', + template: + '<div class="popover" role="tooltip"><div class="arrow"></div><p class="popover-header"></p><div class="popover-body"></div></div>', + ...this.options, + }) + .on('mouseenter', mouseenter) + .on('mouseleave', debouncedMouseleave(300)) + .on('inserted.bs.popover', inserted) + .on('show.bs.popover', () => { + window.addEventListener('scroll', togglePopover.bind($el, false), { once: true }); + }); + }, +}; +</script> +<template> + <button + type="button" + class="btn btn-blank btn-transparent btn-help" + tabindex="0" + > + <icon name="question" /> + </button> +</template> diff --git a/app/assets/javascripts/vue_shared/components/reports/issues_list.vue b/app/assets/javascripts/vue_shared/components/reports/issues_list.vue new file mode 100644 index 00000000000..e1e03e39ee0 --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/reports/issues_list.vue @@ -0,0 +1,99 @@ +<script> +import IssuesBlock from './report_issues.vue'; + +/** + * Renders block of issues + */ + +export default { + components: { + IssuesBlock, + }, + props: { + unresolvedIssues: { + type: Array, + required: false, + default: () => [], + }, + resolvedIssues: { + type: Array, + required: false, + default: () => [], + }, + neutralIssues: { + type: Array, + required: false, + default: () => [], + }, + allIssues: { + type: Array, + required: false, + default: () => [], + }, + type: { + type: String, + required: true, + }, + }, + data() { + return { + isFullReportVisible: false, + }; + }, + computed: { + unresolvedIssuesStatus() { + return this.type === 'license' ? 'neutral' : 'failed'; + }, + }, + methods: { + openFullReport() { + this.isFullReportVisible = true; + }, + }, +}; +</script> +<template> + <div class="report-block-container"> + + <issues-block + v-if="unresolvedIssues.length" + :type="type" + :status="unresolvedIssuesStatus" + :issues="unresolvedIssues" + class="js-mr-code-new-issues" + /> + + <issues-block + v-if="isFullReportVisible" + :type="type" + :issues="allIssues" + class="js-mr-code-all-issues" + status="failed" + /> + + <issues-block + v-if="neutralIssues.length" + :type="type" + :issues="neutralIssues" + class="js-mr-code-non-issues" + status="neutral" + /> + + <issues-block + v-if="resolvedIssues.length" + :type="type" + :issues="resolvedIssues" + class="js-mr-code-resolved-issues" + status="success" + /> + + <button + v-if="allIssues.length && !isFullReportVisible" + type="button" + class="btn-link btn-blank prepend-left-10 js-expand-full-list break-link" + @click="openFullReport" + > + {{ s__("ciReport|Show complete code vulnerabilities report") }} + </button> + </div> +</template> diff --git a/app/assets/javascripts/vue_shared/components/reports/modal_open_name.vue b/app/assets/javascripts/vue_shared/components/reports/modal_open_name.vue new file mode 100644 index 00000000000..4f81cee2a38 --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/reports/modal_open_name.vue @@ -0,0 +1,33 @@ +<script> +import { mapActions } from 'vuex'; + +export default { + props: { + issue: { + type: Object, + required: true, + }, + // failed || success + status: { + type: String, + required: true, + }, + }, + methods: { + ...mapActions(['openModal']), + handleIssueClick() { + const { issue, status, openModal } = this; + openModal({ issue, status }); + }, + }, +}; +</script> +<template> + <button + type="button" + class="btn-link btn-blank text-left break-link vulnerability-name-button" + @click="handleIssueClick()" + > + {{ issue.title }} + </button> +</template> diff --git a/app/assets/javascripts/vue_shared/components/reports/report_issues.vue b/app/assets/javascripts/vue_shared/components/reports/report_issues.vue new file mode 100644 index 00000000000..ecffb02a3a0 --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/reports/report_issues.vue @@ -0,0 +1,72 @@ +<script> +import Icon from '~/vue_shared/components/icon.vue'; + +export default { + name: 'ReportIssues', + components: { + Icon, + }, + props: { + issues: { + type: Array, + required: true, + }, + type: { + type: String, + required: true, + }, + // failed || success + status: { + type: String, + required: true, + }, + }, + computed: { + iconName() { + if (this.isStatusFailed) { + return 'status_failed_borderless'; + } else if (this.isStatusSuccess) { + return 'status_success_borderless'; + } + + return 'status_created_borderless'; + }, + isStatusFailed() { + return this.status === 'failed'; + }, + isStatusSuccess() { + return this.status === 'success'; + }, + isStatusNeutral() { + return this.status === 'neutral'; + }, + }, +}; +</script> +<template> + <div> + <ul class="report-block-list"> + <li + v-for="(issue, index) in issues" + :class="{ 'is-dismissed': issue.isDismissed }" + :key="index" + class="report-block-list-issue" + > + <div + :class="{ + failed: isStatusFailed, + success: isStatusSuccess, + neutral: isStatusNeutral, + }" + class="report-block-list-icon append-right-5" + > + <icon + :name="iconName" + :size="32" + /> + </div> + + </li> + </ul> + </div> +</template> diff --git a/app/assets/javascripts/vue_shared/components/reports/report_link.vue b/app/assets/javascripts/vue_shared/components/reports/report_link.vue new file mode 100644 index 00000000000..74d68f9f439 --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/reports/report_link.vue @@ -0,0 +1,29 @@ +<script> +export default { + name: 'ReportIssueLink', + props: { + issue: { + type: Object, + required: true, + }, + }, +}; +</script> +<template> + <div class="report-block-list-issue-description-link"> + in + + <a + v-if="issue.urlPath" + :href="issue.urlPath" + target="_blank" + rel="noopener noreferrer nofollow" + class="break-link" + > + {{ issue.path }}<template v-if="issue.line">:{{ issue.line }}</template> + </a> + <template v-else> + {{ issue.path }}<template v-if="issue.line">:{{ issue.line }}</template> + </template> + </div> +</template> diff --git a/app/assets/javascripts/vue_shared/components/reports/report_section.vue b/app/assets/javascripts/vue_shared/components/reports/report_section.vue new file mode 100644 index 00000000000..d383ed99a0c --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/reports/report_section.vue @@ -0,0 +1,192 @@ +<script> +import { __ } from '~/locale'; +import StatusIcon from '~/vue_merge_request_widget/components/mr_widget_status_icon.vue'; +import IssuesList from './issues_list.vue'; +import Popover from './help_popover.vue'; + +const LOADING = 'LOADING'; +const ERROR = 'ERROR'; +const SUCCESS = 'SUCCESS'; + +export default { + name: 'ReportSection', + components: { + IssuesList, + StatusIcon, + Popover, + }, + props: { + alwaysOpen: { + type: Boolean, + required: false, + default: false, + }, + type: { + type: String, + required: false, + default: '', + }, + status: { + type: String, + required: true, + }, + loadingText: { + type: String, + required: false, + default: '', + }, + errorText: { + type: String, + required: false, + default: '', + }, + successText: { + type: String, + required: true, + }, + unresolvedIssues: { + type: Array, + required: false, + default: () => [], + }, + resolvedIssues: { + type: Array, + required: false, + default: () => [], + }, + neutralIssues: { + type: Array, + required: false, + default: () => [], + }, + allIssues: { + type: Array, + required: false, + default: () => [], + }, + infoText: { + type: [String, Boolean], + required: false, + default: false, + }, + hasIssues: { + type: Boolean, + required: true, + }, + popoverOptions: { + type: Object, + default: () => ({}), + required: false, + }, + }, + + data() { + return { + isCollapsed: true, + }; + }, + + computed: { + collapseText() { + return this.isCollapsed ? __('Expand') : __('Collapse'); + }, + isLoading() { + return this.status === LOADING; + }, + loadingFailed() { + return this.status === ERROR; + }, + isSuccess() { + return this.status === SUCCESS; + }, + isCollapsible() { + return !this.alwaysOpen && this.hasIssues; + }, + isExpanded() { + return this.alwaysOpen || !this.isCollapsed; + }, + statusIconName() { + if (this.isLoading) { + return 'loading'; + } + if (this.loadingFailed || this.unresolvedIssues.length || this.neutralIssues.length) { + return 'warning'; + } + return 'success'; + }, + headerText() { + if (this.isLoading) { + return this.loadingText; + } + + if (this.isSuccess) { + return this.successText; + } + + if (this.loadingFailed) { + return this.errorText; + } + + return ''; + }, + hasPopover() { + return Object.keys(this.popoverOptions).length > 0; + }, + }, + methods: { + toggleCollapsed() { + this.isCollapsed = !this.isCollapsed; + }, + }, +}; +</script> +<template> + <section class="media-section"> + <div + class="media" + > + <status-icon + :status="statusIconName" + /> + <div + class="media-body space-children d-flex" + > + <span + class="js-code-text code-text" + > + {{ headerText }} + + <popover + v-if="hasPopover" + :options="popoverOptions" + class="prepend-left-5" + /> + </span> + + <button + v-if="isCollapsible" + type="button" + class="js-collapse-btn btn bt-default float-right btn-sm" + @click="toggleCollapsed" + > + {{ collapseText }} + </button> + </div> + </div> + + <div + v-if="hasIssues" + v-show="isExpanded" + class="js-report-section-container" + > + <slot name="body"> + <issues-list + :unresolved-issues="unresolvedIssues" + :resolved-issues="resolvedIssues" + :all-issues="allIssues" + :type="type" + /> + </slot> + </div> + </section> +</template> diff --git a/app/assets/javascripts/vue_shared/components/reports/summary_row.vue b/app/assets/javascripts/vue_shared/components/reports/summary_row.vue new file mode 100644 index 00000000000..997bad960e2 --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/reports/summary_row.vue @@ -0,0 +1,66 @@ +<script> +import CiIcon from '~/vue_shared/components/ci_icon.vue'; +import LoadingIcon from '~/vue_shared/components/loading_icon.vue'; +import Popover from './help_popover.vue'; + +/** + * Renders the summary row for each report + * + * Used both in MR widget and Pipeline's view for: + * - Unit tests reports + * - Security reports + */ + +export default { + name: 'ReportSummaryRow', + components: { + CiIcon, + LoadingIcon, + Popover, + }, + props: { + summary: { + type: String, + required: true, + }, + statusIcon: { + type: String, + required: true, + }, + popoverOptions: { + type: Object, + required: true, + }, + }, + computed: { + iconStatus() { + return { + group: this.statusIcon, + icon: `status_${this.statusIcon}`, + }; + }, + }, +}; +</script> +<template> + <div class="report-block-list-issue report-block-list-issue-parent"> + <div class="report-block-list-icon append-right-10 prepend-left-5"> + <loading-icon + v-if="statusIcon === 'loading'" + css-class="report-block-list-loading-icon" + /> + <ci-icon + v-else + :status="iconStatus" + /> + </div> + + <div class="report-block-list-issue-description"> + <div class="report-block-list-issue-description-text"> + {{ summary }} + </div> + + <popover :options="popoverOptions" /> + </div> + </div> +</template> diff --git a/app/assets/stylesheets/framework/panels.scss b/app/assets/stylesheets/framework/panels.scss index a8e28104a94..5ca4d944d73 100644 --- a/app/assets/stylesheets/framework/panels.scss +++ b/app/assets/stylesheets/framework/panels.scss @@ -47,7 +47,6 @@ .card-body { padding: $gl-padding; - background-color: $white-light; .form-actions { margin: -$gl-padding; diff --git a/app/assets/stylesheets/framework/variables.scss b/app/assets/stylesheets/framework/variables.scss index 6cfa09b56a7..6c2fdbe0608 100644 --- a/app/assets/stylesheets/framework/variables.scss +++ b/app/assets/stylesheets/framework/variables.scss @@ -297,7 +297,6 @@ $performance-bar-height: 35px; $flash-height: 52px; $context-header-height: 60px; $breadcrumb-min-height: 48px; -$gcp-signup-offer-icon-max-width: 125px; /* * Common component specific colors diff --git a/app/assets/stylesheets/pages/clusters.scss b/app/assets/stylesheets/pages/clusters.scss index 56beb7718a4..0f22fe21143 100644 --- a/app/assets/stylesheets/pages/clusters.scss +++ b/app/assets/stylesheets/pages/clusters.scss @@ -32,49 +32,23 @@ } .gcp-signup-offer { - background-color: $blue-50; - border: 1px solid $blue-300; - border-radius: $border-radius-default; + border-left-color: $blue-500; - // TODO: To be superceded by cssLab - &.alert { - padding: 24px 16px; - - &-dismissable { - padding-right: 32px; - - .close { - top: -8px; - right: -16px; - color: $blue-500; - opacity: 1; - } - } - } - - .gcp-logo { - margin-bottom: $gl-padding; - text-align: center; - } - - img { - max-width: $gcp-signup-offer-icon-max-width; + svg { + fill: $blue-500; + vertical-align: middle; } - a:not(.btn) { - color: $gl-link-color; - font-weight: normal; - text-decoration: none; - } + .gcp-signup-offer--content { + display: flex; - @include media-breakpoint-up(sm) { - > div { - display: flex; - align-items: center; + h4 { + font-size: 16px; + line-height: 24px; } - .gcp-logo { - margin: 0; + .gcp-signup-offer--icon { + align-self: flex-start; } } } diff --git a/app/assets/stylesheets/pages/environments.scss b/app/assets/stylesheets/pages/environments.scss index 3144dcc4dc0..8915b323b3c 100644 --- a/app/assets/stylesheets/pages/environments.scss +++ b/app/assets/stylesheets/pages/environments.scss @@ -293,6 +293,8 @@ .prometheus-graph-flag { display: block; min-width: 160px; + border: 0; + box-shadow: 0 1px 4px 0 $black-transparent; h5 { padding: 0; @@ -312,7 +314,6 @@ &.popover { padding: 0; - border: 1px solid $border-color; &.left { left: auto; @@ -320,12 +321,19 @@ margin-right: 10px; > .arrow { - right: -16px; + right: -14px; border-left-color: $border-color; } > .arrow::after { - border-left-color: $theme-gray-50; + border-top: 6px solid transparent; + border-bottom: 6px solid transparent; + border-left: 4px solid $theme-gray-50; + } + + .arrow-shadow { + right: -3px; + box-shadow: 1px 0 9px 0 $black-transparent; } } @@ -335,19 +343,35 @@ margin-left: 10px; > .arrow { - left: -16px; + left: -7px; border-right-color: $border-color; } > .arrow::after { - border-right-color: $theme-gray-50; + border-top: 6px solid transparent; + border-bottom: 6px solid transparent; + border-right: 4px solid $theme-gray-50; + } + + .arrow-shadow { + left: -3px; + box-shadow: 1px 0 8px 0 $black-transparent; } } > .arrow { - top: 16px; - margin-top: -8px; - border-width: 8px; + top: 10px; + margin: 0; + } + + .arrow-shadow { + content: ""; + position: absolute; + width: 7px; + height: 7px; + background-color: transparent; + transform: rotate(45deg); + top: 13px; } > .popover-title, @@ -355,10 +379,12 @@ padding: 8px; font-size: 12px; white-space: nowrap; + position: relative; } > .popover-title { background-color: $theme-gray-50; + border-radius: $border-radius-default $border-radius-default 0 0; } } diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index f45fcd4d900..eeceb99c8d2 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -11,6 +11,7 @@ class ApplicationController < ActionController::Base include EnforcesTwoFactorAuthentication include WithPerformanceBar + before_action :limit_unauthenticated_session_times before_action :authenticate_sessionless_user! before_action :authenticate_user! before_action :enforce_terms!, if: :should_enforce_terms? @@ -85,6 +86,24 @@ class ApplicationController < ActionController::Base end end + # By default, all sessions are given the same expiration time configured in + # the session store (e.g. 1 week). However, unauthenticated users can + # generate a lot of sessions, primarily for CSRF verification. It makes + # sense to reduce the TTL for unauthenticated to something much lower than + # the default (e.g. 1 hour) to limit Redis memory. In addition, Rails + # creates a new session after login, so the short TTL doesn't even need to + # be extended. + def limit_unauthenticated_session_times + return if current_user + + # Rack sets this header, but not all tests may have it: https://github.com/rack/rack/blob/fdcd03a3c5a1c51d1f96fc97f9dfa1a9deac0c77/lib/rack/session/abstract/id.rb#L251-L259 + return unless request.env['rack.session.options'] + + # This works because Rack uses these options every time a request is handled: + # https://github.com/rack/rack/blob/fdcd03a3c5a1c51d1f96fc97f9dfa1a9deac0c77/lib/rack/session/abstract/id.rb#L342 + request.env['rack.session.options'][:expire_after] = Settings.gitlab['unauthenticated_session_expire_delay'] + end + protected def append_info_to_payload(payload) diff --git a/app/helpers/icons_helper.rb b/app/helpers/icons_helper.rb index 2f304b040c7..41084ec686f 100644 --- a/app/helpers/icons_helper.rb +++ b/app/helpers/icons_helper.rb @@ -1,3 +1,5 @@ +require 'json' + module IconsHelper extend self include FontAwesome::Rails::IconHelper @@ -38,6 +40,13 @@ module IconsHelper end def sprite_icon(icon_name, size: nil, css_class: nil) + if Gitlab::Sentry.should_raise? + unless known_sprites.include?(icon_name) + exception = ArgumentError.new("#{icon_name} is not a known icon in @gitlab-org/gitlab-svg") + raise exception + end + end + css_classes = size ? "s#{size}" : "" css_classes << " #{css_class}" unless css_class.blank? content_tag(:svg, content_tag(:use, "", { "xlink:href" => "#{sprite_icon_path}##{icon_name}" } ), class: css_classes.empty? ? nil : css_classes) @@ -134,4 +143,10 @@ module IconsHelper icon_class end + + private + + def known_sprites + @known_sprites ||= JSON.parse(File.read(Rails.root.join('node_modules/@gitlab-org/gitlab-svgs/dist/icons.json')))['icons'] + end end diff --git a/app/helpers/search_helper.rb b/app/helpers/search_helper.rb index f7dafca7834..cadb88ba632 100644 --- a/app/helpers/search_helper.rb +++ b/app/helpers/search_helper.rb @@ -105,7 +105,8 @@ module SearchHelper category: "Groups", id: group.id, label: "#{search_result_sanitize(group.full_name)}", - url: group_path(group) + url: group_path(group), + avatar_url: group.avatar_url || '' } end end @@ -119,7 +120,8 @@ module SearchHelper id: p.id, value: "#{search_result_sanitize(p.name)}", label: "#{search_result_sanitize(p.full_name)}", - url: project_path(p) + url: project_path(p), + avatar_url: p.avatar_url || '' } end end diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index 3d72c447b4b..a073bbfad20 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -182,7 +182,7 @@ class MergeRequestDiff < ActiveRecord::Base end def diffs(diff_options = nil) - if without_files? && comparison = diff_refs.compare_in(project) + if without_files? && comparison = diff_refs&.compare_in(project) # It should fetch the repository when diffs are cleaned by the system. # We don't keep these for storage overload purposes. # See https://gitlab.com/gitlab-org/gitlab-ce/issues/37639 diff --git a/app/models/repository.rb b/app/models/repository.rb index a96c73e6ab7..e248f94cbd8 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -154,12 +154,9 @@ class Repository # Returns a list of commits that are not present in any reference def new_commits(newrev) - # Gitaly migration: https://gitlab.com/gitlab-org/gitaly/issues/1233 - refs = Gitlab::GitalyClient::StorageSettings.allow_disk_access do - ::Gitlab::Git::RevList.new(raw, newrev: newrev).new_refs - end + commits = raw.new_commits(newrev) - refs.map { |sha| commit(sha.strip) } + ::Commit.decorate(commits, project) end # Gitaly migration: https://gitlab.com/gitlab-org/gitaly/issues/384 diff --git a/app/serializers/discussion_entity.rb b/app/serializers/discussion_entity.rb index 8a39a4950f5..7505bbdeb3d 100644 --- a/app/serializers/discussion_entity.rb +++ b/app/serializers/discussion_entity.rb @@ -4,6 +4,7 @@ class DiscussionEntity < Grape::Entity expose :id, :reply_id expose :position, if: -> (d, _) { d.diff_discussion? && !d.legacy_diff_discussion? } + expose :original_position, if: -> (d, _) { d.diff_discussion? && !d.legacy_diff_discussion? } expose :line_code, if: -> (d, _) { d.diff_discussion? } expose :expanded?, as: :expanded expose :active?, as: :active, if: -> (d, _) { d.diff_discussion? } diff --git a/app/services/application_settings/base_service.rb b/app/services/application_settings/base_service.rb index 2bcc7d7c08b..ebe067536ca 100644 --- a/app/services/application_settings/base_service.rb +++ b/app/services/application_settings/base_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module ApplicationSettings class BaseService < ::BaseService def initialize(application_setting, user, params = {}) diff --git a/app/services/application_settings/update_service.rb b/app/services/application_settings/update_service.rb index 7bcb8f49d0d..19cf34e2ac4 100644 --- a/app/services/application_settings/update_service.rb +++ b/app/services/application_settings/update_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module ApplicationSettings class UpdateService < ApplicationSettings::BaseService attr_reader :params, :application_setting diff --git a/app/services/applications/create_service.rb b/app/services/applications/create_service.rb index 94a434b95dd..7db90c0b3c6 100644 --- a/app/services/applications/create_service.rb +++ b/app/services/applications/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Applications class CreateService def initialize(current_user, params) diff --git a/app/services/auth/container_registry_authentication_service.rb b/app/services/auth/container_registry_authentication_service.rb index f28cddb2af3..81857d0cb4c 100644 --- a/app/services/auth/container_registry_authentication_service.rb +++ b/app/services/auth/container_registry_authentication_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Auth class ContainerRegistryAuthenticationService < BaseService AUDIENCE = 'container_registry'.freeze diff --git a/app/services/badges/base_service.rb b/app/services/badges/base_service.rb index 4f87426bd38..45fc9ac4373 100644 --- a/app/services/badges/base_service.rb +++ b/app/services/badges/base_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Badges class BaseService protected diff --git a/app/services/badges/build_service.rb b/app/services/badges/build_service.rb index 6267e571838..e5ede1586b6 100644 --- a/app/services/badges/build_service.rb +++ b/app/services/badges/build_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Badges class BuildService < Badges::BaseService # returns the created badge diff --git a/app/services/badges/create_service.rb b/app/services/badges/create_service.rb index aafb87f7dcd..4a55a00daeb 100644 --- a/app/services/badges/create_service.rb +++ b/app/services/badges/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Badges class CreateService < Badges::BaseService # returns the created badge diff --git a/app/services/badges/update_service.rb b/app/services/badges/update_service.rb index 495a4a2c99d..a653b7903dd 100644 --- a/app/services/badges/update_service.rb +++ b/app/services/badges/update_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Badges class UpdateService < Badges::BaseService # returns the updated badge diff --git a/app/services/boards/base_service.rb b/app/services/boards/base_service.rb index 72822ffffa1..205db47888e 100644 --- a/app/services/boards/base_service.rb +++ b/app/services/boards/base_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Boards class BaseService < ::BaseService # Parent can either a group or a project diff --git a/app/services/boards/create_service.rb b/app/services/boards/create_service.rb index bd0bb387662..4caf5ffa3cb 100644 --- a/app/services/boards/create_service.rb +++ b/app/services/boards/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Boards class CreateService < Boards::BaseService def execute diff --git a/app/services/boards/issues/create_service.rb b/app/services/boards/issues/create_service.rb index 3025029755c..bd045e18b8d 100644 --- a/app/services/boards/issues/create_service.rb +++ b/app/services/boards/issues/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Boards module Issues class CreateService < Boards::BaseService diff --git a/app/services/boards/issues/list_service.rb b/app/services/boards/issues/list_service.rb index b1dbe73cdf7..50c11be0d15 100644 --- a/app/services/boards/issues/list_service.rb +++ b/app/services/boards/issues/list_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Boards module Issues class ListService < Boards::BaseService diff --git a/app/services/boards/issues/move_service.rb b/app/services/boards/issues/move_service.rb index ee3112c7571..6fd8a23b2a1 100644 --- a/app/services/boards/issues/move_service.rb +++ b/app/services/boards/issues/move_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Boards module Issues class MoveService < Boards::BaseService diff --git a/app/services/boards/list_service.rb b/app/services/boards/list_service.rb index 9269b8d2620..edd1cc7c2e1 100644 --- a/app/services/boards/list_service.rb +++ b/app/services/boards/list_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Boards class ListService < Boards::BaseService def execute diff --git a/app/services/boards/lists/create_service.rb b/app/services/boards/lists/create_service.rb index 6fd9885d4f3..48d2d5abaec 100644 --- a/app/services/boards/lists/create_service.rb +++ b/app/services/boards/lists/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Boards module Lists class CreateService < Boards::BaseService diff --git a/app/services/boards/lists/destroy_service.rb b/app/services/boards/lists/destroy_service.rb index d75c5fd3dc6..e12d4f46e19 100644 --- a/app/services/boards/lists/destroy_service.rb +++ b/app/services/boards/lists/destroy_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Boards module Lists class DestroyService < Boards::BaseService diff --git a/app/services/boards/lists/generate_service.rb b/app/services/boards/lists/generate_service.rb index 05d4ab5dbcc..4fbf1026019 100644 --- a/app/services/boards/lists/generate_service.rb +++ b/app/services/boards/lists/generate_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Boards module Lists class GenerateService < Boards::BaseService diff --git a/app/services/boards/lists/list_service.rb b/app/services/boards/lists/list_service.rb index e57c95294af..e10eb52e041 100644 --- a/app/services/boards/lists/list_service.rb +++ b/app/services/boards/lists/list_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Boards module Lists class ListService < Boards::BaseService diff --git a/app/services/boards/lists/move_service.rb b/app/services/boards/lists/move_service.rb index 7d0730e8332..27a36051662 100644 --- a/app/services/boards/lists/move_service.rb +++ b/app/services/boards/lists/move_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Boards module Lists class MoveService < Boards::BaseService diff --git a/app/services/chat_names/authorize_user_service.rb b/app/services/chat_names/authorize_user_service.rb index 7256466c9e8..78b53cb3637 100644 --- a/app/services/chat_names/authorize_user_service.rb +++ b/app/services/chat_names/authorize_user_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module ChatNames class AuthorizeUserService include Gitlab::Routing diff --git a/app/services/chat_names/find_user_service.rb b/app/services/chat_names/find_user_service.rb index d458b814183..854b191c45c 100644 --- a/app/services/chat_names/find_user_service.rb +++ b/app/services/chat_names/find_user_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module ChatNames class FindUserService def initialize(service, params) diff --git a/app/services/ci/create_pipeline_schedule_service.rb b/app/services/ci/create_pipeline_schedule_service.rb index cd40deb6187..0d5f50c26a1 100644 --- a/app/services/ci/create_pipeline_schedule_service.rb +++ b/app/services/ci/create_pipeline_schedule_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Ci class CreatePipelineScheduleService < BaseService def execute diff --git a/app/services/ci/create_pipeline_service.rb b/app/services/ci/create_pipeline_service.rb index 17a53b6a8fd..85df8bcff8c 100644 --- a/app/services/ci/create_pipeline_service.rb +++ b/app/services/ci/create_pipeline_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Ci class CreatePipelineService < BaseService attr_reader :pipeline diff --git a/app/services/ci/ensure_stage_service.rb b/app/services/ci/ensure_stage_service.rb index b8c7be2d350..3d0e39d1b9f 100644 --- a/app/services/ci/ensure_stage_service.rb +++ b/app/services/ci/ensure_stage_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Ci ## # We call this service everytime we persist a CI/CD job. diff --git a/app/services/ci/extract_sections_from_build_trace_service.rb b/app/services/ci/extract_sections_from_build_trace_service.rb index 75f9e0f897d..693f6d55be3 100644 --- a/app/services/ci/extract_sections_from_build_trace_service.rb +++ b/app/services/ci/extract_sections_from_build_trace_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Ci class ExtractSectionsFromBuildTraceService < BaseService def execute(build) diff --git a/app/services/ci/fetch_kubernetes_token_service.rb b/app/services/ci/fetch_kubernetes_token_service.rb index bca883ec0a0..15eda56cac6 100644 --- a/app/services/ci/fetch_kubernetes_token_service.rb +++ b/app/services/ci/fetch_kubernetes_token_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + ## # TODO: # Almost components in this class were copied from app/models/project_services/kubernetes_service.rb diff --git a/app/services/ci/pipeline_trigger_service.rb b/app/services/ci/pipeline_trigger_service.rb index 85533a1cbdb..f54574b026b 100644 --- a/app/services/ci/pipeline_trigger_service.rb +++ b/app/services/ci/pipeline_trigger_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Ci class PipelineTriggerService < BaseService include Gitlab::Utils::StrongMemoize diff --git a/app/services/ci/play_build_service.rb b/app/services/ci/play_build_service.rb index e24f48c2d16..eb0b070657d 100644 --- a/app/services/ci/play_build_service.rb +++ b/app/services/ci/play_build_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Ci class PlayBuildService < ::BaseService def execute(build) diff --git a/app/services/ci/process_pipeline_service.rb b/app/services/ci/process_pipeline_service.rb index 55af193d717..cda9bbff3b4 100644 --- a/app/services/ci/process_pipeline_service.rb +++ b/app/services/ci/process_pipeline_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Ci class ProcessPipelineService < BaseService attr_reader :pipeline diff --git a/app/services/ci/register_job_service.rb b/app/services/ci/register_job_service.rb index 6eb1c4f52de..f7ccec3a700 100644 --- a/app/services/ci/register_job_service.rb +++ b/app/services/ci/register_job_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Ci # This class responsible for assigning # proper pending build to runner on runner API request diff --git a/app/services/ci/retry_build_service.rb b/app/services/ci/retry_build_service.rb index 6128b2a8fbb..6ceb59e4780 100644 --- a/app/services/ci/retry_build_service.rb +++ b/app/services/ci/retry_build_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Ci class RetryBuildService < ::BaseService CLONE_ACCESSORS = %i[pipeline project ref tag options commands name diff --git a/app/services/ci/retry_pipeline_service.rb b/app/services/ci/retry_pipeline_service.rb index c5a43869990..42a13367a99 100644 --- a/app/services/ci/retry_pipeline_service.rb +++ b/app/services/ci/retry_pipeline_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Ci class RetryPipelineService < ::BaseService include Gitlab::OptimisticLocking diff --git a/app/services/ci/stop_environments_service.rb b/app/services/ci/stop_environments_service.rb index 439746e82bd..973ae5ce5aa 100644 --- a/app/services/ci/stop_environments_service.rb +++ b/app/services/ci/stop_environments_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Ci class StopEnvironmentsService < BaseService attr_reader :ref diff --git a/app/services/ci/update_build_queue_service.rb b/app/services/ci/update_build_queue_service.rb index 41b1c144c3e..9c589d910eb 100644 --- a/app/services/ci/update_build_queue_service.rb +++ b/app/services/ci/update_build_queue_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Ci class UpdateBuildQueueService def execute(build) diff --git a/app/services/ci/update_runner_service.rb b/app/services/ci/update_runner_service.rb index 450ee7da1c9..e4117a51fe6 100644 --- a/app/services/ci/update_runner_service.rb +++ b/app/services/ci/update_runner_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Ci class UpdateRunnerService attr_reader :runner diff --git a/app/services/clusters/applications/base_helm_service.rb b/app/services/clusters/applications/base_helm_service.rb index cba1b920f7c..270a8eb24f4 100644 --- a/app/services/clusters/applications/base_helm_service.rb +++ b/app/services/clusters/applications/base_helm_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Clusters module Applications class BaseHelmService diff --git a/app/services/clusters/applications/check_ingress_ip_address_service.rb b/app/services/clusters/applications/check_ingress_ip_address_service.rb index e572b1e5d99..f32e73e8b1c 100644 --- a/app/services/clusters/applications/check_ingress_ip_address_service.rb +++ b/app/services/clusters/applications/check_ingress_ip_address_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Clusters module Applications class CheckIngressIpAddressService < BaseHelmService diff --git a/app/services/clusters/applications/check_installation_progress_service.rb b/app/services/clusters/applications/check_installation_progress_service.rb index 90393e951a4..4640c5a2d4b 100644 --- a/app/services/clusters/applications/check_installation_progress_service.rb +++ b/app/services/clusters/applications/check_installation_progress_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Clusters module Applications class CheckInstallationProgressService < BaseHelmService diff --git a/app/services/clusters/applications/install_service.rb b/app/services/clusters/applications/install_service.rb index 7ec3a9baa6e..7e3c0e77a83 100644 --- a/app/services/clusters/applications/install_service.rb +++ b/app/services/clusters/applications/install_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Clusters module Applications class InstallService < BaseHelmService diff --git a/app/services/clusters/applications/schedule_installation_service.rb b/app/services/clusters/applications/schedule_installation_service.rb index 9c5461e85e1..4ead4f619c8 100644 --- a/app/services/clusters/applications/schedule_installation_service.rb +++ b/app/services/clusters/applications/schedule_installation_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Clusters module Applications class ScheduleInstallationService < ::BaseService diff --git a/app/services/clusters/create_service.rb b/app/services/clusters/create_service.rb index 418888e3293..e3e0cfa462c 100644 --- a/app/services/clusters/create_service.rb +++ b/app/services/clusters/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Clusters class CreateService < BaseService attr_reader :access_token diff --git a/app/services/clusters/gcp/fetch_operation_service.rb b/app/services/clusters/gcp/fetch_operation_service.rb index a4cd3ca5c11..02c96a1e286 100644 --- a/app/services/clusters/gcp/fetch_operation_service.rb +++ b/app/services/clusters/gcp/fetch_operation_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Clusters module Gcp class FetchOperationService diff --git a/app/services/clusters/gcp/finalize_creation_service.rb b/app/services/clusters/gcp/finalize_creation_service.rb index 84944e95542..264419501dc 100644 --- a/app/services/clusters/gcp/finalize_creation_service.rb +++ b/app/services/clusters/gcp/finalize_creation_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Clusters module Gcp class FinalizeCreationService diff --git a/app/services/clusters/gcp/provision_service.rb b/app/services/clusters/gcp/provision_service.rb index 8beea5a8cfb..ab1bf9c64f6 100644 --- a/app/services/clusters/gcp/provision_service.rb +++ b/app/services/clusters/gcp/provision_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Clusters module Gcp class ProvisionService diff --git a/app/services/clusters/gcp/verify_provision_status_service.rb b/app/services/clusters/gcp/verify_provision_status_service.rb index 7cc4324677e..b24246f5c4b 100644 --- a/app/services/clusters/gcp/verify_provision_status_service.rb +++ b/app/services/clusters/gcp/verify_provision_status_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Clusters module Gcp class VerifyProvisionStatusService diff --git a/app/services/clusters/update_service.rb b/app/services/clusters/update_service.rb index 989218e32a2..98fdeec4fb1 100644 --- a/app/services/clusters/update_service.rb +++ b/app/services/clusters/update_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Clusters class UpdateService < BaseService def execute(cluster) diff --git a/app/services/commits/change_service.rb b/app/services/commits/change_service.rb index 1ce6ab36cbf..2fbd442fc2e 100644 --- a/app/services/commits/change_service.rb +++ b/app/services/commits/change_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Commits class ChangeService < Commits::CreateService def initialize(*args) diff --git a/app/services/commits/cherry_pick_service.rb b/app/services/commits/cherry_pick_service.rb index 320e229560d..4c5b15b2f95 100644 --- a/app/services/commits/cherry_pick_service.rb +++ b/app/services/commits/cherry_pick_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Commits class CherryPickService < ChangeService def create_commit! diff --git a/app/services/commits/create_service.rb b/app/services/commits/create_service.rb index 4d0578becbe..3ce9acc833c 100644 --- a/app/services/commits/create_service.rb +++ b/app/services/commits/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Commits class CreateService < ::BaseService ValidationError = Class.new(StandardError) diff --git a/app/services/commits/revert_service.rb b/app/services/commits/revert_service.rb index dc27399e047..dddb8b24eac 100644 --- a/app/services/commits/revert_service.rb +++ b/app/services/commits/revert_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Commits class RevertService < ChangeService def create_commit! diff --git a/app/services/concerns/exclusive_lease_guard.rb b/app/services/concerns/exclusive_lease_guard.rb index f45436370c1..f102e00d150 100644 --- a/app/services/concerns/exclusive_lease_guard.rb +++ b/app/services/concerns/exclusive_lease_guard.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Concern that helps with getting an exclusive lease for running a block # of code. diff --git a/app/services/concerns/issues/resolve_discussions.rb b/app/services/concerns/issues/resolve_discussions.rb index 455f761ca9b..1563ed965df 100644 --- a/app/services/concerns/issues/resolve_discussions.rb +++ b/app/services/concerns/issues/resolve_discussions.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Issues module ResolveDiscussions include Gitlab::Utils::StrongMemoize diff --git a/app/services/concerns/update_visibility_level.rb b/app/services/concerns/update_visibility_level.rb index 536fcc6acce..b7a161f5089 100644 --- a/app/services/concerns/update_visibility_level.rb +++ b/app/services/concerns/update_visibility_level.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module UpdateVisibilityLevel def valid_visibility_level_change?(target, new_visibility) # check that user is allowed to set specified visibility_level diff --git a/app/services/concerns/users/new_user_notifier.rb b/app/services/concerns/users/new_user_notifier.rb index 231693ce7a9..11547e4a5b6 100644 --- a/app/services/concerns/users/new_user_notifier.rb +++ b/app/services/concerns/users/new_user_notifier.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Users module NewUserNotifier def notify_new_user(user, reset_token) diff --git a/app/services/concerns/users/participable_service.rb b/app/services/concerns/users/participable_service.rb index bf60b96938d..5b408bd96c7 100644 --- a/app/services/concerns/users/participable_service.rb +++ b/app/services/concerns/users/participable_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Users module ParticipableService extend ActiveSupport::Concern diff --git a/app/services/deploy_keys/create_service.rb b/app/services/deploy_keys/create_service.rb index 16de3d08df2..a25e73666f8 100644 --- a/app/services/deploy_keys/create_service.rb +++ b/app/services/deploy_keys/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module DeployKeys class CreateService < Keys::BaseService def execute diff --git a/app/services/deploy_tokens/create_service.rb b/app/services/deploy_tokens/create_service.rb index 52f545947af..dc0122002e9 100644 --- a/app/services/deploy_tokens/create_service.rb +++ b/app/services/deploy_tokens/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module DeployTokens class CreateService < BaseService def execute diff --git a/app/services/discussions/base_service.rb b/app/services/discussions/base_service.rb index e4dfe6e71bb..86b8310f0a6 100644 --- a/app/services/discussions/base_service.rb +++ b/app/services/discussions/base_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Discussions class BaseService < ::BaseService end diff --git a/app/services/discussions/resolve_service.rb b/app/services/discussions/resolve_service.rb index 0437195f588..816cd45b07a 100644 --- a/app/services/discussions/resolve_service.rb +++ b/app/services/discussions/resolve_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Discussions class ResolveService < Discussions::BaseService def execute(one_or_more_discussions) diff --git a/app/services/discussions/update_diff_position_service.rb b/app/services/discussions/update_diff_position_service.rb index 746f209e20f..c61437fb2e3 100644 --- a/app/services/discussions/update_diff_position_service.rb +++ b/app/services/discussions/update_diff_position_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Discussions class UpdateDiffPositionService < BaseService def execute(discussion) diff --git a/app/services/emails/base_service.rb b/app/services/emails/base_service.rb index 5bbceeb3b3f..ba7b689a9af 100644 --- a/app/services/emails/base_service.rb +++ b/app/services/emails/base_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Emails class BaseService def initialize(current_user, params = {}) diff --git a/app/services/emails/confirm_service.rb b/app/services/emails/confirm_service.rb index b5301bf2b82..38204e011dd 100644 --- a/app/services/emails/confirm_service.rb +++ b/app/services/emails/confirm_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Emails class ConfirmService < ::Emails::BaseService def execute(email) diff --git a/app/services/emails/create_service.rb b/app/services/emails/create_service.rb index 94a841af7c3..acf575e24e5 100644 --- a/app/services/emails/create_service.rb +++ b/app/services/emails/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Emails class CreateService < ::Emails::BaseService def execute(extra_params = {}) diff --git a/app/services/emails/destroy_service.rb b/app/services/emails/destroy_service.rb index 1ed131fe326..9ca1a03e172 100644 --- a/app/services/emails/destroy_service.rb +++ b/app/services/emails/destroy_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Emails class DestroyService < ::Emails::BaseService def execute(email) diff --git a/app/services/events/render_service.rb b/app/services/events/render_service.rb index bb72d7685dd..50429683902 100644 --- a/app/services/events/render_service.rb +++ b/app/services/events/render_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Events class RenderService < BaseRenderer def execute(events, atom_request: false) diff --git a/app/services/files/base_service.rb b/app/services/files/base_service.rb index 8d4b9f14780..025f093a428 100644 --- a/app/services/files/base_service.rb +++ b/app/services/files/base_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Files class BaseService < Commits::CreateService FileChangedError = Class.new(StandardError) diff --git a/app/services/files/create_dir_service.rb b/app/services/files/create_dir_service.rb index 8ecac6115bd..362b80071ba 100644 --- a/app/services/files/create_dir_service.rb +++ b/app/services/files/create_dir_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Files class CreateDirService < Files::BaseService def create_commit! diff --git a/app/services/files/create_service.rb b/app/services/files/create_service.rb index a954564946b..fd5442a6c28 100644 --- a/app/services/files/create_service.rb +++ b/app/services/files/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Files class CreateService < Files::BaseService def create_commit! diff --git a/app/services/files/delete_service.rb b/app/services/files/delete_service.rb index 32a57484d4e..0ec1f79d396 100644 --- a/app/services/files/delete_service.rb +++ b/app/services/files/delete_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Files class DeleteService < Files::BaseService def create_commit! diff --git a/app/services/files/multi_service.rb b/app/services/files/multi_service.rb index 13a1dee4173..08088f8c592 100644 --- a/app/services/files/multi_service.rb +++ b/app/services/files/multi_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Files class MultiService < Files::BaseService UPDATE_FILE_ACTIONS = %w(update move delete).freeze diff --git a/app/services/files/update_service.rb b/app/services/files/update_service.rb index 1902d1cea72..2b3e96e6c53 100644 --- a/app/services/files/update_service.rb +++ b/app/services/files/update_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Files class UpdateService < Files::BaseService def create_commit! diff --git a/app/services/gpg_keys/create_service.rb b/app/services/gpg_keys/create_service.rb index e822a89c4d3..e41444b2a82 100644 --- a/app/services/gpg_keys/create_service.rb +++ b/app/services/gpg_keys/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module GpgKeys class CreateService < Keys::BaseService def execute diff --git a/app/services/groups/base_service.rb b/app/services/groups/base_service.rb index a8fa098246a..8c8acce5ca5 100644 --- a/app/services/groups/base_service.rb +++ b/app/services/groups/base_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Groups class BaseService < ::BaseService attr_accessor :group, :current_user, :params diff --git a/app/services/groups/create_service.rb b/app/services/groups/create_service.rb index 70e50aa0f12..24d8400c625 100644 --- a/app/services/groups/create_service.rb +++ b/app/services/groups/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Groups class CreateService < Groups::BaseService def initialize(user, params = {}) diff --git a/app/services/groups/destroy_service.rb b/app/services/groups/destroy_service.rb index 58e88688dfa..c4554ce45fb 100644 --- a/app/services/groups/destroy_service.rb +++ b/app/services/groups/destroy_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Groups class DestroyService < Groups::BaseService def async_execute diff --git a/app/services/groups/nested_create_service.rb b/app/services/groups/nested_create_service.rb index c2dfbac5414..50d34d8cb91 100644 --- a/app/services/groups/nested_create_service.rb +++ b/app/services/groups/nested_create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Groups class NestedCreateService < Groups::BaseService attr_reader :group_path, :visibility_level diff --git a/app/services/groups/transfer_service.rb b/app/services/groups/transfer_service.rb index e591c820cff..ea7576077f3 100644 --- a/app/services/groups/transfer_service.rb +++ b/app/services/groups/transfer_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Groups class TransferService < Groups::BaseService ERROR_MESSAGES = { diff --git a/app/services/groups/update_service.rb b/app/services/groups/update_service.rb index 08e3efb96e3..436a6b18cb1 100644 --- a/app/services/groups/update_service.rb +++ b/app/services/groups/update_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Groups class UpdateService < Groups::BaseService include UpdateVisibilityLevel diff --git a/app/services/issuable/bulk_update_service.rb b/app/services/issuable/bulk_update_service.rb index 5d42a89fced..051d5ba881d 100644 --- a/app/services/issuable/bulk_update_service.rb +++ b/app/services/issuable/bulk_update_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Issuable class BulkUpdateService < IssuableBaseService def execute(type) diff --git a/app/services/issuable/common_system_notes_service.rb b/app/services/issuable/common_system_notes_service.rb index 3da21bd8b8f..028b350ca07 100644 --- a/app/services/issuable/common_system_notes_service.rb +++ b/app/services/issuable/common_system_notes_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Issuable class CommonSystemNotesService < ::BaseService attr_reader :issuable diff --git a/app/services/issuable/destroy_service.rb b/app/services/issuable/destroy_service.rb index 0b1a33518c6..4c64655a622 100644 --- a/app/services/issuable/destroy_service.rb +++ b/app/services/issuable/destroy_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Issuable class DestroyService < IssuableBaseService def execute(issuable) diff --git a/app/services/issues/base_service.rb b/app/services/issues/base_service.rb index cbfef175af0..25389a946bb 100644 --- a/app/services/issues/base_service.rb +++ b/app/services/issues/base_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Issues class BaseService < ::IssuableBaseService def hook_data(issue, action, old_associations: {}) diff --git a/app/services/issues/build_service.rb b/app/services/issues/build_service.rb index 3a4f7b159f1..52b45f1b2ce 100644 --- a/app/services/issues/build_service.rb +++ b/app/services/issues/build_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Issues class BuildService < Issues::BaseService include ResolveDiscussions @@ -44,14 +46,14 @@ module Issues other_note_count = discussion.notes.size - 1 - discussion_info = "- [ ] #{first_note_to_resolve.author.to_reference} #{action} a [discussion](#{note_url}): " - discussion_info << " (+#{other_note_count} #{'comment'.pluralize(other_note_count)})" if other_note_count > 0 + discussion_info = ["- [ ] #{first_note_to_resolve.author.to_reference} #{action} a [discussion](#{note_url}): "] + discussion_info << "(+#{other_note_count} #{'comment'.pluralize(other_note_count)})" if other_note_count > 0 note_without_block_quotes = Banzai::Filter::BlockquoteFenceFilter.new(first_note_to_resolve.note).call spaces = ' ' * 4 quote = note_without_block_quotes.lines.map { |line| "#{spaces}> #{line}" }.join - [discussion_info, quote].join("\n\n") + [discussion_info.join(' '), quote].join("\n\n") end def issue_params diff --git a/app/services/issues/close_service.rb b/app/services/issues/close_service.rb index 4a99367c575..e5cc12e6082 100644 --- a/app/services/issues/close_service.rb +++ b/app/services/issues/close_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Issues class CloseService < Issues::BaseService # Closes the supplied issue if the current user is able to do so. diff --git a/app/services/issues/create_service.rb b/app/services/issues/create_service.rb index 0307634c0b6..5793a15e1bc 100644 --- a/app/services/issues/create_service.rb +++ b/app/services/issues/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Issues class CreateService < Issues::BaseService include SpamCheckService diff --git a/app/services/issues/duplicate_service.rb b/app/services/issues/duplicate_service.rb index 5c0854e664d..9b22f5e7914 100644 --- a/app/services/issues/duplicate_service.rb +++ b/app/services/issues/duplicate_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Issues class DuplicateService < Issues::BaseService def execute(duplicate_issue, canonical_issue) diff --git a/app/services/issues/fetch_referenced_merge_requests_service.rb b/app/services/issues/fetch_referenced_merge_requests_service.rb index 39c8ded9df4..5e84f3c81c9 100644 --- a/app/services/issues/fetch_referenced_merge_requests_service.rb +++ b/app/services/issues/fetch_referenced_merge_requests_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Issues class FetchReferencedMergeRequestsService < Issues::BaseService def execute(issue) diff --git a/app/services/issues/move_service.rb b/app/services/issues/move_service.rb index 6e5c29a5c40..841bce9949e 100644 --- a/app/services/issues/move_service.rb +++ b/app/services/issues/move_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Issues class MoveService < Issues::BaseService MoveError = Class.new(StandardError) diff --git a/app/services/issues/reopen_service.rb b/app/services/issues/reopen_service.rb index 02224f3357a..3bd53f9ccdc 100644 --- a/app/services/issues/reopen_service.rb +++ b/app/services/issues/reopen_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Issues class ReopenService < Issues::BaseService def execute(issue) diff --git a/app/services/issues/update_service.rb b/app/services/issues/update_service.rb index 1000e1842b6..c02dddf67b2 100644 --- a/app/services/issues/update_service.rb +++ b/app/services/issues/update_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Issues class UpdateService < Issues::BaseService include SpamCheckService diff --git a/app/services/keys/base_service.rb b/app/services/keys/base_service.rb index df8e82f5f60..113e22b01ce 100644 --- a/app/services/keys/base_service.rb +++ b/app/services/keys/base_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Keys class BaseService attr_accessor :user, :params diff --git a/app/services/keys/create_service.rb b/app/services/keys/create_service.rb index e2e5a6c46c5..d9fa69a88d7 100644 --- a/app/services/keys/create_service.rb +++ b/app/services/keys/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Keys class CreateService < ::Keys::BaseService def execute diff --git a/app/services/keys/destroy_service.rb b/app/services/keys/destroy_service.rb index 785cfa3a1d8..e2ae4047941 100644 --- a/app/services/keys/destroy_service.rb +++ b/app/services/keys/destroy_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Keys class DestroyService < ::Keys::BaseService def execute(key) diff --git a/app/services/keys/last_used_service.rb b/app/services/keys/last_used_service.rb index dbd79f7da55..daef544bac0 100644 --- a/app/services/keys/last_used_service.rb +++ b/app/services/keys/last_used_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Keys class LastUsedService TIMEOUT = 1.day.to_i diff --git a/app/services/labels/base_service.rb b/app/services/labels/base_service.rb index 91d72a57b4e..ead7f2ea607 100644 --- a/app/services/labels/base_service.rb +++ b/app/services/labels/base_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Labels class BaseService < ::BaseService COLOR_NAME_TO_HEX = { diff --git a/app/services/labels/create_service.rb b/app/services/labels/create_service.rb index 6c399c92377..fe34be41ac1 100644 --- a/app/services/labels/create_service.rb +++ b/app/services/labels/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Labels class CreateService < Labels::BaseService def initialize(params = {}) diff --git a/app/services/labels/find_or_create_service.rb b/app/services/labels/find_or_create_service.rb index a72da3c637f..e4486764a4d 100644 --- a/app/services/labels/find_or_create_service.rb +++ b/app/services/labels/find_or_create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Labels class FindOrCreateService def initialize(current_user, parent, params = {}) diff --git a/app/services/labels/promote_service.rb b/app/services/labels/promote_service.rb index 74a85e5c9f0..c0463052821 100644 --- a/app/services/labels/promote_service.rb +++ b/app/services/labels/promote_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Labels class PromoteService < BaseService BATCH_SIZE = 1000 diff --git a/app/services/labels/transfer_service.rb b/app/services/labels/transfer_service.rb index 9b7486cf53b..1bd8d9fc325 100644 --- a/app/services/labels/transfer_service.rb +++ b/app/services/labels/transfer_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Labels::TransferService class # # User for recreate the missing group labels at project level diff --git a/app/services/labels/update_service.rb b/app/services/labels/update_service.rb index 28dcabf9541..c3a720a1c66 100644 --- a/app/services/labels/update_service.rb +++ b/app/services/labels/update_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Labels class UpdateService < Labels::BaseService def initialize(params = {}) diff --git a/app/services/lfs/file_transformer.rb b/app/services/lfs/file_transformer.rb index 69281ee3137..c8eccb8e6cd 100644 --- a/app/services/lfs/file_transformer.rb +++ b/app/services/lfs/file_transformer.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lfs # Usage: Calling `new_file` check to see if a file should be in LFS and # return a transformed result with `content` and `encoding` to commit. diff --git a/app/services/lfs/lock_file_service.rb b/app/services/lfs/lock_file_service.rb index bbe10f84ef4..78434909d68 100644 --- a/app/services/lfs/lock_file_service.rb +++ b/app/services/lfs/lock_file_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lfs class LockFileService < BaseService def execute diff --git a/app/services/lfs/locks_finder_service.rb b/app/services/lfs/locks_finder_service.rb index 13c6cc6f81c..d52cf0e3cc4 100644 --- a/app/services/lfs/locks_finder_service.rb +++ b/app/services/lfs/locks_finder_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lfs class LocksFinderService < BaseService def execute diff --git a/app/services/lfs/unlock_file_service.rb b/app/services/lfs/unlock_file_service.rb index 7e3edf21d54..4d1443bf772 100644 --- a/app/services/lfs/unlock_file_service.rb +++ b/app/services/lfs/unlock_file_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lfs class UnlockFileService < BaseService def execute diff --git a/app/services/mattermost/create_team_service.rb b/app/services/mattermost/create_team_service.rb index e3206810f3a..afcd6439a14 100644 --- a/app/services/mattermost/create_team_service.rb +++ b/app/services/mattermost/create_team_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Mattermost class CreateTeamService < ::BaseService def initialize(group, current_user) diff --git a/app/services/members/approve_access_request_service.rb b/app/services/members/approve_access_request_service.rb index 6be08b590bc..52b890d1821 100644 --- a/app/services/members/approve_access_request_service.rb +++ b/app/services/members/approve_access_request_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Members class ApproveAccessRequestService < Members::BaseService def execute(access_requester, skip_authorization: false, skip_log_audit_event: false) diff --git a/app/services/members/base_service.rb b/app/services/members/base_service.rb index 74556fb20cf..8248f1441d7 100644 --- a/app/services/members/base_service.rb +++ b/app/services/members/base_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Members class BaseService < ::BaseService # current_user - The user that performs the action diff --git a/app/services/members/create_service.rb b/app/services/members/create_service.rb index bc6a9405aac..714b8586737 100644 --- a/app/services/members/create_service.rb +++ b/app/services/members/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Members class CreateService < Members::BaseService DEFAULT_LIMIT = 100 diff --git a/app/services/members/destroy_service.rb b/app/services/members/destroy_service.rb index 5b51e1982f1..aca0ba66646 100644 --- a/app/services/members/destroy_service.rb +++ b/app/services/members/destroy_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Members class DestroyService < Members::BaseService def execute(member, skip_authorization: false) diff --git a/app/services/members/request_access_service.rb b/app/services/members/request_access_service.rb index 24293b30005..b9b0550e290 100644 --- a/app/services/members/request_access_service.rb +++ b/app/services/members/request_access_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Members class RequestAccessService < Members::BaseService def execute(source) diff --git a/app/services/members/update_service.rb b/app/services/members/update_service.rb index cb19cf01dd7..1f5618dae53 100644 --- a/app/services/members/update_service.rb +++ b/app/services/members/update_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Members class UpdateService < Members::BaseService # returns the updated member diff --git a/app/services/merge_requests/add_todo_when_build_fails_service.rb b/app/services/merge_requests/add_todo_when_build_fails_service.rb index 6805b2f7d1c..79c43b8e7d5 100644 --- a/app/services/merge_requests/add_todo_when_build_fails_service.rb +++ b/app/services/merge_requests/add_todo_when_build_fails_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests class AddTodoWhenBuildFailsService < MergeRequests::BaseService # Adds a todo to the parent merge_request when a CI build fails diff --git a/app/services/merge_requests/assign_issues_service.rb b/app/services/merge_requests/assign_issues_service.rb index 8c6c4841020..e9107b9998e 100644 --- a/app/services/merge_requests/assign_issues_service.rb +++ b/app/services/merge_requests/assign_issues_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests class AssignIssuesService < BaseService def assignable_issues diff --git a/app/services/merge_requests/base_service.rb b/app/services/merge_requests/base_service.rb index 4c420b38258..e6dd0e12a3a 100644 --- a/app/services/merge_requests/base_service.rb +++ b/app/services/merge_requests/base_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests class BaseService < ::IssuableBaseService def create_note(merge_request, state = merge_request.state) diff --git a/app/services/merge_requests/build_service.rb b/app/services/merge_requests/build_service.rb index a98bbdf74dd..bc988eb2a26 100644 --- a/app/services/merge_requests/build_service.rb +++ b/app/services/merge_requests/build_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests class BuildService < MergeRequests::BaseService include Gitlab::Utils::StrongMemoize @@ -140,7 +142,8 @@ module MergeRequests closes_issue = "Closes #{issue.to_reference}" if description.present? - merge_request.description += closes_issue.prepend("\n\n") + descr_parts = [merge_request.description, closes_issue] + merge_request.description = descr_parts.join("\n\n") else merge_request.description = closes_issue end @@ -164,9 +167,11 @@ module MergeRequests return if merge_request.title.present? if issue_iid.present? - merge_request.title = "Resolve #{issue.to_reference}" + title_parts = ["Resolve #{issue.to_reference}"] branch_title = source_branch.downcase.remove(issue_iid.downcase).titleize.humanize - merge_request.title += " \"#{branch_title}\"" if branch_title.present? + + title_parts << "\"#{branch_title}\"" if branch_title.present? + merge_request.title = title_parts.join(' ') end end diff --git a/app/services/merge_requests/close_service.rb b/app/services/merge_requests/close_service.rb index db701c1145d..04527bb9713 100644 --- a/app/services/merge_requests/close_service.rb +++ b/app/services/merge_requests/close_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests class CloseService < MergeRequests::BaseService def execute(merge_request, commit = nil) diff --git a/app/services/merge_requests/conflicts/base_service.rb b/app/services/merge_requests/conflicts/base_service.rb index b50875347d9..402f6c4e4c0 100644 --- a/app/services/merge_requests/conflicts/base_service.rb +++ b/app/services/merge_requests/conflicts/base_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests module Conflicts class BaseService diff --git a/app/services/merge_requests/conflicts/list_service.rb b/app/services/merge_requests/conflicts/list_service.rb index 72cbc49adb2..c6b3a6a1a69 100644 --- a/app/services/merge_requests/conflicts/list_service.rb +++ b/app/services/merge_requests/conflicts/list_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests module Conflicts class ListService < MergeRequests::Conflicts::BaseService diff --git a/app/services/merge_requests/conflicts/resolve_service.rb b/app/services/merge_requests/conflicts/resolve_service.rb index 27cafd2d7d9..b9f734310be 100644 --- a/app/services/merge_requests/conflicts/resolve_service.rb +++ b/app/services/merge_requests/conflicts/resolve_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests module Conflicts class ResolveService < MergeRequests::Conflicts::BaseService diff --git a/app/services/merge_requests/create_from_issue_service.rb b/app/services/merge_requests/create_from_issue_service.rb index 3407b312700..fd91dc4acd0 100644 --- a/app/services/merge_requests/create_from_issue_service.rb +++ b/app/services/merge_requests/create_from_issue_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests class CreateFromIssueService < MergeRequests::CreateService def initialize(project, user, params) diff --git a/app/services/merge_requests/create_service.rb b/app/services/merge_requests/create_service.rb index fe1ac70781e..c36a2ecbfe3 100644 --- a/app/services/merge_requests/create_service.rb +++ b/app/services/merge_requests/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests class CreateService < MergeRequests::BaseService def execute diff --git a/app/services/merge_requests/delete_non_latest_diffs_service.rb b/app/services/merge_requests/delete_non_latest_diffs_service.rb index 40079b21189..2a8ea316921 100644 --- a/app/services/merge_requests/delete_non_latest_diffs_service.rb +++ b/app/services/merge_requests/delete_non_latest_diffs_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests class DeleteNonLatestDiffsService BATCH_SIZE = 10 diff --git a/app/services/merge_requests/ff_merge_service.rb b/app/services/merge_requests/ff_merge_service.rb index bffc09c34f0..479e0fe6699 100644 --- a/app/services/merge_requests/ff_merge_service.rb +++ b/app/services/merge_requests/ff_merge_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests # MergeService class # diff --git a/app/services/merge_requests/get_urls_service.rb b/app/services/merge_requests/get_urls_service.rb index 668a1741736..7c88c9abb41 100644 --- a/app/services/merge_requests/get_urls_service.rb +++ b/app/services/merge_requests/get_urls_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests class GetUrlsService < BaseService attr_reader :project diff --git a/app/services/merge_requests/merge_service.rb b/app/services/merge_requests/merge_service.rb index 3d587f97906..fb44f809c41 100644 --- a/app/services/merge_requests/merge_service.rb +++ b/app/services/merge_requests/merge_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests # MergeService class # diff --git a/app/services/merge_requests/merge_when_pipeline_succeeds_service.rb b/app/services/merge_requests/merge_when_pipeline_succeeds_service.rb index 9a4e6eb2e88..973e5b64e88 100644 --- a/app/services/merge_requests/merge_when_pipeline_succeeds_service.rb +++ b/app/services/merge_requests/merge_when_pipeline_succeeds_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests class MergeWhenPipelineSucceedsService < MergeRequests::BaseService # Marks the passed `merge_request` to be merged when the pipeline succeeds or diff --git a/app/services/merge_requests/post_merge_service.rb b/app/services/merge_requests/post_merge_service.rb index 7606d68ff29..3d2aea4e9b6 100644 --- a/app/services/merge_requests/post_merge_service.rb +++ b/app/services/merge_requests/post_merge_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests # PostMergeService class # diff --git a/app/services/merge_requests/rebase_service.rb b/app/services/merge_requests/rebase_service.rb index c741e913860..31b3ebf311e 100644 --- a/app/services/merge_requests/rebase_service.rb +++ b/app/services/merge_requests/rebase_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests class RebaseService < MergeRequests::WorkingCopyBaseService REBASE_ERROR = 'Rebase failed. Please rebase locally'.freeze diff --git a/app/services/merge_requests/refresh_service.rb b/app/services/merge_requests/refresh_service.rb index 0127d781686..48da796505f 100644 --- a/app/services/merge_requests/refresh_service.rb +++ b/app/services/merge_requests/refresh_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests class RefreshService < MergeRequests::BaseService def execute(oldrev, newrev, ref) diff --git a/app/services/merge_requests/reload_diffs_service.rb b/app/services/merge_requests/reload_diffs_service.rb index 2ec7b403903..8d85dc9eb5f 100644 --- a/app/services/merge_requests/reload_diffs_service.rb +++ b/app/services/merge_requests/reload_diffs_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests class ReloadDiffsService def initialize(merge_request, current_user) diff --git a/app/services/merge_requests/reopen_service.rb b/app/services/merge_requests/reopen_service.rb index 8f1c95ac1b7..f2fc13ad028 100644 --- a/app/services/merge_requests/reopen_service.rb +++ b/app/services/merge_requests/reopen_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests class ReopenService < MergeRequests::BaseService def execute(merge_request) diff --git a/app/services/merge_requests/resolved_discussion_notification_service.rb b/app/services/merge_requests/resolved_discussion_notification_service.rb index 66a0cbc81d4..03ded1512f9 100644 --- a/app/services/merge_requests/resolved_discussion_notification_service.rb +++ b/app/services/merge_requests/resolved_discussion_notification_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests class ResolvedDiscussionNotificationService < MergeRequests::BaseService def execute(merge_request) diff --git a/app/services/merge_requests/squash_service.rb b/app/services/merge_requests/squash_service.rb index a40fb2786bd..a439a380255 100644 --- a/app/services/merge_requests/squash_service.rb +++ b/app/services/merge_requests/squash_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests class SquashService < MergeRequests::WorkingCopyBaseService def execute(merge_request) diff --git a/app/services/merge_requests/update_service.rb b/app/services/merge_requests/update_service.rb index 7350725e223..b112edbce7f 100644 --- a/app/services/merge_requests/update_service.rb +++ b/app/services/merge_requests/update_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests class UpdateService < MergeRequests::BaseService def execute(merge_request) diff --git a/app/services/merge_requests/working_copy_base_service.rb b/app/services/merge_requests/working_copy_base_service.rb index 186e05bf966..2d2be1f4c25 100644 --- a/app/services/merge_requests/working_copy_base_service.rb +++ b/app/services/merge_requests/working_copy_base_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MergeRequests class WorkingCopyBaseService < MergeRequests::BaseService attr_reader :merge_request diff --git a/app/services/milestones/base_service.rb b/app/services/milestones/base_service.rb index cce0863d611..f30194c0bfe 100644 --- a/app/services/milestones/base_service.rb +++ b/app/services/milestones/base_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Milestones class BaseService < ::BaseService # Parent can either a group or a project diff --git a/app/services/milestones/close_service.rb b/app/services/milestones/close_service.rb index 5b06c4b601d..a252f5c144e 100644 --- a/app/services/milestones/close_service.rb +++ b/app/services/milestones/close_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Milestones class CloseService < Milestones::BaseService def execute(milestone) diff --git a/app/services/milestones/create_service.rb b/app/services/milestones/create_service.rb index ed2e833d833..6c3edd2e147 100644 --- a/app/services/milestones/create_service.rb +++ b/app/services/milestones/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Milestones class CreateService < Milestones::BaseService def execute diff --git a/app/services/milestones/destroy_service.rb b/app/services/milestones/destroy_service.rb index b18651476a8..15c04525075 100644 --- a/app/services/milestones/destroy_service.rb +++ b/app/services/milestones/destroy_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Milestones class DestroyService < Milestones::BaseService def execute(milestone) diff --git a/app/services/milestones/promote_service.rb b/app/services/milestones/promote_service.rb index 2187f26d1ed..37aa6d3a9bc 100644 --- a/app/services/milestones/promote_service.rb +++ b/app/services/milestones/promote_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Milestones class PromoteService < Milestones::BaseService PromoteMilestoneError = Class.new(StandardError) diff --git a/app/services/milestones/reopen_service.rb b/app/services/milestones/reopen_service.rb index 3efb33157c5..125a3ec1367 100644 --- a/app/services/milestones/reopen_service.rb +++ b/app/services/milestones/reopen_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Milestones class ReopenService < Milestones::BaseService def execute(milestone) diff --git a/app/services/milestones/update_service.rb b/app/services/milestones/update_service.rb index 74edbf9b41d..81b20943bab 100644 --- a/app/services/milestones/update_service.rb +++ b/app/services/milestones/update_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Milestones class UpdateService < Milestones::BaseService def execute(milestone) diff --git a/app/services/notes/build_service.rb b/app/services/notes/build_service.rb index 77e7b8a5ea7..df5fe65de3c 100644 --- a/app/services/notes/build_service.rb +++ b/app/services/notes/build_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Notes class BuildService < ::BaseService def execute diff --git a/app/services/notes/create_service.rb b/app/services/notes/create_service.rb index 9ea28733f5f..049e6c5a871 100644 --- a/app/services/notes/create_service.rb +++ b/app/services/notes/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Notes class CreateService < ::BaseService def execute diff --git a/app/services/notes/destroy_service.rb b/app/services/notes/destroy_service.rb index fb78420d324..64e9accd97f 100644 --- a/app/services/notes/destroy_service.rb +++ b/app/services/notes/destroy_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Notes class DestroyService < BaseService def execute(note) diff --git a/app/services/notes/post_process_service.rb b/app/services/notes/post_process_service.rb index 199b8028dbc..48722cc2a79 100644 --- a/app/services/notes/post_process_service.rb +++ b/app/services/notes/post_process_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Notes class PostProcessService attr_accessor :note diff --git a/app/services/notes/quick_actions_service.rb b/app/services/notes/quick_actions_service.rb index 0a33d5f3f3d..7280449bb1c 100644 --- a/app/services/notes/quick_actions_service.rb +++ b/app/services/notes/quick_actions_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Notes class QuickActionsService < BaseService UPDATE_SERVICES = { diff --git a/app/services/notes/render_service.rb b/app/services/notes/render_service.rb index efc9d6da2aa..0e1a55ae2ff 100644 --- a/app/services/notes/render_service.rb +++ b/app/services/notes/render_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Notes class RenderService < BaseRenderer # Renders a collection of Note instances. diff --git a/app/services/notes/resolve_service.rb b/app/services/notes/resolve_service.rb index 0db8ee809a9..cf24795f050 100644 --- a/app/services/notes/resolve_service.rb +++ b/app/services/notes/resolve_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Notes class ResolveService < ::BaseService def execute(note) diff --git a/app/services/notes/update_service.rb b/app/services/notes/update_service.rb index e16ef398184..35db409eb27 100644 --- a/app/services/notes/update_service.rb +++ b/app/services/notes/update_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Notes class UpdateService < BaseService def execute(note) diff --git a/app/services/projects/after_import_service.rb b/app/services/projects/after_import_service.rb index 3047268b2d1..bbdde4408d2 100644 --- a/app/services/projects/after_import_service.rb +++ b/app/services/projects/after_import_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class AfterImportService RESERVED_REF_PREFIXES = Repository::RESERVED_REFS_NAMES.map { |n| File.join('refs', n, '/') } diff --git a/app/services/projects/autocomplete_service.rb b/app/services/projects/autocomplete_service.rb index 9d0eaaf3152..10eb2cea4a2 100644 --- a/app/services/projects/autocomplete_service.rb +++ b/app/services/projects/autocomplete_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class AutocompleteService < BaseService def issues diff --git a/app/services/projects/base_move_relations_service.rb b/app/services/projects/base_move_relations_service.rb index e8fd3ef57e5..78cc2869b72 100644 --- a/app/services/projects/base_move_relations_service.rb +++ b/app/services/projects/base_move_relations_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class BaseMoveRelationsService < BaseService attr_reader :source_project diff --git a/app/services/projects/batch_count_service.rb b/app/services/projects/batch_count_service.rb index 178ebc5a143..aec3b32da89 100644 --- a/app/services/projects/batch_count_service.rb +++ b/app/services/projects/batch_count_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Service class for getting and caching the number of elements of several projects # Warning: do not user this service with a really large set of projects # because the service use maps to retrieve the project ids. diff --git a/app/services/projects/batch_forks_count_service.rb b/app/services/projects/batch_forks_count_service.rb index e61fe6c86b2..9bf369df999 100644 --- a/app/services/projects/batch_forks_count_service.rb +++ b/app/services/projects/batch_forks_count_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Service class for getting and caching the number of forks of several projects # Warning: do not user this service with a really large set of projects # because the service use maps to retrieve the project ids diff --git a/app/services/projects/batch_open_issues_count_service.rb b/app/services/projects/batch_open_issues_count_service.rb index 3b0ade2419b..d375fcf9dbd 100644 --- a/app/services/projects/batch_open_issues_count_service.rb +++ b/app/services/projects/batch_open_issues_count_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Service class for getting and caching the number of issues of several projects # Warning: do not user this service with a really large set of projects # because the service use maps to retrieve the project ids diff --git a/app/services/projects/count_service.rb b/app/services/projects/count_service.rb index 4c8e000928f..3cee80c7bbc 100644 --- a/app/services/projects/count_service.rb +++ b/app/services/projects/count_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects # Base class for the various service classes that count project data (e.g. # issues or forks). diff --git a/app/services/projects/create_from_template_service.rb b/app/services/projects/create_from_template_service.rb index 29b133cc466..f5c48e56880 100644 --- a/app/services/projects/create_from_template_service.rb +++ b/app/services/projects/create_from_template_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class CreateFromTemplateService < BaseService def initialize(user, params) diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb index 85491089d8e..02a3a3eb096 100644 --- a/app/services/projects/create_service.rb +++ b/app/services/projects/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class CreateService < BaseService def initialize(user, params) diff --git a/app/services/projects/destroy_service.rb b/app/services/projects/destroy_service.rb index 87173cc79ec..46a8a5e4d98 100644 --- a/app/services/projects/destroy_service.rb +++ b/app/services/projects/destroy_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class DestroyService < BaseService include Gitlab::ShellAdapter diff --git a/app/services/projects/download_service.rb b/app/services/projects/download_service.rb index 604747e39d0..dd297c9ba43 100644 --- a/app/services/projects/download_service.rb +++ b/app/services/projects/download_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class DownloadService < BaseService WHITELIST = [ diff --git a/app/services/projects/enable_deploy_key_service.rb b/app/services/projects/enable_deploy_key_service.rb index 121385afca3..b7c172028e9 100644 --- a/app/services/projects/enable_deploy_key_service.rb +++ b/app/services/projects/enable_deploy_key_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class EnableDeployKeyService < BaseService def execute diff --git a/app/services/projects/fork_service.rb b/app/services/projects/fork_service.rb index a8aafa9fb4f..33ad2120a75 100644 --- a/app/services/projects/fork_service.rb +++ b/app/services/projects/fork_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class ForkService < BaseService def execute(fork_to_project = nil) diff --git a/app/services/projects/forks_count_service.rb b/app/services/projects/forks_count_service.rb index dc6eb19affd..b570c6d4754 100644 --- a/app/services/projects/forks_count_service.rb +++ b/app/services/projects/forks_count_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects # Service class for getting and caching the number of forks of a project. class ForksCountService < Projects::CountService diff --git a/app/services/projects/gitlab_projects_import_service.rb b/app/services/projects/gitlab_projects_import_service.rb index a16268f4fd2..bc6e9caebb8 100644 --- a/app/services/projects/gitlab_projects_import_service.rb +++ b/app/services/projects/gitlab_projects_import_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # This service is an adapter used to for the GitLab Import feature, and # creating a project from a template. # The latter will under the hood just import an archive supplied by GitLab. diff --git a/app/services/projects/group_links/create_service.rb b/app/services/projects/group_links/create_service.rb index 35624577024..1392775f805 100644 --- a/app/services/projects/group_links/create_service.rb +++ b/app/services/projects/group_links/create_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects module GroupLinks class CreateService < BaseService diff --git a/app/services/projects/group_links/destroy_service.rb b/app/services/projects/group_links/destroy_service.rb index e3a20b4c1e4..8aefad048ce 100644 --- a/app/services/projects/group_links/destroy_service.rb +++ b/app/services/projects/group_links/destroy_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects module GroupLinks class DestroyService < BaseService diff --git a/app/services/projects/hashed_storage/migrate_attachments_service.rb b/app/services/projects/hashed_storage/migrate_attachments_service.rb index bc897d891d5..649c916a593 100644 --- a/app/services/projects/hashed_storage/migrate_attachments_service.rb +++ b/app/services/projects/hashed_storage/migrate_attachments_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects module HashedStorage AttachmentMigrationError = Class.new(StandardError) diff --git a/app/services/projects/hashed_storage/migrate_repository_service.rb b/app/services/projects/hashed_storage/migrate_repository_service.rb index 68c1af2396b..70f00b7fdeb 100644 --- a/app/services/projects/hashed_storage/migrate_repository_service.rb +++ b/app/services/projects/hashed_storage/migrate_repository_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects module HashedStorage class MigrateRepositoryService < BaseService diff --git a/app/services/projects/hashed_storage_migration_service.rb b/app/services/projects/hashed_storage_migration_service.rb index 662702c1db5..1828c99a65e 100644 --- a/app/services/projects/hashed_storage_migration_service.rb +++ b/app/services/projects/hashed_storage_migration_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class HashedStorageMigrationService < BaseService attr_reader :logger diff --git a/app/services/projects/housekeeping_service.rb b/app/services/projects/housekeeping_service.rb index 120d57a188d..2f6dc4207dd 100644 --- a/app/services/projects/housekeeping_service.rb +++ b/app/services/projects/housekeeping_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Projects::HousekeepingService class # # Used for git housekeeping diff --git a/app/services/projects/import_export/export_service.rb b/app/services/projects/import_export/export_service.rb index 7bf0b90b491..e3491282a8a 100644 --- a/app/services/projects/import_export/export_service.rb +++ b/app/services/projects/import_export/export_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects module ImportExport class ExportService < BaseService diff --git a/app/services/projects/import_service.rb b/app/services/projects/import_service.rb index 1781a01cbd4..60f400edfce 100644 --- a/app/services/projects/import_service.rb +++ b/app/services/projects/import_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class ImportService < BaseService include Gitlab::ShellAdapter diff --git a/app/services/projects/lfs_pointers/lfs_download_link_list_service.rb b/app/services/projects/lfs_pointers/lfs_download_link_list_service.rb index d9fb74b090e..a837ea82e38 100644 --- a/app/services/projects/lfs_pointers/lfs_download_link_list_service.rb +++ b/app/services/projects/lfs_pointers/lfs_download_link_list_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # This service lists the download link from a remote source based on the # oids provided module Projects diff --git a/app/services/projects/lfs_pointers/lfs_download_service.rb b/app/services/projects/lfs_pointers/lfs_download_service.rb index 618c30b971f..7d4fa4e08df 100644 --- a/app/services/projects/lfs_pointers/lfs_download_service.rb +++ b/app/services/projects/lfs_pointers/lfs_download_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # This service downloads and links lfs objects from a remote URL module Projects module LfsPointers diff --git a/app/services/projects/lfs_pointers/lfs_import_service.rb b/app/services/projects/lfs_pointers/lfs_import_service.rb index b6b0dec142f..97ce681a911 100644 --- a/app/services/projects/lfs_pointers/lfs_import_service.rb +++ b/app/services/projects/lfs_pointers/lfs_import_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # This service manages the whole worflow of discovering the Lfs files in a # repository, linking them to the project and downloading (and linking) the non # existent ones. diff --git a/app/services/projects/lfs_pointers/lfs_link_service.rb b/app/services/projects/lfs_pointers/lfs_link_service.rb index d20bdf86c58..a2eba8e124e 100644 --- a/app/services/projects/lfs_pointers/lfs_link_service.rb +++ b/app/services/projects/lfs_pointers/lfs_link_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Given a list of oids, this services links the existent Lfs Objects to the project module Projects module LfsPointers diff --git a/app/services/projects/lfs_pointers/lfs_list_service.rb b/app/services/projects/lfs_pointers/lfs_list_service.rb index b770982cbc0..22160017f4f 100644 --- a/app/services/projects/lfs_pointers/lfs_list_service.rb +++ b/app/services/projects/lfs_pointers/lfs_list_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # This service list all existent Lfs objects in a repository module Projects module LfsPointers diff --git a/app/services/projects/move_access_service.rb b/app/services/projects/move_access_service.rb index 3af3a22d486..8e2c3ad2f69 100644 --- a/app/services/projects/move_access_service.rb +++ b/app/services/projects/move_access_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class MoveAccessService < BaseMoveRelationsService def execute(source_project, remove_remaining_elements: true) diff --git a/app/services/projects/move_deploy_keys_projects_service.rb b/app/services/projects/move_deploy_keys_projects_service.rb index dde420655b0..40a22837eaf 100644 --- a/app/services/projects/move_deploy_keys_projects_service.rb +++ b/app/services/projects/move_deploy_keys_projects_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class MoveDeployKeysProjectsService < BaseMoveRelationsService def execute(source_project, remove_remaining_elements: true) diff --git a/app/services/projects/move_forks_service.rb b/app/services/projects/move_forks_service.rb index d2901ea1457..076a7a50aa9 100644 --- a/app/services/projects/move_forks_service.rb +++ b/app/services/projects/move_forks_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class MoveForksService < BaseMoveRelationsService def execute(source_project, remove_remaining_elements: true) diff --git a/app/services/projects/move_lfs_objects_projects_service.rb b/app/services/projects/move_lfs_objects_projects_service.rb index 298da5f1a82..a5099519594 100644 --- a/app/services/projects/move_lfs_objects_projects_service.rb +++ b/app/services/projects/move_lfs_objects_projects_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class MoveLfsObjectsProjectsService < BaseMoveRelationsService def execute(source_project, remove_remaining_elements: true) diff --git a/app/services/projects/move_notification_settings_service.rb b/app/services/projects/move_notification_settings_service.rb index f7be461a5da..746605d56f1 100644 --- a/app/services/projects/move_notification_settings_service.rb +++ b/app/services/projects/move_notification_settings_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class MoveNotificationSettingsService < BaseMoveRelationsService def execute(source_project, remove_remaining_elements: true) diff --git a/app/services/projects/move_project_authorizations_service.rb b/app/services/projects/move_project_authorizations_service.rb index 5ef12fc49e5..60f2af88e99 100644 --- a/app/services/projects/move_project_authorizations_service.rb +++ b/app/services/projects/move_project_authorizations_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # NOTE: This service cannot be used directly because it is part of a # a bigger process. Instead, use the service MoveAccessService which moves # project memberships, project group links, authorizations and refreshes diff --git a/app/services/projects/move_project_group_links_service.rb b/app/services/projects/move_project_group_links_service.rb index dbeffd7dae9..d9038030f7e 100644 --- a/app/services/projects/move_project_group_links_service.rb +++ b/app/services/projects/move_project_group_links_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # NOTE: This service cannot be used directly because it is part of a # a bigger process. Instead, use the service MoveAccessService which moves # project memberships, project group links, authorizations and refreshes diff --git a/app/services/projects/move_project_members_service.rb b/app/services/projects/move_project_members_service.rb index 22a5f0a3fe6..bb0c0d10242 100644 --- a/app/services/projects/move_project_members_service.rb +++ b/app/services/projects/move_project_members_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # NOTE: This service cannot be used directly because it is part of a # a bigger process. Instead, use the service MoveAccessService which moves # project memberships, project group links, authorizations and refreshes diff --git a/app/services/projects/move_users_star_projects_service.rb b/app/services/projects/move_users_star_projects_service.rb index 079fd5b9685..20121d429e2 100644 --- a/app/services/projects/move_users_star_projects_service.rb +++ b/app/services/projects/move_users_star_projects_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class MoveUsersStarProjectsService < BaseMoveRelationsService def execute(source_project, remove_remaining_elements: true) diff --git a/app/services/projects/open_issues_count_service.rb b/app/services/projects/open_issues_count_service.rb index 78b1477186a..5d6620c3c54 100644 --- a/app/services/projects/open_issues_count_service.rb +++ b/app/services/projects/open_issues_count_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects # Service class for counting and caching the number of open issues of a # project. diff --git a/app/services/projects/open_merge_requests_count_service.rb b/app/services/projects/open_merge_requests_count_service.rb index 77e6448fd5e..76ec13952ab 100644 --- a/app/services/projects/open_merge_requests_count_service.rb +++ b/app/services/projects/open_merge_requests_count_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects # Service class for counting and caching the number of open merge requests of # a project. diff --git a/app/services/projects/overwrite_project_service.rb b/app/services/projects/overwrite_project_service.rb index ce94f147aa9..696e1b665b2 100644 --- a/app/services/projects/overwrite_project_service.rb +++ b/app/services/projects/overwrite_project_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class OverwriteProjectService < BaseService def execute(source_project) diff --git a/app/services/projects/participants_service.rb b/app/services/projects/participants_service.rb index 21741913385..7080f388e53 100644 --- a/app/services/projects/participants_service.rb +++ b/app/services/projects/participants_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class ParticipantsService < BaseService include Users::ParticipableService diff --git a/app/services/projects/propagate_service_template.rb b/app/services/projects/propagate_service_template.rb index a8ef2108492..fdfa91801ab 100644 --- a/app/services/projects/propagate_service_template.rb +++ b/app/services/projects/propagate_service_template.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class PropagateServiceTemplate BATCH_SIZE = 100 diff --git a/app/services/projects/transfer_service.rb b/app/services/projects/transfer_service.rb index 61acdd58021..a4a66330546 100644 --- a/app/services/projects/transfer_service.rb +++ b/app/services/projects/transfer_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Projects::TransferService class # # Used for transfer project to another namespace diff --git a/app/services/projects/unlink_fork_service.rb b/app/services/projects/unlink_fork_service.rb index 842fe4e09c4..2c0d91fe34f 100644 --- a/app/services/projects/unlink_fork_service.rb +++ b/app/services/projects/unlink_fork_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class UnlinkForkService < BaseService def execute diff --git a/app/services/projects/update_pages_configuration_service.rb b/app/services/projects/update_pages_configuration_service.rb index 25017c5cbe3..efbd4c7b323 100644 --- a/app/services/projects/update_pages_configuration_service.rb +++ b/app/services/projects/update_pages_configuration_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class UpdatePagesConfigurationService < BaseService attr_reader :project diff --git a/app/services/projects/update_pages_service.rb b/app/services/projects/update_pages_service.rb index 1d8caec9c6f..eb2478be3cf 100644 --- a/app/services/projects/update_pages_service.rb +++ b/app/services/projects/update_pages_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class UpdatePagesService < BaseService InvalidStateError = Class.new(StandardError) diff --git a/app/services/projects/update_remote_mirror_service.rb b/app/services/projects/update_remote_mirror_service.rb index 8183a2f26d7..4651f7c4f8f 100644 --- a/app/services/projects/update_remote_mirror_service.rb +++ b/app/services/projects/update_remote_mirror_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class UpdateRemoteMirrorService < BaseService attr_reader :errors diff --git a/app/services/projects/update_service.rb b/app/services/projects/update_service.rb index f4fbaacc08b..d3dc11435fe 100644 --- a/app/services/projects/update_service.rb +++ b/app/services/projects/update_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Projects class UpdateService < BaseService include UpdateVisibilityLevel diff --git a/app/uploaders/file_uploader.rb b/app/uploaders/file_uploader.rb index 83f7b99d2a5..b1365659834 100644 --- a/app/uploaders/file_uploader.rb +++ b/app/uploaders/file_uploader.rb @@ -136,10 +136,6 @@ class FileUploader < GitlabUploader } end - def filename - self.file.filename - end - def upload=(value) super diff --git a/app/views/admin/identities/edit.html.haml b/app/views/admin/identities/edit.html.haml index 1ad6ce969cb..fa09138c502 100644 --- a/app/views/admin/identities/edit.html.haml +++ b/app/views/admin/identities/edit.html.haml @@ -1,3 +1,6 @@ +- add_to_breadcrumbs "Users", admin_users_path +- add_to_breadcrumbs @user.name, admin_user_identities_path(@user) +- breadcrumb_title "Edit Identity" - page_title _("Edit"), @identity.provider, _("Identities"), @user.name, _("Users") %h3.page-title = _('Edit identity for %{user_name}') % { user_name: @user.name } diff --git a/app/views/admin/identities/index.html.haml b/app/views/admin/identities/index.html.haml index 59373ee6752..df3df159947 100644 --- a/app/views/admin/identities/index.html.haml +++ b/app/views/admin/identities/index.html.haml @@ -1,3 +1,5 @@ +- add_to_breadcrumbs "Users", admin_users_path +- breadcrumb_title @user.name - page_title _("Identities"), @user.name, _("Users") = render 'admin/users/head' diff --git a/app/views/admin/identities/new.html.haml b/app/views/admin/identities/new.html.haml index ee743b0fd3c..c28d22625b5 100644 --- a/app/views/admin/identities/new.html.haml +++ b/app/views/admin/identities/new.html.haml @@ -1,3 +1,6 @@ +- add_to_breadcrumbs "Users", admin_users_path +- add_to_breadcrumbs @user.name, admin_user_identities_path(@user) +- breadcrumb_title "New Identity" - page_title _("New Identity") %h3.page-title= _('New identity') %hr diff --git a/app/views/admin/impersonation_tokens/index.html.haml b/app/views/admin/impersonation_tokens/index.html.haml index 1378dde52ab..9e490713ef3 100644 --- a/app/views/admin/impersonation_tokens/index.html.haml +++ b/app/views/admin/impersonation_tokens/index.html.haml @@ -1,3 +1,5 @@ +- add_to_breadcrumbs "Users", admin_users_path +- breadcrumb_title @user.name - page_title "Impersonation Tokens", @user.name, "Users" = render 'admin/users/head' diff --git a/app/views/admin/users/keys.html.haml b/app/views/admin/users/keys.html.haml index 0f644121e62..103bbb3b063 100644 --- a/app/views/admin/users/keys.html.haml +++ b/app/views/admin/users/keys.html.haml @@ -1,3 +1,5 @@ +- add_to_breadcrumbs "Users", admin_users_path +- breadcrumb_title @user.name - page_title "SSH Keys", @user.name, "Users" = render 'admin/users/head' = render 'profiles/keys/key_table', admin: true diff --git a/app/views/admin/users/projects.html.haml b/app/views/admin/users/projects.html.haml index cf50d45f755..3d39c1da408 100644 --- a/app/views/admin/users/projects.html.haml +++ b/app/views/admin/users/projects.html.haml @@ -1,3 +1,5 @@ +- add_to_breadcrumbs "Users", admin_users_path +- breadcrumb_title @user.name - page_title "Groups and projects", @user.name, "Users" = render 'admin/users/head' diff --git a/app/views/admin/users/show.html.haml b/app/views/admin/users/show.html.haml index b0562226f5f..f730fd05176 100644 --- a/app/views/admin/users/show.html.haml +++ b/app/views/admin/users/show.html.haml @@ -149,8 +149,8 @@ %br = link_to 'Unblock user', unblock_admin_user_path(@user), method: :put, class: "btn btn-info", data: { confirm: 'Are you sure?' } - else - .card.bg-warning - .card-header + .card.border-warning + .card-header.bg-warning.text-white Block this user .card-body %p Blocking user has the following effects: @@ -170,8 +170,8 @@ %br = link_to 'Unlock user', unlock_admin_user_path(@user), method: :put, class: "btn btn-info", data: { confirm: 'Are you sure?' } - .card.bg-danger - .card-header + .card.border-danger + .card-header.bg-danger.text-white = s_('AdminUsers|Delete user') .card-body - if @user.can_be_removed? && can?(current_user, :destroy_user, @user) @@ -196,8 +196,8 @@ %p You don't have access to delete this user. - .card.bg-danger - .card-header + .card.border-danger + .card-header.bg-danger.text-white = s_('AdminUsers|Delete user and contributions') .card-body - if can?(current_user, :destroy_user, @user) diff --git a/app/views/ci/runner/_how_to_setup_runner.html.haml b/app/views/ci/runner/_how_to_setup_runner.html.haml index 3ae9ce6c11f..13f96b9747c 100644 --- a/app/views/ci/runner/_how_to_setup_runner.html.haml +++ b/app/views/ci/runner/_how_to_setup_runner.html.haml @@ -1,16 +1,17 @@ -- link = link_to _("GitLab Runner section"), 'https://about.gitlab.com/gitlab-ci/#gitlab-runner', target: '_blank' +- link = link_to _("Install GitLab Runner"), 'https://docs.gitlab.com/runner/install/', target: '_blank' .append-bottom-10 %h4= _("Setup a #{type} Runner manually") %ol %li - = _("Install a Runner compatible with GitLab CI") - = (_("(check out the %{link} for information on how to install it).") % { link: link }).html_safe + = link.html_safe %li = _("Specify the following URL during the Runner setup:") %code#coordinator_address= root_url(only_path: false) + = clipboard_button(target: '#coordinator_address', title: _("Copy URL to clipboard"), class: "btn-transparent btn-clipboard") %li = _("Use the following registration token during setup:") %code#registration_token= registration_token + = clipboard_button(target: '#registration_token', title: _("Copy token to clipboard"), class: "btn-transparent btn-clipboard") %li = _("Start the Runner!") diff --git a/app/views/projects/_home_panel.html.haml b/app/views/projects/_home_panel.html.haml index 89940512bc6..74ab8cf8250 100644 --- a/app/views/projects/_home_panel.html.haml +++ b/app/views/projects/_home_panel.html.haml @@ -12,6 +12,9 @@ .project-home-desc - if @project.description.present? = markdown_field(@project, :description) + - if can?(current_user, :read_project, @project) + .text-secondary.prepend-top-8 + = s_('ProjectPage|Project ID: %{project_id}') % { project_id: @project.id } - if @project.forked? %p diff --git a/app/views/projects/clusters/_gcp_signup_offer_banner.html.haml b/app/views/projects/clusters/_gcp_signup_offer_banner.html.haml index 9298d93663d..73b11d509d3 100644 --- a/app/views/projects/clusters/_gcp_signup_offer_banner.html.haml +++ b/app/views/projects/clusters/_gcp_signup_offer_banner.html.haml @@ -1,12 +1,12 @@ - link = link_to(s_('ClusterIntegration|sign up'), 'https://console.cloud.google.com/freetrial?utm_campaign=2018_cpanel&utm_source=gitlab&utm_medium=referral', target: '_blank', rel: 'noopener noreferrer') -.gcp-signup-offer.alert.alert-block.alert-dismissable.prepend-top-default.append-bottom-default{ role: 'alert' } +.bs-callout.gcp-signup-offer.alert.alert-block.alert-dismissable.prepend-top-default.append-bottom-default{ role: 'alert' } %button.close{ type: "button", data: { feature_id: UserCalloutsHelper::GCP_SIGNUP_OFFER, dismiss_endpoint: user_callouts_path } } × - %div - .col-sm-2.gcp-logo - = image_tag 'illustrations/logos/google-cloud-platform_logo.svg' - .col-sm-10 - %h4= s_('ClusterIntegration|Redeem up to $500 in free credit for Google Cloud Platform') + .gcp-signup-offer--content + .gcp-signup-offer--icon.append-right-8 + = sprite_icon("information", size: 16) + .gcp-signup-offer--copy + %h4= s_('ClusterIntegration|Did you know?') %p= s_('ClusterIntegration|Every new Google Cloud Platform (GCP) account receives $300 in credit upon %{sign_up_link}. In partnership with Google, GitLab is able to offer an additional $200 for both new and existing GCP accounts to get started with GitLab\'s Google Kubernetes Engine Integration.').html_safe % { sign_up_link: link } - %a.btn.btn-info{ href: 'https://goo.gl/AaJzRW', target: '_blank', rel: 'noopener noreferrer' } + %a.btn.btn-default{ href: 'https://goo.gl/AaJzRW', target: '_blank', rel: 'noopener noreferrer' } Apply for credit diff --git a/app/views/projects/deploy_tokens/_form.html.haml b/app/views/projects/deploy_tokens/_form.html.haml index f8db30df7b4..329b9e7e562 100644 --- a/app/views/projects/deploy_tokens/_form.html.haml +++ b/app/views/projects/deploy_tokens/_form.html.haml @@ -14,16 +14,16 @@ .form-group = f.label :scopes, class: 'label-light' - %fieldset - = f.check_box :read_repository - = label_tag ("deploy_token_read_repository"), 'read_repository' - %span= s_('DeployTokens|Allows read-only access to the repository') + %fieldset.form-group.form-check + = f.check_box :read_repository, class: 'form-check-input' + = label_tag ("deploy_token_read_repository"), 'read_repository', class: 'label-light form-check-label' + .text-secondary= s_('DeployTokens|Allows read-only access to the repository') - if container_registry_enabled?(project) - %fieldset - = f.check_box :read_registry - = label_tag ("deploy_token_read_registry"), 'read_registry' - %span= s_('DeployTokens|Allows read-only access to the registry images') + %fieldset.form-group.form-check + = f.check_box :read_registry, class: 'form-check-input' + = label_tag ("deploy_token_read_registry"), 'read_registry', class: 'label-light form-check-label' + .text-secondary= s_('DeployTokens|Allows read-only access to the registry images') .prepend-top-default = f.submit s_('DeployTokens|Create deploy token'), class: 'btn btn-success' diff --git a/app/views/projects/imports/new.html.haml b/app/views/projects/imports/new.html.haml index ca82054d799..8ce822c43b7 100644 --- a/app/views/projects/imports/new.html.haml +++ b/app/views/projects/imports/new.html.haml @@ -5,8 +5,8 @@ %hr - if @project.import_failed? - .card.bg-danger - .card-header The repository could not be imported. + .card.border-danger + .card-header.bg-danger.text-white The repository could not be imported. .card-body %pre :preserve diff --git a/app/views/projects/pages/_destroy.haml b/app/views/projects/pages/_destroy.haml index 9b77c4e3494..ae8c801b705 100644 --- a/app/views/projects/pages/_destroy.haml +++ b/app/views/projects/pages/_destroy.haml @@ -1,7 +1,7 @@ - if @project.pages_deployed? - if can?(current_user, :remove_pages, @project) - .card.bg-danger - .card-header Remove pages + .card.border-danger + .card-header.bg-danger.text-white Remove pages .errors-holder .card-body %p |