diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-09-24 18:06:05 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-09-24 18:06:05 +0000 |
commit | 2ed368929ab5094fec5da8038f723463596a80cf (patch) | |
tree | aec98d50349b0e9a490db0099253b801b2d1a9ea /app | |
parent | f1a5755898e865428c923587402fd965b601c4ea (diff) | |
download | gitlab-ce-2ed368929ab5094fec5da8038f723463596a80cf.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
18 files changed, 47 insertions, 38 deletions
diff --git a/app/assets/javascripts/commons/vue.js b/app/assets/javascripts/commons/vue.js index 8b62d78c043..5b5a1507d38 100644 --- a/app/assets/javascripts/commons/vue.js +++ b/app/assets/javascripts/commons/vue.js @@ -1,5 +1,8 @@ import Vue from 'vue'; +import GlFeatureFlagsPlugin from '~/vue_shared/gl_feature_flags_plugin'; if (process.env.NODE_ENV !== 'production') { Vue.config.productionTip = false; } + +Vue.use(GlFeatureFlagsPlugin); diff --git a/app/assets/javascripts/monitoring/components/dashboard.vue b/app/assets/javascripts/monitoring/components/dashboard.vue index 12a4c83e053..b5ed54a6e25 100644 --- a/app/assets/javascripts/monitoring/components/dashboard.vue +++ b/app/assets/javascripts/monitoring/components/dashboard.vue @@ -175,7 +175,6 @@ export default { 'metricsWithData', 'useDashboardEndpoint', 'allDashboards', - 'multipleDashboardsEnabled', 'additionalPanelTypesEnabled', ]), firstDashboard() { @@ -318,7 +317,6 @@ export default { <div class="row"> <template v-if="environmentsEndpoint"> <gl-form-group - v-if="multipleDashboardsEnabled" :label="__('Dashboard')" label-size="sm" label-for="monitor-dashboards-dropdown" diff --git a/app/assets/javascripts/monitoring/monitoring_bundle.js b/app/assets/javascripts/monitoring/monitoring_bundle.js index 51cef20455c..6aa1fb5e9c6 100644 --- a/app/assets/javascripts/monitoring/monitoring_bundle.js +++ b/app/assets/javascripts/monitoring/monitoring_bundle.js @@ -14,7 +14,6 @@ export default (props = {}) => { if (gon.features) { store.dispatch('monitoringDashboard/setFeatureFlags', { prometheusEndpointEnabled: gon.features.environmentMetricsUsePrometheusEndpoint, - multipleDashboardsEnabled: gon.features.environmentMetricsShowMultipleDashboards, additionalPanelTypesEnabled: gon.features.environmentMetricsAdditionalPanelTypes, }); } diff --git a/app/assets/javascripts/monitoring/stores/actions.js b/app/assets/javascripts/monitoring/stores/actions.js index 0cbad179f17..2cf34ddb45b 100644 --- a/app/assets/javascripts/monitoring/stores/actions.js +++ b/app/assets/javascripts/monitoring/stores/actions.js @@ -37,10 +37,9 @@ export const setEndpoints = ({ commit }, endpoints) => { export const setFeatureFlags = ( { commit }, - { prometheusEndpointEnabled, multipleDashboardsEnabled, additionalPanelTypesEnabled }, + { prometheusEndpointEnabled, additionalPanelTypesEnabled }, ) => { commit(types.SET_DASHBOARD_ENABLED, prometheusEndpointEnabled); - commit(types.SET_MULTIPLE_DASHBOARDS_ENABLED, multipleDashboardsEnabled); commit(types.SET_ADDITIONAL_PANEL_TYPES_ENABLED, additionalPanelTypesEnabled); }; @@ -51,13 +50,8 @@ export const setShowErrorBanner = ({ commit }, enabled) => { export const requestMetricsDashboard = ({ commit }) => { commit(types.REQUEST_METRICS_DATA); }; -export const receiveMetricsDashboardSuccess = ( - { state, commit, dispatch }, - { response, params }, -) => { - if (state.multipleDashboardsEnabled) { - commit(types.SET_ALL_DASHBOARDS, response.all_dashboards); - } +export const receiveMetricsDashboardSuccess = ({ commit, dispatch }, { response, params }) => { + commit(types.SET_ALL_DASHBOARDS, response.all_dashboards); commit(types.RECEIVE_METRICS_DATA_SUCCESS, response.dashboard.panel_groups); dispatch('fetchPrometheusMetrics', params); }; diff --git a/app/assets/javascripts/monitoring/stores/mutation_types.js b/app/assets/javascripts/monitoring/stores/mutation_types.js index 4b1aadbcf05..9c546427c6e 100644 --- a/app/assets/javascripts/monitoring/stores/mutation_types.js +++ b/app/assets/javascripts/monitoring/stores/mutation_types.js @@ -10,7 +10,6 @@ export const RECEIVE_ENVIRONMENTS_DATA_FAILURE = 'RECEIVE_ENVIRONMENTS_DATA_FAIL export const SET_QUERY_RESULT = 'SET_QUERY_RESULT'; export const SET_TIME_WINDOW = 'SET_TIME_WINDOW'; export const SET_DASHBOARD_ENABLED = 'SET_DASHBOARD_ENABLED'; -export const SET_MULTIPLE_DASHBOARDS_ENABLED = 'SET_MULTIPLE_DASHBOARDS_ENABLED'; export const SET_ADDITIONAL_PANEL_TYPES_ENABLED = 'SET_ADDITIONAL_PANEL_TYPES_ENABLED'; export const SET_ALL_DASHBOARDS = 'SET_ALL_DASHBOARDS'; export const SET_ENDPOINTS = 'SET_ENDPOINTS'; diff --git a/app/assets/javascripts/monitoring/stores/mutations.js b/app/assets/javascripts/monitoring/stores/mutations.js index b1080b23815..320b33d3d69 100644 --- a/app/assets/javascripts/monitoring/stores/mutations.js +++ b/app/assets/javascripts/monitoring/stores/mutations.js @@ -89,9 +89,6 @@ export default { [types.SET_DASHBOARD_ENABLED](state, enabled) { state.useDashboardEndpoint = enabled; }, - [types.SET_MULTIPLE_DASHBOARDS_ENABLED](state, enabled) { - state.multipleDashboardsEnabled = enabled; - }, [types.SET_GETTING_STARTED_EMPTY_STATE](state) { state.emptyState = 'gettingStarted'; }, diff --git a/app/assets/javascripts/monitoring/stores/state.js b/app/assets/javascripts/monitoring/stores/state.js index 440bdc951e0..e894e988f6a 100644 --- a/app/assets/javascripts/monitoring/stores/state.js +++ b/app/assets/javascripts/monitoring/stores/state.js @@ -8,7 +8,6 @@ export default () => ({ deploymentsEndpoint: null, dashboardEndpoint: invalidUrl, useDashboardEndpoint: false, - multipleDashboardsEnabled: false, additionalPanelTypesEnabled: false, emptyState: 'gettingStarted', showEmptyState: true, diff --git a/app/assets/javascripts/users_select.js b/app/assets/javascripts/users_select.js index 666b3f025f5..da1a7c290f8 100644 --- a/app/assets/javascripts/users_select.js +++ b/app/assets/javascripts/users_select.js @@ -7,6 +7,7 @@ import _ from 'underscore'; import axios from './lib/utils/axios_utils'; import { s__, __, sprintf } from './locale'; import ModalStore from './boards/stores/modal_store'; +import { parseBoolean } from './lib/utils/common_utils'; // TODO: remove eventHub hack after code splitting refactor window.emitSidebarEvent = window.emitSidebarEvent || $.noop; @@ -275,12 +276,13 @@ function UsersSelect(currentUser, els, options = {}) { }) .map(input => { const userId = parseInt(input.value, 10); - const { avatarUrl, avatar_url, name, username } = input.dataset; + const { avatarUrl, avatar_url, name, username, canMerge } = input.dataset; return { avatar_url: avatarUrl || avatar_url, id: userId, name, username, + can_merge: parseBoolean(canMerge), }; }); diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue index 91c0b40a0b5..8132b1a944b 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue @@ -1,5 +1,7 @@ <script> import $ from 'jquery'; +import { __ } from '~/locale'; +import createFlash from '~/flash'; import statusIcon from '../mr_widget_status_icon.vue'; import tooltip from '../../../vue_shared/directives/tooltip'; import eventHub from '../../event_hub'; @@ -29,12 +31,12 @@ export default { .then(res => res.data) .then(data => { eventHub.$emit('UpdateWidgetData', data); - new window.Flash('The merge request can now be merged.', 'notice'); // eslint-disable-line + createFlash(__('The merge request can now be merged.'), 'notice'); $('.merge-request .detail-page-description .title').text(this.mr.title); }) .catch(() => { this.isMakingRequest = false; - new window.Flash('Something went wrong. Please try again.'); // eslint-disable-line + createFlash(__('Something went wrong. Please try again.')); }); }, }, diff --git a/app/assets/javascripts/vue_shared/gl_feature_flags_plugin.js b/app/assets/javascripts/vue_shared/gl_feature_flags_plugin.js new file mode 100644 index 00000000000..3488a44bd0f --- /dev/null +++ b/app/assets/javascripts/vue_shared/gl_feature_flags_plugin.js @@ -0,0 +1,7 @@ +export default Vue => { + Vue.mixin({ + provide: { + glFeatures: { ...((window.gon && window.gon.features) || {}) }, + }, + }); +}; diff --git a/app/assets/javascripts/vue_shared/mixins/gl_feature_flags_mixin.js b/app/assets/javascripts/vue_shared/mixins/gl_feature_flags_mixin.js new file mode 100644 index 00000000000..dc8a63f26ac --- /dev/null +++ b/app/assets/javascripts/vue_shared/mixins/gl_feature_flags_mixin.js @@ -0,0 +1,8 @@ +export default () => ({ + inject: { + glFeatures: { + from: 'glFeatures', + default: () => ({}), + }, + }, +}); diff --git a/app/assets/stylesheets/pages/notes.scss b/app/assets/stylesheets/pages/notes.scss index d67a0f83aa2..f4928627748 100644 --- a/app/assets/stylesheets/pages/notes.scss +++ b/app/assets/stylesheets/pages/notes.scss @@ -245,14 +245,6 @@ $note-form-margin-left: 72px; } } - .note-header { - @include notes-media('max', map-get($grid-breakpoints, xs)) { - .inline { - display: block; - } - } - } - .note-emoji-button { position: relative; line-height: 1; @@ -635,10 +627,6 @@ $note-form-margin-left: 72px; .note-headline-light { display: inline; - - @include notes-media('max', map-get($grid-breakpoints, xs)) { - display: block; - } } .note-headline-light, diff --git a/app/controllers/concerns/renders_assignees.rb b/app/controllers/concerns/renders_assignees.rb new file mode 100644 index 00000000000..e9583a7a530 --- /dev/null +++ b/app/controllers/concerns/renders_assignees.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +module RendersAssignees + def preload_assignees_for_render(merge_request) + merge_request.project.team.max_member_access_for_user_ids(merge_request.assignees.map(&:id)) + end +end diff --git a/app/controllers/projects/environments_controller.rb b/app/controllers/projects/environments_controller.rb index 64de0e665d3..841fc343b30 100644 --- a/app/controllers/projects/environments_controller.rb +++ b/app/controllers/projects/environments_controller.rb @@ -12,7 +12,6 @@ class Projects::EnvironmentsController < Projects::ApplicationController before_action :expire_etag_cache, only: [:index] before_action only: [:metrics, :additional_metrics, :metrics_dashboard] do push_frontend_feature_flag(:environment_metrics_use_prometheus_endpoint, default_enabled: true) - push_frontend_feature_flag(:environment_metrics_show_multiple_dashboards) push_frontend_feature_flag(:environment_metrics_additional_panel_types) push_frontend_feature_flag(:prometheus_computed_alerts) end @@ -168,7 +167,7 @@ class Projects::EnvironmentsController < Projects::ApplicationController dashboard_path: params[:dashboard], **dashboard_params.to_h.symbolize_keys ) - elsif Feature.enabled?(:environment_metrics_show_multiple_dashboards, project) + else result = dashboard_finder.find( project, current_user, @@ -177,8 +176,6 @@ class Projects::EnvironmentsController < Projects::ApplicationController ) result[:all_dashboards] = dashboard_finder.find_all_paths(project) - else - result = dashboard_finder.find(project, current_user, environment: environment) end respond_to do |format| diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index e51ce752233..2f73fccabcf 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -5,6 +5,7 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo include IssuableActions include RendersNotes include RendersCommits + include RendersAssignees include ToggleAwardEmoji include IssuableCollections include RecordUserLastActivity @@ -41,6 +42,8 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo # use next to appease Rubocop next render('invalid') if target_branch_missing? + preload_assignees_for_render(@merge_request) + # Build a note object for comment form @note = @project.notes.new(noteable: @merge_request) diff --git a/app/helpers/issuables_helper.rb b/app/helpers/issuables_helper.rb index 24614b5030c..df9d1933271 100644 --- a/app/helpers/issuables_helper.rb +++ b/app/helpers/issuables_helper.rb @@ -372,6 +372,12 @@ module IssuablesHelper finder.class.scalar_params.any? { |p| params[p].present? } end + def assignee_sidebar_data(assignee, merge_request: nil) + { avatar_url: assignee.avatar_url, name: assignee.name, username: assignee.username }.tap do |data| + data[:can_merge] = merge_request.can_be_merged_by?(assignee) if merge_request + end + end + private def sidebar_gutter_collapsed? diff --git a/app/views/admin/dashboard/index.html.haml b/app/views/admin/dashboard/index.html.haml index 8fad42436ca..2b913808c2f 100644 --- a/app/views/admin/dashboard/index.html.haml +++ b/app/views/admin/dashboard/index.html.haml @@ -40,7 +40,7 @@ .info-well .well-segment.admin-well.admin-well-features %h4 Features - = feature_entry(_('Sign up'), href: admin_application_settings_path(anchor: 'js-signup-settings')) + = feature_entry(_('Sign up'), href: admin_application_settings_path(anchor: 'js-signup-settings'), enabled: allow_signup?) = feature_entry(_('LDAP'), enabled: Gitlab.config.ldap.enabled) = feature_entry(_('Gravatar'), href: admin_application_settings_path(anchor: 'js-account-settings'), enabled: gravatar_enabled?) = feature_entry(_('OmniAuth'), href: admin_application_settings_path(anchor: 'js-signin-settings'), enabled: Gitlab::Auth.omniauth_enabled?) diff --git a/app/views/shared/issuable/_sidebar_assignees.html.haml b/app/views/shared/issuable/_sidebar_assignees.html.haml index dfb0e7ed297..e6b8e299e1c 100644 --- a/app/views/shared/issuable/_sidebar_assignees.html.haml +++ b/app/views/shared/issuable/_sidebar_assignees.html.haml @@ -11,7 +11,7 @@ = hidden_field_tag "#{issuable_type}[assignee_ids][]", 0, id: nil - else - assignees.each do |assignee| - = hidden_field_tag "#{issuable_type}[assignee_ids][]", assignee.id, id: nil, data: { avatar_url: assignee.avatar_url, name: assignee.name, username: assignee.username } + = hidden_field_tag "#{issuable_type}[assignee_ids][]", assignee.id, id: nil, data: assignee_sidebar_data(assignee, merge_request: @merge_request) - options = { toggle_class: 'js-user-search js-author-search', title: _('Assign to'), |