summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitlab-ci.yml2
-rw-r--r--.gitlab/issue_templates/Feature Proposal.md43
-rw-r--r--CHANGELOG.md187
-rw-r--r--CONTRIBUTING.md1
-rw-r--r--GITALY_SERVER_VERSION2
-rw-r--r--VERSION2
-rw-r--r--app/assets/javascripts/dispatcher.js3
-rw-r--r--app/assets/javascripts/main.js1
-rw-r--r--app/assets/javascripts/render_gfm.js3
-rw-r--r--app/assets/javascripts/render_mermaid.js30
-rw-r--r--app/assets/stylesheets/framework/contextual-sidebar.scss19
-rw-r--r--app/assets/stylesheets/framework/filters.scss5
-rw-r--r--app/assets/stylesheets/framework/gitlab-theme.scss8
-rw-r--r--app/assets/stylesheets/framework/header.scss20
-rw-r--r--app/assets/stylesheets/framework/icons.scss28
-rw-r--r--app/assets/stylesheets/framework/images.scss2
-rw-r--r--app/assets/stylesheets/framework/mixins.scss8
-rw-r--r--app/assets/stylesheets/framework/zen.scss8
-rw-r--r--app/assets/stylesheets/pages/notes.scss8
-rw-r--r--app/assets/stylesheets/pages/status.scss4
-rw-r--r--app/controllers/groups/milestones_controller.rb3
-rw-r--r--app/helpers/search_helper.rb3
-rw-r--r--app/models/ci/pipeline.rb5
-rw-r--r--app/models/repository.rb6
-rw-r--r--app/uploaders/file_uploader.rb10
-rw-r--r--app/views/groups/milestones/index.html.haml1
-rw-r--r--app/views/groups/milestones/new.html.haml1
-rw-r--r--app/views/shared/_import_form.html.haml3
-rw-r--r--changelogs/unreleased/.yml5
-rw-r--r--changelogs/unreleased/1312-time-spent-at.yml5
-rw-r--r--changelogs/unreleased/14970-suggest-rename-remote.yml5
-rw-r--r--changelogs/unreleased/20666-404-error-issue-assigned-with-issues-disabled.yml6
-rw-r--r--changelogs/unreleased/23000-pages-api.yml5
-rw-r--r--changelogs/unreleased/23206-load-participants-async.yml5
-rw-r--r--changelogs/unreleased/26763-grant-registry-auth-scope-to-admins.yml5
-rw-r--r--changelogs/unreleased/27375-dashboard-activity-performance.yml5
-rw-r--r--changelogs/unreleased/27654-retry-button.yml5
-rw-r--r--changelogs/unreleased/28202_decrease_abc_threshold_step5.yml5
-rw-r--r--changelogs/unreleased/30140-restore-readme-only-preference.yml5
-rw-r--r--changelogs/unreleased/31358_decrease_perceived_complexity_threshold_step3.yml5
-rw-r--r--changelogs/unreleased/31454-missing-project-id-pipeline-hook-data.yml5
-rw-r--r--changelogs/unreleased/32318-filter-icon.yml5
-rw-r--r--changelogs/unreleased/3274-geo-route-whitelisting.yml5
-rw-r--r--changelogs/unreleased/34284-add-changes-to-issuable-webhook-data.yml5
-rw-r--r--changelogs/unreleased/34768-fix-issuable-header-wrapping.yml5
-rw-r--r--changelogs/unreleased/34841-todos.yml5
-rw-r--r--changelogs/unreleased/34897-delete-branch-after-merge.yml5
-rw-r--r--changelogs/unreleased/35199-case-insensitive-branches-search.yml5
-rw-r--r--changelogs/unreleased/35644-refactor-have-http-status-into-have-gitlab-http-status.yml5
-rw-r--r--changelogs/unreleased/35652-prometheus-service-page-shows-error.yml5
-rw-r--r--changelogs/unreleased/35914-merge-request-update-worker-is-slow.yml5
-rw-r--r--changelogs/unreleased/3615-improve-welcome-screen.yml5
-rw-r--r--changelogs/unreleased/36160-zindex.yml5
-rw-r--r--changelogs/unreleased/36629-35958-add-cluster-application-section.yml6
-rw-r--r--changelogs/unreleased/3674-hashed-storage-attachments.yml5
-rw-r--r--changelogs/unreleased/37032-get-project-branch-invalid-name-message.yml5
-rw-r--r--changelogs/unreleased/37442-api-branches-id-repository-branches-is-calling-gitaly-n-1-times-per-request.yml5
-rw-r--r--changelogs/unreleased/37473-expose-project-visibility-as-ci-variable.yml5
-rw-r--r--changelogs/unreleased/37571-replace-wikipage-createservice-with-factory.yml5
-rw-r--r--changelogs/unreleased/37631-add-a-merge_request_diff_id-column-to-merge_requests.yml5
-rw-r--r--changelogs/unreleased/37660-match-sidebar-colors.yml5
-rw-r--r--changelogs/unreleased/37824-many-branches-lock-server.yml6
-rw-r--r--changelogs/unreleased/37978-extra-border-radius-while-editing-a-file.yml6
-rw-r--r--changelogs/unreleased/38178-fl-mr-notes-components.yml6
-rw-r--r--changelogs/unreleased/38236-remove-build-failed-todo-if-it-has-been-auto-retried.yml5
-rw-r--r--changelogs/unreleased/38247-hide-create-mr-button-in-issue-show.yml5
-rw-r--r--changelogs/unreleased/38394-smarter-interval.yml5
-rw-r--r--changelogs/unreleased/38395-mr-widget-ci.yml6
-rw-r--r--changelogs/unreleased/38589-internationalize-tags-page.yml5
-rw-r--r--changelogs/unreleased/38677-render-new-discussions-on-diff-tab.yml5
-rw-r--r--changelogs/unreleased/38720-sort-admin-runners.yml5
-rw-r--r--changelogs/unreleased/38871-cleanup-data-page-attribute-after-karma-test.yml5
-rw-r--r--changelogs/unreleased/38877-disable-autocomplete-in-filtered-search.yml5
-rw-r--r--changelogs/unreleased/38986-due-date.yml5
-rw-r--r--changelogs/unreleased/39033-d3-js-is-being-included-in-the-user_profile-and-graphs_show-bundles.yml6
-rw-r--r--changelogs/unreleased/39035-move-gitlab-export-to-top-import-list.yml5
-rw-r--r--changelogs/unreleased/39109-reenable-scroll-job.yml5
-rw-r--r--changelogs/unreleased/39297-remove-help-text-group-lists.yml5
-rw-r--r--changelogs/unreleased/39417-todos-spelled-correctly-on-todos-list-page.yml5
-rw-r--r--changelogs/unreleased/39419-remove-overzealous-tooltips.yml5
-rw-r--r--changelogs/unreleased/39509-fix-wiki-create-sidebar-overlap.yml5
-rw-r--r--changelogs/unreleased/39570-performance-bar-appears-enabled-even-though-it-won-t-show-up.yml5
-rw-r--r--changelogs/unreleased/39573-hashed-storage-backup.yml5
-rw-r--r--changelogs/unreleased/39580-bump-carrierwave-to-1-2-1.yml5
-rw-r--r--changelogs/unreleased/39582-nestingdepth-6.yml5
-rw-r--r--changelogs/unreleased/39583-reopen-issue-count-cache.yml5
-rw-r--r--changelogs/unreleased/39593-emails-on-push-are-sent-to-only-the-first-recipient-when-using-aws-ses.yml5
-rw-r--r--changelogs/unreleased/39619-cancel-merge-when-pipeline-succeeds-from-the-api-fails.yml5
-rw-r--r--changelogs/unreleased/39649-change-default-size-for-gke-cluster-creation.yml5
-rw-r--r--changelogs/unreleased/39668-tooltip-safari.yml5
-rw-r--r--changelogs/unreleased/39720-group-milestone-sorting.yml5
-rw-r--r--changelogs/unreleased/39757-border-zero-of-scss-lint.yml5
-rw-r--r--changelogs/unreleased/39776-remove-responsive-table-bottom-border.yml5
-rw-r--r--changelogs/unreleased/39791-when-reopening-an-issue-the-mattermost-notification-has-no-context-to-the-issue.yml5
-rw-r--r--changelogs/unreleased/39878-commit-pipeline-reads-wrong-key.yml5
-rw-r--r--changelogs/unreleased/39977-gitlab-shell-default-timeout.yml5
-rw-r--r--changelogs/unreleased/40068-runner-sorting-regression.yml5
-rw-r--r--changelogs/unreleased/40198-fix-gpg-badge-links.yml6
-rw-r--r--changelogs/unreleased/add-changes-count-to-merge-requests-api.yml5
-rw-r--r--changelogs/unreleased/add-ingress-to-cluster-applications.yml5
-rw-r--r--changelogs/unreleased/add-lazy-option-to-user-avatar-image-component.yml5
-rw-r--r--changelogs/unreleased/add-packagist-project-service.yml5
-rw-r--r--changelogs/unreleased/add-shared-vue-loading-button.yml5
-rw-r--r--changelogs/unreleased/an-use-branch-exists-over-branch-names-include.yml5
-rw-r--r--changelogs/unreleased/api-configure-jira.yml5
-rw-r--r--changelogs/unreleased/api-doc-group-statistics.yml5
-rw-r--r--changelogs/unreleased/backport-workhorse-show-all-refs.yml5
-rw-r--r--changelogs/unreleased/bugfix_banzai_closed_milestones.yml5
-rw-r--r--changelogs/unreleased/bvl-fix-count-with-selects.yml6
-rw-r--r--changelogs/unreleased/bvl-fix-group-atom-feed.yml5
-rw-r--r--changelogs/unreleased/bvl-free-paths.yml5
-rw-r--r--changelogs/unreleased/bvl-group-trees.yml5
-rw-r--r--changelogs/unreleased/bvl-refresh-member-listing-on-removal.yml5
-rw-r--r--changelogs/unreleased/cache-user-keys-count.yml5
-rw-r--r--changelogs/unreleased/ci-pipeline-status-query.yml5
-rw-r--r--changelogs/unreleased/dm-add-sudo-scope.yml6
-rw-r--r--changelogs/unreleased/dm-avatarable-with-asset-host.yml6
-rw-r--r--changelogs/unreleased/dm-convert-private-tokens.yml5
-rw-r--r--changelogs/unreleased/dm-notes-actions-noteable-for-update.yml5
-rw-r--r--changelogs/unreleased/dm-notes-for-commit-id.yml6
-rw-r--r--changelogs/unreleased/dm-reallow-project-path-ending-in-period.yml5
-rw-r--r--changelogs/unreleased/dm-remove-private-token-from-interface.yml5
-rw-r--r--changelogs/unreleased/dm-remove-private-token.yml5
-rw-r--r--changelogs/unreleased/enable-scss-lint-mergeable-selector.yml4
-rw-r--r--changelogs/unreleased/es-module-broadcast_message.yml5
-rw-r--r--changelogs/unreleased/expose-job-duration.yml5
-rw-r--r--changelogs/unreleased/feature-change-signout-route.yml5
-rw-r--r--changelogs/unreleased/feature-custom-attributes-on-projects-and-groups.yml5
-rw-r--r--changelogs/unreleased/feature-hashed-storage-repo-import.yml5
-rw-r--r--changelogs/unreleased/feature-plantuml-restructured-text-captions.yml5
-rw-r--r--changelogs/unreleased/feature-reliable-rspec-with-eval-script.yml5
-rw-r--r--changelogs/unreleased/feature-ssh_host_fingerprint.yml5
-rw-r--r--changelogs/unreleased/feature_add_mermaid.yml5
-rw-r--r--changelogs/unreleased/feature_change_sort_refs.yml5
-rw-r--r--changelogs/unreleased/fix-500-on-old-merge-requests.yml5
-rw-r--r--changelogs/unreleased/fix-502-mrs-with-lots-of-versions.yml6
-rw-r--r--changelogs/unreleased/fix-ci-pipelines-index.yml5
-rw-r--r--changelogs/unreleased/fix-gb-update-registry-path-reference-regexp.yml5
-rw-r--r--changelogs/unreleased/fix-issues-api-list-performance.yml5
-rw-r--r--changelogs/unreleased/fix-md-form-tabs-double-click-toggle.yml6
-rw-r--r--changelogs/unreleased/fix-project-select-js-without-button.yml5
-rw-r--r--changelogs/unreleased/fix-subgroup-autocomplete.yml5
-rw-r--r--changelogs/unreleased/fix-system-hook-docs.yml5
-rw-r--r--changelogs/unreleased/fix-user-tab-activity-mobile.yml5
-rw-r--r--changelogs/unreleased/go-get-ssh.yml5
-rw-r--r--changelogs/unreleased/group-new-miletone-breadcrumb.yml5
-rw-r--r--changelogs/unreleased/hide-pipeline-zero-duration.yml5
-rw-r--r--changelogs/unreleased/issue-36484.yml5
-rw-r--r--changelogs/unreleased/issue_38777.yml5
-rw-r--r--changelogs/unreleased/jej-fs-prevent-push-when-missing-objects.yml5
-rw-r--r--changelogs/unreleased/jivl-mobile-friendly-table-runners.yml5
-rw-r--r--changelogs/unreleased/move_markdown_preview_to_concern.yml5
-rw-r--r--changelogs/unreleased/multi-file-editor-submodules.yml5
-rw-r--r--changelogs/unreleased/multiple-query-prometheus-graphs.yml6
-rw-r--r--changelogs/unreleased/new-mr-repo-editor.yml5
-rw-r--r--changelogs/unreleased/not-found-in-commits.yml5
-rw-r--r--changelogs/unreleased/pawel-metrics-to-prometheus-33643.yml5
-rw-r--r--changelogs/unreleased/pawel-show_empty_page_when_prometheus_metrics_are_disabled-35639.yml5
-rw-r--r--changelogs/unreleased/ph-multi-file-upload-file.yml5
-rw-r--r--changelogs/unreleased/reduce-queries-for-artifacts-button.yml5
-rw-r--r--changelogs/unreleased/refactor-group_links_controller.yml5
-rw-r--r--changelogs/unreleased/remove-ensure-ref-fetched-from-controllers.yml5
-rw-r--r--changelogs/unreleased/replace_explore_projects-feature.yml5
-rw-r--r--changelogs/unreleased/sh-disable-unicorn-sampling-sidekiq.yml5
-rw-r--r--changelogs/unreleased/sh-fix-broken-redirection-relative-url-root.yml5
-rw-r--r--changelogs/unreleased/sh-memoize-logger.yml5
-rw-r--r--changelogs/unreleased/sh-port-hashed-storage-transfer-fix.yml5
-rw-r--r--changelogs/unreleased/sha-handling.yml5
-rw-r--r--changelogs/unreleased/tc-delete-merged-protected-tags-fix.yml5
-rw-r--r--changelogs/unreleased/tc-saml-fix-false-empty.yml5
-rw-r--r--changelogs/unreleased/tree_item_limit.yml5
-rw-r--r--changelogs/unreleased/update-fe-i18n-guide.yml5
-rw-r--r--changelogs/unreleased/use-git-branch-merged.yml5
-rw-r--r--changelogs/unreleased/use-title.yml5
-rw-r--r--changelogs/unreleased/winh-admin-projects-namespace-filter.yml5
-rw-r--r--changelogs/unreleased/winh-i18n-contributors-page.yml5
-rw-r--r--changelogs/unreleased/winh-namespace-rename-hooks.yml5
-rw-r--r--changelogs/unreleased/zj-add-performance-changelog-cat.yml5
-rw-r--r--changelogs/unreleased/zj-commit-cache.yml5
-rw-r--r--changelogs/unreleased/zj-peek-gitaly.yml5
-rw-r--r--changelogs/unreleased/zj-ruby-2-3-5.yml5
-rw-r--r--config/gitlab.yml.example4
-rw-r--r--config/initializers/1_settings.rb2
-rw-r--r--config/initializers/math_lexer.rb2
-rw-r--r--config/initializers/plantuml_lexer.rb2
-rw-r--r--db/migrate/20171121144800_ci_pipelines_index_on_project_id_ref_status_id.rb35
-rw-r--r--db/schema.rb4
-rw-r--r--doc/development/query_recorder.md46
-rw-r--r--doc/install/installation.md3
-rw-r--r--doc/user/markdown.md32
-rw-r--r--lib/banzai/filter/mermaid_filter.rb20
-rw-r--r--lib/banzai/filter/syntax_highlight_filter.rb35
-rw-r--r--lib/banzai/pipeline/gfm_pipeline.rb1
-rw-r--r--lib/gitlab/ee_compat_check.rb69
-rw-r--r--lib/gitlab/git/repository.rb20
-rw-r--r--lib/gitlab/gitaly_client.rb12
-rw-r--r--lib/gitlab/gitaly_client/repository_service.rb19
-rw-r--r--lib/gitlab/shell.rb3
-rw-r--r--lib/milestone_array.rb40
-rw-r--r--lib/rouge/lexers/math.rb9
-rw-r--r--lib/rouge/lexers/plantuml.rb9
-rw-r--r--lib/tasks/gitlab/cleanup.rake5
-rw-r--r--lib/tasks/gitlab/gitaly.rake2
-rw-r--r--package.json1
-rw-r--r--qa/qa.rb14
-rw-r--r--qa/qa/page/admin/menu.rb7
-rw-r--r--qa/qa/page/admin/settings.rb18
-rw-r--r--qa/qa/page/base.rb17
-rw-r--r--qa/qa/page/dashboard/projects.rb11
-rw-r--r--qa/qa/page/main/menu.rb5
-rw-r--r--qa/qa/page/main/oauth.rb15
-rw-r--r--qa/qa/page/project/show.rb4
-rw-r--r--qa/qa/scenario/bootable.rb2
-rw-r--r--qa/qa/scenario/gitlab/admin/hashed_storage.rb25
-rw-r--r--qa/qa/shell/omnibus.rb39
-rw-r--r--spec/features/groups/milestones_sorting_spec.rb51
-rw-r--r--spec/features/issuables/shortcuts_issuable_spec.rb46
-rw-r--r--spec/features/markdown_spec.rb6
-rw-r--r--spec/fixtures/markdown.md.erb34
-rw-r--r--spec/helpers/search_helper_spec.rb4
-rw-r--r--spec/javascripts/notes_spec.js3
-rw-r--r--spec/lib/banzai/filter/mermaid_filter_spec.rb12
-rw-r--r--spec/lib/banzai/filter/syntax_highlight_filter_spec.rb2
-rw-r--r--spec/lib/milestone_array_spec.rb34
-rw-r--r--spec/models/ci/pipeline_spec.rb4
-rw-r--r--spec/models/repository_spec.rb25
-rw-r--r--spec/requests/api/merge_requests_spec.rb8
-rw-r--r--spec/requests/api/v3/merge_requests_spec.rb2
-rw-r--r--spec/spec_helper.rb1
-rw-r--r--spec/support/query_recorder.rb18
-rw-r--r--spec/support/selection_helper.rb6
-rw-r--r--spec/tasks/gitlab/cleanup_rake_spec.rb41
-rw-r--r--spec/tasks/gitlab/gitaly_rake_spec.rb1
-rw-r--r--spec/uploaders/file_uploader_spec.rb50
-rw-r--r--yarn.lock45
235 files changed, 1096 insertions, 1024 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d4b375696c2..2f149ef9a35 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -419,7 +419,7 @@ ee_compat_check:
retry: 0
artifacts:
name: "${CI_JOB_NAME}_${CI_COMIT_REF_NAME}_${CI_COMMIT_SHA}"
- when: on_failure
+ when: always
expire_in: 10d
paths:
- ee_compat_check/patches/*.patch
diff --git a/.gitlab/issue_templates/Feature Proposal.md b/.gitlab/issue_templates/Feature Proposal.md
index 1278061a410..5b55eb1374b 100644
--- a/.gitlab/issue_templates/Feature Proposal.md
+++ b/.gitlab/issue_templates/Feature Proposal.md
@@ -1,22 +1,3 @@
-Please read this!
-
-Before opening a new issue, make sure to search for keywords in the issues
-filtered by the "feature proposal" label:
-
-For the Community Edition issue tracker:
-
-- https://gitlab.com/gitlab-org/gitlab-ce/issues?label_name%5B%5D=feature+proposal
-
-For the Enterprise Edition issue tracker:
-
-- https://gitlab.com/gitlab-org/gitlab-ee/issues?label_name%5B%5D=feature+proposal
-
-and verify the issue you're about to submit isn't a duplicate.
-
-Please remove this notice if you're confident your issue isn't a duplicate.
-
-------
-
### Description
(Include problem, use cases, benefits, and/or goals)
@@ -25,26 +6,4 @@ Please remove this notice if you're confident your issue isn't a duplicate.
### Links / references
-### Documentation blurb
-
-#### Overview
-
-What is it?
-Why should someone use this feature?
-What is the underlying (business) problem?
-How do you use this feature?
-
-#### Use cases
-
-Who is this for? Provide one or more use cases.
-
-### Feature checklist
-
-Make sure these are completed before closing the issue,
-with a link to the relevant commit.
-
-- [ ] [Feature assurance](https://about.gitlab.com/handbook/product/#feature-assurance)
-- [ ] Documentation
-- [ ] Added to [features.yml](https://gitlab.com/gitlab-com/www-gitlab-com/blob/master/data/features.yml)
-
-/label ~"feature proposal" \ No newline at end of file
+/label ~"feature proposal"
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f85b78cb277..48282f67ed4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,193 @@
documentation](doc/development/changelog.md) for instructions on adding your own
entry.
+## 10.2.0 (2017-11-22)
+
+### Security (4 changes)
+
+- Upgrade Ruby to 2.3.5 to include security patches. !15099
+- Prevent OAuth phishing attack by presenting detailed wording about app to user during authorization.
+- Convert private tokens to Personal Access Tokens with sudo scope.
+- Remove private tokens from web interface and API.
+
+### Removed (5 changes)
+
+- Remove help text from group issues page and group merge requests page. !14963
+- Remove overzealous tooltips in projects page tabs. !15017
+- Stop merge requests from fetching their refs when the data is already available. !15129
+- Remove update merge request worker tagging.
+- Remove Session API now that private tokens are removed from user API endpoints.
+
+### Fixed (75 changes, 18 of them are from the community)
+
+- Fix 404 errors in API caused when the branch name had a dot. !14462 (gvieira37)
+- Remove unnecessary alt-texts from pipeline emails. !14602 (gernberg)
+- Renders 404 in commits controller if no commits are found for a given path. !14610 (Guilherme Vieira)
+- Cleanup data-page attribute after each Karma test. !14742
+- Removed extra border radius from .file-editor and .file-holder when editing a file. !14803 (Rachel Pipkin)
+- Add support for markdown preview to group milestones. !14806 (Vitaliy @blackst0ne Klachkov)
+- Fixed 'Removed source branch' checkbox in merge widget being ignored. !14832
+- Fix unnecessary ajax requests in admin broadcast message form. !14853
+- Make NamespaceSelect change URL when filtering. !14888
+- Get true failure from evalulate_script by checking for element beforehand. !14898
+- Fix SAML error 500 when no groups are defined for user. !14913
+- Fix 500 errors caused by empty diffs in some discussions. !14945 (Alexander Popov)
+- Fix the atom feed for group events. !14974
+- Hides pipeline duration in commit box when it is zero (nil). !14979 (gvieira37)
+- Add new diff discussions on MR diffs tab in "realtime". !14981
+- Returns a ssh url for go-get=1. !14990 (gvieira37)
+- Case insensitive search for branches. !14995 (George Andrinopoulos)
+- Fixes 404 error to 'Issues assigned to me' and 'Issues I've created' when issues are disabled. !15021 (Jacopo Beschi @jacopo-beschi)
+- Update the groups API documentation. !15024 (Robert Schilling)
+- Validate username/pw for Jiraservice, require them in the API. !15025 (Robert Schilling)
+- Update Merge Request polling so there is only one request at a time. !15032
+- Use project select dropdown not only as a combobutton. !15043
+- Remove create MR button from issues when MRs are disabled. !15071 (George Andrinopoulos)
+- Tighten up whitelisting of certain Geo routes. !15082
+- Allow to disable the Performance Bar. !15084
+- Refresh open Issue and Merge Request project counter caches when re-opening. !15085 (Rob Ede @robjtede)
+- Fix markdown form tabs toggling preview mode from double clicking write mode button. !15119
+- Fix cancel button not working while uploading on the new issue page. !15137
+- Fix webhooks recent deliveries. !15146 (Alexander Randa (@randaalex))
+- Fix issues with forked projects of which the source was deleted. !15150
+- Fix GPG signature popup info in Safari and Firefox. !15228
+- Fix GFM reference links for closed milestones. !15234 (Vitaliy @blackst0ne Klachkov)
+- When deleting merged branches, ignore protected tags. !15252
+- Revert a regression on runners sorting (!15134). !15341 (Takuya Noguchi)
+- Don't use JS to delete memberships from projects and groups. !15344
+- Don't try to create fork network memberships for forks with a missing source. !15366
+- Fix gitlab:backup rake for hashed storage based repositories. !15400
+- Fix issue where clicking a GPG verification badge would scroll to the top of the page. !15407
+- Update container repository path reference and allow using double underscore. !15417
+- Fix crash when navigating to second page of the group dashbaord when there are projects and groups on the first page. !15456
+- Fix flash errors showing up on a non configured prometheus integration. !35652
+- Fix timezone bug in Pikaday and upgrade Pikaday version.
+- Fix arguments Import/Export error importing project merge requests.
+- Moves mini graph of pipeline to the end of sentence in MR widget. Cleans HTML and tests.
+- Fix user autocomplete in subgroups.
+- Fixed user profile activity tab being off-screen on mobile.
+- Fix diff parser so it tolerates to diff special markers in the content.
+- Fix a migration that adds merge_requests_ff_only_enabled column to MR table.
+- Don't create build failed todos when the job is automatically retried.
+- Render 404 when polling commit notes without having permissions.
+- Show error message when fast-forward merge is not possible.
+- Prevents position update for image diff notes.
+- Mobile-friendly table on Admin Runners. (Takuya Noguchi)
+- Decreases z-index of select2 to a lower number of our navigation bar.
+- Fix broken Members link when relative URL root paths are used.
+- Avoid regenerating the ref path for the environment.
+- Memoize GitLab logger to reduce open file descriptors.
+- Fix hashed storage with project transfers to another namespace.
+- Fix bad type checking to prevent 0 count badge to be shown.
+- Fix problem with issuable header wrapping when content is too long.
+- Move retry button in job page to sidebar.
+- Formats bytes to human reabale number in registry table.
+- Fix commit pipeline showing wrong status.
+- Include link to issue in reopen message for Slack and Mattermost notifications.
+- Fix double border UI bug on pipelines/environments table and pagination.
+- Remove native title tooltip in pipeline jobs dropdown in Safari.
+- Fix namespacing for MergeWhenPipelineSucceedsService in MR API.
+- Prevent error when authorizing an admin-created OAauth application without a set owner.
+- Always return full avatar URL for private/internal groups/projects when asset host is set.
+- Make sure group and project creation is blocked for new users that are external by default.
+- Make sure NotesActions#noteable returns a Noteable in the update action.
+- Reallow project paths ending in periods.
+- Only set Auto-Submitted header once for emails on push.
+- Fix overlap of right-sidebar and main content when creating a Wiki page.
+- Enables scroll to bottom once user has scrolled back to bottom in job log.
+
+### Changed (21 changes, 7 of them are from the community)
+
+- Added possibility to enter past date in /spend command to log time in the past. !3044 (g3dinua, LockiStrike)
+- Add Prometheus equivalent of all InfluxDB metrics. !13891
+- Show collapsible project lists. !14055
+- Make Prometheus metrics endpoint return empty response when metrics are disabled. !14490
+- Support custom attributes on groups and projects. !14593 (Markus Koller)
+- Avoid fetching all branches for branch existence checks. !14778
+- Update participants and subscriptions button in issuable sidebar to be async. !14836
+- Replace WikiPage::CreateService calls with wiki_page factory in specs. !14850 (Jacopo Beschi @jacopo-beschi)
+- Add lazy option to UserAvatarImage. !14895
+- Add readme only option as project view. !14900
+- Todos spelled correctly on Todos list page. !15015
+- Support uml:: and captions in reStructuredText. !15120 (Markus Koller)
+- Add system hooks user_rename and group_rename. !15123
+- Change tags order in refs dropdown. !15235 (Vitaliy @blackst0ne Klachkov)
+- Change default cluster size to n1-default-2. !39649 (Fabio Busatto)
+- Change 'Sign Out' route from a DELETE to a GET. !39708 (Joe Marty)
+- Change background color of nav sidebar to match other gl sidebars.
+- Update i18n section in FE docs for marking and interpolation.
+- Add a count of changes to the merge requests API.
+- Improve GitLab Import rake task to work with Hashed Storage and Subgroups.
+- 14830 Move GitLab export option to top of import list when creating a new project.
+
+### Performance (14 changes)
+
+- Improve branch listing page performance. !14729
+- Improve DashboardController#activity.json performance. !14985
+- Add a latest_merge_request_diff_id column to merge_requests. !15035
+- Improve performance of the /projects/:id/repository/branches API endpoint. !15215
+- Ensure merge requests with lots of version don't time out when searching for pipelines.
+- Speed up issues list APIs.
+- Remove Filesystem check metrics that use too much CPU to handle requests.
+- Disable Unicorn sampling in Sidekiq since there are no Unicorn sockets to monitor.
+- Truncate tree to max 1,000 items and display notice to users.
+- Add Performance improvement as category on the changelog.
+- Cache commits fetched from the repository.
+- Cache the number of user SSH keys.
+- Optimise getting the pipeline status of commits.
+- Improve performance of commits list by fully using DB index when getting commit note counts.
+
+### Added (26 changes, 10 of them are from the community)
+
+- Expose duration in Job entity. !13644 (Mehdi Lahmam (@mehlah))
+- Prevent git push when LFS objects are missing. !13837
+- Automatic configuration settings page. !13850 (Francisco Lopez)
+- Add API endpoints for Pages Domains. !13917 (Travis Miller)
+- Include the changes in issuable webhook payloads. !14308
+- Add Packagist project service. !14493 (Matt Coleman)
+- Add sort runners on admin runners. !14661 (Takuya Noguchi)
+- Repo Editor: Add option to start a new MR directly from comit section. !14665
+- Issue JWT token with registry:catalog:* scope when requested by GitLab admin. !14751 (Vratislav Kalenda)
+- Support show-all-refs for git over HTTP. !14834
+- Add loading button for new UX paradigm. !14883
+- Get Project Branch API shows an helpful error message on invalid refname. !14884 (Jacopo Beschi @jacopo-beschi)
+- Refactor have_http_status into have_gitlab_http_status. !14958 (Jacopo Beschi @jacopo-beschi)
+- Suggest to rename the remote for existing repository instructions. !14970 (helmo42)
+- Adds project_id to pipeline hook data. !15044 (Jacopo Beschi @jacopo-beschi)
+- Hashed Storage support for Attachments. !15068
+- Add metric tagging for sidekiq workers. !15111
+- Expose project visibility as CI variable - CI_PROJECT_VISIBILITY. !15193
+- Allow multiple queries in a single Prometheus graph to support additional environments (Canary, Staging, et al.). !15201
+- Allow promoting project milestones to group milestones.
+- Added submodule support in multi-file editor.
+- Add applications section to GKE clusters page to easily install Helm Tiller, Ingress.
+- Allow files to uploaded in the multi-file editor.
+- Add Ingress to available Cluster applications.
+- Adds typescript support.
+- Add sudo scope for OAuth and Personal Access Tokens to be used by admins to impersonate other users on the API.
+
+### Other (18 changes, 8 of them are from the community)
+
+- Decrease Perceived Complexity threshold to 14. !14231 (Maxim Rydkin)
+- Replace the 'features/explore/projects.feature' spinach test with an rspec analog. !14755 (Vitaliy @blackst0ne Klachkov)
+- While displaying a commit, do not show list of related branches if there are thousands of branches. !14812
+- Removed d3.js from the graph and users bundles and used the common_d3 bundle instead. !14826
+- Make contributors page translatable. !14915
+- Decrease ABC threshold to 54.28. !14920 (Maxim Rydkin)
+- Clarify system_hook triggers in documentation. !14957 (Joe Marty)
+- Free up some reserved group names. !15052
+- Bump carrierwave to 1.2.1. !15072 (Takuya Noguchi)
+- Enable NestingDepth (level 6) on scss-lint. !15073 (Takuya Noguchi)
+- Enable BorderZero rule in scss-lint. !15168 (Takuya Noguchi)
+- Internationalized tags page. !38589
+- Moves placeholders components into shared folder with documentation. Makes them easier to reuse in MR and Snippets comments.
+- Reorganize welcome page for new users.
+- Refactor GroupLinksController. (15121)
+- Remove filter icon from search bar.
+- Use title as placeholder instead of issue title for reusability.
+- Add Gitaly metrics to the performance bar.
+
+
## 10.1.4 (2017-11-14)
### Fixed (4 changes)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index c4e5fd842df..4930b541ba2 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -543,6 +543,7 @@ When having your code reviewed and when reviewing merge requests please take the
etc.), they should conform to our [Licensing guidelines][license-finder-doc].
See the instructions in that document for help if your MR fails the
"license-finder" test with a "Dependencies that need approval" error.
+1. The merge request meets the [definition of done](#definition-of-done).
## Definition of done
diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION
index 524456c7767..316ba4bd9e6 100644
--- a/GITALY_SERVER_VERSION
+++ b/GITALY_SERVER_VERSION
@@ -1 +1 @@
-0.54.0
+0.55.0
diff --git a/VERSION b/VERSION
index 19eac09041d..73cdb768a24 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-10.2.0-pre
+10.3.0-pre
diff --git a/app/assets/javascripts/dispatcher.js b/app/assets/javascripts/dispatcher.js
index b4307761c6b..34708977d20 100644
--- a/app/assets/javascripts/dispatcher.js
+++ b/app/assets/javascripts/dispatcher.js
@@ -317,7 +317,6 @@ import ProjectVariables from './project_variables';
break;
case 'projects:merge_requests:show':
new Diff();
- shortcut_handler = new ShortcutsIssuable(true);
new ZenMode();
initIssuableSidebar();
@@ -327,6 +326,8 @@ import ProjectVariables from './project_variables';
window.mergeRequest = new MergeRequest({
action: mrShowNode.dataset.mrAction,
});
+
+ shortcut_handler = new ShortcutsIssuable(true);
break;
case 'dashboard:activity':
new gl.Activities();
diff --git a/app/assets/javascripts/main.js b/app/assets/javascripts/main.js
index b7ef1ecd923..d908452399c 100644
--- a/app/assets/javascripts/main.js
+++ b/app/assets/javascripts/main.js
@@ -70,6 +70,7 @@ import './projects_dropdown';
import './projects_list';
import './syntax_highlight';
import './render_math';
+import './render_mermaid';
import './render_gfm';
import './right_sidebar';
import './search';
diff --git a/app/assets/javascripts/render_gfm.js b/app/assets/javascripts/render_gfm.js
index bcdc0fd67b8..bf6fc0ec305 100644
--- a/app/assets/javascripts/render_gfm.js
+++ b/app/assets/javascripts/render_gfm.js
@@ -2,12 +2,13 @@
// Render Gitlab flavoured Markdown
//
-// Delegates to syntax highlight and render math
+// Delegates to syntax highlight and render math & mermaid diagrams.
//
(function() {
$.fn.renderGFM = function() {
this.find('.js-syntax-highlight').syntaxHighlight();
this.find('.js-render-math').renderMath();
+ this.find('.js-render-mermaid').renderMermaid();
return this;
};
diff --git a/app/assets/javascripts/render_mermaid.js b/app/assets/javascripts/render_mermaid.js
new file mode 100644
index 00000000000..a253601f8e8
--- /dev/null
+++ b/app/assets/javascripts/render_mermaid.js
@@ -0,0 +1,30 @@
+// Renders diagrams and flowcharts from text using Mermaid in any element with the
+// `js-render-mermaid` class.
+//
+// Example markup:
+//
+// <pre class="js-render-mermaid">
+// graph TD;
+// A-- > B;
+// A-- > C;
+// B-- > D;
+// C-- > D;
+// </pre>
+//
+
+import Flash from './flash';
+
+$.fn.renderMermaid = function renderMermaid() {
+ if (this.length === 0) return;
+
+ import(/* webpackChunkName: 'mermaid' */ 'blackst0ne-mermaid').then((mermaid) => {
+ mermaid.initialize({
+ loadOnStart: false,
+ theme: 'neutral',
+ });
+
+ mermaid.init(undefined, this);
+ }).catch((err) => {
+ Flash(`Can't load mermaid module: ${err}`);
+ });
+};
diff --git a/app/assets/stylesheets/framework/contextual-sidebar.scss b/app/assets/stylesheets/framework/contextual-sidebar.scss
index 320f458630a..b73932eb7e1 100644
--- a/app/assets/stylesheets/framework/contextual-sidebar.scss
+++ b/app/assets/stylesheets/framework/contextual-sidebar.scss
@@ -40,12 +40,6 @@
a:hover {
background-color: $link-hover-background;
color: $gl-text-color;
-
- .settings-avatar {
- svg {
- fill: $gl-text-color;
- }
- }
}
.avatar-container {
@@ -138,10 +132,6 @@
color: $gl-text-color-secondary;
}
- svg {
- fill: $gl-text-color-secondary;
- }
-
.nav-item-name {
flex: 1;
}
@@ -224,10 +214,6 @@
&:hover {
color: $gl-text-color;
-
- svg {
- fill: $gl-text-color;
- }
}
}
@@ -338,7 +324,6 @@
align-items: center;
svg {
- fill: $gl-text-color-secondary;
margin-right: 8px;
}
@@ -349,10 +334,6 @@
&:hover {
background-color: $border-color;
color: $gl-text-color;
-
- svg {
- fill: $gl-text-color;
- }
}
}
diff --git a/app/assets/stylesheets/framework/filters.scss b/app/assets/stylesheets/framework/filters.scss
index 74b6b31b07e..cf8165eab5b 100644
--- a/app/assets/stylesheets/framework/filters.scss
+++ b/app/assets/stylesheets/framework/filters.scss
@@ -305,16 +305,11 @@
color: $gl-text-color;
border-color: $dropdown-input-focus-border;
outline: none;
-
- svg {
- fill: $gl-text-color;
- }
}
svg {
height: 14px;
width: 14px;
- fill: $gl-text-color-secondary;
vertical-align: middle;
}
diff --git a/app/assets/stylesheets/framework/gitlab-theme.scss b/app/assets/stylesheets/framework/gitlab-theme.scss
index dc591c06c88..db36e27fa74 100644
--- a/app/assets/stylesheets/framework/gitlab-theme.scss
+++ b/app/assets/stylesheets/framework/gitlab-theme.scss
@@ -30,10 +30,6 @@
&.dropdown.open > a {
color: $color-900;
background-color: $color-alternate;
-
- svg {
- fill: currentColor;
- }
}
&.line-separator {
@@ -51,10 +47,6 @@
color: $color-200;
> a {
- svg {
- fill: $color-200;
- }
-
&.header-user-dropdown-toggle {
.header-user-avatar {
border-color: $color-200;
diff --git a/app/assets/stylesheets/framework/header.scss b/app/assets/stylesheets/framework/header.scss
index 2218b5705fc..f985a3aea5c 100644
--- a/app/assets/stylesheets/framework/header.scss
+++ b/app/assets/stylesheets/framework/header.scss
@@ -235,10 +235,6 @@
opacity: 1;
color: $white-light;
- svg {
- fill: currentColor;
- }
-
&.header-user-dropdown-toggle .header-user-avatar {
border-color: $white-light;
}
@@ -269,14 +265,6 @@
font-size: 20px;
}
}
-
- &.active > a,
- &.dropdown.open > a {
-
- svg {
- fill: currentColor;
- }
- }
}
}
}
@@ -289,10 +277,6 @@
text-decoration: none;
outline: 0;
color: $white-light;
-
- svg {
- fill: currentColor;
- }
}
> a {
@@ -307,10 +291,6 @@
border-radius: $border-radius-default;
height: 32px;
font-weight: $gl-font-weight-bold;
-
- svg {
- fill: currentColor;
- }
}
&.line-separator {
diff --git a/app/assets/stylesheets/framework/icons.scss b/app/assets/stylesheets/framework/icons.scss
index ef864e8f6a9..1ab5e6a93f9 100644
--- a/app/assets/stylesheets/framework/icons.scss
+++ b/app/assets/stylesheets/framework/icons.scss
@@ -1,63 +1,35 @@
.ci-status-icon-success,
.ci-status-icon-passed {
color: $green-500;
-
- svg {
- fill: $green-500;
- }
}
.ci-status-icon-failed {
color: $gl-danger;
-
- svg {
- fill: $gl-danger;
- }
}
.ci-status-icon-pending,
.ci-status-icon-failed_with_warnings,
.ci-status-icon-success_with_warnings {
color: $orange-500;
-
- svg {
- fill: $orange-500;
- }
}
.ci-status-icon-running {
color: $blue-400;
-
- svg {
- fill: $blue-400;
- }
}
.ci-status-icon-canceled,
.ci-status-icon-disabled,
.ci-status-icon-not-found {
color: $gl-text-color;
-
- svg {
- fill: $gl-text-color;
- }
}
.ci-status-icon-created,
.ci-status-icon-skipped {
color: $gray-darkest;
-
- svg {
- fill: $gray-darkest;
- }
}
.ci-status-icon-manual {
color: $gl-text-color;
-
- svg {
- fill: $gl-text-color;
- }
}
.icon-link {
diff --git a/app/assets/stylesheets/framework/images.scss b/app/assets/stylesheets/framework/images.scss
index 6819fd88b7f..78a8e57ddbb 100644
--- a/app/assets/stylesheets/framework/images.scss
+++ b/app/assets/stylesheets/framework/images.scss
@@ -27,6 +27,8 @@
}
svg {
+ fill: currentColor;
+
&.s8 { @include svg-size(8px); }
&.s12 { @include svg-size(12px); }
&.s16 { @include svg-size(16px); }
diff --git a/app/assets/stylesheets/framework/mixins.scss b/app/assets/stylesheets/framework/mixins.scss
index 33012133b66..e12b5aab381 100644
--- a/app/assets/stylesheets/framework/mixins.scss
+++ b/app/assets/stylesheets/framework/mixins.scss
@@ -130,14 +130,6 @@
background-color: $color-light;
color: $color-dark;
border-color: $color-dark;
-
- svg {
- fill: $color-dark;
- }
- }
-
- svg {
- fill: $color-main;
}
}
diff --git a/app/assets/stylesheets/framework/zen.scss b/app/assets/stylesheets/framework/zen.scss
index 5a4d3ba0ee9..dbd3144b9b4 100644
--- a/app/assets/stylesheets/framework/zen.scss
+++ b/app/assets/stylesheets/framework/zen.scss
@@ -57,15 +57,7 @@
padding: 5px;
font-size: 36px;
- svg {
- fill: $gl-text-color;
- }
-
&:hover {
color: $black;
-
- svg {
- fill: $black;
- }
}
}
diff --git a/app/assets/stylesheets/pages/notes.scss b/app/assets/stylesheets/pages/notes.scss
index 9537eeeee97..2461b818219 100644
--- a/app/assets/stylesheets/pages/notes.scss
+++ b/app/assets/stylesheets/pages/notes.scss
@@ -547,10 +547,6 @@ ul.notes {
width: 16px;
top: 0;
vertical-align: text-top;
-
- path {
- fill: currentColor;
- }
}
.award-control-icon-positive,
@@ -570,10 +566,6 @@ ul.notes {
.link-highlight {
color: $gl-link-color;
fill: $gl-link-color;
-
- svg {
- fill: $gl-link-color;
- }
}
.award-control-icon-neutral {
diff --git a/app/assets/stylesheets/pages/status.scss b/app/assets/stylesheets/pages/status.scss
index 25c80e1f950..ade5ddd147b 100644
--- a/app/assets/stylesheets/pages/status.scss
+++ b/app/assets/stylesheets/pages/status.scss
@@ -55,10 +55,6 @@
&:not(span):hover {
background-color: rgba($gl-text-color-secondary, .07);
}
-
- svg {
- fill: $gl-text-color-secondary;
- }
}
}
diff --git a/app/controllers/groups/milestones_controller.rb b/app/controllers/groups/milestones_controller.rb
index 7a7bcb1a3d2..f013d21275e 100644
--- a/app/controllers/groups/milestones_controller.rb
+++ b/app/controllers/groups/milestones_controller.rb
@@ -80,7 +80,8 @@ class Groups::MilestonesController < Groups::ApplicationController
milestones = MilestonesFinder.new(search_params).execute
legacy_milestones = GroupMilestone.build_collection(group, group_projects, params)
- milestones + legacy_milestones
+ @sort = params[:sort] || 'due_date_asc'
+ MilestoneArray.sort(milestones + legacy_milestones, @sort)
end
def milestone
diff --git a/app/helpers/search_helper.rb b/app/helpers/search_helper.rb
index cf28a917fd1..2f57660516d 100644
--- a/app/helpers/search_helper.rb
+++ b/app/helpers/search_helper.rb
@@ -140,7 +140,8 @@ module SearchHelper
placeholder: 'Search or filter results...',
data: {
'username-params' => @users.to_json(only: [:id, :username])
- }
+ },
+ autocomplete: 'off'
}
if @project.present?
diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb
index 3ded675bec0..ebbefc51a4f 100644
--- a/app/models/ci/pipeline.rb
+++ b/app/models/ci/pipeline.rb
@@ -507,7 +507,10 @@ module Ci
end
def latest_builds_with_artifacts
- @latest_builds_with_artifacts ||= builds.latest.with_artifacts
+ # We purposely cast the builds to an Array here. Because we always use the
+ # rows if there are more than 0 this prevents us from having to run two
+ # queries: one to get the count and one to get the rows.
+ @latest_builds_with_artifacts ||= builds.latest.with_artifacts.to_a
end
private
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 26d1bc12232..2bf21cbdcc4 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -217,11 +217,7 @@ class Repository
def branch_exists?(branch_name)
return false unless raw_repository
- @branch_exists_memo ||= Hash.new do |hash, key|
- hash[key] = raw_repository.branch_exists?(key)
- end
-
- @branch_exists_memo[branch_name]
+ branch_names.include?(branch_name)
end
def ref_exists?(ref)
diff --git a/app/uploaders/file_uploader.rb b/app/uploaders/file_uploader.rb
index d4ba3a028be..f4a5cf75018 100644
--- a/app/uploaders/file_uploader.rb
+++ b/app/uploaders/file_uploader.rb
@@ -26,11 +26,15 @@ class FileUploader < GitlabUploader
# This is used to build Upload paths dynamically based on the model's current
# namespace and path, allowing us to ignore renames or transfers.
#
- # model - Object that responds to `path_with_namespace`
+ # model - Object that responds to `full_path` and `disk_path`
#
# Returns a String without a trailing slash
- def self.dynamic_path_segment(model)
- File.join(CarrierWave.root, base_dir, model.disk_path)
+ def self.dynamic_path_segment(project)
+ if project.hashed_storage?(:attachments)
+ File.join(CarrierWave.root, base_dir, project.disk_path)
+ else
+ File.join(CarrierWave.root, base_dir, project.full_path)
+ end
end
attr_accessor :model
diff --git a/app/views/groups/milestones/index.html.haml b/app/views/groups/milestones/index.html.haml
index cb4fc69d5b8..f5f621507b8 100644
--- a/app/views/groups/milestones/index.html.haml
+++ b/app/views/groups/milestones/index.html.haml
@@ -4,6 +4,7 @@
= render 'shared/milestones_filter', counts: @milestone_states
.nav-controls
+ = render 'shared/milestones_sort_dropdown'
- if can?(current_user, :admin_milestones, @group)
= link_to "New milestone", new_group_milestone_path(@group), class: "btn btn-new"
diff --git a/app/views/groups/milestones/new.html.haml b/app/views/groups/milestones/new.html.haml
index eca7fb9ddb1..d758e314d41 100644
--- a/app/views/groups/milestones/new.html.haml
+++ b/app/views/groups/milestones/new.html.haml
@@ -1,6 +1,5 @@
- breadcrumb_title "Milestones"
- page_title "Milestones"
-- header_title group_title(@group, "Milestones", group_milestones_path(@group))
%h3.page-title
New Milestone
diff --git a/app/views/shared/_import_form.html.haml b/app/views/shared/_import_form.html.haml
index 233d8c95eda..736afa085e8 100644
--- a/app/views/shared/_import_form.html.haml
+++ b/app/views/shared/_import_form.html.haml
@@ -11,6 +11,7 @@
%li
If your HTTP repository is not publicly accessible, add authentication information to the URL: <code>https://username:password@gitlab.company.com/group/project.git</code>.
%li
- The import will time out after 15 minutes. For repositories that take longer, use a clone/push combination.
+ The import will time out after #{time_interval_in_words(Gitlab.config.gitlab_shell.git_timeout)}.
+ For repositories that take longer, use a clone/push combination.
%li
To migrate an SVN repository, check out #{link_to "this document", help_page_path('user/project/import/svn')}.
diff --git a/changelogs/unreleased/.yml b/changelogs/unreleased/.yml
deleted file mode 100644
index acf0bb80c72..00000000000
--- a/changelogs/unreleased/.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Remove update merge request worker tagging.
-merge_request:
-author:
-type: removed
diff --git a/changelogs/unreleased/1312-time-spent-at.yml b/changelogs/unreleased/1312-time-spent-at.yml
deleted file mode 100644
index c029497e9ab..00000000000
--- a/changelogs/unreleased/1312-time-spent-at.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Added possibility to enter past date in /spend command to log time in the past
-merge_request: 3044
-author: g3dinua, LockiStrike
-type: changed
diff --git a/changelogs/unreleased/14970-suggest-rename-remote.yml b/changelogs/unreleased/14970-suggest-rename-remote.yml
deleted file mode 100644
index 68a77eb446d..00000000000
--- a/changelogs/unreleased/14970-suggest-rename-remote.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Suggest to rename the remote for existing repository instructions
-merge_request: 14970
-author: helmo42
-type: added
diff --git a/changelogs/unreleased/20666-404-error-issue-assigned-with-issues-disabled.yml b/changelogs/unreleased/20666-404-error-issue-assigned-with-issues-disabled.yml
deleted file mode 100644
index 830a275bfd5..00000000000
--- a/changelogs/unreleased/20666-404-error-issue-assigned-with-issues-disabled.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Fixes 404 error to 'Issues assigned to me' and 'Issues I've created' when issues
- are disabled
-merge_request: 15021
-author: Jacopo Beschi @jacopo-beschi
-type: fixed
diff --git a/changelogs/unreleased/23000-pages-api.yml b/changelogs/unreleased/23000-pages-api.yml
deleted file mode 100644
index 9f6fa13dd07..00000000000
--- a/changelogs/unreleased/23000-pages-api.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add API endpoints for Pages Domains
-merge_request: 13917
-author: Travis Miller
-type: added
diff --git a/changelogs/unreleased/23206-load-participants-async.yml b/changelogs/unreleased/23206-load-participants-async.yml
deleted file mode 100644
index 12ab43fb88f..00000000000
--- a/changelogs/unreleased/23206-load-participants-async.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Update participants and subscriptions button in issuable sidebar to be async
-merge_request: 14836
-author:
-type: changed
diff --git a/changelogs/unreleased/26763-grant-registry-auth-scope-to-admins.yml b/changelogs/unreleased/26763-grant-registry-auth-scope-to-admins.yml
deleted file mode 100644
index 8918c42e3fb..00000000000
--- a/changelogs/unreleased/26763-grant-registry-auth-scope-to-admins.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Issue JWT token with registry:catalog:* scope when requested by GitLab admin
-merge_request: 14751
-author: Vratislav Kalenda
-type: added
diff --git a/changelogs/unreleased/27375-dashboard-activity-performance.yml b/changelogs/unreleased/27375-dashboard-activity-performance.yml
deleted file mode 100644
index 87c6197a24d..00000000000
--- a/changelogs/unreleased/27375-dashboard-activity-performance.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Improve DashboardController#activity.json performance
-merge_request: 14985
-author:
-type: performance
diff --git a/changelogs/unreleased/27654-retry-button.yml b/changelogs/unreleased/27654-retry-button.yml
deleted file mode 100644
index 11f3b5eb779..00000000000
--- a/changelogs/unreleased/27654-retry-button.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Move retry button in job page to sidebar
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/28202_decrease_abc_threshold_step5.yml b/changelogs/unreleased/28202_decrease_abc_threshold_step5.yml
deleted file mode 100644
index 1bff4d6930d..00000000000
--- a/changelogs/unreleased/28202_decrease_abc_threshold_step5.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Decrease ABC threshold to 54.28
-merge_request: 14920
-author: Maxim Rydkin
-type: other
diff --git a/changelogs/unreleased/30140-restore-readme-only-preference.yml b/changelogs/unreleased/30140-restore-readme-only-preference.yml
deleted file mode 100644
index 4b4ee4d5be9..00000000000
--- a/changelogs/unreleased/30140-restore-readme-only-preference.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add readme only option as project view
-merge_request: 14900
-author:
-type: changed
diff --git a/changelogs/unreleased/31358_decrease_perceived_complexity_threshold_step3.yml b/changelogs/unreleased/31358_decrease_perceived_complexity_threshold_step3.yml
deleted file mode 100644
index 8ecb832041e..00000000000
--- a/changelogs/unreleased/31358_decrease_perceived_complexity_threshold_step3.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Decrease Perceived Complexity threshold to 14
-merge_request: 14231
-author: Maxim Rydkin
-type: other
diff --git a/changelogs/unreleased/31454-missing-project-id-pipeline-hook-data.yml b/changelogs/unreleased/31454-missing-project-id-pipeline-hook-data.yml
deleted file mode 100644
index daf7ac715bd..00000000000
--- a/changelogs/unreleased/31454-missing-project-id-pipeline-hook-data.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Adds project_id to pipeline hook data
-merge_request: 15044
-author: Jacopo Beschi @jacopo-beschi
-type: added
diff --git a/changelogs/unreleased/32318-filter-icon.yml b/changelogs/unreleased/32318-filter-icon.yml
deleted file mode 100644
index 71e7c2c4dac..00000000000
--- a/changelogs/unreleased/32318-filter-icon.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Remove filter icon from search bar
-merge_request:
-author:
-type: other
diff --git a/changelogs/unreleased/3274-geo-route-whitelisting.yml b/changelogs/unreleased/3274-geo-route-whitelisting.yml
deleted file mode 100644
index 43a5af80497..00000000000
--- a/changelogs/unreleased/3274-geo-route-whitelisting.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Tighten up whitelisting of certain Geo routes
-merge_request: 15082
-author:
-type: fixed
diff --git a/changelogs/unreleased/34284-add-changes-to-issuable-webhook-data.yml b/changelogs/unreleased/34284-add-changes-to-issuable-webhook-data.yml
deleted file mode 100644
index 816e1f83111..00000000000
--- a/changelogs/unreleased/34284-add-changes-to-issuable-webhook-data.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Include the changes in issuable webhook payloads
-merge_request: 14308
-author:
-type: added
diff --git a/changelogs/unreleased/34768-fix-issuable-header-wrapping.yml b/changelogs/unreleased/34768-fix-issuable-header-wrapping.yml
deleted file mode 100644
index 49195bd4168..00000000000
--- a/changelogs/unreleased/34768-fix-issuable-header-wrapping.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix problem with issuable header wrapping when content is too long
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/34841-todos.yml b/changelogs/unreleased/34841-todos.yml
deleted file mode 100644
index 37180eefbfc..00000000000
--- a/changelogs/unreleased/34841-todos.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix bad type checking to prevent 0 count badge to be shown
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/34897-delete-branch-after-merge.yml b/changelogs/unreleased/34897-delete-branch-after-merge.yml
deleted file mode 100644
index 96631aa95c8..00000000000
--- a/changelogs/unreleased/34897-delete-branch-after-merge.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fixed 'Removed source branch' checkbox in merge widget being ignored.
-merge_request: 14832
-author:
-type: fixed
diff --git a/changelogs/unreleased/35199-case-insensitive-branches-search.yml b/changelogs/unreleased/35199-case-insensitive-branches-search.yml
deleted file mode 100644
index da2729e9e55..00000000000
--- a/changelogs/unreleased/35199-case-insensitive-branches-search.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Case insensitive search for branches
-merge_request: 14995
-author: George Andrinopoulos
-type: fixed
diff --git a/changelogs/unreleased/35644-refactor-have-http-status-into-have-gitlab-http-status.yml b/changelogs/unreleased/35644-refactor-have-http-status-into-have-gitlab-http-status.yml
deleted file mode 100644
index b03baab4950..00000000000
--- a/changelogs/unreleased/35644-refactor-have-http-status-into-have-gitlab-http-status.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Refactor have_http_status into have_gitlab_http_status
-merge_request: 14958
-author: Jacopo Beschi @jacopo-beschi
-type: added
diff --git a/changelogs/unreleased/35652-prometheus-service-page-shows-error.yml b/changelogs/unreleased/35652-prometheus-service-page-shows-error.yml
deleted file mode 100644
index 7e2a7222162..00000000000
--- a/changelogs/unreleased/35652-prometheus-service-page-shows-error.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix flash errors showing up on a non configured prometheus integration
-merge_request: 35652
-author:
-type: fixed
diff --git a/changelogs/unreleased/35914-merge-request-update-worker-is-slow.yml b/changelogs/unreleased/35914-merge-request-update-worker-is-slow.yml
deleted file mode 100644
index 34bb76195af..00000000000
--- a/changelogs/unreleased/35914-merge-request-update-worker-is-slow.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add metric tagging for sidekiq workers
-merge_request: 15111
-author:
-type: added
diff --git a/changelogs/unreleased/3615-improve-welcome-screen.yml b/changelogs/unreleased/3615-improve-welcome-screen.yml
deleted file mode 100644
index 862efddb162..00000000000
--- a/changelogs/unreleased/3615-improve-welcome-screen.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Reorganize welcome page for new users
-merge_request:
-author:
-type: other
diff --git a/changelogs/unreleased/36160-zindex.yml b/changelogs/unreleased/36160-zindex.yml
deleted file mode 100644
index a836744fb41..00000000000
--- a/changelogs/unreleased/36160-zindex.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Decreases z-index of select2 to a lower number of our navigation bar
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/36629-35958-add-cluster-application-section.yml b/changelogs/unreleased/36629-35958-add-cluster-application-section.yml
deleted file mode 100644
index 0afa53e8642..00000000000
--- a/changelogs/unreleased/36629-35958-add-cluster-application-section.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Add applications section to GKE clusters page to easily install Helm Tiller,
- Ingress
-merge_request:
-author:
-type: added
diff --git a/changelogs/unreleased/3674-hashed-storage-attachments.yml b/changelogs/unreleased/3674-hashed-storage-attachments.yml
deleted file mode 100644
index 41bdb5fa568..00000000000
--- a/changelogs/unreleased/3674-hashed-storage-attachments.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Hashed Storage support for Attachments
-merge_request: 15068
-author:
-type: added
diff --git a/changelogs/unreleased/37032-get-project-branch-invalid-name-message.yml b/changelogs/unreleased/37032-get-project-branch-invalid-name-message.yml
deleted file mode 100644
index 22651967a40..00000000000
--- a/changelogs/unreleased/37032-get-project-branch-invalid-name-message.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Get Project Branch API shows an helpful error message on invalid refname
-merge_request: 14884
-author: Jacopo Beschi @jacopo-beschi
-type: added
diff --git a/changelogs/unreleased/37442-api-branches-id-repository-branches-is-calling-gitaly-n-1-times-per-request.yml b/changelogs/unreleased/37442-api-branches-id-repository-branches-is-calling-gitaly-n-1-times-per-request.yml
deleted file mode 100644
index 11a11a289bf..00000000000
--- a/changelogs/unreleased/37442-api-branches-id-repository-branches-is-calling-gitaly-n-1-times-per-request.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Improve performance of the /projects/:id/repository/branches API endpoint
-merge_request: 15215
-author:
-type: performance
diff --git a/changelogs/unreleased/37473-expose-project-visibility-as-ci-variable.yml b/changelogs/unreleased/37473-expose-project-visibility-as-ci-variable.yml
deleted file mode 100644
index f6906a3b0e0..00000000000
--- a/changelogs/unreleased/37473-expose-project-visibility-as-ci-variable.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Expose project visibility as CI variable - CI_PROJECT_VISIBILITY
-merge_request: 15193
-author:
-type: added
diff --git a/changelogs/unreleased/37571-replace-wikipage-createservice-with-factory.yml b/changelogs/unreleased/37571-replace-wikipage-createservice-with-factory.yml
deleted file mode 100644
index bc93aa1fca4..00000000000
--- a/changelogs/unreleased/37571-replace-wikipage-createservice-with-factory.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Replace WikiPage::CreateService calls with wiki_page factory in specs
-merge_request: 14850
-author: Jacopo Beschi @jacopo-beschi
-type: changed
diff --git a/changelogs/unreleased/37631-add-a-merge_request_diff_id-column-to-merge_requests.yml b/changelogs/unreleased/37631-add-a-merge_request_diff_id-column-to-merge_requests.yml
deleted file mode 100644
index a7127f49c16..00000000000
--- a/changelogs/unreleased/37631-add-a-merge_request_diff_id-column-to-merge_requests.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add a latest_merge_request_diff_id column to merge_requests
-merge_request: 15035
-author:
-type: performance
diff --git a/changelogs/unreleased/37660-match-sidebar-colors.yml b/changelogs/unreleased/37660-match-sidebar-colors.yml
deleted file mode 100644
index d5600f453e7..00000000000
--- a/changelogs/unreleased/37660-match-sidebar-colors.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Change background color of nav sidebar to match other gl sidebars
-merge_request:
-author:
-type: changed
diff --git a/changelogs/unreleased/37824-many-branches-lock-server.yml b/changelogs/unreleased/37824-many-branches-lock-server.yml
deleted file mode 100644
index f75f79ec4a0..00000000000
--- a/changelogs/unreleased/37824-many-branches-lock-server.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: While displaying a commit, do not show list of related branches if there are
- thousands of branches
-merge_request: 14812
-author:
-type: other
diff --git a/changelogs/unreleased/37978-extra-border-radius-while-editing-a-file.yml b/changelogs/unreleased/37978-extra-border-radius-while-editing-a-file.yml
deleted file mode 100644
index 554249a3f88..00000000000
--- a/changelogs/unreleased/37978-extra-border-radius-while-editing-a-file.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Removed extra border radius from .file-editor and .file-holder when editing
- a file
-merge_request: 14803
-author: Rachel Pipkin
-type: fixed
diff --git a/changelogs/unreleased/38178-fl-mr-notes-components.yml b/changelogs/unreleased/38178-fl-mr-notes-components.yml
deleted file mode 100644
index 244ccfb3071..00000000000
--- a/changelogs/unreleased/38178-fl-mr-notes-components.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Moves placeholders components into shared folder with documentation. Makes
- them easier to reuse in MR and Snippets comments
-merge_request:
-author:
-type: other
diff --git a/changelogs/unreleased/38236-remove-build-failed-todo-if-it-has-been-auto-retried.yml b/changelogs/unreleased/38236-remove-build-failed-todo-if-it-has-been-auto-retried.yml
deleted file mode 100644
index 48b92c02505..00000000000
--- a/changelogs/unreleased/38236-remove-build-failed-todo-if-it-has-been-auto-retried.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Don't create build failed todos when the job is automatically retried
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/38247-hide-create-mr-button-in-issue-show.yml b/changelogs/unreleased/38247-hide-create-mr-button-in-issue-show.yml
deleted file mode 100644
index 57ddd8f8388..00000000000
--- a/changelogs/unreleased/38247-hide-create-mr-button-in-issue-show.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Remove create MR button from issues when MRs are disabled
-merge_request: 15071
-author: George Andrinopoulos
-type: fixed
diff --git a/changelogs/unreleased/38394-smarter-interval.yml b/changelogs/unreleased/38394-smarter-interval.yml
deleted file mode 100644
index ead8c3eca5a..00000000000
--- a/changelogs/unreleased/38394-smarter-interval.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Update Merge Request polling so there is only one request at a time
-merge_request: 15032
-author:
-type: fixed
diff --git a/changelogs/unreleased/38395-mr-widget-ci.yml b/changelogs/unreleased/38395-mr-widget-ci.yml
deleted file mode 100644
index 5109f1bec44..00000000000
--- a/changelogs/unreleased/38395-mr-widget-ci.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Moves mini graph of pipeline to the end of sentence in MR widget. Cleans HTML
- and tests
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/38589-internationalize-tags-page.yml b/changelogs/unreleased/38589-internationalize-tags-page.yml
deleted file mode 100644
index 4af3da8c23c..00000000000
--- a/changelogs/unreleased/38589-internationalize-tags-page.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Internationalized tags page
-merge_request: 38589
-author:
-type: other
diff --git a/changelogs/unreleased/38677-render-new-discussions-on-diff-tab.yml b/changelogs/unreleased/38677-render-new-discussions-on-diff-tab.yml
deleted file mode 100644
index 9de6e54e3af..00000000000
--- a/changelogs/unreleased/38677-render-new-discussions-on-diff-tab.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add new diff discussions on MR diffs tab in "realtime"
-merge_request: 14981
-author:
-type: fixed
diff --git a/changelogs/unreleased/38720-sort-admin-runners.yml b/changelogs/unreleased/38720-sort-admin-runners.yml
deleted file mode 100644
index b1047644891..00000000000
--- a/changelogs/unreleased/38720-sort-admin-runners.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add sort runners on admin runners
-merge_request: 14661
-author: Takuya Noguchi
-type: added
diff --git a/changelogs/unreleased/38871-cleanup-data-page-attribute-after-karma-test.yml b/changelogs/unreleased/38871-cleanup-data-page-attribute-after-karma-test.yml
deleted file mode 100644
index 5e142a2b4cf..00000000000
--- a/changelogs/unreleased/38871-cleanup-data-page-attribute-after-karma-test.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Cleanup data-page attribute after each Karma test
-merge_request: 14742
-author:
-type: fixed
diff --git a/changelogs/unreleased/38877-disable-autocomplete-in-filtered-search.yml b/changelogs/unreleased/38877-disable-autocomplete-in-filtered-search.yml
new file mode 100644
index 00000000000..07439a860ec
--- /dev/null
+++ b/changelogs/unreleased/38877-disable-autocomplete-in-filtered-search.yml
@@ -0,0 +1,5 @@
+---
+title: Disables autocomplete in filtered searc
+merge_request: 15477
+author: Jacopo Beschi @jacopo-beschi
+type: added
diff --git a/changelogs/unreleased/38986-due-date.yml b/changelogs/unreleased/38986-due-date.yml
deleted file mode 100644
index 7799b8d297e..00000000000
--- a/changelogs/unreleased/38986-due-date.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix timezone bug in Pikaday and upgrade Pikaday version
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/39033-d3-js-is-being-included-in-the-user_profile-and-graphs_show-bundles.yml b/changelogs/unreleased/39033-d3-js-is-being-included-in-the-user_profile-and-graphs_show-bundles.yml
deleted file mode 100644
index d142afa3433..00000000000
--- a/changelogs/unreleased/39033-d3-js-is-being-included-in-the-user_profile-and-graphs_show-bundles.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Removed d3.js from the graph and users bundles and used the common_d3 bundle
- instead
-merge_request: 14826
-author:
-type: other
diff --git a/changelogs/unreleased/39035-move-gitlab-export-to-top-import-list.yml b/changelogs/unreleased/39035-move-gitlab-export-to-top-import-list.yml
deleted file mode 100644
index 4b90d68d80c..00000000000
--- a/changelogs/unreleased/39035-move-gitlab-export-to-top-import-list.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: 14830 Move GitLab export option to top of import list when creating a new project
-merge_request:
-author:
-type: changed
diff --git a/changelogs/unreleased/39109-reenable-scroll-job.yml b/changelogs/unreleased/39109-reenable-scroll-job.yml
deleted file mode 100644
index a771f8f8941..00000000000
--- a/changelogs/unreleased/39109-reenable-scroll-job.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Enables scroll to bottom once user has scrolled back to bottom in job log
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/39297-remove-help-text-group-lists.yml b/changelogs/unreleased/39297-remove-help-text-group-lists.yml
deleted file mode 100644
index 4773d3c5176..00000000000
--- a/changelogs/unreleased/39297-remove-help-text-group-lists.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Remove help text from group issues page and group merge requests page
-merge_request: 14963
-author:
-type: removed
diff --git a/changelogs/unreleased/39417-todos-spelled-correctly-on-todos-list-page.yml b/changelogs/unreleased/39417-todos-spelled-correctly-on-todos-list-page.yml
deleted file mode 100644
index edf142f0311..00000000000
--- a/changelogs/unreleased/39417-todos-spelled-correctly-on-todos-list-page.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Todos spelled correctly on Todos list page
-merge_request: 15015
-author:
-type: changed
diff --git a/changelogs/unreleased/39419-remove-overzealous-tooltips.yml b/changelogs/unreleased/39419-remove-overzealous-tooltips.yml
deleted file mode 100644
index d6cf60bebfa..00000000000
--- a/changelogs/unreleased/39419-remove-overzealous-tooltips.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Remove overzealous tooltips in projects page tabs
-merge_request: 15017
-author:
-type: removed
diff --git a/changelogs/unreleased/39509-fix-wiki-create-sidebar-overlap.yml b/changelogs/unreleased/39509-fix-wiki-create-sidebar-overlap.yml
deleted file mode 100644
index aebf6363d97..00000000000
--- a/changelogs/unreleased/39509-fix-wiki-create-sidebar-overlap.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix overlap of right-sidebar and main content when creating a Wiki page
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/39570-performance-bar-appears-enabled-even-though-it-won-t-show-up.yml b/changelogs/unreleased/39570-performance-bar-appears-enabled-even-though-it-won-t-show-up.yml
deleted file mode 100644
index 66939d89d69..00000000000
--- a/changelogs/unreleased/39570-performance-bar-appears-enabled-even-though-it-won-t-show-up.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Allow to disable the Performance Bar
-merge_request: 15084
-author:
-type: fixed
diff --git a/changelogs/unreleased/39573-hashed-storage-backup.yml b/changelogs/unreleased/39573-hashed-storage-backup.yml
deleted file mode 100644
index 40ee589c8cc..00000000000
--- a/changelogs/unreleased/39573-hashed-storage-backup.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix gitlab:backup rake for hashed storage based repositories
-merge_request: 15400
-author:
-type: fixed
diff --git a/changelogs/unreleased/39580-bump-carrierwave-to-1-2-1.yml b/changelogs/unreleased/39580-bump-carrierwave-to-1-2-1.yml
deleted file mode 100644
index bda85ac24e0..00000000000
--- a/changelogs/unreleased/39580-bump-carrierwave-to-1-2-1.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Bump carrierwave to 1.2.1
-merge_request: 15072
-author: Takuya Noguchi
-type: other
diff --git a/changelogs/unreleased/39582-nestingdepth-6.yml b/changelogs/unreleased/39582-nestingdepth-6.yml
deleted file mode 100644
index efe15f0a5f3..00000000000
--- a/changelogs/unreleased/39582-nestingdepth-6.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Enable NestingDepth (level 6) on scss-lint
-merge_request: 15073
-author: Takuya Noguchi
-type: other
diff --git a/changelogs/unreleased/39583-reopen-issue-count-cache.yml b/changelogs/unreleased/39583-reopen-issue-count-cache.yml
deleted file mode 100644
index ee35bcbcdae..00000000000
--- a/changelogs/unreleased/39583-reopen-issue-count-cache.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Refresh open Issue and Merge Request project counter caches when re-opening.
-merge_request: 15085
-author: Rob Ede @robjtede
-type: fixed
diff --git a/changelogs/unreleased/39593-emails-on-push-are-sent-to-only-the-first-recipient-when-using-aws-ses.yml b/changelogs/unreleased/39593-emails-on-push-are-sent-to-only-the-first-recipient-when-using-aws-ses.yml
deleted file mode 100644
index 9a7109d054e..00000000000
--- a/changelogs/unreleased/39593-emails-on-push-are-sent-to-only-the-first-recipient-when-using-aws-ses.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Only set Auto-Submitted header once for emails on push
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/39619-cancel-merge-when-pipeline-succeeds-from-the-api-fails.yml b/changelogs/unreleased/39619-cancel-merge-when-pipeline-succeeds-from-the-api-fails.yml
deleted file mode 100644
index 95251b46ecc..00000000000
--- a/changelogs/unreleased/39619-cancel-merge-when-pipeline-succeeds-from-the-api-fails.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix namespacing for MergeWhenPipelineSucceedsService in MR API
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/39649-change-default-size-for-gke-cluster-creation.yml b/changelogs/unreleased/39649-change-default-size-for-gke-cluster-creation.yml
deleted file mode 100644
index 6faa30177ad..00000000000
--- a/changelogs/unreleased/39649-change-default-size-for-gke-cluster-creation.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Change default cluster size to n1-default-2
-merge_request: 39649
-author: Fabio Busatto
-type: changed
diff --git a/changelogs/unreleased/39668-tooltip-safari.yml b/changelogs/unreleased/39668-tooltip-safari.yml
deleted file mode 100644
index 5a0f677cf10..00000000000
--- a/changelogs/unreleased/39668-tooltip-safari.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Remove native title tooltip in pipeline jobs dropdown in Safari
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/39720-group-milestone-sorting.yml b/changelogs/unreleased/39720-group-milestone-sorting.yml
new file mode 100644
index 00000000000..15ef87fa567
--- /dev/null
+++ b/changelogs/unreleased/39720-group-milestone-sorting.yml
@@ -0,0 +1,5 @@
+---
+title: Add dropdown sort to group milestones
+merge_request: 15230
+author: George Andrinopoulos
+type: added
diff --git a/changelogs/unreleased/39757-border-zero-of-scss-lint.yml b/changelogs/unreleased/39757-border-zero-of-scss-lint.yml
deleted file mode 100644
index ef0ac6c7df9..00000000000
--- a/changelogs/unreleased/39757-border-zero-of-scss-lint.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Enable BorderZero rule in scss-lint
-merge_request: 15168
-author: Takuya Noguchi
-type: other
diff --git a/changelogs/unreleased/39776-remove-responsive-table-bottom-border.yml b/changelogs/unreleased/39776-remove-responsive-table-bottom-border.yml
deleted file mode 100644
index 52b6a267ced..00000000000
--- a/changelogs/unreleased/39776-remove-responsive-table-bottom-border.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix double border UI bug on pipelines/environments table and pagination
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/39791-when-reopening-an-issue-the-mattermost-notification-has-no-context-to-the-issue.yml b/changelogs/unreleased/39791-when-reopening-an-issue-the-mattermost-notification-has-no-context-to-the-issue.yml
deleted file mode 100644
index 143641c6183..00000000000
--- a/changelogs/unreleased/39791-when-reopening-an-issue-the-mattermost-notification-has-no-context-to-the-issue.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Include link to issue in reopen message for Slack and Mattermost notifications
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/39878-commit-pipeline-reads-wrong-key.yml b/changelogs/unreleased/39878-commit-pipeline-reads-wrong-key.yml
deleted file mode 100644
index b24edfe0cb9..00000000000
--- a/changelogs/unreleased/39878-commit-pipeline-reads-wrong-key.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix commit pipeline showing wrong status
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/39977-gitlab-shell-default-timeout.yml b/changelogs/unreleased/39977-gitlab-shell-default-timeout.yml
new file mode 100644
index 00000000000..b7a974fd8d9
--- /dev/null
+++ b/changelogs/unreleased/39977-gitlab-shell-default-timeout.yml
@@ -0,0 +1,5 @@
+---
+title: Set the default gitlab-shell timeout to 3 hours
+merge_request: 15292
+author:
+type: fixed
diff --git a/changelogs/unreleased/40068-runner-sorting-regression.yml b/changelogs/unreleased/40068-runner-sorting-regression.yml
deleted file mode 100644
index 6a2bd59d6d6..00000000000
--- a/changelogs/unreleased/40068-runner-sorting-regression.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Revert a regression on runners sorting (!15134)
-merge_request: 15341
-author: Takuya Noguchi
-type: fixed
diff --git a/changelogs/unreleased/40198-fix-gpg-badge-links.yml b/changelogs/unreleased/40198-fix-gpg-badge-links.yml
deleted file mode 100644
index 62b962acefa..00000000000
--- a/changelogs/unreleased/40198-fix-gpg-badge-links.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Fix issue where clicking a GPG verification badge would scroll to the top of
- the page
-merge_request: 15407
-author:
-type: fixed
diff --git a/changelogs/unreleased/add-changes-count-to-merge-requests-api.yml b/changelogs/unreleased/add-changes-count-to-merge-requests-api.yml
deleted file mode 100644
index d0a00fafb52..00000000000
--- a/changelogs/unreleased/add-changes-count-to-merge-requests-api.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add a count of changes to the merge requests API
-merge_request:
-author:
-type: changed
diff --git a/changelogs/unreleased/add-ingress-to-cluster-applications.yml b/changelogs/unreleased/add-ingress-to-cluster-applications.yml
deleted file mode 100644
index 0064e8672f8..00000000000
--- a/changelogs/unreleased/add-ingress-to-cluster-applications.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add Ingress to available Cluster applications
-merge_request:
-author:
-type: added
diff --git a/changelogs/unreleased/add-lazy-option-to-user-avatar-image-component.yml b/changelogs/unreleased/add-lazy-option-to-user-avatar-image-component.yml
deleted file mode 100644
index eef78cd58f9..00000000000
--- a/changelogs/unreleased/add-lazy-option-to-user-avatar-image-component.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add lazy option to UserAvatarImage
-merge_request: 14895
-author:
-type: changed
diff --git a/changelogs/unreleased/add-packagist-project-service.yml b/changelogs/unreleased/add-packagist-project-service.yml
deleted file mode 100644
index a13d00e91f7..00000000000
--- a/changelogs/unreleased/add-packagist-project-service.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add Packagist project service
-merge_request: 14493
-author: Matt Coleman
-type: added
diff --git a/changelogs/unreleased/add-shared-vue-loading-button.yml b/changelogs/unreleased/add-shared-vue-loading-button.yml
deleted file mode 100644
index a8904acc4e7..00000000000
--- a/changelogs/unreleased/add-shared-vue-loading-button.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add loading button for new UX paradigm
-merge_request: 14883
-author:
-type: added
diff --git a/changelogs/unreleased/an-use-branch-exists-over-branch-names-include.yml b/changelogs/unreleased/an-use-branch-exists-over-branch-names-include.yml
deleted file mode 100644
index 19d950b48d6..00000000000
--- a/changelogs/unreleased/an-use-branch-exists-over-branch-names-include.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Avoid fetching all branches for branch existence checks
-merge_request: 14778
-author:
-type: changed
diff --git a/changelogs/unreleased/api-configure-jira.yml b/changelogs/unreleased/api-configure-jira.yml
deleted file mode 100644
index 3ac52d573b0..00000000000
--- a/changelogs/unreleased/api-configure-jira.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Validate username/pw for Jiraservice, require them in the API
-merge_request: 15025
-author: Robert Schilling
-type: fixed
diff --git a/changelogs/unreleased/api-doc-group-statistics.yml b/changelogs/unreleased/api-doc-group-statistics.yml
deleted file mode 100644
index 385ff978024..00000000000
--- a/changelogs/unreleased/api-doc-group-statistics.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Update the groups API documentation
-merge_request: 15024
-author: Robert Schilling
-type: fixed
diff --git a/changelogs/unreleased/backport-workhorse-show-all-refs.yml b/changelogs/unreleased/backport-workhorse-show-all-refs.yml
deleted file mode 100644
index 36dd2115152..00000000000
--- a/changelogs/unreleased/backport-workhorse-show-all-refs.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Support show-all-refs for git over HTTP
-merge_request: 14834
-author:
-type: added
diff --git a/changelogs/unreleased/bugfix_banzai_closed_milestones.yml b/changelogs/unreleased/bugfix_banzai_closed_milestones.yml
deleted file mode 100644
index 4b5c716ddad..00000000000
--- a/changelogs/unreleased/bugfix_banzai_closed_milestones.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix GFM reference links for closed milestones
-merge_request: 15234
-author: Vitaliy @blackst0ne Klachkov
-type: fixed
diff --git a/changelogs/unreleased/bvl-fix-count-with-selects.yml b/changelogs/unreleased/bvl-fix-count-with-selects.yml
deleted file mode 100644
index 46a882de524..00000000000
--- a/changelogs/unreleased/bvl-fix-count-with-selects.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Fix crash when navigating to second page of the group dashbaord when there
- are projects and groups on the first page
-merge_request: 15456
-author:
-type: fixed
diff --git a/changelogs/unreleased/bvl-fix-group-atom-feed.yml b/changelogs/unreleased/bvl-fix-group-atom-feed.yml
deleted file mode 100644
index 48f67db7799..00000000000
--- a/changelogs/unreleased/bvl-fix-group-atom-feed.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix the atom feed for group events
-merge_request: 14974
-author:
-type: fixed
diff --git a/changelogs/unreleased/bvl-free-paths.yml b/changelogs/unreleased/bvl-free-paths.yml
deleted file mode 100644
index f15459cc788..00000000000
--- a/changelogs/unreleased/bvl-free-paths.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Free up some reserved group names
-merge_request: 15052
-author:
-type: other
diff --git a/changelogs/unreleased/bvl-group-trees.yml b/changelogs/unreleased/bvl-group-trees.yml
deleted file mode 100644
index 9f76eb81627..00000000000
--- a/changelogs/unreleased/bvl-group-trees.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Show collapsible project lists
-merge_request: 14055
-author:
-type: changed
diff --git a/changelogs/unreleased/bvl-refresh-member-listing-on-removal.yml b/changelogs/unreleased/bvl-refresh-member-listing-on-removal.yml
deleted file mode 100644
index 48b4051711c..00000000000
--- a/changelogs/unreleased/bvl-refresh-member-listing-on-removal.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Don't use JS to delete memberships from projects and groups
-merge_request: 15344
-author:
-type: fixed
diff --git a/changelogs/unreleased/cache-user-keys-count.yml b/changelogs/unreleased/cache-user-keys-count.yml
deleted file mode 100644
index 181be95622c..00000000000
--- a/changelogs/unreleased/cache-user-keys-count.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Cache the number of user SSH keys
-merge_request:
-author:
-type: performance
diff --git a/changelogs/unreleased/ci-pipeline-status-query.yml b/changelogs/unreleased/ci-pipeline-status-query.yml
deleted file mode 100644
index a464e501418..00000000000
--- a/changelogs/unreleased/ci-pipeline-status-query.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Optimise getting the pipeline status of commits
-merge_request:
-author:
-type: performance
diff --git a/changelogs/unreleased/dm-add-sudo-scope.yml b/changelogs/unreleased/dm-add-sudo-scope.yml
deleted file mode 100644
index a0c173ce781..00000000000
--- a/changelogs/unreleased/dm-add-sudo-scope.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Add sudo scope for OAuth and Personal Access Tokens to be used by admins to
- impersonate other users on the API
-merge_request:
-author:
-type: added
diff --git a/changelogs/unreleased/dm-avatarable-with-asset-host.yml b/changelogs/unreleased/dm-avatarable-with-asset-host.yml
deleted file mode 100644
index 6cf8d719afb..00000000000
--- a/changelogs/unreleased/dm-avatarable-with-asset-host.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Always return full avatar URL for private/internal groups/projects when asset
- host is set
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/dm-convert-private-tokens.yml b/changelogs/unreleased/dm-convert-private-tokens.yml
deleted file mode 100644
index 8f5145c897b..00000000000
--- a/changelogs/unreleased/dm-convert-private-tokens.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Convert private tokens to Personal Access Tokens with sudo scope
-merge_request:
-author:
-type: security
diff --git a/changelogs/unreleased/dm-notes-actions-noteable-for-update.yml b/changelogs/unreleased/dm-notes-actions-noteable-for-update.yml
deleted file mode 100644
index 1d2f58bc765..00000000000
--- a/changelogs/unreleased/dm-notes-actions-noteable-for-update.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Make sure NotesActions#noteable returns a Noteable in the update action
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/dm-notes-for-commit-id.yml b/changelogs/unreleased/dm-notes-for-commit-id.yml
deleted file mode 100644
index 5b83332d82f..00000000000
--- a/changelogs/unreleased/dm-notes-for-commit-id.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Improve performance of commits list by fully using DB index when getting commit
- note counts
-merge_request:
-author:
-type: performance
diff --git a/changelogs/unreleased/dm-reallow-project-path-ending-in-period.yml b/changelogs/unreleased/dm-reallow-project-path-ending-in-period.yml
deleted file mode 100644
index ad41d9b84c3..00000000000
--- a/changelogs/unreleased/dm-reallow-project-path-ending-in-period.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Reallow project paths ending in periods
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/dm-remove-private-token-from-interface.yml b/changelogs/unreleased/dm-remove-private-token-from-interface.yml
deleted file mode 100644
index 1b8996b08c3..00000000000
--- a/changelogs/unreleased/dm-remove-private-token-from-interface.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Remove private tokens from web interface and API
-merge_request:
-author:
-type: security
diff --git a/changelogs/unreleased/dm-remove-private-token.yml b/changelogs/unreleased/dm-remove-private-token.yml
deleted file mode 100644
index d721495721a..00000000000
--- a/changelogs/unreleased/dm-remove-private-token.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Remove Session API now that private tokens are removed from user API endpoints
-merge_request:
-author:
-type: removed
diff --git a/changelogs/unreleased/enable-scss-lint-mergeable-selector.yml b/changelogs/unreleased/enable-scss-lint-mergeable-selector.yml
deleted file mode 100644
index 5f6e0cafe88..00000000000
--- a/changelogs/unreleased/enable-scss-lint-mergeable-selector.yml
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: Enable MergeableSelector in scss-lint
-merge_request: 12810
-author: Takuya Noguchi
diff --git a/changelogs/unreleased/es-module-broadcast_message.yml b/changelogs/unreleased/es-module-broadcast_message.yml
deleted file mode 100644
index 031bcc449ae..00000000000
--- a/changelogs/unreleased/es-module-broadcast_message.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix unnecessary ajax requests in admin broadcast message form
-merge_request: 14853
-author:
-type: fixed
diff --git a/changelogs/unreleased/expose-job-duration.yml b/changelogs/unreleased/expose-job-duration.yml
deleted file mode 100644
index 1fe5d897d47..00000000000
--- a/changelogs/unreleased/expose-job-duration.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Expose duration in Job entity
-merge_request: 13644
-author: Mehdi Lahmam (@mehlah)
-type: added
diff --git a/changelogs/unreleased/feature-change-signout-route.yml b/changelogs/unreleased/feature-change-signout-route.yml
deleted file mode 100644
index bccb85b3eaf..00000000000
--- a/changelogs/unreleased/feature-change-signout-route.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Change 'Sign Out' route from a DELETE to a GET
-merge_request: 39708
-author: Joe Marty
-type: changed
diff --git a/changelogs/unreleased/feature-custom-attributes-on-projects-and-groups.yml b/changelogs/unreleased/feature-custom-attributes-on-projects-and-groups.yml
deleted file mode 100644
index 9eae989a270..00000000000
--- a/changelogs/unreleased/feature-custom-attributes-on-projects-and-groups.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Support custom attributes on groups and projects
-merge_request: 14593
-author: Markus Koller
-type: changed
diff --git a/changelogs/unreleased/feature-hashed-storage-repo-import.yml b/changelogs/unreleased/feature-hashed-storage-repo-import.yml
deleted file mode 100644
index 73c16a99053..00000000000
--- a/changelogs/unreleased/feature-hashed-storage-repo-import.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Improve GitLab Import rake task to work with Hashed Storage and Subgroups
-merge_request:
-author:
-type: changed
diff --git a/changelogs/unreleased/feature-plantuml-restructured-text-captions.yml b/changelogs/unreleased/feature-plantuml-restructured-text-captions.yml
deleted file mode 100644
index 3d8d0f4fcd1..00000000000
--- a/changelogs/unreleased/feature-plantuml-restructured-text-captions.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: 'Support uml:: and captions in reStructuredText'
-merge_request: 15120
-author: Markus Koller
-type: changed
diff --git a/changelogs/unreleased/feature-reliable-rspec-with-eval-script.yml b/changelogs/unreleased/feature-reliable-rspec-with-eval-script.yml
deleted file mode 100644
index 1f36d84092a..00000000000
--- a/changelogs/unreleased/feature-reliable-rspec-with-eval-script.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Get true failure from evalulate_script by checking for element beforehand
-merge_request: 14898
-author:
-type: fixed
diff --git a/changelogs/unreleased/feature-ssh_host_fingerprint.yml b/changelogs/unreleased/feature-ssh_host_fingerprint.yml
deleted file mode 100644
index 04f9fd1d6ed..00000000000
--- a/changelogs/unreleased/feature-ssh_host_fingerprint.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Automatic configuration settings page
-merge_request: 13850
-author: Francisco Lopez
-type: added
diff --git a/changelogs/unreleased/feature_add_mermaid.yml b/changelogs/unreleased/feature_add_mermaid.yml
new file mode 100644
index 00000000000..caeb5d3470d
--- /dev/null
+++ b/changelogs/unreleased/feature_add_mermaid.yml
@@ -0,0 +1,5 @@
+---
+title: 'Add support of Mermaid (generation of diagrams and flowcharts from text)'
+merge_request: 15107
+author: Vitaliy @blackst0ne Klachkov
+type: added
diff --git a/changelogs/unreleased/feature_change_sort_refs.yml b/changelogs/unreleased/feature_change_sort_refs.yml
deleted file mode 100644
index 2dccd87d228..00000000000
--- a/changelogs/unreleased/feature_change_sort_refs.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Change tags order in refs dropdown
-merge_request: 15235
-author: Vitaliy @blackst0ne Klachkov
-type: changed
diff --git a/changelogs/unreleased/fix-500-on-old-merge-requests.yml b/changelogs/unreleased/fix-500-on-old-merge-requests.yml
deleted file mode 100644
index 765d7466819..00000000000
--- a/changelogs/unreleased/fix-500-on-old-merge-requests.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix 500 errors caused by empty diffs in some discussions
-merge_request: 14945
-author: Alexander Popov
-type: fixed
diff --git a/changelogs/unreleased/fix-502-mrs-with-lots-of-versions.yml b/changelogs/unreleased/fix-502-mrs-with-lots-of-versions.yml
deleted file mode 100644
index 32cdfba4eec..00000000000
--- a/changelogs/unreleased/fix-502-mrs-with-lots-of-versions.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Ensure merge requests with lots of version don't time out when searching for
- pipelines
-merge_request:
-author:
-type: performance
diff --git a/changelogs/unreleased/fix-ci-pipelines-index.yml b/changelogs/unreleased/fix-ci-pipelines-index.yml
new file mode 100644
index 00000000000..772093fbef0
--- /dev/null
+++ b/changelogs/unreleased/fix-ci-pipelines-index.yml
@@ -0,0 +1,5 @@
+---
+title: Update composite pipelines index to include "id"
+merge_request:
+author:
+type: performance
diff --git a/changelogs/unreleased/fix-gb-update-registry-path-reference-regexp.yml b/changelogs/unreleased/fix-gb-update-registry-path-reference-regexp.yml
deleted file mode 100644
index 55c1089ade5..00000000000
--- a/changelogs/unreleased/fix-gb-update-registry-path-reference-regexp.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Update container repository path reference and allow using double underscore
-merge_request: 15417
-author:
-type: fixed
diff --git a/changelogs/unreleased/fix-issues-api-list-performance.yml b/changelogs/unreleased/fix-issues-api-list-performance.yml
deleted file mode 100644
index 9c180f4d55e..00000000000
--- a/changelogs/unreleased/fix-issues-api-list-performance.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Speed up issues list APIs
-merge_request:
-author:
-type: performance
diff --git a/changelogs/unreleased/fix-md-form-tabs-double-click-toggle.yml b/changelogs/unreleased/fix-md-form-tabs-double-click-toggle.yml
deleted file mode 100644
index 0ec9bcbcde2..00000000000
--- a/changelogs/unreleased/fix-md-form-tabs-double-click-toggle.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Fix markdown form tabs toggling preview mode from double clicking write mode
- button
-merge_request: 15119
-author:
-type: fixed
diff --git a/changelogs/unreleased/fix-project-select-js-without-button.yml b/changelogs/unreleased/fix-project-select-js-without-button.yml
deleted file mode 100644
index 389ca2394f0..00000000000
--- a/changelogs/unreleased/fix-project-select-js-without-button.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Use project select dropdown not only as a combobutton
-merge_request: 15043
-author:
-type: fixed
diff --git a/changelogs/unreleased/fix-subgroup-autocomplete.yml b/changelogs/unreleased/fix-subgroup-autocomplete.yml
deleted file mode 100644
index 4baa2b02f77..00000000000
--- a/changelogs/unreleased/fix-subgroup-autocomplete.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix user autocomplete in subgroups
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/fix-system-hook-docs.yml b/changelogs/unreleased/fix-system-hook-docs.yml
deleted file mode 100644
index 393c84a2eff..00000000000
--- a/changelogs/unreleased/fix-system-hook-docs.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Clarify system_hook triggers in documentation
-merge_request: 14957
-author: Joe Marty
-type: other
diff --git a/changelogs/unreleased/fix-user-tab-activity-mobile.yml b/changelogs/unreleased/fix-user-tab-activity-mobile.yml
deleted file mode 100644
index a7e4fcb4355..00000000000
--- a/changelogs/unreleased/fix-user-tab-activity-mobile.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fixed user profile activity tab being off-screen on mobile
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/go-get-ssh.yml b/changelogs/unreleased/go-get-ssh.yml
deleted file mode 100644
index e485a94c6db..00000000000
--- a/changelogs/unreleased/go-get-ssh.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Returns a ssh url for go-get=1
-merge_request: 14990
-author: gvieira37
-type: fixed
diff --git a/changelogs/unreleased/group-new-miletone-breadcrumb.yml b/changelogs/unreleased/group-new-miletone-breadcrumb.yml
new file mode 100644
index 00000000000..b82c5b604e8
--- /dev/null
+++ b/changelogs/unreleased/group-new-miletone-breadcrumb.yml
@@ -0,0 +1,5 @@
+---
+title: Fixed new group milestone breadcrumbs
+merge_request:
+author:
+type: fixed
diff --git a/changelogs/unreleased/hide-pipeline-zero-duration.yml b/changelogs/unreleased/hide-pipeline-zero-duration.yml
deleted file mode 100644
index 5d7a0983537..00000000000
--- a/changelogs/unreleased/hide-pipeline-zero-duration.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Hides pipeline duration in commit box when it is zero (nil)
-merge_request: 14979
-author: gvieira37
-type: fixed
diff --git a/changelogs/unreleased/issue-36484.yml b/changelogs/unreleased/issue-36484.yml
deleted file mode 100644
index a19126e650f..00000000000
--- a/changelogs/unreleased/issue-36484.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Remove unnecessary alt-texts from pipeline emails
-merge_request: 14602
-author: gernberg
-type: fixed
diff --git a/changelogs/unreleased/issue_38777.yml b/changelogs/unreleased/issue_38777.yml
deleted file mode 100644
index 5c49b2f7879..00000000000
--- a/changelogs/unreleased/issue_38777.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Allow promoting project milestones to group milestones
-merge_request:
-author:
-type: added
diff --git a/changelogs/unreleased/jej-fs-prevent-push-when-missing-objects.yml b/changelogs/unreleased/jej-fs-prevent-push-when-missing-objects.yml
deleted file mode 100644
index 4eeedec2c99..00000000000
--- a/changelogs/unreleased/jej-fs-prevent-push-when-missing-objects.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Prevent git push when LFS objects are missing
-merge_request: 13837
-author:
-type: added
diff --git a/changelogs/unreleased/jivl-mobile-friendly-table-runners.yml b/changelogs/unreleased/jivl-mobile-friendly-table-runners.yml
deleted file mode 100644
index 3448b003ee0..00000000000
--- a/changelogs/unreleased/jivl-mobile-friendly-table-runners.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Mobile-friendly table on Admin Runners
-merge_request:
-author: Takuya Noguchi
-type: fixed
diff --git a/changelogs/unreleased/move_markdown_preview_to_concern.yml b/changelogs/unreleased/move_markdown_preview_to_concern.yml
deleted file mode 100644
index 036e77610b9..00000000000
--- a/changelogs/unreleased/move_markdown_preview_to_concern.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add support for markdown preview to group milestones
-merge_request: 14806
-author: Vitaliy @blackst0ne Klachkov
-type: fixed
diff --git a/changelogs/unreleased/multi-file-editor-submodules.yml b/changelogs/unreleased/multi-file-editor-submodules.yml
deleted file mode 100644
index b83a50957c5..00000000000
--- a/changelogs/unreleased/multi-file-editor-submodules.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Added submodule support in multi-file editor
-merge_request:
-author:
-type: added
diff --git a/changelogs/unreleased/multiple-query-prometheus-graphs.yml b/changelogs/unreleased/multiple-query-prometheus-graphs.yml
deleted file mode 100644
index 9d09166845e..00000000000
--- a/changelogs/unreleased/multiple-query-prometheus-graphs.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Allow multiple queries in a single Prometheus graph to support additional environments
- (Canary, Staging, et al.)
-merge_request: 15201
-author:
-type: added
diff --git a/changelogs/unreleased/new-mr-repo-editor.yml b/changelogs/unreleased/new-mr-repo-editor.yml
deleted file mode 100644
index a6c15ee30a9..00000000000
--- a/changelogs/unreleased/new-mr-repo-editor.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: 'Repo Editor: Add option to start a new MR directly from comit section'
-merge_request: 14665
-author:
-type: added
diff --git a/changelogs/unreleased/not-found-in-commits.yml b/changelogs/unreleased/not-found-in-commits.yml
deleted file mode 100644
index d5f9ff15a36..00000000000
--- a/changelogs/unreleased/not-found-in-commits.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Renders 404 in commits controller if no commits are found for a given path
-merge_request: 14610
-author: Guilherme Vieira
-type: fixed
diff --git a/changelogs/unreleased/pawel-metrics-to-prometheus-33643.yml b/changelogs/unreleased/pawel-metrics-to-prometheus-33643.yml
deleted file mode 100644
index abab2e55f90..00000000000
--- a/changelogs/unreleased/pawel-metrics-to-prometheus-33643.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add Prometheus equivalent of all InfluxDB metrics
-merge_request: 13891
-author:
-type: changed
diff --git a/changelogs/unreleased/pawel-show_empty_page_when_prometheus_metrics_are_disabled-35639.yml b/changelogs/unreleased/pawel-show_empty_page_when_prometheus_metrics_are_disabled-35639.yml
deleted file mode 100644
index 987f7286244..00000000000
--- a/changelogs/unreleased/pawel-show_empty_page_when_prometheus_metrics_are_disabled-35639.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Make Prometheus metrics endpoint return empty response when metrics are disabled
-merge_request: 14490
-author:
-type: changed
diff --git a/changelogs/unreleased/ph-multi-file-upload-file.yml b/changelogs/unreleased/ph-multi-file-upload-file.yml
deleted file mode 100644
index a2bd3cfe459..00000000000
--- a/changelogs/unreleased/ph-multi-file-upload-file.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Allow files to uploaded in the multi-file editor
-merge_request:
-author:
-type: added
diff --git a/changelogs/unreleased/reduce-queries-for-artifacts-button.yml b/changelogs/unreleased/reduce-queries-for-artifacts-button.yml
new file mode 100644
index 00000000000..f2d469b5a80
--- /dev/null
+++ b/changelogs/unreleased/reduce-queries-for-artifacts-button.yml
@@ -0,0 +1,5 @@
+---
+title: Use arrays in Pipeline#latest_builds_with_artifacts
+merge_request:
+author:
+type: performance
diff --git a/changelogs/unreleased/refactor-group_links_controller.yml b/changelogs/unreleased/refactor-group_links_controller.yml
deleted file mode 100644
index af3d22c34cb..00000000000
--- a/changelogs/unreleased/refactor-group_links_controller.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Refactor GroupLinksController
-merge_request:
-author: 15121
-type: other
diff --git a/changelogs/unreleased/remove-ensure-ref-fetched-from-controllers.yml b/changelogs/unreleased/remove-ensure-ref-fetched-from-controllers.yml
deleted file mode 100644
index 57f54bec1e6..00000000000
--- a/changelogs/unreleased/remove-ensure-ref-fetched-from-controllers.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Stop merge requests from fetching their refs when the data is already available.
-merge_request: 15129
-author:
-type: removed
diff --git a/changelogs/unreleased/replace_explore_projects-feature.yml b/changelogs/unreleased/replace_explore_projects-feature.yml
deleted file mode 100644
index 85ef045fb4b..00000000000
--- a/changelogs/unreleased/replace_explore_projects-feature.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Replace the 'features/explore/projects.feature' spinach test with an rspec analog
-merge_request: 14755
-author: Vitaliy @blackst0ne Klachkov
-type: other
diff --git a/changelogs/unreleased/sh-disable-unicorn-sampling-sidekiq.yml b/changelogs/unreleased/sh-disable-unicorn-sampling-sidekiq.yml
deleted file mode 100644
index c4ed017dacd..00000000000
--- a/changelogs/unreleased/sh-disable-unicorn-sampling-sidekiq.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Disable Unicorn sampling in Sidekiq since there are no Unicorn sockets to monitor
-merge_request:
-author:
-type: performance
diff --git a/changelogs/unreleased/sh-fix-broken-redirection-relative-url-root.yml b/changelogs/unreleased/sh-fix-broken-redirection-relative-url-root.yml
deleted file mode 100644
index 96e5195d247..00000000000
--- a/changelogs/unreleased/sh-fix-broken-redirection-relative-url-root.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix broken Members link when relative URL root paths are used
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/sh-memoize-logger.yml b/changelogs/unreleased/sh-memoize-logger.yml
deleted file mode 100644
index 1b6567ce72f..00000000000
--- a/changelogs/unreleased/sh-memoize-logger.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Memoize GitLab logger to reduce open file descriptors
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/sh-port-hashed-storage-transfer-fix.yml b/changelogs/unreleased/sh-port-hashed-storage-transfer-fix.yml
deleted file mode 100644
index c32afc90f64..00000000000
--- a/changelogs/unreleased/sh-port-hashed-storage-transfer-fix.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix hashed storage with project transfers to another namespace
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/sha-handling.yml b/changelogs/unreleased/sha-handling.yml
deleted file mode 100644
index d776edafef5..00000000000
--- a/changelogs/unreleased/sha-handling.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix 404 errors in API caused when the branch name had a dot
-merge_request: 14462
-author: gvieira37
-type: fixed
diff --git a/changelogs/unreleased/tc-delete-merged-protected-tags-fix.yml b/changelogs/unreleased/tc-delete-merged-protected-tags-fix.yml
deleted file mode 100644
index 5d5c39108b0..00000000000
--- a/changelogs/unreleased/tc-delete-merged-protected-tags-fix.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: When deleting merged branches, ignore protected tags
-merge_request: 15252
-author:
-type: fixed
diff --git a/changelogs/unreleased/tc-saml-fix-false-empty.yml b/changelogs/unreleased/tc-saml-fix-false-empty.yml
deleted file mode 100644
index 987f596475b..00000000000
--- a/changelogs/unreleased/tc-saml-fix-false-empty.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix SAML error 500 when no groups are defined for user
-merge_request: 14913
-author:
-type: fixed
diff --git a/changelogs/unreleased/tree_item_limit.yml b/changelogs/unreleased/tree_item_limit.yml
deleted file mode 100644
index d95c5776075..00000000000
--- a/changelogs/unreleased/tree_item_limit.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Truncate tree to max 1,000 items and display notice to users
-merge_request:
-author:
-type: performance
diff --git a/changelogs/unreleased/update-fe-i18n-guide.yml b/changelogs/unreleased/update-fe-i18n-guide.yml
deleted file mode 100644
index 10bcf7836c6..00000000000
--- a/changelogs/unreleased/update-fe-i18n-guide.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Update i18n section in FE docs for marking and interpolation
-merge_request:
-author:
-type: changed
diff --git a/changelogs/unreleased/use-git-branch-merged.yml b/changelogs/unreleased/use-git-branch-merged.yml
deleted file mode 100644
index 24ec226250c..00000000000
--- a/changelogs/unreleased/use-git-branch-merged.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Improve branch listing page performance
-merge_request: 14729
-author:
-type: performance
diff --git a/changelogs/unreleased/use-title.yml b/changelogs/unreleased/use-title.yml
deleted file mode 100644
index 647e282eb69..00000000000
--- a/changelogs/unreleased/use-title.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Use title as placeholder instead of issue title for reusability
-merge_request:
-author:
-type: other
diff --git a/changelogs/unreleased/winh-admin-projects-namespace-filter.yml b/changelogs/unreleased/winh-admin-projects-namespace-filter.yml
deleted file mode 100644
index 7e906f446b0..00000000000
--- a/changelogs/unreleased/winh-admin-projects-namespace-filter.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Make NamespaceSelect change URL when filtering
-merge_request: 14888
-author:
-type: fixed
diff --git a/changelogs/unreleased/winh-i18n-contributors-page.yml b/changelogs/unreleased/winh-i18n-contributors-page.yml
deleted file mode 100644
index 9b2611fc4fa..00000000000
--- a/changelogs/unreleased/winh-i18n-contributors-page.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Make contributors page translatable
-merge_request: 14915
-author:
-type: other
diff --git a/changelogs/unreleased/winh-namespace-rename-hooks.yml b/changelogs/unreleased/winh-namespace-rename-hooks.yml
deleted file mode 100644
index f5090b03b74..00000000000
--- a/changelogs/unreleased/winh-namespace-rename-hooks.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add system hooks user_rename and group_rename
-merge_request: 15123
-author:
-type: changed
diff --git a/changelogs/unreleased/zj-add-performance-changelog-cat.yml b/changelogs/unreleased/zj-add-performance-changelog-cat.yml
deleted file mode 100644
index 3d58044a254..00000000000
--- a/changelogs/unreleased/zj-add-performance-changelog-cat.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add Performance improvement as category on the changelog
-merge_request:
-author:
-type: performance
diff --git a/changelogs/unreleased/zj-commit-cache.yml b/changelogs/unreleased/zj-commit-cache.yml
deleted file mode 100644
index e3afe0ea7ef..00000000000
--- a/changelogs/unreleased/zj-commit-cache.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Cache commits fetched from the repository
-merge_request:
-author:
-type: performance
diff --git a/changelogs/unreleased/zj-peek-gitaly.yml b/changelogs/unreleased/zj-peek-gitaly.yml
deleted file mode 100644
index bd2f2a07540..00000000000
--- a/changelogs/unreleased/zj-peek-gitaly.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add Gitaly metrics to the performance bar
-merge_request:
-author:
-type: other
diff --git a/changelogs/unreleased/zj-ruby-2-3-5.yml b/changelogs/unreleased/zj-ruby-2-3-5.yml
deleted file mode 100644
index 09ec02417aa..00000000000
--- a/changelogs/unreleased/zj-ruby-2-3-5.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Upgrade Ruby to 2.3.5 to include security patches
-merge_request: 15099
-author:
-type: security
diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example
index 7547ba4a8fa..7f6e68ceed6 100644
--- a/config/gitlab.yml.example
+++ b/config/gitlab.yml.example
@@ -559,8 +559,8 @@ production: &base
upload_pack: true
receive_pack: true
- # Git import/fetch timeout
- # git_timeout: 800
+ # Git import/fetch timeout, in seconds. Defaults to 3 hours.
+ # git_timeout: 10800
# If you use non-standard ssh port you need to specify it
# ssh_port: 22
diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb
index d1156b0c8a8..f7c83f7b0f7 100644
--- a/config/initializers/1_settings.rb
+++ b/config/initializers/1_settings.rb
@@ -429,7 +429,7 @@ Settings.gitlab_shell['ssh_port'] ||= 22
Settings.gitlab_shell['ssh_user'] ||= Settings.gitlab.user
Settings.gitlab_shell['owner_group'] ||= Settings.gitlab.user
Settings.gitlab_shell['ssh_path_prefix'] ||= Settings.__send__(:build_gitlab_shell_ssh_path_prefix)
-Settings.gitlab_shell['git_timeout'] ||= 800
+Settings.gitlab_shell['git_timeout'] ||= 10800
#
# Workhorse
diff --git a/config/initializers/math_lexer.rb b/config/initializers/math_lexer.rb
deleted file mode 100644
index 8a3388a267e..00000000000
--- a/config/initializers/math_lexer.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-# Touch the lexers so it is registered with Rouge
-Rouge::Lexers::Math
diff --git a/config/initializers/plantuml_lexer.rb b/config/initializers/plantuml_lexer.rb
deleted file mode 100644
index e8a77b146fa..00000000000
--- a/config/initializers/plantuml_lexer.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-# Touch the lexers so it is registered with Rouge
-Rouge::Lexers::Plantuml
diff --git a/db/migrate/20171121144800_ci_pipelines_index_on_project_id_ref_status_id.rb b/db/migrate/20171121144800_ci_pipelines_index_on_project_id_ref_status_id.rb
new file mode 100644
index 00000000000..5a8ae6e4b57
--- /dev/null
+++ b/db/migrate/20171121144800_ci_pipelines_index_on_project_id_ref_status_id.rb
@@ -0,0 +1,35 @@
+# See http://doc.gitlab.com/ce/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class CiPipelinesIndexOnProjectIdRefStatusId < ActiveRecord::Migration
+ include Gitlab::Database::MigrationHelpers
+
+ # Set this constant to true if this migration requires downtime.
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ TABLE = :ci_pipelines
+ OLD_COLUMNS = %i[project_id ref status].freeze
+ NEW_COLUMNS = %i[project_id ref status id].freeze
+
+ def up
+ unless index_exists?(TABLE, NEW_COLUMNS)
+ add_concurrent_index(TABLE, NEW_COLUMNS)
+ end
+
+ if index_exists?(TABLE, OLD_COLUMNS)
+ remove_concurrent_index(TABLE, OLD_COLUMNS)
+ end
+ end
+
+ def down
+ unless index_exists?(TABLE, OLD_COLUMNS)
+ add_concurrent_index(TABLE, OLD_COLUMNS)
+ end
+
+ if index_exists?(TABLE, NEW_COLUMNS)
+ remove_concurrent_index(TABLE, NEW_COLUMNS)
+ end
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 7afab18df08..a82270390f1 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20171114162227) do
+ActiveRecord::Schema.define(version: 20171121144800) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -382,7 +382,7 @@ ActiveRecord::Schema.define(version: 20171114162227) do
add_index "ci_pipelines", ["auto_canceled_by_id"], name: "index_ci_pipelines_on_auto_canceled_by_id", using: :btree
add_index "ci_pipelines", ["pipeline_schedule_id"], name: "index_ci_pipelines_on_pipeline_schedule_id", using: :btree
- add_index "ci_pipelines", ["project_id", "ref", "status"], name: "index_ci_pipelines_on_project_id_and_ref_and_status", using: :btree
+ add_index "ci_pipelines", ["project_id", "ref", "status", "id"], name: "index_ci_pipelines_on_project_id_and_ref_and_status_and_id", using: :btree
add_index "ci_pipelines", ["project_id", "sha"], name: "index_ci_pipelines_on_project_id_and_sha", using: :btree
add_index "ci_pipelines", ["project_id"], name: "index_ci_pipelines_on_project_id", using: :btree
add_index "ci_pipelines", ["status"], name: "index_ci_pipelines_on_status", using: :btree
diff --git a/doc/development/query_recorder.md b/doc/development/query_recorder.md
index e0127aaed4c..12e90101139 100644
--- a/doc/development/query_recorder.md
+++ b/doc/development/query_recorder.md
@@ -22,6 +22,52 @@ As an example you might create 5 issues in between counts, which would cause the
> **Note:** In some cases the query count might change slightly between runs for unrelated reasons. In this case you might need to test `exceed_query_limit(control_count + acceptable_change)`, but this should be avoided if possible.
+## Finding the source of the query
+
+It may be useful to identify the source of the queries by looking at the call backtrace.
+To enable this, run the specs with the `QUERY_RECORDER_DEBUG` environment variable set. For example:
+
+```
+QUERY_RECORDER_DEBUG=1 bundle exec rspec spec/requests/api/projects_spec.rb
+```
+
+This will log calls to QueryRecorder into the `test.log`. For example:
+
+```
+QueryRecorder SQL: SELECT COUNT(*) FROM "issues" WHERE "issues"."deleted_at" IS NULL AND "issues"."project_id" = $1 AND ("issues"."state" IN ('opened')) AND "issues"."confidential" = $2
+ --> /home/user/gitlab/gdk/gitlab/spec/support/query_recorder.rb:19:in `callback'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activesupport-4.2.8/lib/active_support/notifications/fanout.rb:127:in `finish'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activesupport-4.2.8/lib/active_support/notifications/fanout.rb:46:in `block in finish'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activesupport-4.2.8/lib/active_support/notifications/fanout.rb:46:in `each'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activesupport-4.2.8/lib/active_support/notifications/fanout.rb:46:in `finish'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activesupport-4.2.8/lib/active_support/notifications/instrumenter.rb:36:in `finish'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activesupport-4.2.8/lib/active_support/notifications/instrumenter.rb:25:in `instrument'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activerecord-4.2.8/lib/active_record/connection_adapters/abstract_adapter.rb:478:in `log'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activerecord-4.2.8/lib/active_record/connection_adapters/postgresql_adapter.rb:601:in `exec_cache'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activerecord-4.2.8/lib/active_record/connection_adapters/postgresql_adapter.rb:585:in `execute_and_clear'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activerecord-4.2.8/lib/active_record/connection_adapters/postgresql/database_statements.rb:160:in `exec_query'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activerecord-4.2.8/lib/active_record/connection_adapters/abstract/database_statements.rb:356:in `select'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activerecord-4.2.8/lib/active_record/connection_adapters/abstract/database_statements.rb:32:in `select_all'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activerecord-4.2.8/lib/active_record/connection_adapters/abstract/query_cache.rb:68:in `block in select_all'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activerecord-4.2.8/lib/active_record/connection_adapters/abstract/query_cache.rb:83:in `cache_sql'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activerecord-4.2.8/lib/active_record/connection_adapters/abstract/query_cache.rb:68:in `select_all'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activerecord-4.2.8/lib/active_record/relation/calculations.rb:270:in `execute_simple_calculation'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activerecord-4.2.8/lib/active_record/relation/calculations.rb:227:in `perform_calculation'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activerecord-4.2.8/lib/active_record/relation/calculations.rb:133:in `calculate'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activerecord-4.2.8/lib/active_record/relation/calculations.rb:48:in `count'
+ --> /home/user/gitlab/gdk/gitlab/app/services/base_count_service.rb:20:in `uncached_count'
+ --> /home/user/gitlab/gdk/gitlab/app/services/base_count_service.rb:12:in `block in count'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activesupport-4.2.8/lib/active_support/cache.rb:299:in `block in fetch'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activesupport-4.2.8/lib/active_support/cache.rb:585:in `block in save_block_result_to_cache'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activesupport-4.2.8/lib/active_support/cache.rb:547:in `block in instrument'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activesupport-4.2.8/lib/active_support/notifications.rb:166:in `instrument'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activesupport-4.2.8/lib/active_support/cache.rb:547:in `instrument'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activesupport-4.2.8/lib/active_support/cache.rb:584:in `save_block_result_to_cache'
+ --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activesupport-4.2.8/lib/active_support/cache.rb:299:in `fetch'
+ --> /home/user/gitlab/gdk/gitlab/app/services/base_count_service.rb:12:in `count'
+ --> /home/user/gitlab/gdk/gitlab/app/models/project.rb:1296:in `open_issues_count'
+```
+
## See also
- [Bullet](profiling.md#Bullet) For finding `N+1` query problems
diff --git a/doc/install/installation.md b/doc/install/installation.md
index 4efe911b778..88000f4c7a9 100644
--- a/doc/install/installation.md
+++ b/doc/install/installation.md
@@ -513,8 +513,7 @@ Check if GitLab and its environment are configured correctly:
### Compile GetText PO files
- sudo -u git -H bundle exec rake gettext:pack RAILS_ENV=production
- sudo -u git -H bundle exec rake gettext:po_to_json RAILS_ENV=production
+ sudo -u git -H bundle exec rake gettext:compile RAILS_ENV=production
### Compile Assets
diff --git a/doc/user/markdown.md b/doc/user/markdown.md
index 454988b9b80..fb61e360996 100644
--- a/doc/user/markdown.md
+++ b/doc/user/markdown.md
@@ -368,6 +368,37 @@ _Be advised that KaTeX only supports a [subset][katex-subset] of LaTeX._
>**Note:**
This also works for the asciidoctor `:stem: latexmath`. For details see the [asciidoctor user manual][asciidoctor-manual].
+### Mermaid
+
+> If this is not rendered correctly, see
+https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/user/markdown.md#mermaid
+
+It is possible to generate diagrams and flowcharts from text using [Mermaid][mermaid].
+
+In order to generate a diagram or flowchart, you should write your text inside the `mermaid` block.
+
+Example:
+
+ ```mermaid
+ graph TD;
+ A-->B;
+ A-->C;
+ B-->D;
+ C-->D;
+ ```
+
+Becomes:
+
+```mermaid
+graph TD;
+ A-->B;
+ A-->C;
+ B-->D;
+ C-->D;
+```
+
+For details see the [Mermaid official page][mermaid].
+
## Standard Markdown
### Headers
@@ -814,6 +845,7 @@ A link starting with a `/` is relative to the wiki root.
[^2]: This is my awesome footnote.
[markdown.md]: https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/user/markdown.md
+[mermaid]: https://mermaidjs.github.io/ "Mermaid website"
[rouge]: http://rouge.jneen.net/ "Rouge website"
[redcarpet]: https://github.com/vmg/redcarpet "Redcarpet website"
[katex]: https://github.com/Khan/KaTeX "KaTeX website"
diff --git a/lib/banzai/filter/mermaid_filter.rb b/lib/banzai/filter/mermaid_filter.rb
new file mode 100644
index 00000000000..b545b947a2c
--- /dev/null
+++ b/lib/banzai/filter/mermaid_filter.rb
@@ -0,0 +1,20 @@
+module Banzai
+ module Filter
+ class MermaidFilter < HTML::Pipeline::Filter
+ def call
+ doc.css('pre[lang="mermaid"]').add_class('mermaid')
+ doc.css('pre[lang="mermaid"]').add_class('js-render-mermaid')
+
+ # The `<code></code>` blocks are added in the lib/banzai/filter/syntax_highlight_filter.rb
+ # We want to keep context and consistency, so we the blocks are added for all filters.
+ # Details: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/15107/diffs?diff_id=7962900#note_45495859
+ doc.css('pre[lang="mermaid"]').each do |pre|
+ document = pre.at('code')
+ document.replace(document.content)
+ end
+
+ doc
+ end
+ end
+ end
+end
diff --git a/lib/banzai/filter/syntax_highlight_filter.rb b/lib/banzai/filter/syntax_highlight_filter.rb
index 7da565043d1..a79a0154846 100644
--- a/lib/banzai/filter/syntax_highlight_filter.rb
+++ b/lib/banzai/filter/syntax_highlight_filter.rb
@@ -14,23 +14,26 @@ module Banzai
end
def highlight_node(node)
- language = node.attr('lang')
code = node.text
- css_classes = "code highlight"
- lexer = lexer_for(language)
- lang = lexer.tag
-
- begin
- code = Rouge::Formatters::HTMLGitlab.format(lex(lexer, code), tag: lang)
-
- css_classes << " js-syntax-highlight #{lang}"
- rescue
- lang = nil
- # Gracefully handle syntax highlighter bugs/errors to ensure
- # users can still access an issue/comment/etc.
+ css_classes = 'code highlight js-syntax-highlight'
+ language = node.attr('lang')
+
+ if use_rouge?(language)
+ lexer = lexer_for(language)
+ language = lexer.tag
+
+ begin
+ code = Rouge::Formatters::HTMLGitlab.format(lex(lexer, code), tag: language)
+ css_classes << " #{language}"
+ rescue
+ # Gracefully handle syntax highlighter bugs/errors to ensure
+ # users can still access an issue/comment/etc.
+
+ language = nil
+ end
end
- highlighted = %(<pre class="#{css_classes}" lang="#{lang}" v-pre="true"><code>#{code}</code></pre>)
+ highlighted = %(<pre class="#{css_classes}" lang="#{language}" v-pre="true"><code>#{code}</code></pre>)
# Extracted to a method to measure it
replace_parent_pre_element(node, highlighted)
@@ -51,6 +54,10 @@ module Banzai
# Replace the parent `pre` element with the entire highlighted block
node.parent.replace(highlighted)
end
+
+ def use_rouge?(language)
+ %w(math mermaid plantuml).exclude?(language)
+ end
end
end
end
diff --git a/lib/banzai/pipeline/gfm_pipeline.rb b/lib/banzai/pipeline/gfm_pipeline.rb
index 3208abfc538..55874ad50a3 100644
--- a/lib/banzai/pipeline/gfm_pipeline.rb
+++ b/lib/banzai/pipeline/gfm_pipeline.rb
@@ -14,6 +14,7 @@ module Banzai
Filter::SyntaxHighlightFilter,
Filter::MathFilter,
+ Filter::MermaidFilter,
Filter::UploadLinkFilter,
Filter::VideoLinkFilter,
Filter::ImageLazyLoadFilter,
diff --git a/lib/gitlab/ee_compat_check.rb b/lib/gitlab/ee_compat_check.rb
index efc2e46d289..3a6165f504c 100644
--- a/lib/gitlab/ee_compat_check.rb
+++ b/lib/gitlab/ee_compat_check.rb
@@ -31,16 +31,22 @@ module Gitlab
def check
ensure_patches_dir
- generate_patch(ce_branch, ce_patch_full_path)
+ add_remote('canonical-ce', "#{DEFAULT_CE_PROJECT_URL}.git")
+ generate_patch(branch: ce_branch, patch_path: ce_patch_full_path, remote: 'canonical-ce')
ensure_ee_repo
Dir.chdir(ee_repo_dir) do
step("In the #{ee_repo_dir} directory")
+ add_remote('canonical-ee', EE_REPO_URL)
+
status = catch(:halt_check) do
ce_branch_compat_check!
delete_ee_branches_locally!
ee_branch_presence_check!
+
+ step("Checking out #{ee_branch_found}", %W[git checkout -b #{ee_branch_found} canonical-ee/#{ee_branch_found}])
+ generate_patch(branch: ee_branch_found, patch_path: ee_patch_full_path, remote: 'canonical-ee')
ee_branch_compat_check!
end
@@ -56,6 +62,13 @@ module Gitlab
private
+ def add_remote(name, url)
+ step(
+ "Adding the #{name} remote (#{url})",
+ %W[git remote add #{name} #{url}]
+ )
+ end
+
def ensure_ee_repo
if Dir.exist?(ee_repo_dir)
step("#{ee_repo_dir} already exists")
@@ -71,14 +84,14 @@ module Gitlab
FileUtils.mkdir_p(patches_dir)
end
- def generate_patch(branch, patch_path)
+ def generate_patch(branch:, patch_path:, remote:)
FileUtils.rm(patch_path, force: true)
- find_merge_base_with_master(branch: branch)
+ find_merge_base_with_master(branch: branch, master_remote: remote)
step(
- "Generating the patch against origin/master in #{patch_path}",
- %w[git diff --binary origin/master...HEAD]
+ "Generating the patch against #{remote}/master in #{patch_path}",
+ %W[git diff --binary #{remote}/master...#{branch}]
) do |output, status|
throw(:halt_check, :ko) unless status.zero?
@@ -89,21 +102,21 @@ module Gitlab
end
def ce_branch_compat_check!
- if check_patch(ce_patch_full_path).zero?
+ if check_patch(ce_patch_full_path, remote: 'canonical-ce').zero?
puts applies_cleanly_msg(ce_branch)
throw(:halt_check)
end
end
def ee_branch_presence_check!
- _, status = step("Fetching origin/#{ee_branch_prefix}", %W[git fetch origin #{ee_branch_prefix}])
+ _, status = step("Fetching origin/#{ee_branch_prefix}", %W[git fetch canonical-ee #{ee_branch_prefix}])
if status.zero?
@ee_branch_found = ee_branch_prefix
return
end
- _, status = step("Fetching origin/#{ee_branch_suffix}", %W[git fetch origin #{ee_branch_suffix}])
+ _, status = step("Fetching origin/#{ee_branch_suffix}", %W[git fetch canonical-ee #{ee_branch_suffix}])
if status.zero?
@ee_branch_found = ee_branch_suffix
@@ -116,11 +129,7 @@ module Gitlab
end
def ee_branch_compat_check!
- step("Checking out origin/#{ee_branch_found}", %W[git checkout -b #{ee_branch_found} FETCH_HEAD])
-
- generate_patch(ee_branch_found, ee_patch_full_path)
-
- unless check_patch(ee_patch_full_path).zero?
+ unless check_patch(ee_patch_full_path, remote: 'canonical-ee').zero?
puts
puts ee_branch_doesnt_apply_cleanly_msg
@@ -131,10 +140,9 @@ module Gitlab
puts applies_cleanly_msg(ee_branch_found)
end
- def check_patch(patch_path)
+ def check_patch(patch_path, remote:)
step("Checking out master", %w[git checkout master])
- step("Resetting to latest master", %w[git reset --hard origin/master])
- step("Fetching CE/#{ce_branch}", %W[git fetch #{ce_repo_url} #{ce_branch}])
+ step("Resetting to latest master", %W[git reset --hard #{remote}/master])
step(
"Checking if #{patch_path} applies cleanly to EE/master",
# Don't use --check here because it can result in a 0-exit status even
@@ -171,10 +179,10 @@ module Gitlab
command(%W[git branch --delete --force #{ee_branch_suffix}])
end
- def merge_base_found?
+ def merge_base_found?(master_remote:, branch:)
step(
- "Finding merge base with master",
- %w[git merge-base origin/master HEAD]
+ "Finding merge base with #{master_remote}/master",
+ %W[git merge-base #{master_remote}/master #{branch}]
) do |output, status|
if status.zero?
puts "Merge base was found: #{output}"
@@ -183,7 +191,7 @@ module Gitlab
end
end
- def find_merge_base_with_master(branch:)
+ def find_merge_base_with_master(branch:, master_remote:)
# Start with (Math.exp(3).to_i = 20) until (Math.exp(6).to_i = 403)
# In total we go (20 + 54 + 148 + 403 = 625) commits deeper
depth = 20
@@ -192,19 +200,19 @@ module Gitlab
depth += Math.exp(factor).to_i
# Repository is initially cloned with a depth of 20 so we need to fetch
# deeper in the case the branch has more than 20 commits on top of master
- fetch(branch: branch, depth: depth)
- fetch(branch: 'master', depth: depth, remote: DEFAULT_CE_PROJECT_URL)
+ fetch(branch: branch, depth: depth, remote: 'origin')
+ fetch(branch: 'master', depth: depth, remote: master_remote)
- merge_base_found?
+ merge_base_found?(master_remote: master_remote, branch: branch)
end
- raise "\n#{branch} is too far behind master, please rebase it!\n" unless success
+ raise "\n#{branch} is too far behind #{master_remote}/master, please rebase it!\n" unless success
end
def fetch(branch:, depth:, remote: 'origin')
step(
"Fetching deeper...",
- %W[git fetch --depth=#{depth} --prune #{remote} +refs/heads/#{branch}:refs/remotes/origin/#{branch}]
+ %W[git fetch --depth=#{depth} --prune #{remote} +refs/heads/#{branch}:refs/remotes/#{remote}/#{branch}]
) do |output, status|
raise "Fetch failed: #{output}" unless status.zero?
end
@@ -304,8 +312,8 @@ module Gitlab
1. Create a new branch from master and cherry-pick your CE commits
# In the EE repo
- $ git fetch origin
- $ git checkout -b #{ee_branch_prefix} origin/master
+ $ git fetch #{EE_REPO_URL} master
+ $ git checkout -b #{ee_branch_prefix} FETCH_HEAD
$ git fetch #{ce_repo_url} #{ce_branch}
$ git cherry-pick SHA # Repeat for all the commits you want to pick
@@ -314,10 +322,9 @@ module Gitlab
2. Apply your branch's patch to EE
# In the EE repo
- $ git fetch origin master
- $ git checkout -b #{ee_branch_prefix} origin/master
- $ wget #{patch_url}
- $ git apply --3way #{ce_patch_name}
+ $ git fetch #{EE_REPO_URL} master
+ $ git checkout -b #{ee_branch_prefix} FETCH_HEAD
+ $ wget #{patch_url} && git apply --3way #{ce_patch_name}
At this point you might have conflicts such as:
diff --git a/lib/gitlab/git/repository.rb b/lib/gitlab/git/repository.rb
index 3cb9b254e6e..dcca20c75ef 100644
--- a/lib/gitlab/git/repository.rb
+++ b/lib/gitlab/git/repository.rb
@@ -1058,12 +1058,11 @@ module Gitlab
end
def fetch_source_branch!(source_repository, source_branch, local_ref)
- with_repo_branch_commit(source_repository, source_branch) do |commit|
- if commit
- write_ref(local_ref, commit.sha)
- true
+ Gitlab::GitalyClient.migrate(:fetch_source_branch) do |is_enabled|
+ if is_enabled
+ gitaly_repository_client.fetch_source_branch(source_repository, source_branch, local_ref)
else
- false
+ rugged_fetch_source_branch(source_repository, source_branch, local_ref)
end
end
end
@@ -1216,6 +1215,17 @@ module Gitlab
private
+ def rugged_fetch_source_branch(source_repository, source_branch, local_ref)
+ with_repo_branch_commit(source_repository, source_branch) do |commit|
+ if commit
+ write_ref(local_ref, commit.sha)
+ true
+ else
+ false
+ end
+ end
+ end
+
# Gitaly note: JV: Trying to get rid of the 'filter' option so we can implement this with 'git'.
def branches_filter(filter: nil, sort_by: nil)
# n+1: https://gitlab.com/gitlab-org/gitlab-ce/issues/37464
diff --git a/lib/gitlab/gitaly_client.rb b/lib/gitlab/gitaly_client.rb
index 0b35a787e07..572f4c892f6 100644
--- a/lib/gitlab/gitaly_client.rb
+++ b/lib/gitlab/gitaly_client.rb
@@ -75,6 +75,10 @@ module Gitlab
address
end
+ def self.address_metadata(storage)
+ Base64.strict_encode64(JSON.dump({ storage => { 'address' => address(storage), 'token' => token(storage) } }))
+ end
+
# All Gitaly RPC call sites should use GitalyClient.call. This method
# makes sure that per-request authentication headers are set.
#
@@ -89,18 +93,19 @@ module Gitlab
# kwargs.merge(deadline: Time.now + 10)
# end
#
- def self.call(storage, service, rpc, request)
+ def self.call(storage, service, rpc, request, remote_storage: nil)
start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
enforce_gitaly_request_limits(:call)
- kwargs = request_kwargs(storage)
+ kwargs = request_kwargs(storage, remote_storage: remote_storage)
kwargs = yield(kwargs) if block_given?
+
stub(service, storage).__send__(rpc, request, kwargs) # rubocop:disable GitlabSecurity/PublicSend
ensure
self.query_time += Process.clock_gettime(Process::CLOCK_MONOTONIC) - start
end
- def self.request_kwargs(storage)
+ def self.request_kwargs(storage, remote_storage: nil)
encoded_token = Base64.strict_encode64(token(storage).to_s)
metadata = {
'authorization' => "Bearer #{encoded_token}",
@@ -110,6 +115,7 @@ module Gitlab
feature_stack = Thread.current[:gitaly_feature_stack]
feature = feature_stack && feature_stack[0]
metadata['call_site'] = feature.to_s if feature
+ metadata['gitaly-servers'] = address_metadata(remote_storage) if remote_storage
{ metadata: metadata }
end
diff --git a/lib/gitlab/gitaly_client/repository_service.rb b/lib/gitlab/gitaly_client/repository_service.rb
index cef692d3c2a..70cb16bd810 100644
--- a/lib/gitlab/gitaly_client/repository_service.rb
+++ b/lib/gitlab/gitaly_client/repository_service.rb
@@ -65,6 +65,25 @@ module Gitlab
response.value
end
+
+ def fetch_source_branch(source_repository, source_branch, local_ref)
+ request = Gitaly::FetchSourceBranchRequest.new(
+ repository: @gitaly_repo,
+ source_repository: source_repository.gitaly_repository,
+ source_branch: source_branch.b,
+ target_ref: local_ref.b
+ )
+
+ response = GitalyClient.call(
+ @storage,
+ :repository_service,
+ :fetch_source_branch,
+ request,
+ remote_storage: source_repository.storage
+ )
+
+ response.result
+ end
end
end
end
diff --git a/lib/gitlab/shell.rb b/lib/gitlab/shell.rb
index dc0184e4ad9..996d213fdb4 100644
--- a/lib/gitlab/shell.rb
+++ b/lib/gitlab/shell.rb
@@ -101,8 +101,7 @@ module Gitlab
#
# Gitaly migration: https://gitlab.com/gitlab-org/gitaly/issues/387
def import_repository(storage, name, url)
- # Timeout should be less than 900 ideally, to prevent the memory killer
- # to silently kill the process without knowing we are timing out here.
+ # The timeout ensures the subprocess won't hang forever
cmd = [gitlab_shell_projects_path, 'import-project',
storage, "#{name}.git", url, "#{Gitlab.config.gitlab_shell.git_timeout}"]
gitlab_shell_fast_execute_raise_error(cmd)
diff --git a/lib/milestone_array.rb b/lib/milestone_array.rb
new file mode 100644
index 00000000000..4ed8485b36a
--- /dev/null
+++ b/lib/milestone_array.rb
@@ -0,0 +1,40 @@
+module MilestoneArray
+ class << self
+ def sort(array, sort_method)
+ case sort_method
+ when 'due_date_asc'
+ sort_asc_nulls_last(array, 'due_date')
+ when 'due_date_desc'
+ sort_desc_nulls_last(array, 'due_date')
+ when 'start_date_asc'
+ sort_asc_nulls_last(array, 'start_date')
+ when 'start_date_desc'
+ sort_desc_nulls_last(array, 'start_date')
+ when 'name_asc'
+ sort_asc(array, 'title')
+ when 'name_desc'
+ sort_asc(array, 'title').reverse
+ else
+ array
+ end
+ end
+
+ private
+
+ def sort_asc_nulls_last(array, attribute)
+ attribute = attribute.to_sym
+
+ array.select(&attribute).sort_by(&attribute) + array.reject(&attribute)
+ end
+
+ def sort_desc_nulls_last(array, attribute)
+ attribute = attribute.to_sym
+
+ array.select(&attribute).sort_by(&attribute).reverse + array.reject(&attribute)
+ end
+
+ def sort_asc(array, attribute)
+ array.sort_by(&attribute.to_sym)
+ end
+ end
+end
diff --git a/lib/rouge/lexers/math.rb b/lib/rouge/lexers/math.rb
deleted file mode 100644
index 939b23a3421..00000000000
--- a/lib/rouge/lexers/math.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-module Rouge
- module Lexers
- class Math < PlainText
- title "A passthrough lexer used for LaTeX input"
- desc "PLEASE REFACTOR - this should be handled by SyntaxHighlightFilter"
- tag 'math'
- end
- end
-end
diff --git a/lib/rouge/lexers/plantuml.rb b/lib/rouge/lexers/plantuml.rb
deleted file mode 100644
index 63c461764fc..00000000000
--- a/lib/rouge/lexers/plantuml.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-module Rouge
- module Lexers
- class Plantuml < PlainText
- title "A passthrough lexer used for PlantUML input"
- desc "PLEASE REFACTOR - this should be handled by SyntaxHighlightFilter"
- tag 'plantuml'
- end
- end
-end
diff --git a/lib/tasks/gitlab/cleanup.rake b/lib/tasks/gitlab/cleanup.rake
index 91c74bfb6b4..301affc9522 100644
--- a/lib/tasks/gitlab/cleanup.rake
+++ b/lib/tasks/gitlab/cleanup.rake
@@ -59,7 +59,10 @@ namespace :gitlab do
.sub(%r{^/*}, '')
.chomp('.git')
.chomp('.wiki')
- next if Project.find_by_full_path(repo_with_namespace)
+
+ # TODO ignoring hashed repositories for now. But revisit to fully support
+ # possible orphaned hashed repos
+ next if repo_with_namespace.start_with?('@hashed/') || Project.find_by_full_path(repo_with_namespace)
new_path = path + move_suffix
puts path.inspect + ' -> ' + new_path.inspect
diff --git a/lib/tasks/gitlab/gitaly.rake b/lib/tasks/gitlab/gitaly.rake
index f2002d7a426..4d880c05f99 100644
--- a/lib/tasks/gitlab/gitaly.rake
+++ b/lib/tasks/gitlab/gitaly.rake
@@ -78,6 +78,8 @@ namespace :gitlab do
config[:auth] = { token: 'secret' } if Rails.env.test?
config[:'gitaly-ruby'] = { dir: File.join(Dir.pwd, 'ruby') } if gitaly_ruby
config[:'gitlab-shell'] = { dir: Gitlab.config.gitlab_shell.path }
+ config[:bin_dir] = Gitlab.config.gitaly.client_path
+
TOML.dump(config)
end
diff --git a/package.json b/package.json
index 21e04724441..16a6e45e820 100644
--- a/package.json
+++ b/package.json
@@ -22,6 +22,7 @@
"babel-plugin-transform-define": "^1.2.0",
"babel-preset-latest": "^6.24.0",
"babel-preset-stage-2": "^6.22.0",
+ "blackst0ne-mermaid": "^7.1.0-fixed",
"bootstrap-sass": "^3.3.6",
"brace-expansion": "^1.1.8",
"compression-webpack-plugin": "^1.0.0",
diff --git a/qa/qa.rb b/qa/qa.rb
index dc1cd9abc6a..06b6a76489b 100644
--- a/qa/qa.rb
+++ b/qa/qa.rb
@@ -49,6 +49,10 @@ module QA
module Sandbox
autoload :Prepare, 'qa/scenario/gitlab/sandbox/prepare'
end
+
+ module Admin
+ autoload :HashedStorage, 'qa/scenario/gitlab/admin/hashed_storage'
+ end
end
end
@@ -64,9 +68,11 @@ module QA
autoload :Entry, 'qa/page/main/entry'
autoload :Login, 'qa/page/main/login'
autoload :Menu, 'qa/page/main/menu'
+ autoload :OAuth, 'qa/page/main/oauth'
end
module Dashboard
+ autoload :Projects, 'qa/page/dashboard/projects'
autoload :Groups, 'qa/page/dashboard/groups'
end
@@ -82,6 +88,7 @@ module QA
module Admin
autoload :Menu, 'qa/page/admin/menu'
+ autoload :Settings, 'qa/page/admin/settings'
end
module Mattermost
@@ -98,6 +105,13 @@ module QA
end
##
+ # Classes describing shell interaction with GitLab
+ #
+ module Shell
+ autoload :Omnibus, 'qa/shell/omnibus'
+ end
+
+ ##
# Classes that make it possible to execute features tests.
#
module Specs
diff --git a/qa/qa/page/admin/menu.rb b/qa/qa/page/admin/menu.rb
index baa06b1c75e..dd289ffe269 100644
--- a/qa/qa/page/admin/menu.rb
+++ b/qa/qa/page/admin/menu.rb
@@ -3,8 +3,11 @@ module QA
module Admin
class Menu < Page::Base
def go_to_license
- link = find_link 'License'
- link.click
+ click_link 'License'
+ end
+
+ def go_to_settings
+ click_link 'Settings'
end
end
end
diff --git a/qa/qa/page/admin/settings.rb b/qa/qa/page/admin/settings.rb
new file mode 100644
index 00000000000..39e2f2062ad
--- /dev/null
+++ b/qa/qa/page/admin/settings.rb
@@ -0,0 +1,18 @@
+module QA
+ module Page
+ module Admin
+ class Settings < Page::Base
+ def enable_hashed_storage
+ scroll_to 'legend', text: 'Repository Storage'
+ check 'Create new projects using hashed storage paths'
+ end
+
+ def save_settings
+ scroll_to '.form-actions' do
+ click_button 'Save'
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/page/base.rb b/qa/qa/page/base.rb
index bdddfb877c5..f9a93ef051e 100644
--- a/qa/qa/page/base.rb
+++ b/qa/qa/page/base.rb
@@ -1,3 +1,5 @@
+require 'capybara/dsl'
+
module QA
module Page
class Base
@@ -7,6 +9,21 @@ module QA
def refresh
visit current_url
end
+
+ def scroll_to(selector, text: nil)
+ page.execute_script <<~JS
+ var elements = Array.from(document.querySelectorAll('#{selector}'));
+ var text = '#{text}';
+
+ if (text.length > 0) {
+ elements.find(e => e.textContent === text).scrollIntoView();
+ } else {
+ elements[0].scrollIntoView();
+ }
+ JS
+
+ page.within(selector) { yield } if block_given?
+ end
end
end
end
diff --git a/qa/qa/page/dashboard/projects.rb b/qa/qa/page/dashboard/projects.rb
new file mode 100644
index 00000000000..7ed27da6d89
--- /dev/null
+++ b/qa/qa/page/dashboard/projects.rb
@@ -0,0 +1,11 @@
+module QA
+ module Page
+ module Dashboard
+ class Projects < Page::Base
+ def go_to_project(name)
+ find_link(text: name).click
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/page/main/menu.rb b/qa/qa/page/main/menu.rb
index 178c5ea6930..bc9c4ec1215 100644
--- a/qa/qa/page/main/menu.rb
+++ b/qa/qa/page/main/menu.rb
@@ -7,7 +7,10 @@ module QA
end
def go_to_projects
- within_top_menu { click_link 'Projects' }
+ within_top_menu do
+ click_link 'Projects'
+ click_link 'Your projects'
+ end
end
def go_to_admin_area
diff --git a/qa/qa/page/main/oauth.rb b/qa/qa/page/main/oauth.rb
new file mode 100644
index 00000000000..e746cff0a80
--- /dev/null
+++ b/qa/qa/page/main/oauth.rb
@@ -0,0 +1,15 @@
+module QA
+ module Page
+ module Main
+ class OAuth < Page::Base
+ def needs_authorization?
+ page.current_url.include?('/oauth')
+ end
+
+ def authorize!
+ click_button 'Authorize'
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/page/project/show.rb b/qa/qa/page/project/show.rb
index 68d9597c4d2..3b2bac84f3f 100644
--- a/qa/qa/page/project/show.rb
+++ b/qa/qa/page/project/show.rb
@@ -14,6 +14,10 @@ module QA
find('#project_clone').value
end
+ def project_name
+ find('.project-title').text
+ end
+
def wait_for_push
sleep 5
end
diff --git a/qa/qa/scenario/bootable.rb b/qa/qa/scenario/bootable.rb
index cf8996cd597..d6de4d404c8 100644
--- a/qa/qa/scenario/bootable.rb
+++ b/qa/qa/scenario/bootable.rb
@@ -28,7 +28,7 @@ module QA
private
- def attribute(name, arg, desc)
+ def attribute(name, arg, desc = '')
options.push(Option.new(name, arg, desc))
end
diff --git a/qa/qa/scenario/gitlab/admin/hashed_storage.rb b/qa/qa/scenario/gitlab/admin/hashed_storage.rb
new file mode 100644
index 00000000000..ac2cd549829
--- /dev/null
+++ b/qa/qa/scenario/gitlab/admin/hashed_storage.rb
@@ -0,0 +1,25 @@
+module QA
+ module Scenario
+ module Gitlab
+ module Admin
+ class HashedStorage < Scenario::Template
+ def perform(*traits)
+ raise ArgumentError unless traits.include?(:enabled)
+
+ Page::Main::Entry.act { visit_login_page }
+ Page::Main::Login.act { sign_in_using_credentials }
+ Page::Main::Menu.act { go_to_admin_area }
+ Page::Admin::Menu.act { go_to_settings }
+
+ Page::Admin::Settings.act do
+ enable_hashed_storage
+ save_settings
+ end
+
+ QA::Page::Main::Menu.act { sign_out }
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/shell/omnibus.rb b/qa/qa/shell/omnibus.rb
new file mode 100644
index 00000000000..6b3628d3109
--- /dev/null
+++ b/qa/qa/shell/omnibus.rb
@@ -0,0 +1,39 @@
+require 'open3'
+
+module QA
+ module Shell
+ class Omnibus
+ include Scenario::Actable
+
+ def initialize(container)
+ @name = container
+ end
+
+ def gitlab_ctl(command, input: nil)
+ if input.nil?
+ shell "docker exec #{@name} gitlab-ctl #{command}"
+ else
+ shell "docker exec #{@name} bash -c '#{input} | gitlab-ctl #{command}'"
+ end
+ end
+
+ private
+
+ ##
+ # TODO, make it possible to use generic QA framework classes
+ # as a library - gitlab-org/gitlab-qa#94
+ #
+ def shell(command)
+ puts "Executing `#{command}`"
+
+ Open3.popen2e(command) do |_in, out, wait|
+ out.each { |line| puts line }
+
+ if wait.value.exited? && wait.value.exitstatus.nonzero?
+ raise "Docker command `#{command}` failed!"
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/spec/features/groups/milestones_sorting_spec.rb b/spec/features/groups/milestones_sorting_spec.rb
new file mode 100644
index 00000000000..a0fe40cf1d3
--- /dev/null
+++ b/spec/features/groups/milestones_sorting_spec.rb
@@ -0,0 +1,51 @@
+require 'spec_helper'
+
+feature 'Milestones sorting', :js do
+ let(:group) { create(:group) }
+ let!(:project) { create(:project_empty_repo, group: group) }
+ let!(:other_project) { create(:project_empty_repo, group: group) }
+ let!(:project_milestone1) { create(:milestone, project: project, title: 'v1.0', due_date: 10.days.from_now) }
+ let!(:other_project_milestone1) { create(:milestone, project: other_project, title: 'v1.0', due_date: 10.days.from_now) }
+ let!(:project_milestone2) { create(:milestone, project: project, title: 'v2.0', due_date: 5.days.from_now) }
+ let!(:other_project_milestone2) { create(:milestone, project: other_project, title: 'v2.0', due_date: 5.days.from_now) }
+ let!(:group_milestone) { create(:milestone, group: group, title: 'v3.0', due_date: 7.days.from_now) }
+ let(:user) { create(:group_member, :master, user: create(:user), group: group ).user }
+
+ before do
+ sign_in(user)
+ end
+
+ scenario 'visit group milestones and sort by due_date_asc' do
+ visit group_milestones_path(group)
+
+ expect(page).to have_button('Due soon')
+
+ # assert default sorting
+ within '.milestones' do
+ expect(page.all('ul.content-list > li').first.text).to include('v2.0')
+ expect(page.all('ul.content-list > li')[1].text).to include('v3.0')
+ expect(page.all('ul.content-list > li').last.text).to include('v1.0')
+ end
+
+ click_button 'Due soon'
+
+ sort_options = find('ul.dropdown-menu-sort li').all('a').collect(&:text)
+
+ expect(sort_options[0]).to eq('Due soon')
+ expect(sort_options[1]).to eq('Due later')
+ expect(sort_options[2]).to eq('Start soon')
+ expect(sort_options[3]).to eq('Start later')
+ expect(sort_options[4]).to eq('Name, ascending')
+ expect(sort_options[5]).to eq('Name, descending')
+
+ click_link 'Due later'
+
+ expect(page).to have_button('Due later')
+
+ within '.milestones' do
+ expect(page.all('ul.content-list > li').first.text).to include('v1.0')
+ expect(page.all('ul.content-list > li')[1].text).to include('v3.0')
+ expect(page.all('ul.content-list > li').last.text).to include('v2.0')
+ end
+ end
+end
diff --git a/spec/features/issuables/shortcuts_issuable_spec.rb b/spec/features/issuables/shortcuts_issuable_spec.rb
new file mode 100644
index 00000000000..e25fd1a6249
--- /dev/null
+++ b/spec/features/issuables/shortcuts_issuable_spec.rb
@@ -0,0 +1,46 @@
+require 'spec_helper'
+
+feature 'Blob shortcuts', :js do
+ let(:user) { create(:user) }
+ let(:project) { create(:project, :public, :repository) }
+ let(:issue) { create(:issue, project: project, author: user) }
+ let(:merge_request) { create(:merge_request, source_project: project) }
+ let(:note_text) { 'I got this!' }
+
+ before do
+ project.add_developer(user)
+ sign_in(user)
+ end
+
+ describe 'pressing "r"' do
+ describe 'On an Issue' do
+ before do
+ create(:note, noteable: issue, project: project, note: note_text)
+ visit project_issue_path(project, issue)
+ wait_for_requests
+ end
+
+ it 'quotes the selected text' do
+ select_element('.note-text')
+ find('body').native.send_key('r')
+
+ expect(find('.js-main-target-form .js-vue-comment-form').value).to include(note_text)
+ end
+ end
+
+ describe 'On a Merge Request' do
+ before do
+ create(:note, noteable: merge_request, project: project, note: note_text)
+ visit project_merge_request_path(project, merge_request)
+ wait_for_requests
+ end
+
+ it 'quotes the selected text' do
+ select_element('.note-text')
+ find('body').native.send_key('r')
+
+ expect(find('.js-main-target-form #note_note').value).to include(note_text)
+ end
+ end
+ end
+end
diff --git a/spec/features/markdown_spec.rb b/spec/features/markdown_spec.rb
index b70d3060f05..cc1b187ff54 100644
--- a/spec/features/markdown_spec.rb
+++ b/spec/features/markdown_spec.rb
@@ -69,6 +69,12 @@ describe 'GitLab Markdown' do
end
end
+ it 'parses mermaid code block' do
+ aggregate_failures do
+ expect(doc).to have_selector('pre.code.js-render-mermaid')
+ end
+ end
+
it 'parses strikethroughs' do
expect(doc).to have_selector(%{del:contains("and this text doesn't")})
end
diff --git a/spec/fixtures/markdown.md.erb b/spec/fixtures/markdown.md.erb
index 4f46e40ce7a..638cd8b07c8 100644
--- a/spec/fixtures/markdown.md.erb
+++ b/spec/fixtures/markdown.md.erb
@@ -268,3 +268,37 @@ However the wrapping tags can not be mixed as such -
### Videos
![My Video](/assets/videos/gitlab-demo.mp4)
+
+### Mermaid
+
+> If this is not rendered correctly, see
+https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/user/markdown.md#mermaid
+
+It is possible to generate diagrams and flowcharts from text using [Mermaid][mermaid].
+
+In order to generate a diagram or flowchart, you should write your text inside the `mermaid` block.
+
+Example:
+
+ ```mermaid
+ graph TD;
+ A-->B;
+ A-->C;
+ B-->D;
+ C-->D;
+ ```
+
+Becomes:
+
+```mermaid
+graph TD;
+ A-->B;
+ A-->C;
+ B-->D;
+ C-->D;
+```
+
+For details see the [Mermaid official page][mermaid].
+
+[mermaid]: https://mermaidjs.github.io/ "Mermaid website"
+
diff --git a/spec/helpers/search_helper_spec.rb b/spec/helpers/search_helper_spec.rb
index ab647401e14..6c9a7febf14 100644
--- a/spec/helpers/search_helper_spec.rb
+++ b/spec/helpers/search_helper_spec.rb
@@ -102,6 +102,10 @@ describe SearchHelper do
it 'includes project base-endpoint' do
expect(search_filter_input_options('')[:data]['base-endpoint']).to eq(project_path(@project))
end
+
+ it 'includes autocomplete=off flag' do
+ expect(search_filter_input_options('')[:autocomplete]).to eq('off')
+ end
end
context 'group' do
diff --git a/spec/javascripts/notes_spec.js b/spec/javascripts/notes_spec.js
index 928a4b461cc..63abac222c4 100644
--- a/spec/javascripts/notes_spec.js
+++ b/spec/javascripts/notes_spec.js
@@ -4,8 +4,9 @@
import 'autosize';
import '~/gl_form';
import '~/lib/utils/text_utility';
-import '~/render_gfm';
import '~/render_math';
+import '~/render_mermaid';
+import '~/render_gfm';
import '~/notes';
(function() {
diff --git a/spec/lib/banzai/filter/mermaid_filter_spec.rb b/spec/lib/banzai/filter/mermaid_filter_spec.rb
new file mode 100644
index 00000000000..532d25e121d
--- /dev/null
+++ b/spec/lib/banzai/filter/mermaid_filter_spec.rb
@@ -0,0 +1,12 @@
+require 'spec_helper'
+
+describe Banzai::Filter::MermaidFilter do
+ include FilterSpecHelper
+
+ it 'adds `js-render-mermaid` class to the `pre` tag' do
+ doc = filter("<pre class='code highlight js-syntax-highlight mermaid' lang='mermaid' v-pre='true'><code>graph TD;\n A--&gt;B;\n</code></pre>")
+ result = doc.xpath('descendant-or-self::pre').first
+
+ expect(result[:class]).to include('js-render-mermaid')
+ end
+end
diff --git a/spec/lib/banzai/filter/syntax_highlight_filter_spec.rb b/spec/lib/banzai/filter/syntax_highlight_filter_spec.rb
index 5a23e0e70cc..9f2efa05a01 100644
--- a/spec/lib/banzai/filter/syntax_highlight_filter_spec.rb
+++ b/spec/lib/banzai/filter/syntax_highlight_filter_spec.rb
@@ -31,7 +31,7 @@ describe Banzai::Filter::SyntaxHighlightFilter do
it "highlights as plaintext" do
result = filter('<pre><code lang="ruby">This is a test</code></pre>')
- expect(result.to_html).to eq('<pre class="code highlight" lang="" v-pre="true"><code>This is a test</code></pre>')
+ expect(result.to_html).to eq('<pre class="code highlight js-syntax-highlight" lang="" v-pre="true"><code>This is a test</code></pre>')
end
end
end
diff --git a/spec/lib/milestone_array_spec.rb b/spec/lib/milestone_array_spec.rb
new file mode 100644
index 00000000000..df91677b925
--- /dev/null
+++ b/spec/lib/milestone_array_spec.rb
@@ -0,0 +1,34 @@
+require 'spec_helper'
+
+describe MilestoneArray do
+ let(:object1) { instance_double("BirdMilestone", due_date: Time.now, start_date: Time.now - 15.days, title: 'v2.0') }
+ let(:object2) { instance_double("CatMilestone", due_date: Time.now - 1.day, start_date: nil, title: 'v1.0') }
+ let(:object3) { instance_double("DogMilestone", due_date: nil, start_date: Time.now - 30.days, title: 'v3.0') }
+ let(:array) { [object1, object3, object2] }
+
+ describe '#sort' do
+ it 'reorders array with due date in ascending order with nulls last' do
+ expect(described_class.sort(array, 'due_date_asc')).to eq([object2, object1, object3])
+ end
+
+ it 'reorders array with due date in desc order with nulls last' do
+ expect(described_class.sort(array, 'due_date_desc')).to eq([object1, object2, object3])
+ end
+
+ it 'reorders array with start date in ascending order with nulls last' do
+ expect(described_class.sort(array, 'start_date_asc')).to eq([object3, object1, object2])
+ end
+
+ it 'reorders array with start date in descending order with nulls last' do
+ expect(described_class.sort(array, 'start_date_desc')).to eq([object1, object3, object2])
+ end
+
+ it 'reorders array with title in ascending order' do
+ expect(described_class.sort(array, 'name_asc')).to eq([object2, object1, object3])
+ end
+
+ it 'reorders array with title in descending order' do
+ expect(described_class.sort(array, 'name_desc')).to eq([object3, object1, object2])
+ end
+ end
+end
diff --git a/spec/models/ci/pipeline_spec.rb b/spec/models/ci/pipeline_spec.rb
index b89b0e555d9..3a19a0753e2 100644
--- a/spec/models/ci/pipeline_spec.rb
+++ b/spec/models/ci/pipeline_spec.rb
@@ -1502,6 +1502,10 @@ describe Ci::Pipeline, :mailer do
create(:ci_build, :success, :artifacts, pipeline: pipeline)
end
+ it 'returns an Array' do
+ expect(pipeline.latest_builds_with_artifacts).to be_an_instance_of(Array)
+ end
+
it 'returns the latest builds' do
expect(pipeline.latest_builds_with_artifacts).to eq([build])
end
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb
index 8a6aa767ce6..e9e6abb0d5f 100644
--- a/spec/models/repository_spec.rb
+++ b/spec/models/repository_spec.rb
@@ -1166,6 +1166,31 @@ describe Repository do
end
end
+ describe '#branch_exists?' do
+ it 'uses branch_names' do
+ allow(repository).to receive(:branch_names).and_return(['foobar'])
+
+ expect(repository.branch_exists?('foobar')).to eq(true)
+ expect(repository.branch_exists?('master')).to eq(false)
+ end
+ end
+
+ describe '#branch_names', :use_clean_rails_memory_store_caching do
+ let(:fake_branch_names) { ['foobar'] }
+
+ it 'gets cached across Repository instances' do
+ allow(repository.raw_repository).to receive(:branch_names).once.and_return(fake_branch_names)
+
+ expect(repository.branch_names).to eq(fake_branch_names)
+
+ fresh_repository = Project.find(project.id).repository
+ expect(fresh_repository.object_id).not_to eq(repository.object_id)
+
+ expect(fresh_repository.raw_repository).not_to receive(:branch_names)
+ expect(fresh_repository.branch_names).to eq(fake_branch_names)
+ end
+ end
+
describe '#update_autocrlf_option' do
describe 'when autocrlf is not already set to :input' do
before do
diff --git a/spec/requests/api/merge_requests_spec.rb b/spec/requests/api/merge_requests_spec.rb
index a928ba79a4d..91616da6d9a 100644
--- a/spec/requests/api/merge_requests_spec.rb
+++ b/spec/requests/api/merge_requests_spec.rb
@@ -172,15 +172,15 @@ describe API::MergeRequests do
context "when authenticated" do
it 'avoids N+1 queries' do
- control_count = ActiveRecord::QueryRecorder.new do
+ control = ActiveRecord::QueryRecorder.new do
get api("/projects/#{project.id}/merge_requests", user)
- end.count
+ end
create(:merge_request, state: 'closed', milestone: milestone1, author: user, assignee: user, source_project: project, target_project: project, title: "Test", created_at: base_time)
expect do
get api("/projects/#{project.id}/merge_requests", user)
- end.not_to exceed_query_limit(control_count)
+ end.not_to exceed_query_limit(control)
end
it "returns an array of all merge_requests" do
@@ -628,7 +628,7 @@ describe API::MergeRequests do
context 'forked projects' do
let!(:user2) { create(:user) }
- let!(:forked_project) { fork_project(project, user2) }
+ let!(:forked_project) { fork_project(project, user2, repository: true) }
let!(:unrelated_project) { create(:project, namespace: create(:user).namespace, creator_id: user2.id) }
before do
diff --git a/spec/requests/api/v3/merge_requests_spec.rb b/spec/requests/api/v3/merge_requests_spec.rb
index 91897e5ee01..2e2b9449429 100644
--- a/spec/requests/api/v3/merge_requests_spec.rb
+++ b/spec/requests/api/v3/merge_requests_spec.rb
@@ -314,7 +314,7 @@ describe API::MergeRequests do
context 'forked projects' do
let!(:user2) { create(:user) }
- let!(:forked_project) { fork_project(project, user2) }
+ let!(:forked_project) { fork_project(project, user2, repository: true) }
let!(:unrelated_project) { create(:project, namespace: create(:user).namespace, creator_id: user2.id) }
before do
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 7c8331f6c60..6310ea1b52b 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -50,6 +50,7 @@ RSpec.configure do |config|
config.include SearchHelpers, type: :feature
config.include CookieHelper, :js
config.include InputHelper, :js
+ config.include SelectionHelper, :js
config.include InspectRequests, :js
config.include WaitForRequests, :js
config.include LiveDebugger, :js
diff --git a/spec/support/query_recorder.rb b/spec/support/query_recorder.rb
index ba0b805caad..369775db462 100644
--- a/spec/support/query_recorder.rb
+++ b/spec/support/query_recorder.rb
@@ -8,7 +8,14 @@ module ActiveRecord
ActiveSupport::Notifications.subscribed(method(:callback), 'sql.active_record', &block)
end
+ def show_backtrace(values)
+ Rails.logger.debug("QueryRecorder SQL: #{values[:sql]}")
+ caller.each { |line| Rails.logger.debug(" --> #{line}") }
+ end
+
def callback(name, start, finish, message_id, values)
+ show_backtrace(values) if ENV['QUERY_RECORDER_DEBUG']
+
if values[:name]&.include?("CACHE")
@cached << values[:sql]
elsif !values[:name]&.include?("SCHEMA")
@@ -69,10 +76,17 @@ RSpec::Matchers.define :exceed_query_limit do |expected|
@recorder.count
end
+ def count_queries(queries)
+ queries.each_with_object(Hash.new(0)) { |query, counts| counts[query] += 1 }
+ end
+
def log_message
if expected.is_a?(ActiveRecord::QueryRecorder)
- extra_queries = (expected.log - @recorder.log).join("\n\n")
- "Extra queries: \n\n #{extra_queries}"
+ counts = count_queries(expected.log)
+ extra_queries = @recorder.log.reject { |query| counts[query] -= 1 unless counts[query].zero? }
+ extra_queries_display = count_queries(extra_queries).map { |query, count| "[#{count}] #{query}" }
+
+ (['Extra queries:'] + extra_queries_display).join("\n\n")
else
@recorder.log_message
end
diff --git a/spec/support/selection_helper.rb b/spec/support/selection_helper.rb
new file mode 100644
index 00000000000..b4725b137b2
--- /dev/null
+++ b/spec/support/selection_helper.rb
@@ -0,0 +1,6 @@
+module SelectionHelper
+ def select_element(selector)
+ find(selector)
+ execute_script("let range = document.createRange(); let sel = window.getSelection(); range.selectNodeContents(document.querySelector('#{selector}')); sel.addRange(range);")
+ end
+end
diff --git a/spec/tasks/gitlab/cleanup_rake_spec.rb b/spec/tasks/gitlab/cleanup_rake_spec.rb
new file mode 100644
index 00000000000..641eccfd334
--- /dev/null
+++ b/spec/tasks/gitlab/cleanup_rake_spec.rb
@@ -0,0 +1,41 @@
+require 'rake_helper'
+
+describe 'gitlab:cleanup rake tasks' do
+ before do
+ Rake.application.rake_require 'tasks/gitlab/cleanup'
+ end
+
+ context 'cleanup repositories' do
+ let(:gitaly_address) { Gitlab.config.repositories.storages.default.gitaly_address }
+ let(:storages) do
+ {
+ 'default' => { 'path' => Settings.absolute('tmp/tests/default_storage'), 'gitaly_address' => gitaly_address }
+ }
+ end
+
+ before do
+ FileUtils.mkdir(Settings.absolute('tmp/tests/default_storage'))
+ allow(Gitlab.config.repositories).to receive(:storages).and_return(storages)
+ end
+
+ after do
+ FileUtils.rm_rf(Settings.absolute('tmp/tests/default_storage'))
+ end
+
+ it 'moves it to an orphaned path' do
+ FileUtils.mkdir_p(Settings.absolute('tmp/tests/default_storage/broken/project.git'))
+ run_rake_task('gitlab:cleanup:repos')
+ repo_list = Dir['tmp/tests/default_storage/broken/*']
+
+ expect(repo_list.first).to include('+orphaned+')
+ end
+
+ it 'ignores @hashed repos' do
+ FileUtils.mkdir_p(Settings.absolute('tmp/tests/default_storage/@hashed/12/34/5678.git'))
+
+ run_rake_task('gitlab:cleanup:repos')
+
+ expect(Dir.exist?(Settings.absolute('tmp/tests/default_storage/@hashed/12/34/5678.git'))).to be_truthy
+ end
+ end
+end
diff --git a/spec/tasks/gitlab/gitaly_rake_spec.rb b/spec/tasks/gitlab/gitaly_rake_spec.rb
index a51374e2645..6aba86fdc3c 100644
--- a/spec/tasks/gitlab/gitaly_rake_spec.rb
+++ b/spec/tasks/gitlab/gitaly_rake_spec.rb
@@ -112,6 +112,7 @@ describe 'gitlab:gitaly namespace rake task' do
expected_output = <<~TOML
# Gitaly storage configuration generated from #{Gitlab.config.source} on #{Time.current.to_s(:long)}
# This is in TOML format suitable for use in Gitaly's config.toml file.
+ bin_dir = "tmp/tests/gitaly"
socket_path = "/path/to/my.socket"
[gitlab-shell]
dir = "#{Gitlab.config.gitlab_shell.path}"
diff --git a/spec/uploaders/file_uploader_spec.rb b/spec/uploaders/file_uploader_spec.rb
index f52b2bab05b..fd195d6f9b8 100644
--- a/spec/uploaders/file_uploader_spec.rb
+++ b/spec/uploaders/file_uploader_spec.rb
@@ -28,25 +28,51 @@ describe FileUploader do
end
context 'hashed storage' do
- let(:project) { build_stubbed(:project, :hashed) }
+ context 'when rolled out attachments' do
+ let(:project) { build_stubbed(:project, :hashed) }
- describe '.absolute_path' do
- it 'returns the correct absolute path by building it dynamically' do
- upload = double(model: project, path: 'secret/foo.jpg')
+ describe '.absolute_path' do
+ it 'returns the correct absolute path by building it dynamically' do
+ upload = double(model: project, path: 'secret/foo.jpg')
- dynamic_segment = project.disk_path
+ dynamic_segment = project.disk_path
- expect(described_class.absolute_path(upload))
- .to end_with("#{dynamic_segment}/secret/foo.jpg")
+ expect(described_class.absolute_path(upload))
+ .to end_with("#{dynamic_segment}/secret/foo.jpg")
+ end
+ end
+
+ describe "#store_dir" do
+ it "stores in the namespace path" do
+ uploader = described_class.new(project)
+
+ expect(uploader.store_dir).to include(project.disk_path)
+ expect(uploader.store_dir).not_to include("system")
+ end
end
end
- describe "#store_dir" do
- it "stores in the namespace path" do
- uploader = described_class.new(project)
+ context 'when only repositories are rolled out' do
+ let(:project) { build_stubbed(:project, storage_version: Project::HASHED_STORAGE_FEATURES[:repository]) }
- expect(uploader.store_dir).to include(project.disk_path)
- expect(uploader.store_dir).not_to include("system")
+ describe '.absolute_path' do
+ it 'returns the correct absolute path by building it dynamically' do
+ upload = double(model: project, path: 'secret/foo.jpg')
+
+ dynamic_segment = project.full_path
+
+ expect(described_class.absolute_path(upload))
+ .to end_with("#{dynamic_segment}/secret/foo.jpg")
+ end
+ end
+
+ describe "#store_dir" do
+ it "stores in the namespace path" do
+ uploader = described_class.new(project)
+
+ expect(uploader.store_dir).to include(project.full_path)
+ expect(uploader.store_dir).not_to include("system")
+ end
end
end
end
diff --git a/yarn.lock b/yarn.lock
index a73aebbf180..9bdf5e0f64b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -928,6 +928,17 @@ binary-extensions@^1.0.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0"
+blackst0ne-mermaid@^7.1.0-fixed:
+ version "7.1.0-fixed"
+ resolved "https://registry.yarnpkg.com/blackst0ne-mermaid/-/blackst0ne-mermaid-7.1.0-fixed.tgz#3707b3a113d78610e3068e18a588f46b4688de49"
+ dependencies:
+ d3 "3.5.17"
+ dagre-d3-renderer "^0.4.24"
+ dagre-layout "^0.8.0"
+ he "^1.1.1"
+ lodash "^4.17.4"
+ moment "^2.18.1"
+
blob@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921"
@@ -1644,6 +1655,10 @@ custom-event@~1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425"
+d3@3.5.17:
+ version "3.5.17"
+ resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8"
+
d3@^3.5.11:
version "3.5.11"
resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.11.tgz#d130750eed0554db70e8432102f920a12407b69c"
@@ -1660,6 +1675,22 @@ d@^0.1.1:
dependencies:
es5-ext "~0.10.2"
+dagre-d3-renderer@^0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/dagre-d3-renderer/-/dagre-d3-renderer-0.4.24.tgz#b36ce2fe4ea20de43e7698627c6ede2a9f15ec45"
+ dependencies:
+ d3 "3.5.17"
+ dagre-layout "^0.8.0"
+ graphlib "^2.1.1"
+ lodash "^4.17.4"
+
+dagre-layout@^0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/dagre-layout/-/dagre-layout-0.8.0.tgz#7147b6afb655602f855158dfea171db9aa98d4ff"
+ dependencies:
+ graphlib "^2.1.1"
+ lodash "^4.17.4"
+
dashdash@^1.12.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
@@ -2858,6 +2889,12 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
version "1.0.1"
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+graphlib@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/graphlib/-/graphlib-2.1.1.tgz#42352c52ba2f4d035cb566eb91f7395f76ebc951"
+ dependencies:
+ lodash "^4.11.1"
+
gzip-size@3.0.0, gzip-size@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520"
@@ -2952,7 +2989,7 @@ hawk@~3.1.3:
hoek "2.x.x"
sntp "1.x.x"
-he@^1.1.0:
+he@^1.1.0, he@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
@@ -3948,7 +3985,7 @@ lodash@^3.8.0:
version "3.10.1"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
-lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.0:
+lodash@^4.0.0, lodash@^4.11.1, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.0:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
@@ -4162,6 +4199,10 @@ moment@2.x:
version "2.17.1"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.17.1.tgz#fed9506063f36b10f066c8b59a144d7faebe1d82"
+moment@^2.18.1:
+ version "2.19.2"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.19.2.tgz#8a7f774c95a64550b4c7ebd496683908f9419dbe"
+
monaco-editor@0.10.0:
version "0.10.0"
resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.10.0.tgz#6604932585fe9c1f993f000a503d0d20fbe5896a"