From 367e7db836dd84ee39adcca18d973c1d530088aa Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Mon, 15 Feb 2021 21:08:59 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .eslintrc.yml | 82 +++++----- .../behaviors/markdown/editor_extensions.js | 29 ++-- app/assets/javascripts/boards/index.js | 24 ++- .../commit/pipelines/pipelines_table.vue | 4 +- app/assets/javascripts/main.js | 1 + app/assets/javascripts/notes.js | 6 +- .../pages/projects/blob/show/index.js | 2 +- .../pages/projects/commit/show/index.js | 3 +- .../javascripts/pages/users/user_tabs.js | 10 +- .../components/pipelines_list/pipelines.vue | 2 +- .../pipelines/mixins/pipelines_mixin.js | 4 +- .../components/profile_preferences.vue | 105 ++++++++++-- .../profile/preferences/constants.js | 22 +++ .../preferences/profile_preferences_bundle.js | 20 ++- .../repository/components/preview/index.vue | 2 +- app/assets/javascripts/terraform/index.js | 2 +- .../viewers/markdown_viewer.vue | 3 +- .../vue_shared/components/markdown/field.vue | 2 +- app/controllers/dashboard_controller.rb | 19 ++- .../profiles/preferences_controller.rb | 25 ++- app/controllers/users_controller.rb | 46 +++++- app/finders/user_recent_events_finder.rb | 38 ++++- app/helpers/users_helper.rb | 2 +- app/models/user.rb | 30 ++++ app/models/users/user_follow_user.rb | 7 + app/views/dashboard/_activity_head.html.haml | 7 +- app/views/profiles/preferences/show.html.haml | 15 +- app/views/profiles/preferences/update.js.erb | 20 --- .../empty_states/_profile_tabs.html.haml | 1 + app/views/shared/users/_user.html.haml | 13 ++ app/views/shared/users/index.html.haml | 20 +++ app/views/users/show.html.haml | 33 ++++ .../unreleased/feat-follow-eachother.yml | 5 + ...ltsov-group-migration-epic-award-emoji.yml | 5 + config/routes/user.rb | 4 + ...20201027101010_create_user_follow_users.rb | 24 +++ db/schema_migrations/20201027101010 | 1 + db/structure.sql | 18 ++- doc/api/users.md | 86 +++++++++- .../img/activity_followed_users_v13_9.png | Bin 0 -> 414639 bytes doc/user/index.md | 8 + .../profile/img/profile_following_v13_9.png | Bin 0 -> 652637 bytes doc/user/profile/index.md | 6 + doc/user/project/labels.md | 28 ++-- doc/user/project/service_desk.md | 7 +- lib/api/entities/user.rb | 6 + lib/api/users.rb | 62 ++++++++ .../common/extractors/graphql_extractor.rb | 2 +- .../transformers/award_emoji_transformer.rb | 27 ++++ .../groups/graphql/get_group_query.rb | 4 +- .../groups/graphql/get_labels_query.rb | 6 +- .../groups/graphql/get_members_query.rb | 6 +- lib/bulk_imports/pipeline/context.rb | 4 +- .../database/migrations/instrumentation.rb | 24 ++- lib/gitlab/database/migrations/observation.rb | 14 ++ lib/gitlab/database/migrations/observers.rb | 15 ++ .../observers/migration_observer.rb | 29 ++++ .../observers/total_database_size_change.rb | 31 ++++ locale/gitlab.pot | 74 ++++++--- .../profiles/preferences_controller_spec.rb | 35 ++-- spec/features/dashboard/activity_spec.rb | 20 +++ .../profiles/user_edit_preferences_spec.rb | 11 +- ...er_visits_profile_preferences_page_spec.rb | 12 +- spec/features/users/overview_spec.rb | 126 +++++++++++++++ spec/features/users/show_spec.rb | 52 ++++++ .../finders/user_recent_events_finder_spec.rb | 112 +++++++++++-- .../boards/board_list_deprecated_spec.js | 7 +- spec/frontend/boards/board_list_helper.js | 4 +- .../boards/components/board_column_spec.js | 2 +- .../boards/issue_card_deprecated_spec.js | 2 +- spec/frontend/boards/list_spec.js | 3 +- spec/frontend/commits_spec.js | 2 +- .../feature_highlight_helper_spec.js | 2 +- .../filtered_search/dropdown_user_spec.js | 3 + spec/frontend/gfm_auto_complete_spec.js | 3 +- .../ide/components/repo_editor_spec.js | 6 +- .../lib/utils/datetime_utility_spec.js | 2 +- .../pages/dashboard/todos/index/todos_spec.js | 2 +- .../integration_view_spec.js.snap | 67 -------- .../profile_preferences_spec.js.snap | 51 ------ .../components/integration_view_spec.js | 6 - .../components/profile_preferences_spec.js | 140 ++++++++++++++-- .../frontend/profile/preferences/mock_data.js | 2 + spec/frontend/search_autocomplete_spec.js | 3 +- spec/frontend/test_setup.js | 5 +- .../frontend_integration/ide/helpers/start.js | 2 +- .../ide/ide_integration_spec.js | 6 +- .../test_helpers/factories/commit.js | 2 +- spec/javascripts/fly_out_nav_browser_spec.js | 2 +- .../dashboard_resize_browser_spec.js | 6 +- spec/javascripts/test_bundle.js | 9 +- .../award_emoji_transformer_spec.rb | 48 ++++++ .../groups/graphql/get_group_query_spec.rb | 5 +- .../groups/graphql/get_labels_query_spec.rb | 5 +- .../groups/graphql/get_members_query_spec.rb | 3 +- .../importers/group_importer_spec.rb | 11 +- .../migrations/instrumentation_spec.rb | 35 ++++ .../total_database_size_change_spec.rb | 39 +++++ spec/models/user_spec.rb | 73 +++++++++ spec/requests/api/users_spec.rb | 150 ++++++++++++++++++ ..._build_group_report_result_service_spec.rb | 22 +-- 101 files changed, 1730 insertions(+), 463 deletions(-) create mode 100644 app/assets/javascripts/profile/preferences/constants.js create mode 100644 app/models/users/user_follow_user.rb delete mode 100644 app/views/profiles/preferences/update.js.erb create mode 100644 app/views/shared/users/_user.html.haml create mode 100644 app/views/shared/users/index.html.haml create mode 100644 changelogs/unreleased/feat-follow-eachother.yml create mode 100644 changelogs/unreleased/georgekoltsov-group-migration-epic-award-emoji.yml create mode 100644 db/migrate/20201027101010_create_user_follow_users.rb create mode 100644 db/schema_migrations/20201027101010 create mode 100644 doc/user/img/activity_followed_users_v13_9.png create mode 100644 doc/user/profile/img/profile_following_v13_9.png create mode 100644 lib/bulk_imports/common/transformers/award_emoji_transformer.rb create mode 100644 lib/gitlab/database/migrations/observation.rb create mode 100644 lib/gitlab/database/migrations/observers.rb create mode 100644 lib/gitlab/database/migrations/observers/migration_observer.rb create mode 100644 lib/gitlab/database/migrations/observers/total_database_size_change.rb delete mode 100644 spec/frontend/profile/preferences/components/__snapshots__/integration_view_spec.js.snap delete mode 100644 spec/frontend/profile/preferences/components/__snapshots__/profile_preferences_spec.js.snap create mode 100644 spec/lib/bulk_imports/common/transformers/award_emoji_transformer_spec.rb create mode 100644 spec/lib/gitlab/database/migrations/observers/total_database_size_change_spec.rb diff --git a/.eslintrc.yml b/.eslintrc.yml index 99c390e5060..75c52ac1319 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -42,48 +42,50 @@ rules: no-jquery/no-serialize: error promise/always-return: off promise/no-callback-in-promise: off - "@gitlab/no-global-event-off": error + '@gitlab/no-global-event-off': error import/order: - - error - - groups: - - builtin - - external - - internal - - parent - - sibling - - index - pathGroups: - - pattern: ~/** - group: internal - - pattern: emojis/** - group: internal - - pattern: "{ee_,}empty_states/**" - group: internal - - pattern: "{ee_,}icons/**" - group: internal - - pattern: "{ee_,}images/**" - group: internal - - pattern: vendor/** - group: internal - - pattern: shared_queries/** - group: internal - - pattern: "{ee_,}spec/**" - group: internal - - pattern: "{ee_,}jest/**" - group: internal - - pattern: ee_else_ce/** - group: internal - - pattern: ee/** - group: internal - - pattern: ee_component/** - group: internal - - pattern: "{test_,}helpers/**" - group: internal - - pattern: test_fixtures/** - group: internal + - error + - groups: + - builtin + - external + - internal + - parent + - sibling + - index + pathGroups: + - pattern: ~/** + group: internal + - pattern: emojis/** + group: internal + - pattern: '{ee_,}empty_states/**' + group: internal + - pattern: '{ee_,}icons/**' + group: internal + - pattern: '{ee_,}images/**' + group: internal + - pattern: vendor/** + group: internal + - pattern: shared_queries/** + group: internal + - pattern: '{ee_,}spec/**' + group: internal + - pattern: '{ee_,}jest/**' + group: internal + - pattern: ee_else_ce/** + group: internal + - pattern: ee/** + group: internal + - pattern: ee_component/** + group: internal + - pattern: '{test_,}helpers/**' + group: internal + - pattern: test_fixtures/** + group: internal + alphabetize: + order: asc overrides: - files: - '**/spec/**/*' rules: - "@gitlab/require-i18n-strings": off - "@gitlab/no-runtime-template-compiler": off + '@gitlab/require-i18n-strings': off + '@gitlab/no-runtime-template-compiler': off diff --git a/app/assets/javascripts/behaviors/markdown/editor_extensions.js b/app/assets/javascripts/behaviors/markdown/editor_extensions.js index ee50075862a..b512e4dbc8b 100644 --- a/app/assets/javascripts/behaviors/markdown/editor_extensions.js +++ b/app/assets/javascripts/behaviors/markdown/editor_extensions.js @@ -22,27 +22,24 @@ import Heading from './nodes/heading'; import HorizontalRule from './nodes/horizontal_rule'; import Image from './nodes/image'; -import Reference from './nodes/reference'; -import Table from './nodes/table'; -import TableHead from './nodes/table_head'; -import TableBody from './nodes/table_body'; -import TableHeaderRow from './nodes/table_header_row'; -import TableRow from './nodes/table_row'; -import TableCell from './nodes/table_cell'; - -import TableOfContents from './nodes/table_of_contents'; -import TaskList from './nodes/task_list'; -import TaskListItem from './nodes/task_list_item'; -import Video from './nodes/video'; - -import OrderedList from './nodes/ordered_list'; import ListItem from './nodes/list_item'; - +import OrderedList from './nodes/ordered_list'; import OrderedTaskList from './nodes/ordered_task_list'; import Paragraph from './nodes/paragraph'; - +import Reference from './nodes/reference'; import Summary from './nodes/summary'; +import Table from './nodes/table'; +import TableBody from './nodes/table_body'; +import TableCell from './nodes/table_cell'; +import TableHead from './nodes/table_head'; +import TableHeaderRow from './nodes/table_header_row'; +import TableOfContents from './nodes/table_of_contents'; +import TableRow from './nodes/table_row'; + +import TaskList from './nodes/task_list'; +import TaskListItem from './nodes/task_list_item'; import Text from './nodes/text'; +import Video from './nodes/video'; // The filters referenced in lib/banzai/pipeline/gfm_pipeline.rb transform // GitLab Flavored Markdown (GFM) to HTML. diff --git a/app/assets/javascripts/boards/index.js b/app/assets/javascripts/boards/index.js index ac7d8e542c4..15f7e2191a2 100644 --- a/app/assets/javascripts/boards/index.js +++ b/app/assets/javascripts/boards/index.js @@ -1,9 +1,9 @@ import Vue from 'vue'; +import VueApollo from 'vue-apollo'; import { mapActions, mapGetters } from 'vuex'; import 'ee_else_ce/boards/models/issue'; import 'ee_else_ce/boards/models/list'; -import VueApollo from 'vue-apollo'; import BoardSidebar from 'ee_else_ce/boards/components/board_sidebar'; import initNewListDropdown from 'ee_else_ce/boards/components/new_list_dropdown'; import boardConfigToggle from 'ee_else_ce/boards/config_toggle'; @@ -15,33 +15,31 @@ import { } from 'ee_else_ce/boards/ee_functions'; import toggleEpicsSwimlanes from 'ee_else_ce/boards/toggle_epics_swimlanes'; import toggleLabels from 'ee_else_ce/boards/toggle_labels'; - import BoardAddNewColumnTrigger from '~/boards/components/board_add_new_column_trigger.vue'; import BoardContent from '~/boards/components/board_content.vue'; import BoardExtraActions from '~/boards/components/board_extra_actions.vue'; -import { deprecatedCreateFlash as Flash } from '~/flash'; -import createDefaultClient from '~/lib/graphql'; -import { __ } from '~/locale'; import './models/label'; import './models/assignee'; - -import toggleFocusMode from '~/boards/toggle_focus'; -import FilteredSearchBoards from '~/boards/filtered_search_boards'; -import eventHub from '~/boards/eventhub'; -import sidebarEventHub from '~/sidebar/event_hub'; import '~/boards/models/milestone'; import '~/boards/models/project'; +import '~/boards/filters/due_date_filters'; +import BoardAddIssuesModal from '~/boards/components/modal/index.vue'; +import eventHub from '~/boards/eventhub'; +import FilteredSearchBoards from '~/boards/filtered_search_boards'; +import modalMixin from '~/boards/mixins/modal_mixins'; import store from '~/boards/stores'; import boardsStore from '~/boards/stores/boards_store'; import ModalStore from '~/boards/stores/modal_store'; -import modalMixin from '~/boards/mixins/modal_mixins'; -import '~/boards/filters/due_date_filters'; -import BoardAddIssuesModal from '~/boards/components/modal/index.vue'; +import toggleFocusMode from '~/boards/toggle_focus'; +import { deprecatedCreateFlash as Flash } from '~/flash'; +import createDefaultClient from '~/lib/graphql'; import { NavigationType, convertObjectPropsToCamelCase, parseBoolean, } from '~/lib/utils/common_utils'; +import { __ } from '~/locale'; +import sidebarEventHub from '~/sidebar/event_hub'; import mountMultipleBoardsSwitcher from './mount_multiple_boards_switcher'; Vue.use(VueApollo); diff --git a/app/assets/javascripts/commit/pipelines/pipelines_table.vue b/app/assets/javascripts/commit/pipelines/pipelines_table.vue index 4362263b0dd..787152d00ef 100644 --- a/app/assets/javascripts/commit/pipelines/pipelines_table.vue +++ b/app/assets/javascripts/commit/pipelines/pipelines_table.vue @@ -1,13 +1,13 @@ @@ -36,10 +97,10 @@ export default {

- {{ s__('ProfilePreferences|Integrations') }} + {{ $options.i18n.integrations }}

- {{ s__('ProfilePreferences|Customize integrations with third party services.') }} + {{ $options.i18n.integrationsDescription }}

@@ -52,5 +113,19 @@ export default { :config="$options.integrationViewConfigs[view.name]" />
+
+
+
+ + {{ $options.i18n.saveChanges }} + +
+
diff --git a/app/assets/javascripts/profile/preferences/constants.js b/app/assets/javascripts/profile/preferences/constants.js new file mode 100644 index 00000000000..ea8464ba065 --- /dev/null +++ b/app/assets/javascripts/profile/preferences/constants.js @@ -0,0 +1,22 @@ +import { s__, __ } from '~/locale'; + +export const INTEGRATION_VIEW_CONFIGS = { + sourcegraph: { + title: s__('Preferences|Sourcegraph'), + label: s__('Preferences|Enable integrated code intelligence on code views'), + formName: 'sourcegraph_enabled', + }, + gitpod: { + title: s__('Preferences|Gitpod'), + label: s__('Preferences|Enable Gitpod integration'), + formName: 'gitpod_enabled', + }, +}; + +export const i18n = { + saveChanges: __('Save changes'), + defaultSuccess: __('Preferences saved.'), + defaultError: s__('Preferences|Failed to save preferences.'), + integrations: s__('Preferences|Integrations'), + integrationsDescription: s__('Preferences|Customize integrations with third party services.'), +}; diff --git a/app/assets/javascripts/profile/preferences/profile_preferences_bundle.js b/app/assets/javascripts/profile/preferences/profile_preferences_bundle.js index 744e0174a4e..6520e68d41c 100644 --- a/app/assets/javascripts/profile/preferences/profile_preferences_bundle.js +++ b/app/assets/javascripts/profile/preferences/profile_preferences_bundle.js @@ -3,16 +3,20 @@ import ProfilePreferences from './components/profile_preferences.vue'; export default () => { const el = document.querySelector('#js-profile-preferences-app'); - const shouldParse = ['integrationViews', 'userFields']; + const formEl = document.querySelector('#profile-preferences-form'); + const shouldParse = ['integrationViews', 'themes', 'userFields']; - const provide = Object.keys(el.dataset).reduce((memo, key) => { - let value = el.dataset[key]; - if (shouldParse.includes(key)) { - value = JSON.parse(value); - } + const provide = Object.keys(el.dataset).reduce( + (memo, key) => { + let value = el.dataset[key]; + if (shouldParse.includes(key)) { + value = JSON.parse(value); + } - return { ...memo, [key]: value }; - }, {}); + return { ...memo, [key]: value }; + }, + { formEl }, + ); return new Vue({ el, diff --git a/app/assets/javascripts/repository/components/preview/index.vue b/app/assets/javascripts/repository/components/preview/index.vue index e2c3f3b81ee..b74c2333148 100644 --- a/app/assets/javascripts/repository/components/preview/index.vue +++ b/app/assets/javascripts/repository/components/preview/index.vue @@ -1,8 +1,8 @@