From dbe389e2f0d4bb91c7b3927bab812206229fdf24 Mon Sep 17 00:00:00 2001 From: Praveen Arimbrathodiyil Date: Thu, 3 Nov 2016 12:29:30 +0530 Subject: [PATCH] New upstream version 8.13.3+dfsg1 --- .csscomb.json | 2 +- .flayignore | 1 + .gitattributes | 2 +- .gitlab-ci.yml | 81 +- .../merge_request_templates/Documentation.md | 2 +- .rubocop.yml | 8 + .rubocop_todo.yml | 170 ++- .scss-lint.yml | 6 +- .vagrant_enabled | 0 CHANGELOG => CHANGELOG.md | 643 +++++++-- CONTRIBUTING.md | 49 +- GITLAB_SHELL_VERSION | 2 +- GITLAB_WORKHORSE_VERSION | 2 +- Gemfile | 65 +- Gemfile.lock | 108 +- README.md | 7 +- VERSION | 2 +- .../gitlab-logo-full-horizontal.gif | Bin 0 -> 3654 bytes .../ci_pipeline_notif_v1/gitlab-logo.gif | Bin 0 -> 3040 bytes .../ci_pipeline_notif_v1/icon-branch-gray.gif | Bin 0 -> 663 bytes .../icon-check-green-inverted.gif | Bin 0 -> 369 bytes .../ci_pipeline_notif_v1/icon-commit-gray.gif | Bin 0 -> 278 bytes .../icon-x-red-inverted.gif | Bin 0 -> 1013 bytes .../ci_pipeline_notif_v1/icon-x-red.gif | Bin 0 -> 660 bytes app/assets/javascripts/LabelManager.js | 115 -- app/assets/javascripts/activities.js | 12 +- app/assets/javascripts/api.js | 10 +- app/assets/javascripts/application.js | 2 +- app/assets/javascripts/blob/blob_ci_yaml.js | 46 - .../javascripts/blob/blob_ci_yaml.js.es6 | 40 + .../blob/blob_gitignore_selector.js | 2 +- .../javascripts/blob/blob_license_selector.js | 2 +- .../blob/blob_license_selectors.js | 25 - .../blob/blob_license_selectors.js.es6 | 21 + .../javascripts/blob/template_selector.js | 100 -- .../javascripts/blob/template_selector.js.es6 | 97 ++ app/assets/javascripts/blob_edit/edit_blob.js | 19 +- .../javascripts/boards/boards_bundle.js.es6 | 3 +- .../boards/components/board.js.es6 | 8 +- .../components/board_blank_state.js.es6 | 6 +- .../boards/components/board_list.js.es6 | 9 +- .../boards/components/board_new_issue.js.es6 | 58 + .../mixins/sortable_default_options.js.es6 | 2 +- .../javascripts/boards/models/list.js.es6 | 11 + .../boards/services/board_service.js.es6 | 16 +- app/assets/javascripts/build.js | 38 +- .../commit/{image-file.js => image_file.js} | 0 ...omplete.js => compare_autocomplete.js.es6} | 18 +- app/assets/javascripts/copy_to_clipboard.js | 18 +- ...nalytics.js.es6 => cycle_analytics.js.es6} | 8 +- app/assets/javascripts/diff.js | 7 + .../{dispatcher.js => dispatcher.js.es6} | 44 +- app/assets/javascripts/due_date_select.js | 107 -- app/assets/javascripts/due_date_select.js.es6 | 161 +++ .../javascripts/gfm_auto_complete.js.es6 | 38 +- app/assets/javascripts/gl_dropdown.js | 104 +- app/assets/javascripts/gl_field_errors.js.es6 | 167 +++ app/assets/javascripts/groups.js | 13 - app/assets/javascripts/groups_select.js | 5 +- app/assets/javascripts/issuable.js.es6 | 1 - ...nment.js => issues_bulk_assignment.js.es6} | 128 +- app/assets/javascripts/label_manager.js.es6 | 106 ++ app/assets/javascripts/labels_select.js | 135 +- .../javascripts/lib/utils/common_utils.js | 5 + .../javascripts/member_expiration_date.js | 8 +- app/assets/javascripts/members.js.es6 | 36 + .../merge_conflict_data_provider.js.es6 | 341 ----- .../merge_conflict_resolver.js.es6 | 83 -- .../components/diff_file_editor.js.es6 | 93 ++ .../components/inline_conflict_lines.js.es6 | 12 + .../components/parallel_conflict_line.js.es6 | 14 + .../components/parallel_conflict_lines.js.es6 | 15 + .../merge_conflict_service.js.es6 | 30 + .../merge_conflict_store.js.es6 | 437 ++++++ .../merge_conflicts_bundle.js.es6 | 89 ++ .../mixins/line_conflict_actions.js.es6 | 12 + .../mixins/line_conflict_utils.js.es6 | 18 + app/assets/javascripts/merge_request.js | 9 +- app/assets/javascripts/merge_request_tabs.js | 94 +- ..._widget.js => merge_request_widget.js.es6} | 87 +- app/assets/javascripts/milestone_select.js | 27 +- .../{branch-graph.js => branch_graph.js} | 0 app/assets/javascripts/pipeline.js.es6 | 15 - app/assets/javascripts/pipelines.js.es6 | 40 + .../profile/{gl_crop.js => gl_crop.js.es6} | 123 +- app/assets/javascripts/profile/profile.js | 106 -- app/assets/javascripts/profile/profile.js.es6 | 100 ++ app/assets/javascripts/project.js | 2 +- app/assets/javascripts/project_find_file.js | 23 +- app/assets/javascripts/project_members.js | 10 - app/assets/javascripts/project_new.js | 34 + app/assets/javascripts/project_select.js | 4 +- .../protected_branch_access_dropdown.js.es6 | 0 .../protected_branch_create.js.es6 | 0 .../protected_branch_dropdown.js.es6 | 0 .../protected_branch_edit.js.es6 | 1 - .../protected_branch_edit_list.js.es6 | 0 .../protected_branches_bundle.js | 1 + app/assets/javascripts/search.js | 2 +- ...complete.js => search_autocomplete.js.es6} | 185 +-- app/assets/javascripts/single_file_diff.js | 13 +- .../issuable_template_selector.js.es6 | 20 +- .../issuable_template_selectors.js.es6 | 12 +- .../javascripts/{todos.js => todos.js.es6} | 141 +- app/assets/javascripts/user.js.es6 | 10 +- app/assets/javascripts/user_tabs.js | 188 --- app/assets/javascripts/user_tabs.js.es6 | 157 +++ .../javascripts/username_validator.js.es6 | 133 ++ app/assets/javascripts/users_select.js | 38 +- app/assets/stylesheets/behaviors.scss | 1 + app/assets/stylesheets/framework/avatar.scss | 4 +- app/assets/stylesheets/framework/blocks.scss | 19 +- app/assets/stylesheets/framework/buttons.scss | 32 +- app/assets/stylesheets/framework/callout.scss | 5 + app/assets/stylesheets/framework/common.scss | 41 +- .../stylesheets/framework/dropdowns.scss | 25 +- app/assets/stylesheets/framework/files.scss | 10 +- app/assets/stylesheets/framework/flash.scss | 7 +- app/assets/stylesheets/framework/forms.scss | 15 +- .../stylesheets/framework/gitlab-theme.scss | 2 +- app/assets/stylesheets/framework/header.scss | 17 +- .../stylesheets/framework/issue_box.scss | 2 +- app/assets/stylesheets/framework/layout.scss | 12 + app/assets/stylesheets/framework/lists.scss | 15 +- app/assets/stylesheets/framework/logo.scss | 85 +- .../stylesheets/framework/markdown_area.scss | 2 +- app/assets/stylesheets/framework/mixins.scss | 19 +- app/assets/stylesheets/framework/mobile.scss | 2 +- app/assets/stylesheets/framework/nav.scss | 1 + app/assets/stylesheets/framework/panels.scss | 5 + app/assets/stylesheets/framework/selects.scss | 31 +- app/assets/stylesheets/framework/sidebar.scss | 27 +- .../stylesheets/framework/timeline.scss | 1 + .../stylesheets/framework/tw_bootstrap.scss | 10 + .../stylesheets/framework/typography.scss | 44 +- .../stylesheets/framework/variables.scss | 9 +- app/assets/stylesheets/highlight/dark.scss | 128 +- app/assets/stylesheets/highlight/monokai.scss | 118 +- .../stylesheets/highlight/solarized_dark.scss | 136 +- .../highlight/solarized_light.scss | 136 +- app/assets/stylesheets/highlight/white.scss | 2 +- .../mailers/repository_push_email.scss | 2 +- app/assets/stylesheets/notify.scss | 10 +- app/assets/stylesheets/pages/admin.scss | 12 +- app/assets/stylesheets/pages/boards.scss | 36 +- app/assets/stylesheets/pages/builds.scss | 34 +- app/assets/stylesheets/pages/commit.scss | 6 + app/assets/stylesheets/pages/commits.scss | 1 + .../stylesheets/pages/cycle_analytics.scss | 2 +- app/assets/stylesheets/pages/dashboard.scss | 2 + app/assets/stylesheets/pages/detail_page.scss | 6 +- app/assets/stylesheets/pages/diff.scss | 38 +- app/assets/stylesheets/pages/editor.scss | 26 +- .../stylesheets/pages/environments.scss | 43 +- app/assets/stylesheets/pages/events.scss | 10 +- app/assets/stylesheets/pages/groups.scss | 51 +- app/assets/stylesheets/pages/help.scss | 8 +- app/assets/stylesheets/pages/issuable.scss | 8 +- app/assets/stylesheets/pages/issues.scss | 1 + app/assets/stylesheets/pages/labels.scss | 33 +- app/assets/stylesheets/pages/lint.scss | 1 + app/assets/stylesheets/pages/login.scss | 238 +++- app/assets/stylesheets/pages/members.scss | 98 ++ .../stylesheets/pages/merge_conflicts.scss | 49 + .../stylesheets/pages/merge_requests.scss | 71 +- app/assets/stylesheets/pages/milestone.scss | 29 +- app/assets/stylesheets/pages/note_form.scss | 2 + app/assets/stylesheets/pages/notes.scss | 12 +- app/assets/stylesheets/pages/pipelines.scss | 264 ++-- app/assets/stylesheets/pages/profile.scss | 31 +- .../pages/profiles/preferences.scss | 4 +- app/assets/stylesheets/pages/projects.scss | 58 +- app/assets/stylesheets/pages/runners.scss | 1 + app/assets/stylesheets/pages/search.scss | 2 +- app/assets/stylesheets/pages/snippets.scss | 4 + app/assets/stylesheets/pages/status.scss | 4 +- app/assets/stylesheets/pages/todos.scss | 19 + app/assets/stylesheets/pages/tree.scss | 21 +- app/assets/stylesheets/pages/xterm.scss | 290 +++- .../admin/broadcast_messages_controller.rb | 2 +- app/controllers/admin/groups_controller.rb | 2 +- app/controllers/admin/projects_controller.rb | 2 +- app/controllers/admin/services_controller.rb | 8 +- app/controllers/application_controller.rb | 14 +- app/controllers/ci/application_controller.rb | 7 - app/controllers/ci/lints_controller.rb | 3 +- app/controllers/ci/projects_controller.rb | 2 +- .../concerns/authenticates_with_two_factor.rb | 15 +- app/controllers/concerns/issuable_actions.rb | 5 + .../concerns/membership_actions.rb | 20 +- app/controllers/concerns/spammable_actions.rb | 2 +- .../dashboard/labels_controller.rb | 4 +- .../explore/projects_controller.rb | 3 +- .../groups/group_members_controller.rb | 7 +- app/controllers/groups/labels_controller.rb | 92 ++ .../import/gitlab_projects_controller.rb | 9 +- app/controllers/namespaces_controller.rb | 25 - app/controllers/profiles_controller.rb | 3 +- .../projects/board_lists_controller.rb | 65 - .../projects/boards/issues_controller.rb | 42 +- .../projects/boards/lists_controller.rb | 23 +- app/controllers/projects/boards_controller.rb | 28 +- app/controllers/projects/builds_controller.rb | 4 +- app/controllers/projects/commit_controller.rb | 17 +- .../projects/environments_controller.rb | 25 +- app/controllers/projects/graphs_controller.rb | 6 +- .../projects/group_links_controller.rb | 42 +- app/controllers/projects/issues_controller.rb | 7 +- app/controllers/projects/labels_controller.rb | 38 +- .../projects/merge_requests_controller.rb | 178 ++- .../projects/project_members_controller.rb | 44 +- app/controllers/projects/tags_controller.rb | 2 + app/controllers/projects_controller.rb | 46 +- app/controllers/snippets_controller.rb | 14 +- app/controllers/users_controller.rb | 6 +- app/finders/access_requests_finder.rb | 27 + app/finders/issuable_finder.rb | 32 +- app/finders/labels_finder.rb | 93 ++ app/finders/trending_projects_finder.rb | 11 - app/helpers/appearances_helper.rb | 2 +- app/helpers/application_helper.rb | 26 - app/helpers/application_settings_helper.rb | 12 - app/helpers/avatars_helper.rb | 5 +- app/helpers/award_emoji_helper.rb | 9 +- app/helpers/boards_helper.rb | 12 + app/helpers/broadcast_messages_helper.rb | 6 +- app/helpers/builds_helper.rb | 8 + app/helpers/button_helper.rb | 5 +- app/helpers/ci_status_helper.rb | 2 +- app/helpers/dropdowns_helper.rb | 3 +- app/helpers/events_helper.rb | 2 +- app/helpers/gitlab_markdown_helper.rb | 44 +- app/helpers/gitlab_routing_helper.rb | 16 + app/helpers/issuables_helper.rb | 56 +- app/helpers/issues_helper.rb | 5 +- app/helpers/labels_helper.rb | 87 +- app/helpers/lfs_helper.rb | 8 +- app/helpers/merge_requests_helper.rb | 27 +- app/helpers/milestones_helper.rb | 29 +- app/helpers/page_layout_helper.rb | 8 +- app/helpers/preferences_helper.rb | 16 +- app/helpers/projects_helper.rb | 33 +- app/helpers/search_helper.rb | 14 +- app/helpers/selects_helper.rb | 6 +- app/helpers/todos_helper.rb | 20 + app/mailers/.gitkeep | 0 app/mailers/devise_mailer.rb | 8 + app/mailers/emails/members.rb | 2 +- app/mailers/emails/pipelines.rb | 43 + app/mailers/notify.rb | 2 + app/models/abuse_report.rb | 7 + app/models/appearance.rb | 4 + app/models/application_setting.rb | 7 + app/models/board.rb | 8 + app/models/broadcast_message.rb | 3 + app/models/ci/build.rb | 47 +- app/models/ci/pipeline.rb | 53 +- app/models/ci/runner.rb | 2 +- app/models/commit_range.rb | 2 +- app/models/commit_status.rb | 44 +- app/models/compare.rb | 21 +- app/models/concerns/access_requestable.rb | 5 +- app/models/concerns/cache_markdown_field.rb | 131 ++ app/models/concerns/has_status.rb | 29 +- app/models/concerns/issuable.rb | 26 +- app/models/concerns/mentionable.rb | 27 +- .../concerns/protected_branch_access.rb | 5 + app/models/concerns/sortable.rb | 17 +- app/models/cycle_analytics.rb | 14 +- app/models/deployment.rb | 38 +- app/models/environment.rb | 47 + app/models/event.rb | 27 +- app/models/external_issue.rb | 5 - app/models/global_label.rb | 4 + app/models/global_milestone.rb | 18 +- app/models/group.rb | 39 +- app/models/group_label.rb | 11 + app/models/issue.rb | 16 + app/models/label.rb | 144 +- app/models/label_priority.rb | 8 + app/models/list.rb | 11 + app/models/member.rb | 90 +- app/models/members/group_member.rb | 16 + app/models/members/project_member.rb | 44 +- app/models/merge_request.rb | 100 +- app/models/merge_request_diff.rb | 21 +- app/models/milestone.rb | 10 +- app/models/namespace.rb | 17 +- app/models/note.rb | 5 +- app/models/project.rb | 68 +- app/models/project_feature.rb | 24 +- app/models/project_group_link.rb | 2 +- app/models/project_label.rb | 34 + .../project_services/builds_email_service.rb | 2 +- .../project_services/issue_tracker_service.rb | 6 + app/models/project_services/jira_service.rb | 5 + .../pipelines_email_service.rb | 96 ++ .../slack_service/issue_message.rb | 2 +- .../slack_service/merge_message.rb | 2 +- .../slack_service/note_message.rb | 2 +- .../slack_service/wiki_page_message.rb | 2 +- app/models/project_team.rb | 96 +- app/models/release.rb | 4 + app/models/repository.rb | 94 +- app/models/service.rb | 6 +- app/models/snippet.rb | 10 + app/models/todo.rb | 8 +- app/models/trending_project.rb | 35 + app/models/user.rb | 30 +- app/policies/group_label_policy.rb | 5 + app/policies/group_policy.rb | 1 + app/policies/project_label_policy.rb | 5 + app/policies/project_policy.rb | 35 +- app/services/akismet_service.rb | 53 +- app/services/base_service.rb | 7 +- app/services/boards/base_service.rb | 5 - app/services/boards/create_service.rb | 17 +- app/services/boards/issues/create_service.rb | 23 + app/services/boards/issues/list_service.rb | 13 +- app/services/boards/issues/move_service.rb | 8 +- app/services/boards/list_service.rb | 14 + app/services/boards/lists/create_service.rb | 18 +- app/services/boards/lists/destroy_service.rb | 6 +- app/services/boards/lists/generate_service.rb | 19 +- app/services/boards/lists/list_service.rb | 9 + app/services/boards/lists/move_service.rb | 5 +- app/services/ci/process_pipeline_service.rb | 2 + .../ci/send_pipeline_notification_service.rb | 19 + app/services/compare_service.rb | 7 +- app/services/create_deployment_service.rb | 49 +- app/services/files/base_service.rb | 11 +- app/services/files/multi_service.rb | 124 ++ app/services/files/update_service.rb | 6 - app/services/git_push_service.rb | 15 +- app/services/issuable_base_service.rb | 16 +- app/services/issues/move_service.rb | 8 +- app/services/labels/find_or_create_service.rb | 36 + app/services/labels/transfer_service.rb | 78 ++ .../members/approve_access_request_service.rb | 42 + .../members/authorized_destroy_service.rb | 2 + app/services/members/destroy_service.rb | 39 +- .../members/request_access_service.rb | 25 + .../add_todo_when_build_fails_service.rb | 4 +- .../merge_requests/assign_issues_service.rb | 35 + app/services/merge_requests/base_service.rb | 40 +- app/services/merge_requests/build_service.rb | 23 +- app/services/merge_requests/merge_service.rb | 20 +- .../merge_when_build_succeeds_service.rb | 9 +- .../merge_requests/post_merge_service.rb | 1 + .../merge_requests/resolve_service.rb | 24 +- app/services/merge_requests/update_service.rb | 18 +- app/services/notification_service.rb | 25 +- app/services/projects/autocomplete_service.rb | 2 +- app/services/projects/create_service.rb | 8 +- app/services/projects/import_service.rb | 7 +- app/services/projects/transfer_service.rb | 4 + .../protected_branches/api_create_service.rb | 29 + .../protected_branches/api_update_service.rb | 47 + .../slash_commands/interpret_service.rb | 43 +- app/services/system_hooks_service.rb | 2 +- app/services/system_note_service.rb | 24 +- app/services/todo_service.rb | 6 +- app/validators/namespace_validator.rb | 6 +- .../abuse_reports/_abuse_report.html.haml | 2 +- app/views/admin/appearances/preview.html.haml | 17 +- .../application_settings/_form.html.haml | 6 +- .../admin/background_jobs/_head.html.haml | 49 +- .../admin/broadcast_messages/_form.html.haml | 9 +- .../admin/broadcast_messages/preview.js.haml | 2 +- app/views/admin/dashboard/_head.html.haml | 57 +- app/views/admin/dashboard/index.html.haml | 5 + app/views/admin/groups/_group.html.haml | 2 +- app/views/admin/labels/_form.html.haml | 2 +- app/views/admin/labels/_label.html.haml | 2 +- app/views/admin/projects/index.html.haml | 2 +- app/views/admin/runners/index.html.haml | 24 +- app/views/admin/runners/show.html.haml | 16 +- app/views/ci/lints/_create.html.haml | 9 +- .../dashboard/groups/_empty_state.html.haml | 7 + app/views/dashboard/groups/index.html.haml | 13 +- app/views/dashboard/snippets/index.html.haml | 12 +- app/views/dashboard/todos/_todo.html.haml | 1 + app/views/dashboard/todos/index.html.haml | 2 +- .../devise/confirmations/almost_there.haml | 4 +- app/views/devise/confirmations/new.html.haml | 12 +- app/views/devise/passwords/edit.html.haml | 20 +- app/views/devise/passwords/new.html.haml | 10 +- app/views/devise/sessions/_new_base.html.haml | 14 +- .../devise/sessions/_new_crowd.html.haml | 12 +- app/views/devise/sessions/_new_ldap.html.haml | 12 +- app/views/devise/sessions/new.html.haml | 23 +- .../devise/sessions/two_factor.html.haml | 17 +- .../devise/shared/_omniauth_box.html.haml | 15 +- .../devise/shared/_sign_in_link.html.haml | 1 - app/views/devise/shared/_signin_box.html.haml | 46 +- app/views/devise/shared/_signup_box.html.haml | 37 +- app/views/devise/shared/_tab_single.html.haml | 3 + app/views/devise/shared/_tabs_ldap.html.haml | 10 + .../devise/shared/_tabs_normal.html.haml | 6 + app/views/devise/unlocks/new.html.haml | 10 +- .../_delete_form.html.haml | 2 +- app/views/explore/groups/index.html.haml | 2 +- app/views/explore/projects/_filter.html.haml | 8 +- app/views/explore/snippets/index.html.haml | 5 +- .../group_members/_new_group_member.html.haml | 35 +- .../groups/group_members/index.html.haml | 40 +- app/views/groups/group_members/update.js.haml | 4 +- app/views/groups/labels/destroy.js.haml | 2 + app/views/groups/labels/edit.html.haml | 7 + app/views/groups/labels/index.html.haml | 20 + app/views/groups/labels/new.html.haml | 8 + app/views/groups/milestones/new.html.haml | 4 +- app/views/groups/show.html.haml | 2 +- app/views/help/index.html.haml | 2 +- .../import/gitlab_projects/new.html.haml | 4 +- app/views/layouts/_flash.html.haml | 6 +- .../layouts/_init_auto_complete.html.haml | 9 +- app/views/layouts/_page.html.haml | 6 +- app/views/layouts/_search.html.haml | 39 +- app/views/layouts/application.html.haml | 1 + app/views/layouts/devise.html.haml | 63 +- app/views/layouts/header/_default.html.haml | 4 +- app/views/layouts/nav/_group.html.haml | 4 + app/views/layouts/nav/_project.html.haml | 2 +- .../notify/pipeline_failed_email.html.haml | 177 +++ .../notify/pipeline_failed_email.text.erb | 31 + .../notify/pipeline_success_email.html.haml | 154 +++ .../notify/pipeline_success_email.text.erb | 24 + app/views/profiles/accounts/show.html.haml | 4 +- app/views/profiles/preferences/update.js.erb | 4 +- app/views/profiles/show.html.haml | 3 + app/views/projects/_activity.html.haml | 19 +- .../projects/_customize_workflow.html.haml | 8 + app/views/projects/_home_panel.html.haml | 7 +- app/views/projects/_last_push.html.haml | 2 +- app/views/projects/_wiki.html.haml | 19 + app/views/projects/_zen.html.haml | 4 +- app/views/projects/blame/show.html.haml | 87 +- app/views/projects/blob/_editor.html.haml | 7 + app/views/projects/blob/edit.html.haml | 43 +- .../boards/components/_board.html.haml | 41 +- .../boards/components/_card.html.haml | 6 +- app/views/projects/boards/index.html.haml | 16 + app/views/projects/boards/show.html.haml | 5 +- app/views/projects/branches/_branch.html.haml | 4 +- app/views/projects/branches/index.html.haml | 2 +- app/views/projects/builds/_sidebar.html.haml | 23 +- app/views/projects/builds/_table.html.haml | 6 +- app/views/projects/builds/_user.html.haml | 7 +- app/views/projects/builds/index.html.haml | 2 +- app/views/projects/builds/show.html.haml | 95 +- .../projects/buttons/_download.html.haml | 4 +- .../projects/buttons/_dropdown.html.haml | 3 +- app/views/projects/buttons/_fork.html.haml | 4 +- app/views/projects/ci/builds/_build.html.haml | 66 +- .../ci/builds/_build_pipeline.html.haml | 10 +- .../projects/ci/pipelines/_pipeline.html.haml | 81 +- app/views/projects/commit/_builds.html.haml | 2 +- app/views/projects/commit/_ci_menu.html.haml | 5 + .../projects/commit/_commit_box.html.haml | 8 +- app/views/projects/commit/_pipeline.html.haml | 81 +- .../projects/commit/_pipeline_stage.html.haml | 2 +- .../commit/_pipeline_status_group.html.haml | 20 +- .../projects/commit/_pipelines_list.haml | 5 +- app/views/projects/commit/builds.html.haml | 11 +- app/views/projects/commit/pipelines.html.haml | 7 + app/views/projects/commit/show.html.haml | 25 +- app/views/projects/commits/_commit.html.haml | 2 +- app/views/projects/commits/_head.html.haml | 45 +- app/views/projects/commits/show.html.haml | 3 +- app/views/projects/compare/_form.html.haml | 17 +- .../projects/compare/_ref_dropdown.html.haml | 3 +- app/views/projects/compare/index.html.haml | 2 +- .../projects/cycle_analytics/show.html.haml | 4 +- app/views/projects/deployments/_actions.haml | 35 +- .../projects/deployments/_commit.html.haml | 2 +- .../deployments/_deployment.html.haml | 14 +- app/views/projects/deployments/_rollback.haml | 6 + app/views/projects/diffs/_content.html.haml | 4 +- app/views/projects/diffs/_diffs.html.haml | 5 +- app/views/projects/diffs/_file.html.haml | 4 +- .../projects/diffs/_file_header.html.haml | 1 + .../projects/diffs/_parallel_view.html.haml | 2 +- app/views/projects/edit.html.haml | 69 +- app/views/projects/empty.html.haml | 2 + .../environments/_environment.html.haml | 21 +- .../environments/_external_url.html.haml | 3 + .../projects/environments/_stop.html.haml | 5 + .../projects/environments/edit.html.haml | 11 +- .../projects/environments/index.html.haml | 63 +- app/views/projects/environments/new.html.haml | 11 +- .../projects/environments/show.html.haml | 49 +- app/views/projects/forks/index.html.haml | 2 +- .../_generic_commit_status.html.haml | 2 - .../_generic_commit_status_pipeline.html.haml | 15 +- app/views/projects/graphs/_head.html.haml | 35 +- .../projects/group_links/index.html.haml | 6 +- app/views/projects/group_links/update.js.haml | 3 + app/views/projects/issues/_head.html.haml | 57 +- app/views/projects/issues/_issue.html.haml | 2 +- app/views/projects/issues/_issues.html.haml | 2 +- app/views/projects/issues/edit.html.haml | 2 +- app/views/projects/issues/index.html.haml | 3 +- app/views/projects/issues/show.html.haml | 10 +- app/views/projects/labels/_label.html.haml | 50 - app/views/projects/labels/destroy.js.haml | 2 +- app/views/projects/labels/edit.html.haml | 11 +- app/views/projects/labels/index.html.haml | 13 +- app/views/projects/labels/new.html.haml | 11 +- .../merge_requests/_merge_request.html.haml | 2 +- .../merge_requests/_new_compare.html.haml | 13 - .../merge_requests/_new_diffs.html.haml | 1 + .../merge_requests/_new_submit.html.haml | 68 +- .../projects/merge_requests/_show.html.haml | 95 +- .../merge_requests/conflicts.html.haml | 29 +- .../conflicts/_commit_stats.html.haml | 16 +- .../conflicts/_file_actions.html.haml | 12 + .../conflicts/_inline_view.html.haml | 28 - .../conflicts/_parallel_view.html.haml | 27 - .../conflicts/_submit_form.html.haml | 31 +- .../components/_diff_file_editor.html.haml | 13 + .../_inline_conflict_lines.html.haml | 15 + .../_parallel_conflict_line.html.haml | 10 + .../_parallel_conflict_lines.html.haml | 4 + .../merge_requests/show/_mr_box.html.haml | 4 +- .../merge_requests/show/_mr_title.html.haml | 2 +- .../merge_requests/show/_versions.html.haml | 14 +- .../merge_requests/widget/_heading.html.haml | 20 +- .../merge_requests/widget/_open.html.haml | 1 + .../merge_requests/widget/_show.html.haml | 3 +- .../widget/open/_accept.html.haml | 2 +- app/views/projects/milestones/edit.html.haml | 12 +- app/views/projects/milestones/new.html.haml | 11 +- app/views/projects/milestones/show.html.haml | 83 +- app/views/projects/network/show.html.haml | 2 +- app/views/projects/new.html.haml | 3 +- app/views/projects/notes/_note.html.haml | 2 +- .../projects/notes/_notes_with_form.html.haml | 2 +- app/views/projects/pipelines/_head.html.haml | 49 +- app/views/projects/pipelines/_info.html.haml | 4 +- app/views/projects/pipelines/index.html.haml | 11 +- app/views/projects/pipelines/show.html.haml | 13 +- .../pipelines_settings/show.html.haml | 6 +- .../project_members/_group_members.html.haml | 2 +- .../project_members/_groups.html.haml | 7 + .../_new_project_member.html.haml | 35 +- .../projects/project_members/_team.html.haml | 16 +- .../projects/project_members/index.html.haml | 40 +- .../projects/project_members/update.js.haml | 4 +- .../_protected_branch.html.haml | 2 +- .../protected_branches/index.html.haml | 2 + .../projects/repositories/_feed.html.haml | 2 +- app/views/projects/runners/_form.html.haml | 4 +- app/views/projects/runners/_runner.html.haml | 2 +- .../runners/_shared_runners.html.haml | 20 +- .../runners/_specific_runners.html.haml | 14 +- app/views/projects/runners/index.html.haml | 12 +- app/views/projects/show.html.haml | 123 +- .../projects/snippets/_actions.html.haml | 10 +- app/views/projects/snippets/index.html.haml | 7 +- app/views/projects/tags/_tag.html.haml | 2 +- app/views/projects/tags/index.html.haml | 2 +- app/views/projects/tags/show.html.haml | 2 +- app/views/projects/tree/show.html.haml | 2 +- app/views/projects/wikis/_form.html.haml | 2 +- app/views/projects/wikis/_nav.html.haml | 25 +- app/views/search/results/_issue.html.haml | 2 +- .../search/results/_merge_request.html.haml | 2 +- app/views/search/results/_milestone.html.haml | 2 +- app/views/search/results/_note.html.haml | 2 +- app/views/shared/_event_filter.html.haml | 1 + app/views/shared/_label.html.haml | 53 + app/views/shared/_label_row.html.haml | 9 +- app/views/shared/_labels_row.html.haml | 2 +- app/views/shared/_milestones_filter.html.haml | 15 +- .../shared/_new_project_item_select.html.haml | 2 +- app/views/shared/_sort_dropdown.html.haml | 24 +- app/views/shared/_visibility_level.html.haml | 2 +- app/views/shared/_visibility_radios.html.haml | 2 +- app/views/shared/groups/_group.html.haml | 2 +- app/views/shared/icons/_icon_empty_groups.svg | 1 + app/views/shared/icons/_icon_fork.svg | 4 +- app/views/shared/icons/_icon_no_wrap.svg | 3 + app/views/shared/icons/_icon_soft_wrap.svg | 3 + .../shared/icons/_illustration_no_commits.svg | 1 + app/views/shared/issuable/_filter.html.haml | 23 +- app/views/shared/issuable/_form.html.haml | 39 +- .../shared/issuable/_label_dropdown.html.haml | 23 +- .../issuable/_milestone_dropdown.html.haml | 23 +- app/views/shared/issuable/_nav.html.haml | 20 +- app/views/shared/issuable/_sidebar.html.haml | 21 +- .../labels/_form.html.haml | 6 +- app/views/shared/members/_group.html.haml | 29 + app/views/shared/members/_member.html.haml | 108 +- app/views/shared/members/_requests.html.haml | 2 +- .../shared/milestones/_labels_tab.html.haml | 2 +- .../shared/milestones/_milestone.html.haml | 2 +- app/views/shared/milestones/_top.html.haml | 3 +- .../shared/notifications/_button.html.haml | 2 +- app/views/shared/projects/_project.html.haml | 2 +- app/views/shared/snippets/_blob.html.haml | 7 +- app/views/shared/snippets/_header.html.haml | 2 +- app/views/snippets/_actions.html.haml | 10 +- app/views/snippets/show.html.haml | 1 + app/views/u2f/_authenticate.html.haml | 2 +- app/views/users/show.html.haml | 98 +- app/workers/admin_email_worker.rb | 3 +- app/workers/build_coverage_worker.rb | 9 + app/workers/build_email_worker.rb | 1 + app/workers/build_finished_worker.rb | 11 + app/workers/build_hooks_worker.rb | 9 + app/workers/build_success_worker.rb | 27 + app/workers/clear_database_cache_worker.rb | 24 + app/workers/concerns/build_queue.rb | 8 + app/workers/concerns/cronjob_queue.rb | 9 + .../concerns/dedicated_sidekiq_queue.rb | 9 + app/workers/concerns/pipeline_queue.rb | 8 + .../concerns/repository_check_queue.rb | 8 + app/workers/delete_user_worker.rb | 1 + app/workers/email_receiver_worker.rb | 3 +- app/workers/emails_on_push_worker.rb | 2 +- app/workers/expire_build_artifacts_worker.rb | 12 +- .../expire_build_instance_artifacts_worker.rb | 16 + app/workers/git_garbage_collect_worker.rb | 3 +- app/workers/gitlab_shell_worker.rb | 3 +- app/workers/group_destroy_worker.rb | 3 +- .../import_export_project_cleanup_worker.rb | 3 +- app/workers/irker_worker.rb | 1 + app/workers/merge_worker.rb | 3 +- app/workers/new_note_worker.rb | 3 +- app/workers/pipeline_hooks_worker.rb | 9 + app/workers/pipeline_metrics_worker.rb | 29 + app/workers/pipeline_process_worker.rb | 9 + app/workers/pipeline_success_worker.rb | 12 + app/workers/pipeline_update_worker.rb | 9 + app/workers/post_receive.rb | 3 +- app/workers/project_cache_worker.rb | 38 +- app/workers/project_destroy_worker.rb | 3 +- app/workers/project_export_worker.rb | 3 +- app/workers/project_service_worker.rb | 3 +- app/workers/project_web_hook_worker.rb | 3 +- app/workers/prune_old_events_worker.rb | 1 + .../remove_expired_group_links_worker.rb | 1 + app/workers/remove_expired_members_worker.rb | 1 + .../repository_archive_cache_worker.rb | 3 +- app/workers/repository_check/batch_worker.rb | 21 +- app/workers/repository_check/clear_worker.rb | 3 +- .../single_repository_worker.rb | 3 +- app/workers/repository_fork_worker.rb | 3 +- app/workers/repository_import_worker.rb | 3 +- app/workers/requests_profiles_worker.rb | 3 +- app/workers/stuck_ci_builds_worker.rb | 1 + app/workers/system_hook_worker.rb | 3 +- app/workers/trending_projects_worker.rb | 10 + app/workers/update_merge_requests_worker.rb | 17 + bin/background_jobs | 3 +- config/application.rb | 11 +- config/gitlab.yml.example | 3 +- config/initializers/1_settings.rb | 5 + config/initializers/7_redis.rb | 3 + config/initializers/ar5_batching.rb | 41 + .../ar_speed_up_migration_checking.rb | 18 + .../attr_encrypted_no_db_connection.rb | 25 +- config/initializers/connection_fix.rb | 2 +- .../initializers/gitlab_shell_secret_token.rb | 2 +- config/initializers/metrics.rb | 1 + config/initializers/postgresql_limit_fix.rb | 27 +- config/initializers/sentry.rb | 2 + config/locales/en.yml | 1 + config/mail_room.yml | 2 +- config/routes.rb | 892 +----------- config/routes/admin.rb | 102 ++ config/routes/api.rb | 2 + config/routes/ci.rb | 15 + config/routes/dashboard.rb | 27 + config/routes/development.rb | 13 + config/routes/explore.rb | 16 + config/routes/group.rb | 37 + config/routes/help.rb | 4 + config/routes/import.rb | 42 + config/routes/profile.rb | 43 + config/routes/project.rb | 472 +++++++ config/routes/sherlock.rb | 12 + config/routes/sidekiq.rb | 4 + config/routes/snippets.rb | 9 + config/routes/uploads.rb | 21 + config/routes/user.rb | 44 + config/sidekiq_queues.yml | 47 + db/fixtures/development/04_project.rb | 11 +- db/fixtures/development/06_teams.rb | 2 +- db/fixtures/development/14_pipelines.rb | 5 +- ...160829114652_add_markdown_cache_columns.rb | 38 + .../20160919144305_add_type_to_labels.rb | 14 + .../20160919145149_add_group_id_to_labels.rb | 13 + ...0160920160832_add_index_to_labels_title.rb | 11 + ...20160926145521_add_organization_to_user.rb | 12 + ...20161006104309_add_state_to_environment.rb | 15 + ...07133303_precalculate_trending_projects.rb | 38 + ...ository_access_level_to_project_feature.rb | 14 + .../20161014173530_create_label_priorities.rb | 25 + ...1017095000_add_properties_to_deployment.rb | 9 + ...161017125927_add_unique_index_to_labels.rb | 32 + .../20161018024215_migrate_labels_priority.rb | 36 + ...61018024550_remove_priority_from_labels.rb | 17 + ...61018124658_make_project_owners_masters.rb | 15 + ...736_migrate_sidekiq_queues_from_default.rb | 109 ++ ...5_generate_project_feature_for_projects.rb | 28 + ...317_migrate_mailroom_queue_from_default.rb | 63 + db/schema.rb | 1192 +++++++++-------- doc/README.md | 15 +- doc/administration/auth/ldap.md | 6 + doc/administration/container_registry.md | 96 +- doc/administration/environment_variables.md | 20 +- .../high_availability/gitlab.md | 6 +- doc/administration/housekeeping.md | 2 +- .../img/housekeeping_settings.png | Bin 19347 -> 27420 bytes .../performance/gitlab_configuration.md | 40 + .../performance/grafana_configuration.md | 111 ++ .../img/grafana_dashboard_dropdown.png | Bin 0 -> 14368 bytes .../img/grafana_dashboard_import.png | Bin 0 -> 18267 bytes .../img/grafana_data_source_configuration.png | Bin 0 -> 26060 bytes .../img/grafana_data_source_empty.png | Bin 0 -> 21821 bytes .../performance/img/grafana_save_icon.png | Bin 0 -> 9107 bytes .../metrics_gitlab_configuration_settings.png | Bin 0 -> 61357 bytes .../img/request_profile_result.png | Bin 0 -> 9720 bytes .../img/request_profiling_token.png | Bin 0 -> 30076 bytes .../performance/influxdb_configuration.md | 193 +++ .../monitoring/performance/influxdb_schema.md | 97 ++ .../monitoring/performance/introduction.md | 65 + .../performance/request_profiling.md | 16 + doc/administration/operations.md | 6 + .../operations/cleaning_up_redis_sessions.md | 52 + .../operations/moving_repositories.md | 180 +++ .../operations/sidekiq_memory_killer.md | 40 + doc/administration/operations/unicorn.md | 86 ++ doc/administration/reply_by_email.md | 302 +++++ .../reply_by_email_postfix_setup.md | 324 +++++ doc/administration/restart_gitlab.md | 2 +- doc/administration/troubleshooting/debug.md | 4 +- doc/api/README.md | 20 +- doc/api/award_emoji.md | 18 +- doc/api/boards.md | 251 ++++ doc/api/builds.md | 38 +- doc/api/ci/runners.md | 6 +- doc/api/commits.md | 97 +- doc/api/deployments.md | 12 +- doc/api/issues.md | 38 +- doc/api/keys.md | 2 +- doc/api/labels.md | 2 +- doc/api/merge_requests.md | 18 +- doc/api/notes.md | 6 +- doc/api/oauth2.md | 24 +- doc/api/pipelines.md | 10 +- doc/api/projects.md | 464 +++++-- doc/api/settings.md | 12 +- doc/api/system_hooks.md | 7 +- doc/api/templates/gitignores.md | 579 ++++++++ doc/api/templates/gitlab_ci_ymls.md | 120 ++ doc/api/{ => templates}/licenses.md | 8 +- doc/api/todos.md | 18 +- doc/api/users.md | 169 ++- doc/api/version.md | 23 + doc/ci/docker/using_docker_images.md | 2 +- doc/ci/environments.md | 13 + doc/ci/examples/README.md | 4 +- doc/ci/examples/test-phoenix-application.md | 56 + doc/ci/pipelines.md | 2 + doc/ci/triggers/README.md | 2 +- doc/ci/variables/README.md | 36 +- doc/ci/yaml/README.md | 201 ++- doc/container_registry/README.md | 99 +- .../img/container_registry.png | Bin 222782 -> 0 bytes .../img/project_feature.png | Bin 248750 -> 0 bytes doc/container_registry/troubleshooting.md | 142 +- doc/development/README.md | 4 +- doc/development/code_review.md | 11 +- doc/development/doc_styleguide.md | 33 +- doc/development/frontend.md | 236 ++++ doc/development/licensing.md | 2 + doc/development/migration_style_guide.md | 8 +- doc/development/performance.md | 5 +- doc/development/sidekiq_style_guide.md | 38 + doc/gitlab-basics/README.md | 6 +- doc/gitlab-basics/add-file.md | 28 +- doc/gitlab-basics/add-merge-request.md | 49 +- .../basicsimages/add_new_merge_request.png | Bin 9003 -> 0 bytes doc/gitlab-basics/basicsimages/add_sshkey.png | Bin 1394 -> 0 bytes .../basicsimages/branch_info.png | Bin 7572 -> 0 bytes .../basicsimages/branch_name.png | Bin 2137 -> 0 bytes doc/gitlab-basics/basicsimages/branches.png | Bin 3548 -> 0 bytes .../basicsimages/button-create-mr.png | Bin 5927 -> 0 bytes .../basicsimages/click-on-new-group.png | Bin 1957 -> 0 bytes .../basicsimages/commit_changes.png | Bin 4941 -> 0 bytes .../basicsimages/commit_message.png | Bin 5103 -> 0 bytes doc/gitlab-basics/basicsimages/commits.png | Bin 4112 -> 0 bytes .../basicsimages/compare_branches.png | Bin 1520 -> 0 bytes .../basicsimages/create_file.png | Bin 2451 -> 0 bytes .../basicsimages/create_group.png | Bin 3184 -> 0 bytes doc/gitlab-basics/basicsimages/edit_file.png | Bin 2221 -> 0 bytes .../basicsimages/file_located.png | Bin 3078 -> 0 bytes doc/gitlab-basics/basicsimages/file_name.png | Bin 2412 -> 0 bytes doc/gitlab-basics/basicsimages/find_file.png | Bin 8426 -> 0 bytes doc/gitlab-basics/basicsimages/find_group.png | Bin 5897 -> 0 bytes doc/gitlab-basics/basicsimages/fork.png | Bin 896 -> 0 bytes doc/gitlab-basics/basicsimages/group_info.png | Bin 15479 -> 0 bytes doc/gitlab-basics/basicsimages/groups.png | Bin 4752 -> 0 bytes doc/gitlab-basics/basicsimages/https.png | Bin 2822 -> 0 bytes doc/gitlab-basics/basicsimages/image_file.png | Bin 2796 -> 0 bytes .../basicsimages/issue_title.png | Bin 8311 -> 0 bytes doc/gitlab-basics/basicsimages/issues.png | Bin 4153 -> 0 bytes doc/gitlab-basics/basicsimages/key.png | Bin 1177 -> 0 bytes .../basicsimages/merge_requests.png | Bin 4213 -> 0 bytes doc/gitlab-basics/basicsimages/new_issue.png | Bin 2974 -> 0 bytes .../basicsimages/new_merge_request.png | Bin 3162 -> 0 bytes .../basicsimages/new_project.png | Bin 2234 -> 0 bytes doc/gitlab-basics/basicsimages/newbranch.png | Bin 1244 -> 0 bytes .../basicsimages/paste_sshkey.png | Bin 7699 -> 0 bytes .../basicsimages/profile_settings.png | Bin 1101 -> 0 bytes .../basicsimages/project_info.png | Bin 21041 -> 0 bytes .../basicsimages/select-group.png | Bin 6034 -> 0 bytes .../basicsimages/select-group2.png | Bin 5040 -> 0 bytes .../basicsimages/select_branch.png | Bin 11207 -> 0 bytes .../basicsimages/select_project.png | Bin 16176 -> 0 bytes doc/gitlab-basics/basicsimages/settings.png | Bin 4149 -> 0 bytes doc/gitlab-basics/basicsimages/shh_keys.png | Bin 4782 -> 0 bytes .../basicsimages/submit_new_issue.png | Bin 8644 -> 0 bytes .../basicsimages/title_description_mr.png | Bin 11919 -> 0 bytes .../basicsimages/white_space.png | Bin 2192 -> 0 bytes doc/gitlab-basics/command-line-commands.md | 26 +- doc/gitlab-basics/create-branch.md | 41 +- doc/gitlab-basics/create-group.md | 51 +- doc/gitlab-basics/create-issue.md | 33 +- doc/gitlab-basics/create-project.md | 27 +- doc/gitlab-basics/create-your-ssh-keys.md | 38 +- doc/gitlab-basics/fork-project.md | 19 +- .../img/create_new_group_info.png | Bin 0 -> 53103 bytes .../img/create_new_group_sidebar.png | Bin 0 -> 5396 bytes .../img/create_new_project_button.png | Bin 0 -> 10050 bytes .../img/create_new_project_from_group.png | Bin 0 -> 6545 bytes .../img/create_new_project_info.png | Bin 0 -> 49451 bytes .../img/fork_choose_namespace.png | Bin 0 -> 39253 bytes doc/gitlab-basics/img/fork_new.png | Bin 0 -> 25540 bytes doc/gitlab-basics/img/merge_request_new.png | Bin 0 -> 3596 bytes doc/gitlab-basics/img/merge_request_page.png | Bin 0 -> 91432 bytes .../img/merge_request_select_branch.png | Bin 0 -> 50707 bytes doc/gitlab-basics/img/new_issue_button.png | Bin 0 -> 3070 bytes doc/gitlab-basics/img/new_issue_page.png | Bin 0 -> 53268 bytes doc/gitlab-basics/img/profile_settings.png | Bin 0 -> 5975 bytes .../img/profile_settings_ssh_keys.png | Bin 0 -> 42977 bytes .../profile_settings_ssh_keys_paste_pub.png | Bin 0 -> 37486 bytes .../profile_settings_ssh_keys_single_key.png | Bin 0 -> 18498 bytes .../img/profile_settings_ssh_keys_title.png | Bin 0 -> 2362 bytes doc/gitlab-basics/img/project_clone_url.png | Bin 0 -> 40490 bytes doc/gitlab-basics/img/project_navbar.png | Bin 0 -> 5745 bytes .../public_file_link.png | Bin .../img/select_group_dropdown.png | Bin 0 -> 8038 bytes doc/gitlab-basics/start-using-git.md | 20 +- doc/incoming_email/README.md | 303 +---- doc/incoming_email/postfix.md | 322 +---- doc/install/installation.md | 12 +- doc/monitoring/health_check.md | 67 +- .../performance/gitlab_configuration.md | 41 +- .../performance/grafana_configuration.md | 112 +- .../performance/influxdb_configuration.md | 194 +-- doc/monitoring/performance/influxdb_schema.md | 98 +- doc/monitoring/performance/introduction.md | 66 +- doc/operations/README.md | 6 +- doc/operations/cleaning_up_redis_sessions.md | 53 +- doc/operations/moving_repositories.md | 181 +-- doc/operations/sidekiq_memory_killer.md | 41 +- doc/operations/unicorn.md | 87 +- doc/raketasks/backup_hrz.png | Bin 8907 -> 31784 bytes doc/raketasks/backup_restore.md | 57 +- doc/raketasks/user_management.md | 15 + doc/university/README.md | 216 +++ doc/university/bookclub/booklist.md | 113 ++ doc/university/bookclub/index.md | 19 + doc/university/glossary/README.md | 482 +++++++ .../high-availability/aws/README.md | 387 ++++++ .../aws/img/auto-scaling-det.png | Bin 0 -> 106157 bytes .../aws/img/db-subnet-group.png | Bin 0 -> 98632 bytes .../high-availability/aws/img/ec-subnet.png | Bin 0 -> 91922 bytes .../aws/img/elastic-file-system.png | Bin 0 -> 109719 bytes .../high-availability/aws/img/ig-rt.png | Bin 0 -> 42022 bytes .../high-availability/aws/img/ig.png | Bin 0 -> 26220 bytes .../aws/img/instance_specs.png | Bin 0 -> 40938 bytes .../high-availability/aws/img/new_vpc.png | Bin 0 -> 54072 bytes .../high-availability/aws/img/policies.png | Bin 0 -> 132366 bytes .../high-availability/aws/img/rds-net-opt.png | Bin 0 -> 54996 bytes .../aws/img/rds-sec-group.png | Bin 0 -> 43950 bytes .../aws/img/redis-cluster-det.png | Bin 0 -> 81524 bytes .../high-availability/aws/img/redis-net.png | Bin 0 -> 100700 bytes .../high-availability/aws/img/route_table.png | Bin 0 -> 39611 bytes .../high-availability/aws/img/subnet.png | Bin 0 -> 56466 bytes doc/university/process/README.md | 30 + doc/university/support/README.md | 188 +++ doc/university/training/end-user/README.md | 420 ++++++ doc/update/8.0-to-8.1.md | 4 + doc/update/8.1-to-8.2.md | 4 + doc/update/8.10-to-8.11.md | 8 +- doc/update/8.11-to-8.12.md | 8 +- doc/update/8.12-to-8.13.md | 205 +++ doc/update/8.2-to-8.3.md | 4 + doc/update/8.3-to-8.4.md | 4 + doc/update/8.4-to-8.5.md | 4 + doc/update/8.5-to-8.6.md | 4 + doc/update/8.6-to-8.7.md | 4 + doc/update/8.7-to-8.8.md | 4 + doc/update/8.8-to-8.9.md | 4 + doc/update/8.9-to-8.10.md | 4 + .../admin_area/monitoring/health_check.md | 66 + .../monitoring/img/health_check_token.png | Bin doc/user/markdown.md | 10 + doc/user/permissions.md | 2 + doc/user/project/container_registry.md | 253 ++++ doc/user/project/cycle_analytics.md | 110 +- doc/user/project/git_attributes.md | 22 + .../project/img/container_registry_enable.png | Bin 0 -> 5526 bytes .../project/img/container_registry_panel.png | Bin 0 -> 96315 bytes .../project/img/container_registry_tab.png | Bin 0 -> 7284 bytes .../img/cycle_analytics_landing_page.png | Bin 58203 -> 66080 bytes .../project}/img/mitmproxy-docker.png | Bin doc/user/project/issue_board.md | 7 +- ...sions-compare.png => versions_compare.png} | Bin ...ons-dropdown.png => versions_dropdown.png} | Bin .../img/versions_system_note.png | Bin 0 -> 18731 bytes .../merge_when_build_succeeds.md | 20 +- doc/user/project/merge_requests/versions.md | 38 +- .../project/new_ci_build_permissions_model.md | 52 +- .../img/web_editor_new_branch_from_issue.png | Bin 0 -> 4728 bytes doc/user/project/repository/web_editor.md | 4 +- doc/user/project/settings/import_export.md | 6 +- doc/user/project/slash_commands.md | 3 +- doc/workflow/gitlab_flow.md | 2 +- doc/workflow/importing/migrating_from_svn.md | 108 +- docker/README.md | 4 +- features/explore/projects.feature | 1 + features/groups.feature | 5 - features/profile/ssh_keys.feature | 20 - features/project/commits/commits.feature | 5 + features/project/issues/issues.feature | 1 + features/project/snippets.feature | 2 +- features/project/source/browse_files.feature | 17 +- features/steps/admin/groups.rb | 2 +- features/steps/admin/projects.rb | 2 +- features/steps/dashboard/new_project.rb | 1 + features/steps/group/members.rb | 14 +- features/steps/groups.rb | 12 - features/steps/profile/profile.rb | 2 + features/steps/profile/ssh_keys.rb | 46 - features/steps/project/active_tab.rb | 2 +- features/steps/project/commits/commits.rb | 34 +- .../steps/project/forked_merge_requests.rb | 14 +- features/steps/project/graph.rb | 4 +- features/steps/project/issues/issues.rb | 3 +- features/steps/project/issues/labels.rb | 2 +- features/steps/project/merge_requests.rb | 14 +- features/steps/project/snippets.rb | 4 +- features/steps/project/source/browse_files.rb | 4 + features/steps/project/team_management.rb | 17 +- features/steps/shared/note.rb | 4 +- features/steps/shared/project.rb | 4 + features/support/capybara.rb | 2 +- features/support/db_cleaner.rb | 2 +- features/support/env.rb | 2 +- features/support/rerun.rb | 2 + features/support/wait_for_ajax.rb | 11 - lib/api/access_requests.rb | 78 +- lib/api/api.rb | 14 +- lib/api/award_emoji.rb | 64 +- lib/api/boards.rb | 132 ++ lib/api/branches.rb | 48 +- lib/api/commits.rb | 161 ++- lib/api/entities.rb | 33 +- lib/api/groups.rb | 3 + lib/api/helpers.rb | 24 +- lib/api/keys.rb | 7 +- lib/api/labels.rb | 2 +- lib/api/license_templates.rb | 58 - lib/api/members.rb | 113 +- lib/api/merge_requests.rb | 15 +- lib/api/milestones.rb | 3 +- lib/api/namespaces.rb | 22 +- lib/api/projects.rb | 68 +- lib/api/system_hooks.rb | 66 +- lib/api/templates.rb | 120 +- lib/api/todos.rb | 45 +- lib/api/users.rb | 26 +- lib/api/variables.rb | 89 +- lib/api/version.rb | 12 + lib/banzai.rb | 4 + .../filter/abstract_reference_filter.rb | 40 +- lib/banzai/filter/emoji_filter.rb | 53 +- .../filter/external_issue_reference_filter.rb | 29 +- lib/banzai/filter/external_link_filter.rb | 34 +- lib/banzai/filter/html_entity_filter.rb | 12 + lib/banzai/filter/issue_reference_filter.rb | 10 +- lib/banzai/filter/label_reference_filter.rb | 51 +- lib/banzai/filter/sanitization_filter.rb | 2 +- lib/banzai/filter/set_direction_filter.rb | 15 + lib/banzai/filter/syntax_highlight_filter.rb | 2 +- lib/banzai/filter/task_list_filter.rb | 20 - lib/banzai/filter/user_reference_filter.rb | 14 +- lib/banzai/note_renderer.rb | 5 +- lib/banzai/object_renderer.rb | 53 +- lib/banzai/pipeline/gfm_pipeline.rb | 4 +- lib/banzai/pipeline/single_line_pipeline.rb | 1 + lib/banzai/reference_parser/base_parser.rb | 6 +- lib/banzai/renderer.rb | 32 +- lib/ci/api/builds.rb | 6 +- lib/ci/api/helpers.rb | 29 +- lib/ci/gitlab_ci_yaml_processor.rb | 32 +- lib/ci/version_info.rb | 52 - lib/constraints/group_url_constrainer.rb | 7 + lib/constraints/namespace_url_constrainer.rb | 24 + lib/constraints/user_url_constrainer.rb | 7 + lib/event_filter.rb | 23 +- lib/extracts_path.rb | 40 +- lib/gitlab/access.rb | 4 + lib/gitlab/backend/shell.rb | 46 +- lib/gitlab/ci/config/node/environment.rb | 18 +- lib/gitlab/ci/trace_reader.rb | 49 + lib/gitlab/conflict/file.rb | 62 +- lib/gitlab/conflict/file_collection.rb | 4 + lib/gitlab/conflict/parser.rb | 17 +- lib/gitlab/conflict/resolution_error.rb | 6 + lib/gitlab/current_settings.rb | 4 +- lib/gitlab/diff/file.rb | 4 + .../file_collection/merge_request_diff.rb | 10 +- .../email/handler/create_note_handler.rb | 4 +- lib/gitlab/emoji.rb | 10 +- lib/gitlab/exclusive_lease.rb | 9 +- lib/gitlab/fogbugz_import/importer.rb | 30 +- lib/gitlab/gfm/reference_rewriter.rb | 10 +- lib/gitlab/github_import/base_formatter.rb | 4 +- lib/gitlab/github_import/client.rb | 23 +- lib/gitlab/github_import/importer.rb | 214 ++- lib/gitlab/github_import/issue_formatter.rb | 8 +- lib/gitlab/github_import/label_formatter.rb | 14 +- .../github_import/milestone_formatter.rb | 8 +- lib/gitlab/github_import/project_creator.rb | 35 +- .../github_import/pull_request_formatter.rb | 8 +- lib/gitlab/github_import/release_formatter.rb | 8 +- lib/gitlab/google_code_import/importer.rb | 24 +- lib/gitlab/identifier.rb | 58 +- lib/gitlab/import_export.rb | 2 +- lib/gitlab/import_export/attribute_cleaner.rb | 28 + lib/gitlab/import_export/command_line_util.rb | 9 +- lib/gitlab/import_export/file_importer.rb | 10 +- lib/gitlab/import_export/import_export.yml | 13 +- lib/gitlab/import_export/json_hash_builder.rb | 6 + lib/gitlab/import_export/members_mapper.rb | 7 +- .../import_export/project_tree_restorer.rb | 19 +- .../import_export/project_tree_saver.rb | 4 +- lib/gitlab/import_export/relation_factory.rb | 54 +- lib/gitlab/import_export/repo_restorer.rb | 2 +- lib/gitlab/import_export/repo_saver.rb | 2 +- lib/gitlab/import_export/version_checker.rb | 9 +- lib/gitlab/import_export/version_saver.rb | 4 +- lib/gitlab/import_export/wiki_repo_saver.rb | 2 +- lib/gitlab/issues_labels.rb | 4 +- lib/gitlab/ldap/access.rb | 2 - lib/gitlab/ldap/adapter.rb | 9 +- lib/gitlab/lfs_token.rb | 9 +- lib/gitlab/redis.rb | 47 +- lib/gitlab/regex.rb | 10 +- .../sidekiq_middleware/arguments_logger.rb | 2 +- lib/gitlab/workhorse.rb | 14 +- lib/tasks/.gitkeep | 0 lib/tasks/cache.rake | 43 +- lib/tasks/ce_to_ee_merge_check.rake | 4 + lib/tasks/ci/.gitkeep | 0 lib/tasks/flog.rake | 25 - lib/tasks/gitlab/check.rake | 6 +- lib/tasks/gitlab/dev.rake | 107 ++ lib/tasks/gitlab/shell.rake | 2 +- lib/tasks/gitlab/users.rake | 11 + public/deploy.html | 7 +- public/robots.txt | 2 +- scripts/lint-doc.sh | 9 + scripts/prepare_build.sh | 17 +- .../groups/group_members_controller_spec.rb | 7 +- .../controllers/namespaces_controller_spec.rb | 118 -- .../projects/blob_controller_spec.rb | 1 - .../projects/boards/issues_controller_spec.rb | 106 +- .../projects/boards/lists_controller_spec.rb | 64 +- .../projects/boards_controller_spec.rb | 86 +- .../projects/commit_controller_spec.rb | 16 +- .../projects/commits_controller_spec.rb | 41 +- .../projects/graphs_controller_spec.rb | 44 + .../projects/group_links_controller_spec.rb | 37 +- .../projects/labels_controller_spec.rb | 87 +- .../merge_requests_controller_spec.rb | 265 +++- .../project_members_controller_spec.rb | 42 +- .../projects/repositories_controller_spec.rb | 2 +- .../projects/tags_controller_spec.rb | 14 + .../projects/templates_controller_spec.rb | 2 +- spec/controllers/projects_controller_spec.rb | 62 + spec/controllers/sessions_controller_spec.rb | 38 + spec/factories/boards.rb | 5 + spec/factories/group_members.rb | 6 + spec/factories/label_priorities.rb | 7 + spec/factories/labels.rb | 18 +- spec/factories/merge_requests.rb | 10 + spec/factories/milestones.rb | 9 +- spec/factories/project_members.rb | 23 +- spec/factories/projects.rb | 30 +- spec/features/atom/users_spec.rb | 2 +- spec/features/boards/boards_spec.rb | 52 +- .../features/boards/keyboard_shortcut_spec.rb | 4 +- spec/features/boards/new_issue_spec.rb | 81 ++ spec/features/calendar_spec.rb | 111 +- spec/features/compare_spec.rb | 26 +- spec/features/dashboard_issues_spec.rb | 3 + spec/features/environments_spec.rb | 128 +- spec/features/expand_collapse_diffs_spec.rb | 40 +- .../owner_manages_access_requests_spec.rb | 2 +- spec/features/groups_spec.rb | 82 +- spec/features/issues/award_emoji_spec.rb | 46 +- spec/features/issues/filter_by_labels_spec.rb | 137 +- spec/features/issues/filter_issues_spec.rb | 43 +- spec/features/issues/form_spec.rb | 119 ++ spec/features/issues/move_spec.rb | 2 +- spec/features/issues/reset_filters_spec.rb | 8 + .../issues/user_uses_slash_commands_spec.rb | 82 +- spec/features/issues_spec.rb | 5 +- spec/features/login_spec.rb | 67 +- .../merge_requests/assign_issues_spec.rb | 51 + .../features/merge_requests/conflicts_spec.rb | 139 +- .../merge_requests/created_from_fork_spec.rb | 16 +- .../filter_by_milestone_spec.rb | 3 + spec/features/merge_requests/form_spec.rb | 273 ++++ .../merge_request_versions_spec.rb | 19 +- .../merge_when_build_succeeds_spec.rb | 61 +- .../user_uses_slash_commands_spec.rb | 53 +- .../merge_requests/widget_deployments_spec.rb | 61 + spec/features/notes_on_merge_requests_spec.rb | 12 + spec/features/profiles/keys_spec.rb | 47 +- .../features/projects/badges/coverage_spec.rb | 2 +- .../projects/features_visibility_spec.rb | 30 + .../files/edit_file_soft_wrap_spec.rb | 41 + .../projects/files/find_file_keyboard_spec.rb | 42 + .../projects/guest_navigation_menu_spec.rb | 28 + .../import_export/export_file_spec.rb | 2 + .../import_export/import_file_spec.rb | 53 +- .../import_export/test_project_export.tar.gz | Bin 1363770 -> 681774 bytes .../projects/issuable_templates_spec.rb | 56 +- .../labels/update_prioritization_spec.rb | 100 +- .../projects/members/group_links_spec.rb | 66 + ...r_adds_member_with_expiration_date_spec.rb | 8 +- .../master_manages_access_requests_spec.rb | 2 +- .../owner_cannot_leave_project_spec.rb | 4 +- ...nnot_request_access_to_his_project_spec.rb | 4 +- spec/features/projects/pipelines_spec.rb | 2 +- .../settings}/pipelines_settings_spec.rb | 3 +- spec/features/projects_spec.rb | 6 +- spec/features/runners_spec.rb | 4 +- .../security/project/private_access_spec.rb | 2 +- spec/features/signup_spec.rb | 8 +- spec/features/todos/todos_sorting_spec.rb | 118 +- spec/features/todos/todos_spec.rb | 8 +- spec/features/u2f_spec.rb | 14 +- spec/features/users_spec.rb | 53 +- spec/finders/access_requests_finder_spec.rb | 89 ++ spec/finders/joined_groups_finder_spec.rb | 2 +- spec/finders/labels_finder_spec.rb | 101 ++ spec/finders/projects_finder_spec.rb | 2 +- spec/finders/trending_projects_finder_spec.rb | 39 - spec/fixtures/api/schemas/board.json | 11 + spec/fixtures/api/schemas/boards.json | 4 + spec/fixtures/api/schemas/conflicts.json | 137 ++ spec/fixtures/api/schemas/list.json | 2 +- spec/fixtures/emails/commands_in_reply.eml | 2 - spec/fixtures/emails/commands_only_reply.eml | 2 - .../helpers/broadcast_messages_helper_spec.rb | 4 +- spec/helpers/events_helper_spec.rb | 17 + spec/helpers/issuables_helper_spec.rb | 105 +- spec/helpers/issues_helper_spec.rb | 36 +- spec/helpers/labels_helper_spec.rb | 29 +- spec/helpers/members_helper_spec.rb | 4 +- spec/helpers/milestones_helper_spec.rb | 33 + spec/helpers/projects_helper_spec.rb | 2 +- spec/helpers/search_helper_spec.rb | 2 +- spec/javascripts/activities_spec.js.es6 | 61 + .../boards/boards_store_spec.js.es6 | 2 +- spec/javascripts/boards/issue_spec.js.es6 | 2 +- spec/javascripts/boards/list_spec.js.es6 | 2 +- spec/javascripts/boards/mock_data.js.es6 | 8 +- .../fixtures/event_filter.html.haml | 21 + .../fixtures/gl_field_errors.html.haml | 15 + spec/javascripts/gl_field_errors_spec.js.es6 | 111 ++ spec/javascripts/merge_request_tabs_spec.js | 1 + spec/javascripts/merge_request_widget_spec.js | 54 +- spec/javascripts/search_autocomplete_spec.js | 23 +- spec/javascripts/u2f/authenticate_spec.js | 2 +- spec/lib/banzai/filter/emoji_filter_spec.rb | 85 +- .../external_issue_reference_filter_spec.rb | 76 +- .../filter/external_link_filter_spec.rb | 34 + .../banzai/filter/html_entity_filter_spec.rb | 19 + .../filter/issue_reference_filter_spec.rb | 17 +- .../filter/label_reference_filter_spec.rb | 82 ++ .../filter/syntax_highlight_filter_spec.rb | 8 +- .../banzai/filter/task_list_filter_spec.rb | 16 - .../filter/user_reference_filter_spec.rb | 9 + spec/lib/banzai/note_renderer_spec.rb | 3 +- spec/lib/banzai/object_renderer_spec.rb | 66 +- .../pipeline/description_pipeline_spec.rb | 12 +- spec/lib/banzai/renderer_spec.rb | 74 + spec/lib/ci/gitlab_ci_yaml_processor_spec.rb | 48 +- .../constraints/group_url_constrainer_spec.rb | 10 + .../namespace_url_constrainer_spec.rb | 35 + .../constraints/user_url_constrainer_spec.rb | 10 + spec/lib/event_filter_spec.rb | 49 + spec/lib/extracts_path_spec.rb | 87 +- spec/lib/gitlab/backend/shell_spec.rb | 9 +- spec/lib/gitlab/badge/coverage/report_spec.rb | 2 +- .../gitlab/ci/config/node/environment_spec.rb | 64 +- spec/lib/gitlab/ci/trace_reader_spec.rb | 40 + spec/lib/gitlab/conflict/file_spec.rb | 11 + spec/lib/gitlab/data_builder/push_spec.rb | 8 +- .../email/handler/create_note_handler_spec.rb | 24 +- spec/lib/gitlab/exclusive_lease_spec.rb | 43 +- .../lib/gitlab/gfm/reference_rewriter_spec.rb | 26 +- spec/lib/gitlab/git_access_spec.rb | 12 +- spec/lib/gitlab/github_import/client_spec.rb | 2 +- .../lib/gitlab/github_import/importer_spec.rb | 21 +- .../github_import/project_creator_spec.rb | 24 +- .../google_code_import/importer_spec.rb | 7 +- spec/lib/gitlab/identifier_spec.rb | 123 ++ spec/lib/gitlab/import_export/all_models.yml | 8 +- .../import_export/attribute_cleaner_spec.rb | 37 + .../attribute_configuration_spec.rb | 5 +- .../import_export/file_importer_spec.rb | 42 + spec/lib/gitlab/import_export/project.json | 52 +- .../project_tree_restorer_spec.rb | 51 +- .../import_export/project_tree_saver_spec.rb | 23 +- .../import_export/relation_factory_spec.rb | 125 ++ .../import_export/safe_model_attributes.yml | 12 +- .../import_export/version_checker_spec.rb | 16 +- spec/lib/gitlab/ldap/adapter_spec.rb | 37 +- spec/lib/gitlab/redis_spec.rb | 86 +- .../gitlab/template/issue_template_spec.rb | 6 +- .../template/merge_request_template_spec.rb | 6 +- spec/lib/gitlab/workhorse_spec.rb | 40 +- spec/mailers/notify_spec.rb | 59 +- spec/mailers/shared/notify.rb | 10 + spec/models/abuse_report_spec.rb | 4 + spec/models/appearance_spec.rb | 2 +- spec/models/build_spec.rb | 4 +- spec/models/ci/pipeline_spec.rb | 51 +- spec/models/commit_spec.rb | 8 +- spec/models/commit_status_spec.rb | 55 +- .../concerns/cache_markdown_field_spec.rb | 181 +++ spec/models/concerns/has_status_spec.rb | 43 +- spec/models/concerns/issuable_spec.rb | 14 + spec/models/concerns/mentionable_spec.rb | 22 +- spec/models/cycle_analytics/code_spec.rb | 82 +- spec/models/cycle_analytics/issue_spec.rb | 2 - spec/models/cycle_analytics/plan_spec.rb | 2 - spec/models/cycle_analytics/review_spec.rb | 4 +- spec/models/cycle_analytics/test_spec.rb | 6 - spec/models/deploy_key_spec.rb | 3 - spec/models/deployment_spec.rb | 55 + spec/models/environment_spec.rb | 87 ++ spec/models/event_spec.rb | 119 +- spec/models/external_issue_spec.rb | 15 - spec/models/global_milestone_spec.rb | 5 +- spec/models/group_label_spec.rb | 47 + spec/models/group_spec.rb | 7 + spec/models/issue/metrics_spec.rb | 8 +- spec/models/issue_spec.rb | 2 +- spec/models/key_spec.rb | 3 - spec/models/label_link_spec.rb | 3 +- spec/models/label_priority_spec.rb | 20 + spec/models/label_spec.rb | 130 +- spec/models/member_spec.rb | 245 +++- spec/models/members/group_member_spec.rb | 27 + spec/models/members/project_member_spec.rb | 50 +- spec/models/merge_request/metrics_spec.rb | 2 +- spec/models/merge_request_diff_spec.rb | 62 +- spec/models/merge_request_spec.rb | 218 ++- spec/models/milestone_spec.rb | 4 +- spec/models/namespace_spec.rb | 1 + spec/models/project_feature_spec.rb | 23 +- spec/models/project_group_link_spec.rb | 2 +- spec/models/project_label_spec.rb | 120 ++ .../project_services/hipchat_service_spec.rb | 2 +- .../project_services/jira_service_spec.rb | 9 + .../pipeline_email_service_spec.rb | 182 +++ .../project_services/redmine_service_spec.rb | 8 + .../slack_service/issue_message_spec.rb | 6 +- .../slack_service/merge_message_spec.rb | 6 +- .../slack_service/note_message_spec.rb | 10 +- .../slack_service/push_message_spec.rb | 12 +- .../slack_service/wiki_page_message_spec.rb | 6 +- spec/models/project_spec.rb | 87 +- spec/models/project_team_spec.rb | 66 +- spec/models/repository_spec.rb | 101 +- spec/models/service_spec.rb | 19 +- spec/models/snippet_spec.rb | 7 + spec/models/trending_project_spec.rb | 56 + spec/models/user_spec.rb | 17 + spec/policies/issues_policy_spec.rb | 193 +++ spec/policies/project_policy_spec.rb | 148 +- spec/requests/api/access_requests_spec.rb | 32 +- spec/requests/api/api_helpers_spec.rb | 29 +- spec/requests/api/boards_spec.rb | 201 +++ spec/requests/api/branches_spec.rb | 218 +-- spec/requests/api/builds_spec.rb | 27 + spec/requests/api/commits_spec.rb | 285 +++- spec/requests/api/groups_spec.rb | 10 + spec/requests/api/issues_spec.rb | 4 +- spec/requests/api/labels_spec.rb | 11 +- spec/requests/api/license_templates_spec.rb | 136 -- spec/requests/api/members_spec.rb | 27 +- spec/requests/api/merge_requests_spec.rb | 4 +- spec/requests/api/milestones_spec.rb | 8 + spec/requests/api/notes_spec.rb | 2 +- spec/requests/api/project_hooks_spec.rb | 5 +- spec/requests/api/projects_spec.rb | 85 +- spec/requests/api/repositories_spec.rb | 8 +- spec/requests/api/settings_spec.rb | 36 +- spec/requests/api/system_hooks_spec.rb | 7 +- spec/requests/api/templates_spec.rb | 228 +++- spec/requests/api/users_spec.rb | 136 +- spec/requests/api/version_spec.rb | 27 + spec/requests/ci/api/builds_spec.rb | 41 +- spec/requests/git_http_spec.rb | 909 ++++++------- spec/routing/project_routing_spec.rb | 2 +- spec/routing/routing_spec.rb | 26 +- spec/services/boards/create_service_spec.rb | 22 +- .../boards/issues/create_service_spec.rb | 33 + .../boards/issues/list_service_spec.rb | 37 +- .../boards/issues/move_service_spec.rb | 36 +- spec/services/boards/list_service_spec.rb | 37 + .../boards/lists/create_service_spec.rb | 26 +- .../boards/lists/destroy_service_spec.rb | 12 +- .../boards/lists/generate_service_spec.rb | 19 +- .../boards/lists/list_service_spec.rb | 16 + .../boards/lists/move_service_spec.rb | 4 +- .../ci/process_pipeline_service_spec.rb | 101 +- ...send_pipeline_notification_service_spec.rb | 48 + spec/services/compare_service_spec.rb | 21 + .../create_deployment_service_spec.rb | 88 +- spec/services/files/update_service_spec.rb | 4 +- spec/services/git_push_service_spec.rb | 64 +- spec/services/issues/create_service_spec.rb | 57 +- spec/services/issues/move_service_spec.rb | 43 +- spec/services/issues/update_service_spec.rb | 95 +- .../labels/find_or_create_service_spec.rb | 62 + spec/services/labels/transfer_service_spec.rb | 56 + .../approve_access_request_service_spec.rb | 147 ++ spec/services/members/destroy_service_spec.rb | 125 +- .../members/request_access_service_spec.rb | 57 + .../assign_issues_service_spec.rb | 61 + .../merge_requests/build_service_spec.rb | 20 +- .../merge_requests/merge_service_spec.rb | 79 +- .../merge_when_build_succeeds_service_spec.rb | 127 +- .../merge_requests/refresh_service_spec.rb | 19 +- .../merge_requests/resolve_service_spec.rb | 141 +- .../merge_requests/update_service_spec.rb | 18 + spec/services/notification_service_spec.rb | 71 +- .../services/projects/destroy_service_spec.rb | 23 +- spec/services/projects/import_service_spec.rb | 10 + .../projects/transfer_service_spec.rb | 10 + .../slash_commands/interpret_service_spec.rb | 141 +- spec/services/system_note_service_spec.rb | 28 +- spec/services/todo_service_spec.rb | 22 +- spec/spec_helper.rb | 8 +- ...issuable_slash_commands_shared_examples.rb | 0 spec/support/git_http_helpers.rb | 48 + spec/support/import_export/common_util.rb | 10 + .../import_export/export_file_helper.rb | 4 + .../issue_tracker_service_shared_example.rb | 15 + spec/support/matchers/be_like_time.rb | 13 + spec/support/matchers/have_issuable_counts.rb | 21 + spec/support/mentionable_shared_examples.rb | 4 +- ..._service_slash_commands_shared_examples.rb | 0 spec/support/test_env.rb | 13 +- spec/support/wait_for_ajax.rb | 4 + spec/tasks/gitlab/users_rake_spec.rb | 38 + .../admin/dashboard/index.html.haml_spec.rb | 2 +- spec/views/ci/lints/show.html.haml_spec.rb | 96 +- .../shared/_signin_box.html.haml_spec.rb | 4 +- .../projects/builds/show.html.haml_spec.rb | 2 +- .../_related_branches.html.haml_spec.rb | 2 +- .../merge_requests/_heading.html.haml_spec.rb | 28 - .../merge_requests/edit.html.haml_spec.rb | 7 +- .../merge_requests/show.html.haml_spec.rb | 15 +- .../projects/notes/_form.html.haml_spec.rb | 2 +- .../projects/pipelines/show.html.haml_spec.rb | 2 +- .../projects/tree/show.html.haml_spec.rb | 2 +- spec/workers/build_coverage_worker_spec.rb | 23 + spec/workers/build_finished_worker_spec.rb | 30 + spec/workers/build_hooks_worker_spec.rb | 23 + spec/workers/build_success_worker_spec.rb | 36 + spec/workers/concerns/build_queue_spec.rb | 14 + spec/workers/concerns/cronjob_queue_spec.rb | 18 + .../concerns/dedicated_sidekiq_queue_spec.rb | 20 + spec/workers/concerns/pipeline_queue_spec.rb | 14 + .../concerns/repository_check_queue_spec.rb | 18 + spec/workers/emails_on_push_worker_spec.rb | 4 +- spec/workers/every_sidekiq_worker_spec.rb | 44 + .../expire_build_artifacts_worker_spec.rb | 51 +- ...re_build_instance_artifacts_worker_spec.rb | 89 ++ spec/workers/pipeline_hooks_worker_spec.rb | 23 + spec/workers/pipeline_metrics_worker_spec.rb | 46 + spec/workers/pipeline_proccess_worker_spec.rb | 22 + spec/workers/pipeline_success_worker_spec.rb | 24 + spec/workers/pipeline_update_worker_spec.rb | 22 + spec/workers/post_receive_spec.rb | 12 +- spec/workers/project_cache_worker_spec.rb | 60 +- spec/workers/trending_projects_worker_spec.rb | 11 + .../update_merge_requests_worker_spec.rb | 38 + vendor/gitignore/Erlang.gitignore | 2 +- vendor/gitignore/Global/Ansible.gitignore | 1 + vendor/gitignore/Global/Linux.gitignore | 3 + vendor/gitignore/Go.gitignore | 3 + vendor/gitignore/Node.gitignore | 3 + vendor/gitignore/TeX.gitignore | 3 + vendor/gitignore/VisualStudio.gitignore | 8 + vendor/gitlab-ci-yml/.gitlab-ci.yml | 4 + vendor/gitlab-ci-yml/Gradle.gitlab-ci.yml | 34 + vendor/gitlab-ci-yml/Julia.gitlab-ci.yml | 54 + 1424 files changed, 34205 insertions(+), 13274 deletions(-) delete mode 100644 .vagrant_enabled rename CHANGELOG => CHANGELOG.md (88%) create mode 100644 app/assets/images/mailers/ci_pipeline_notif_v1/gitlab-logo-full-horizontal.gif create mode 100644 app/assets/images/mailers/ci_pipeline_notif_v1/gitlab-logo.gif create mode 100644 app/assets/images/mailers/ci_pipeline_notif_v1/icon-branch-gray.gif create mode 100644 app/assets/images/mailers/ci_pipeline_notif_v1/icon-check-green-inverted.gif create mode 100644 app/assets/images/mailers/ci_pipeline_notif_v1/icon-commit-gray.gif create mode 100644 app/assets/images/mailers/ci_pipeline_notif_v1/icon-x-red-inverted.gif create mode 100644 app/assets/images/mailers/ci_pipeline_notif_v1/icon-x-red.gif delete mode 100644 app/assets/javascripts/LabelManager.js delete mode 100644 app/assets/javascripts/blob/blob_ci_yaml.js create mode 100644 app/assets/javascripts/blob/blob_ci_yaml.js.es6 delete mode 100644 app/assets/javascripts/blob/blob_license_selectors.js create mode 100644 app/assets/javascripts/blob/blob_license_selectors.js.es6 delete mode 100644 app/assets/javascripts/blob/template_selector.js create mode 100644 app/assets/javascripts/blob/template_selector.js.es6 create mode 100644 app/assets/javascripts/boards/components/board_new_issue.js.es6 rename app/assets/javascripts/commit/{image-file.js => image_file.js} (100%) rename app/assets/javascripts/{compare_autocomplete.js => compare_autocomplete.js.es6} (66%) rename app/assets/javascripts/{cycle-analytics.js.es6 => cycle_analytics.js.es6} (94%) rename app/assets/javascripts/{dispatcher.js => dispatcher.js.es6} (89%) delete mode 100644 app/assets/javascripts/due_date_select.js create mode 100644 app/assets/javascripts/due_date_select.js.es6 create mode 100644 app/assets/javascripts/gl_field_errors.js.es6 delete mode 100644 app/assets/javascripts/groups.js rename app/assets/javascripts/{issues-bulk-assignment.js => issues_bulk_assignment.js.es6} (51%) create mode 100644 app/assets/javascripts/label_manager.js.es6 create mode 100644 app/assets/javascripts/members.js.es6 delete mode 100644 app/assets/javascripts/merge_conflict_data_provider.js.es6 delete mode 100644 app/assets/javascripts/merge_conflict_resolver.js.es6 create mode 100644 app/assets/javascripts/merge_conflicts/components/diff_file_editor.js.es6 create mode 100644 app/assets/javascripts/merge_conflicts/components/inline_conflict_lines.js.es6 create mode 100644 app/assets/javascripts/merge_conflicts/components/parallel_conflict_line.js.es6 create mode 100644 app/assets/javascripts/merge_conflicts/components/parallel_conflict_lines.js.es6 create mode 100644 app/assets/javascripts/merge_conflicts/merge_conflict_service.js.es6 create mode 100644 app/assets/javascripts/merge_conflicts/merge_conflict_store.js.es6 create mode 100644 app/assets/javascripts/merge_conflicts/merge_conflicts_bundle.js.es6 create mode 100644 app/assets/javascripts/merge_conflicts/mixins/line_conflict_actions.js.es6 create mode 100644 app/assets/javascripts/merge_conflicts/mixins/line_conflict_utils.js.es6 rename app/assets/javascripts/{merge_request_widget.js => merge_request_widget.js.es6} (65%) rename app/assets/javascripts/network/{branch-graph.js => branch_graph.js} (100%) delete mode 100644 app/assets/javascripts/pipeline.js.es6 create mode 100644 app/assets/javascripts/pipelines.js.es6 rename app/assets/javascripts/profile/{gl_crop.js => gl_crop.js.es6} (53%) delete mode 100644 app/assets/javascripts/profile/profile.js create mode 100644 app/assets/javascripts/profile/profile.js.es6 delete mode 100644 app/assets/javascripts/project_members.js rename app/assets/javascripts/{ => protected_branches}/protected_branch_access_dropdown.js.es6 (100%) rename app/assets/javascripts/{ => protected_branches}/protected_branch_create.js.es6 (100%) rename app/assets/javascripts/{ => protected_branches}/protected_branch_dropdown.js.es6 (100%) rename app/assets/javascripts/{ => protected_branches}/protected_branch_edit.js.es6 (97%) rename app/assets/javascripts/{ => protected_branches}/protected_branch_edit_list.js.es6 (100%) create mode 100644 app/assets/javascripts/protected_branches/protected_branches_bundle.js rename app/assets/javascripts/{search_autocomplete.js => search_autocomplete.js.es6} (76%) rename app/assets/javascripts/{todos.js => todos.js.es6} (52%) delete mode 100644 app/assets/javascripts/user_tabs.js create mode 100644 app/assets/javascripts/user_tabs.js.es6 create mode 100644 app/assets/javascripts/username_validator.js.es6 create mode 100644 app/assets/stylesheets/pages/members.scss delete mode 100644 app/controllers/ci/application_controller.rb create mode 100644 app/controllers/groups/labels_controller.rb delete mode 100644 app/controllers/namespaces_controller.rb delete mode 100644 app/controllers/projects/board_lists_controller.rb create mode 100644 app/finders/access_requests_finder.rb create mode 100644 app/finders/labels_finder.rb delete mode 100644 app/finders/trending_projects_finder.rb create mode 100644 app/helpers/boards_helper.rb create mode 100644 app/helpers/builds_helper.rb delete mode 100644 app/mailers/.gitkeep create mode 100644 app/mailers/emails/pipelines.rb create mode 100644 app/models/concerns/cache_markdown_field.rb create mode 100644 app/models/group_label.rb create mode 100644 app/models/label_priority.rb create mode 100644 app/models/project_label.rb create mode 100644 app/models/project_services/pipelines_email_service.rb create mode 100644 app/models/trending_project.rb create mode 100644 app/policies/group_label_policy.rb create mode 100644 app/policies/project_label_policy.rb delete mode 100644 app/services/boards/base_service.rb create mode 100644 app/services/boards/issues/create_service.rb create mode 100644 app/services/boards/list_service.rb create mode 100644 app/services/boards/lists/list_service.rb create mode 100644 app/services/ci/send_pipeline_notification_service.rb create mode 100644 app/services/files/multi_service.rb create mode 100644 app/services/labels/find_or_create_service.rb create mode 100644 app/services/labels/transfer_service.rb create mode 100644 app/services/members/approve_access_request_service.rb create mode 100644 app/services/members/request_access_service.rb create mode 100644 app/services/merge_requests/assign_issues_service.rb create mode 100644 app/services/protected_branches/api_create_service.rb create mode 100644 app/services/protected_branches/api_update_service.rb create mode 100644 app/views/dashboard/groups/_empty_state.html.haml create mode 100644 app/views/devise/shared/_tab_single.html.haml create mode 100644 app/views/devise/shared/_tabs_ldap.html.haml create mode 100644 app/views/devise/shared/_tabs_normal.html.haml create mode 100644 app/views/groups/labels/destroy.js.haml create mode 100644 app/views/groups/labels/edit.html.haml create mode 100644 app/views/groups/labels/index.html.haml create mode 100644 app/views/groups/labels/new.html.haml create mode 100644 app/views/notify/pipeline_failed_email.html.haml create mode 100644 app/views/notify/pipeline_failed_email.text.erb create mode 100644 app/views/notify/pipeline_success_email.html.haml create mode 100644 app/views/notify/pipeline_success_email.text.erb create mode 100644 app/views/projects/_customize_workflow.html.haml create mode 100644 app/views/projects/_wiki.html.haml create mode 100644 app/views/projects/boards/index.html.haml create mode 100644 app/views/projects/commit/pipelines.html.haml create mode 100644 app/views/projects/deployments/_rollback.haml create mode 100644 app/views/projects/environments/_external_url.html.haml create mode 100644 app/views/projects/environments/_stop.html.haml create mode 100644 app/views/projects/group_links/update.js.haml delete mode 100644 app/views/projects/labels/_label.html.haml create mode 100644 app/views/projects/merge_requests/_new_diffs.html.haml create mode 100644 app/views/projects/merge_requests/conflicts/_file_actions.html.haml delete mode 100644 app/views/projects/merge_requests/conflicts/_inline_view.html.haml delete mode 100644 app/views/projects/merge_requests/conflicts/_parallel_view.html.haml create mode 100644 app/views/projects/merge_requests/conflicts/components/_diff_file_editor.html.haml create mode 100644 app/views/projects/merge_requests/conflicts/components/_inline_conflict_lines.html.haml create mode 100644 app/views/projects/merge_requests/conflicts/components/_parallel_conflict_line.html.haml create mode 100644 app/views/projects/merge_requests/conflicts/components/_parallel_conflict_lines.html.haml create mode 100644 app/views/projects/project_members/_groups.html.haml create mode 100644 app/views/shared/_label.html.haml create mode 100644 app/views/shared/icons/_icon_empty_groups.svg create mode 100644 app/views/shared/icons/_icon_no_wrap.svg create mode 100644 app/views/shared/icons/_icon_soft_wrap.svg create mode 100644 app/views/shared/icons/_illustration_no_commits.svg rename app/views/{projects => shared}/labels/_form.html.haml (75%) create mode 100644 app/views/shared/members/_group.html.haml create mode 100644 app/workers/build_coverage_worker.rb create mode 100644 app/workers/build_finished_worker.rb create mode 100644 app/workers/build_hooks_worker.rb create mode 100644 app/workers/build_success_worker.rb create mode 100644 app/workers/clear_database_cache_worker.rb create mode 100644 app/workers/concerns/build_queue.rb create mode 100644 app/workers/concerns/cronjob_queue.rb create mode 100644 app/workers/concerns/dedicated_sidekiq_queue.rb create mode 100644 app/workers/concerns/pipeline_queue.rb create mode 100644 app/workers/concerns/repository_check_queue.rb create mode 100644 app/workers/expire_build_instance_artifacts_worker.rb create mode 100644 app/workers/pipeline_hooks_worker.rb create mode 100644 app/workers/pipeline_metrics_worker.rb create mode 100644 app/workers/pipeline_process_worker.rb create mode 100644 app/workers/pipeline_success_worker.rb create mode 100644 app/workers/pipeline_update_worker.rb create mode 100644 app/workers/trending_projects_worker.rb create mode 100644 app/workers/update_merge_requests_worker.rb create mode 100644 config/initializers/7_redis.rb create mode 100644 config/initializers/ar5_batching.rb create mode 100644 config/initializers/ar_speed_up_migration_checking.rb create mode 100644 config/routes/admin.rb create mode 100644 config/routes/api.rb create mode 100644 config/routes/ci.rb create mode 100644 config/routes/dashboard.rb create mode 100644 config/routes/development.rb create mode 100644 config/routes/explore.rb create mode 100644 config/routes/group.rb create mode 100644 config/routes/help.rb create mode 100644 config/routes/import.rb create mode 100644 config/routes/profile.rb create mode 100644 config/routes/project.rb create mode 100644 config/routes/sherlock.rb create mode 100644 config/routes/sidekiq.rb create mode 100644 config/routes/snippets.rb create mode 100644 config/routes/uploads.rb create mode 100644 config/routes/user.rb create mode 100644 config/sidekiq_queues.yml create mode 100644 db/migrate/20160829114652_add_markdown_cache_columns.rb create mode 100644 db/migrate/20160919144305_add_type_to_labels.rb create mode 100644 db/migrate/20160919145149_add_group_id_to_labels.rb create mode 100644 db/migrate/20160920160832_add_index_to_labels_title.rb create mode 100644 db/migrate/20160926145521_add_organization_to_user.rb create mode 100644 db/migrate/20161006104309_add_state_to_environment.rb create mode 100644 db/migrate/20161007133303_precalculate_trending_projects.rb create mode 100644 db/migrate/20161012180455_add_repository_access_level_to_project_feature.rb create mode 100644 db/migrate/20161014173530_create_label_priorities.rb create mode 100644 db/migrate/20161017095000_add_properties_to_deployment.rb create mode 100644 db/migrate/20161017125927_add_unique_index_to_labels.rb create mode 100644 db/migrate/20161018024215_migrate_labels_priority.rb create mode 100644 db/migrate/20161018024550_remove_priority_from_labels.rb create mode 100644 db/migrate/20161018124658_make_project_owners_masters.rb create mode 100644 db/migrate/20161019190736_migrate_sidekiq_queues_from_default.rb create mode 100644 db/migrate/20161019213545_generate_project_feature_for_projects.rb create mode 100644 db/migrate/20161024042317_migrate_mailroom_queue_from_default.rb create mode 100644 doc/administration/monitoring/performance/gitlab_configuration.md create mode 100644 doc/administration/monitoring/performance/grafana_configuration.md create mode 100644 doc/administration/monitoring/performance/img/grafana_dashboard_dropdown.png create mode 100644 doc/administration/monitoring/performance/img/grafana_dashboard_import.png create mode 100644 doc/administration/monitoring/performance/img/grafana_data_source_configuration.png create mode 100644 doc/administration/monitoring/performance/img/grafana_data_source_empty.png create mode 100644 doc/administration/monitoring/performance/img/grafana_save_icon.png create mode 100644 doc/administration/monitoring/performance/img/metrics_gitlab_configuration_settings.png create mode 100644 doc/administration/monitoring/performance/img/request_profile_result.png create mode 100644 doc/administration/monitoring/performance/img/request_profiling_token.png create mode 100644 doc/administration/monitoring/performance/influxdb_configuration.md create mode 100644 doc/administration/monitoring/performance/influxdb_schema.md create mode 100644 doc/administration/monitoring/performance/introduction.md create mode 100644 doc/administration/monitoring/performance/request_profiling.md create mode 100644 doc/administration/operations.md create mode 100644 doc/administration/operations/cleaning_up_redis_sessions.md create mode 100644 doc/administration/operations/moving_repositories.md create mode 100644 doc/administration/operations/sidekiq_memory_killer.md create mode 100644 doc/administration/operations/unicorn.md create mode 100644 doc/administration/reply_by_email.md create mode 100644 doc/administration/reply_by_email_postfix_setup.md create mode 100644 doc/api/boards.md create mode 100644 doc/api/templates/gitignores.md create mode 100644 doc/api/templates/gitlab_ci_ymls.md rename doc/api/{ => templates}/licenses.md (95%) create mode 100644 doc/api/version.md create mode 100644 doc/ci/examples/test-phoenix-application.md delete mode 100644 doc/container_registry/img/container_registry.png delete mode 100644 doc/container_registry/img/project_feature.png create mode 100644 doc/development/frontend.md create mode 100644 doc/development/sidekiq_style_guide.md delete mode 100644 doc/gitlab-basics/basicsimages/add_new_merge_request.png delete mode 100644 doc/gitlab-basics/basicsimages/add_sshkey.png delete mode 100644 doc/gitlab-basics/basicsimages/branch_info.png delete mode 100644 doc/gitlab-basics/basicsimages/branch_name.png delete mode 100644 doc/gitlab-basics/basicsimages/branches.png delete mode 100644 doc/gitlab-basics/basicsimages/button-create-mr.png delete mode 100644 doc/gitlab-basics/basicsimages/click-on-new-group.png delete mode 100644 doc/gitlab-basics/basicsimages/commit_changes.png delete mode 100644 doc/gitlab-basics/basicsimages/commit_message.png delete mode 100644 doc/gitlab-basics/basicsimages/commits.png delete mode 100644 doc/gitlab-basics/basicsimages/compare_branches.png delete mode 100644 doc/gitlab-basics/basicsimages/create_file.png delete mode 100644 doc/gitlab-basics/basicsimages/create_group.png delete mode 100644 doc/gitlab-basics/basicsimages/edit_file.png delete mode 100644 doc/gitlab-basics/basicsimages/file_located.png delete mode 100644 doc/gitlab-basics/basicsimages/file_name.png delete mode 100644 doc/gitlab-basics/basicsimages/find_file.png delete mode 100644 doc/gitlab-basics/basicsimages/find_group.png delete mode 100644 doc/gitlab-basics/basicsimages/fork.png delete mode 100644 doc/gitlab-basics/basicsimages/group_info.png delete mode 100644 doc/gitlab-basics/basicsimages/groups.png delete mode 100644 doc/gitlab-basics/basicsimages/https.png delete mode 100644 doc/gitlab-basics/basicsimages/image_file.png delete mode 100644 doc/gitlab-basics/basicsimages/issue_title.png delete mode 100644 doc/gitlab-basics/basicsimages/issues.png delete mode 100644 doc/gitlab-basics/basicsimages/key.png delete mode 100644 doc/gitlab-basics/basicsimages/merge_requests.png delete mode 100644 doc/gitlab-basics/basicsimages/new_issue.png delete mode 100644 doc/gitlab-basics/basicsimages/new_merge_request.png delete mode 100644 doc/gitlab-basics/basicsimages/new_project.png delete mode 100644 doc/gitlab-basics/basicsimages/newbranch.png delete mode 100644 doc/gitlab-basics/basicsimages/paste_sshkey.png delete mode 100644 doc/gitlab-basics/basicsimages/profile_settings.png delete mode 100644 doc/gitlab-basics/basicsimages/project_info.png delete mode 100644 doc/gitlab-basics/basicsimages/select-group.png delete mode 100644 doc/gitlab-basics/basicsimages/select-group2.png delete mode 100644 doc/gitlab-basics/basicsimages/select_branch.png delete mode 100644 doc/gitlab-basics/basicsimages/select_project.png delete mode 100644 doc/gitlab-basics/basicsimages/settings.png delete mode 100644 doc/gitlab-basics/basicsimages/shh_keys.png delete mode 100644 doc/gitlab-basics/basicsimages/submit_new_issue.png delete mode 100644 doc/gitlab-basics/basicsimages/title_description_mr.png delete mode 100644 doc/gitlab-basics/basicsimages/white_space.png create mode 100644 doc/gitlab-basics/img/create_new_group_info.png create mode 100644 doc/gitlab-basics/img/create_new_group_sidebar.png create mode 100644 doc/gitlab-basics/img/create_new_project_button.png create mode 100644 doc/gitlab-basics/img/create_new_project_from_group.png create mode 100644 doc/gitlab-basics/img/create_new_project_info.png create mode 100644 doc/gitlab-basics/img/fork_choose_namespace.png create mode 100644 doc/gitlab-basics/img/fork_new.png create mode 100644 doc/gitlab-basics/img/merge_request_new.png create mode 100644 doc/gitlab-basics/img/merge_request_page.png create mode 100644 doc/gitlab-basics/img/merge_request_select_branch.png create mode 100644 doc/gitlab-basics/img/new_issue_button.png create mode 100644 doc/gitlab-basics/img/new_issue_page.png create mode 100644 doc/gitlab-basics/img/profile_settings.png create mode 100644 doc/gitlab-basics/img/profile_settings_ssh_keys.png create mode 100644 doc/gitlab-basics/img/profile_settings_ssh_keys_paste_pub.png create mode 100644 doc/gitlab-basics/img/profile_settings_ssh_keys_single_key.png create mode 100644 doc/gitlab-basics/img/profile_settings_ssh_keys_title.png create mode 100644 doc/gitlab-basics/img/project_clone_url.png create mode 100644 doc/gitlab-basics/img/project_navbar.png rename doc/gitlab-basics/{basicsimages => img}/public_file_link.png (100%) create mode 100644 doc/gitlab-basics/img/select_group_dropdown.png create mode 100644 doc/university/README.md create mode 100644 doc/university/bookclub/booklist.md create mode 100644 doc/university/bookclub/index.md create mode 100644 doc/university/glossary/README.md create mode 100644 doc/university/high-availability/aws/README.md create mode 100644 doc/university/high-availability/aws/img/auto-scaling-det.png create mode 100644 doc/university/high-availability/aws/img/db-subnet-group.png create mode 100644 doc/university/high-availability/aws/img/ec-subnet.png create mode 100644 doc/university/high-availability/aws/img/elastic-file-system.png create mode 100644 doc/university/high-availability/aws/img/ig-rt.png create mode 100644 doc/university/high-availability/aws/img/ig.png create mode 100644 doc/university/high-availability/aws/img/instance_specs.png create mode 100644 doc/university/high-availability/aws/img/new_vpc.png create mode 100644 doc/university/high-availability/aws/img/policies.png create mode 100644 doc/university/high-availability/aws/img/rds-net-opt.png create mode 100644 doc/university/high-availability/aws/img/rds-sec-group.png create mode 100644 doc/university/high-availability/aws/img/redis-cluster-det.png create mode 100644 doc/university/high-availability/aws/img/redis-net.png create mode 100644 doc/university/high-availability/aws/img/route_table.png create mode 100644 doc/university/high-availability/aws/img/subnet.png create mode 100644 doc/university/process/README.md create mode 100644 doc/university/support/README.md create mode 100644 doc/university/training/end-user/README.md create mode 100644 doc/update/8.12-to-8.13.md create mode 100644 doc/user/admin_area/monitoring/health_check.md rename doc/{ => user/admin_area}/monitoring/img/health_check_token.png (100%) create mode 100644 doc/user/project/container_registry.md create mode 100644 doc/user/project/git_attributes.md create mode 100644 doc/user/project/img/container_registry_enable.png create mode 100644 doc/user/project/img/container_registry_panel.png create mode 100644 doc/user/project/img/container_registry_tab.png rename doc/{container_registry => user/project}/img/mitmproxy-docker.png (100%) rename doc/user/project/merge_requests/img/{versions-compare.png => versions_compare.png} (100%) rename doc/user/project/merge_requests/img/{versions-dropdown.png => versions_dropdown.png} (100%) create mode 100644 doc/user/project/merge_requests/img/versions_system_note.png create mode 100644 doc/user/project/repository/img/web_editor_new_branch_from_issue.png delete mode 100644 features/profile/ssh_keys.feature delete mode 100644 features/steps/profile/ssh_keys.rb delete mode 100644 features/support/wait_for_ajax.rb create mode 100644 lib/api/boards.rb delete mode 100644 lib/api/license_templates.rb create mode 100644 lib/api/version.rb create mode 100644 lib/banzai/filter/html_entity_filter.rb create mode 100644 lib/banzai/filter/set_direction_filter.rb delete mode 100644 lib/ci/version_info.rb create mode 100644 lib/constraints/group_url_constrainer.rb create mode 100644 lib/constraints/namespace_url_constrainer.rb create mode 100644 lib/constraints/user_url_constrainer.rb create mode 100644 lib/gitlab/ci/trace_reader.rb create mode 100644 lib/gitlab/conflict/resolution_error.rb create mode 100644 lib/gitlab/import_export/attribute_cleaner.rb delete mode 100644 lib/tasks/.gitkeep create mode 100644 lib/tasks/ce_to_ee_merge_check.rake delete mode 100644 lib/tasks/ci/.gitkeep delete mode 100644 lib/tasks/flog.rake create mode 100644 lib/tasks/gitlab/dev.rake create mode 100644 lib/tasks/gitlab/users.rake delete mode 100644 spec/controllers/namespaces_controller_spec.rb create mode 100644 spec/controllers/projects/graphs_controller_spec.rb create mode 100644 spec/factories/label_priorities.rb create mode 100644 spec/features/boards/new_issue_spec.rb create mode 100644 spec/features/issues/form_spec.rb create mode 100644 spec/features/merge_requests/assign_issues_spec.rb create mode 100644 spec/features/merge_requests/form_spec.rb create mode 100644 spec/features/merge_requests/widget_deployments_spec.rb create mode 100644 spec/features/projects/files/edit_file_soft_wrap_spec.rb create mode 100644 spec/features/projects/files/find_file_keyboard_spec.rb create mode 100644 spec/features/projects/guest_navigation_menu_spec.rb create mode 100644 spec/features/projects/members/group_links_spec.rb rename spec/features/{ => projects/settings}/pipelines_settings_spec.rb (87%) create mode 100644 spec/finders/access_requests_finder_spec.rb create mode 100644 spec/finders/labels_finder_spec.rb delete mode 100644 spec/finders/trending_projects_finder_spec.rb create mode 100644 spec/fixtures/api/schemas/board.json create mode 100644 spec/fixtures/api/schemas/boards.json create mode 100644 spec/fixtures/api/schemas/conflicts.json create mode 100644 spec/helpers/milestones_helper_spec.rb create mode 100644 spec/javascripts/activities_spec.js.es6 create mode 100644 spec/javascripts/fixtures/event_filter.html.haml create mode 100644 spec/javascripts/fixtures/gl_field_errors.html.haml create mode 100644 spec/javascripts/gl_field_errors_spec.js.es6 create mode 100644 spec/lib/banzai/filter/html_entity_filter_spec.rb delete mode 100644 spec/lib/banzai/filter/task_list_filter_spec.rb create mode 100644 spec/lib/banzai/renderer_spec.rb create mode 100644 spec/lib/constraints/group_url_constrainer_spec.rb create mode 100644 spec/lib/constraints/namespace_url_constrainer_spec.rb create mode 100644 spec/lib/constraints/user_url_constrainer_spec.rb create mode 100644 spec/lib/event_filter_spec.rb create mode 100644 spec/lib/gitlab/ci/trace_reader_spec.rb create mode 100644 spec/lib/gitlab/identifier_spec.rb create mode 100644 spec/lib/gitlab/import_export/attribute_cleaner_spec.rb create mode 100644 spec/lib/gitlab/import_export/file_importer_spec.rb create mode 100644 spec/lib/gitlab/import_export/relation_factory_spec.rb create mode 100644 spec/models/concerns/cache_markdown_field_spec.rb create mode 100644 spec/models/group_label_spec.rb create mode 100644 spec/models/label_priority_spec.rb create mode 100644 spec/models/project_label_spec.rb create mode 100644 spec/models/project_services/pipeline_email_service_spec.rb create mode 100644 spec/models/trending_project_spec.rb create mode 100644 spec/policies/issues_policy_spec.rb create mode 100644 spec/requests/api/boards_spec.rb delete mode 100644 spec/requests/api/license_templates_spec.rb create mode 100644 spec/requests/api/version_spec.rb create mode 100644 spec/services/boards/issues/create_service_spec.rb create mode 100644 spec/services/boards/list_service_spec.rb create mode 100644 spec/services/boards/lists/list_service_spec.rb create mode 100644 spec/services/ci/send_pipeline_notification_service_spec.rb create mode 100644 spec/services/compare_service_spec.rb create mode 100644 spec/services/labels/find_or_create_service_spec.rb create mode 100644 spec/services/labels/transfer_service_spec.rb create mode 100644 spec/services/members/approve_access_request_service_spec.rb create mode 100644 spec/services/members/request_access_service_spec.rb create mode 100644 spec/services/merge_requests/assign_issues_service_spec.rb rename spec/support/{ => features}/issuable_slash_commands_shared_examples.rb (100%) create mode 100644 spec/support/git_http_helpers.rb create mode 100644 spec/support/import_export/common_util.rb create mode 100644 spec/support/matchers/be_like_time.rb create mode 100644 spec/support/matchers/have_issuable_counts.rb rename spec/support/{ => services}/issuable_create_service_slash_commands_shared_examples.rb (100%) create mode 100644 spec/tasks/gitlab/users_rake_spec.rb delete mode 100644 spec/views/projects/merge_requests/_heading.html.haml_spec.rb create mode 100644 spec/workers/build_coverage_worker_spec.rb create mode 100644 spec/workers/build_finished_worker_spec.rb create mode 100644 spec/workers/build_hooks_worker_spec.rb create mode 100644 spec/workers/build_success_worker_spec.rb create mode 100644 spec/workers/concerns/build_queue_spec.rb create mode 100644 spec/workers/concerns/cronjob_queue_spec.rb create mode 100644 spec/workers/concerns/dedicated_sidekiq_queue_spec.rb create mode 100644 spec/workers/concerns/pipeline_queue_spec.rb create mode 100644 spec/workers/concerns/repository_check_queue_spec.rb create mode 100644 spec/workers/every_sidekiq_worker_spec.rb create mode 100644 spec/workers/expire_build_instance_artifacts_worker_spec.rb create mode 100644 spec/workers/pipeline_hooks_worker_spec.rb create mode 100644 spec/workers/pipeline_metrics_worker_spec.rb create mode 100644 spec/workers/pipeline_proccess_worker_spec.rb create mode 100644 spec/workers/pipeline_success_worker_spec.rb create mode 100644 spec/workers/pipeline_update_worker_spec.rb create mode 100644 spec/workers/trending_projects_worker_spec.rb create mode 100644 spec/workers/update_merge_requests_worker_spec.rb create mode 100644 vendor/gitignore/Global/Ansible.gitignore create mode 100644 vendor/gitlab-ci-yml/.gitlab-ci.yml create mode 100644 vendor/gitlab-ci-yml/Gradle.gitlab-ci.yml create mode 100644 vendor/gitlab-ci-yml/Julia.gitlab-ci.yml diff --git a/.csscomb.json b/.csscomb.json index 741cc1488b..aa6a17f751 100644 --- a/.csscomb.json +++ b/.csscomb.json @@ -6,7 +6,7 @@ "always-semicolon": true, "color-case": "lower", "block-indent": " ", - "color-shorthand": true, + "color-shorthand": false, "element-case": "lower", "space-before-colon": "", "space-after-colon": " ", diff --git a/.flayignore b/.flayignore index f120de527b..44df2ba237 100644 --- a/.flayignore +++ b/.flayignore @@ -1,2 +1,3 @@ *.erb lib/gitlab/sanitizers/svg/whitelist.rb +lib/gitlab/diff/position_tracer.rb diff --git a/.gitattributes b/.gitattributes index 17cbaa5eef..ab791a4cd6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,2 @@ -CHANGELOG merge=union +CHANGELOG.md merge=union *.js.es6 gitlab-language=javascript diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b167fc7499..76117a4873 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,9 +1,8 @@ -image: "ruby:2.3.1" +image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.3-git-2.7-phantomjs-2.1" cache: key: "ruby-231" paths: - - vendor/apt - vendor/ruby variables: @@ -12,7 +11,7 @@ variables: RSPEC_RETRY_RETRY_COUNT: "3" RAILS_ENV: "test" SIMPLECOV: "true" - USE_DB: "true" + SETUP_DB: "true" USE_BUNDLE_INSTALL: "true" GIT_DEPTH: "20" PHANTOMJS_VERSION: "2.1.1" @@ -23,7 +22,7 @@ before_script: - bundle --version - '[ "$USE_BUNDLE_INSTALL" != "true" ] || retry bundle install --without postgres production --jobs $(nproc) "${FLAGS[@]}"' - retry gem install knapsack - - '[ "$USE_DB" != "true" ] || bundle exec rake db:drop db:create db:schema:load db:migrate' + - '[ "$SETUP_DB" != "true" ] || bundle exec rake db:drop db:create db:schema:load db:migrate add_limits_mysql' stages: - prepare @@ -35,7 +34,7 @@ stages: .knapsack-state: &knapsack-state services: [] variables: - USE_DB: "false" + SETUP_DB: "false" USE_BUNDLE_INSTALL: "false" cache: key: "knapsack" @@ -100,7 +99,7 @@ update-knapsack: - export KNAPSACK_REPORT_PATH=knapsack/spinach_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json - export KNAPSACK_GENERATE_REPORT=true - cp knapsack/spinach_report.json ${KNAPSACK_REPORT_PATH} - - knapsack spinach "-r rerun" || retry '[ ! -e tmp/spinach-rerun.txt ] || bundle exec spinach -r rerun $(cat tmp/spinach-rerun.txt)' + - knapsack spinach "-r rerun" || retry '[[ -e tmp/spinach-rerun.txt ]] && bundle exec spinach -r rerun $(cat tmp/spinach-rerun.txt)' artifacts: expire_in: 31d paths: @@ -141,14 +140,13 @@ spinach 9 10: *spinach-knapsack # Execute all testing suites against Ruby 2.1 .ruby-21: &ruby-21 - image: "ruby:2.1" + image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.1-git-2.7-phantomjs-2.1" <<: *use-db only: - master cache: key: "ruby21" paths: - - vendor/apt - vendor/ruby .rspec-knapsack-ruby21: &rspec-knapsack-ruby21 @@ -196,7 +194,7 @@ spinach 9 10 ruby21: *spinach-knapsack-ruby21 .ruby-static-analysis: &ruby-static-analysis variables: SIMPLECOV: "false" - USE_DB: "false" + SETUP_DB: "false" USE_BUNDLE_INSTALL: "true" .exec: &exec @@ -209,14 +207,16 @@ rubocop: *exec rake haml_lint: *exec rake scss_lint: *exec rake brakeman: *exec -rake flog: - <<: *exec - allow_failure: yes -rake flay: - <<: *exec - allow_failure: yes +rake flay: *exec license_finder: *exec rake downtime_check: *exec +rake ce_to_ee_merge_check: + <<: *exec + only: + - branches + except: + - tags + allow_failure: yes rake db:migrate:reset: stage: test @@ -224,6 +224,23 @@ rake db:migrate:reset: script: - rake db:migrate:reset +rake db:seed_fu: + stage: test + <<: *use-db + variables: + SIZE: "1" + SETUP_DB: "false" + RAILS_ENV: "development" + script: + - git clone https://gitlab.com/gitlab-org/gitlab-test.git + /home/git/repositories/gitlab-org/gitlab-test.git + - bundle exec rake db:setup db:seed_fu + artifacts: + when: on_failure + expire_in: 1d + paths: + - log/development.log + teaspoon: stage: test <<: *use-db @@ -245,6 +262,12 @@ lint-doc: script: - scripts/lint-doc.sh +bundler:check: + stage: test + <<: *ruby-static-analysis + script: + - bundle check + bundler:audit: stage: test <<: *ruby-static-analysis @@ -272,7 +295,7 @@ coverage: stage: post-test services: [] variables: - USE_DB: "false" + SETUP_DB: "false" USE_BUNDLE_INSTALL: "true" script: - bundle exec scripts/merge-simplecov @@ -283,12 +306,23 @@ coverage: - coverage/index.html - coverage/assets/ +# Trigger docs build +trigger_docs: + stage: post-test + before_script: [] + cache: {} + artifacts: {} + script: + - "curl -X POST -F token=${DOCS_TRIGGER_TOKEN} -F ref=master https://gitlab.com/api/v3/projects/38069/trigger/builds" + only: + - master + # Notify slack in the end notify:slack: stage: post-test variables: - USE_DB: "false" + SETUP_DB: "false" USE_BUNDLE_INSTALL: "false" script: - ./scripts/notify_slack.sh "#builds" "Build on \`$CI_BUILD_REF_NAME\` failed! Commit \`$(git log -1 --oneline)\` See " @@ -315,3 +349,16 @@ pages: - public only: - master + +# Insurance in case a gem needed by one of our releases gets yanked from +# rubygems.org in the future. +cache gems: + only: + - tags + variables: + SETUP_DB: "false" + script: + - bundle package --all --all-platforms + artifacts: + paths: + - vendor/cache diff --git a/.gitlab/merge_request_templates/Documentation.md b/.gitlab/merge_request_templates/Documentation.md index d2a1eb5642..9b541aadad 100644 --- a/.gitlab/merge_request_templates/Documentation.md +++ b/.gitlab/merge_request_templates/Documentation.md @@ -1,4 +1,4 @@ -See the general Documentation guidelines http://docs.gitlab.com/ce/development/doc_styleguide.html. +See the general Documentation guidelines http://docs.gitlab.com/ce/development/doc_styleguide.html ## What does this MR do? diff --git a/.rubocop.yml b/.rubocop.yml index 5bd31ccf32..bec2464c74 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -453,6 +453,10 @@ Style/VariableName: EnforcedStyle: snake_case Enabled: true +# Use the configured style when numbering variables. +Style/VariableNumber: + Enabled: false + # Use when x then ... for one-line cases. Style/WhenThen: Enabled: true @@ -639,6 +643,10 @@ Lint/RescueException: Lint/ShadowedException: Enabled: false +# Checks for Object#to_s usage in string interpolation. +Lint/StringConversionInInterpolation: + Enabled: true + # Do not use prefix `_` for a variable that is used. Lint/UnderscorePrefixedVariableName: Enabled: true diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 87520c67dd..11b34fafa2 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,21 +1,21 @@ # This configuration was generated by # `rubocop --auto-gen-config --exclude-limit 0` -# on 2016-09-14 15:44:53 -0400 using RuboCop version 0.42.0. +# on 2016-10-04 13:16:20 +0200 using RuboCop version 0.43.0. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new # versions of RuboCop, may require this file to be generated again. -# Offense count: 158 +# Offense count: 160 Lint/AmbiguousRegexpLiteral: Enabled: false -# Offense count: 41 +# Offense count: 40 # Configuration parameters: AllowSafeAssignment. Lint/AssignmentInCondition: Enabled: false -# Offense count: 16 +# Offense count: 18 Lint/HandleExceptions: Enabled: false @@ -23,16 +23,21 @@ Lint/HandleExceptions: Lint/Loop: Enabled: false -# Offense count: 16 +# Offense count: 19 Lint/ShadowingOuterLocalVariable: Enabled: false -# Offense count: 6 +# Offense count: 9 # Cop supports --auto-correct. -Lint/StringConversionInInterpolation: +Lint/UnifiedInteger: Enabled: false -# Offense count: 49 +# Offense count: 13 +# Cop supports --auto-correct. +Lint/UnneededSplatExpansion: + Enabled: false + +# Offense count: 69 # Cop supports --auto-correct. # Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments. Lint/UnusedBlockArgument: @@ -44,32 +49,81 @@ Lint/UnusedBlockArgument: Lint/UnusedMethodArgument: Enabled: false -# Offense count: 9 -# Cop supports --auto-correct. -Performance/PushSplat: - Enabled: false - # Offense count: 2 # Cop supports --auto-correct. Performance/RedundantBlockCall: Enabled: false -# Offense count: 4 +# Offense count: 5 # Cop supports --auto-correct. Performance/RedundantMatch: Enabled: false -# Offense count: 27 +# Offense count: 26 # Cop supports --auto-correct. # Configuration parameters: MaxKeyValuePairs. Performance/RedundantMerge: Enabled: false -# Offense count: 61 +# Offense count: 7 +RSpec/BeEql: + Enabled: false + +# Offense count: 20 +# Configuration parameters: CustomIncludeMethods. +RSpec/EmptyExampleGroup: + Enabled: false + +# Offense count: 16 +RSpec/ExpectActual: + Enabled: false + +# Offense count: 34 +# Configuration parameters: EnforcedStyle, SupportedStyles. +# SupportedStyles: implicit, each, example +RSpec/HookArgument: + Enabled: false + +# Offense count: 168 +RSpec/LeadingSubject: + Enabled: false + +# Offense count: 162 +RSpec/LetSetup: + Enabled: false + +# Offense count: 10 +RSpec/MessageChain: + Enabled: false + +# Offense count: 714 +# Configuration parameters: EnforcedStyle, SupportedStyles. +# SupportedStyles: allow, expect +RSpec/MessageExpectation: + Enabled: false + +# Offense count: 2423 +RSpec/MultipleExpectations: + Max: 36 + +# Offense count: 1504 +RSpec/NamedSubject: + Enabled: false + +# Offense count: 1335 +# Configuration parameters: MaxNesting. +RSpec/NestedGroups: + Enabled: false + +# Offense count: 99 +RSpec/SubjectStub: + Enabled: false + +# Offense count: 64 Rails/OutputSafety: Enabled: false -# Offense count: 129 +# Offense count: 151 # Configuration parameters: EnforcedStyle, SupportedStyles. # SupportedStyles: strict, flexible Rails/TimeZone: @@ -82,58 +136,63 @@ Rails/TimeZone: Rails/Validation: Enabled: false -# Offense count: 273 +# Offense count: 2 +# Cop supports --auto-correct. +Security/JSONLoad: + Enabled: false + +# Offense count: 284 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth. # SupportedStyles: with_first_parameter, with_fixed_indentation Style/AlignParameters: Enabled: false -# Offense count: 30 +# Offense count: 28 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles. # SupportedStyles: always, conditionals Style/AndOr: Enabled: false -# Offense count: 50 +# Offense count: 52 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles. # SupportedStyles: percent_q, bare_percent Style/BarePercentLiterals: Enabled: false -# Offense count: 289 +# Offense count: 291 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles. # SupportedStyles: braces, no_braces, context_dependent Style/BracesAroundHashParameters: Enabled: false -# Offense count: 5 +# Offense count: 6 Style/CaseEquality: Enabled: false -# Offense count: 19 +# Offense count: 26 # Cop supports --auto-correct. Style/ColonMethodCall: Enabled: false -# Offense count: 3 +# Offense count: 2 # Cop supports --auto-correct. # Configuration parameters: Keywords. # Keywords: TODO, FIXME, OPTIMIZE, HACK, REVIEW Style/CommentAnnotation: Enabled: false -# Offense count: 33 +# Offense count: 30 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles, SingleLineConditionsOnly. # SupportedStyles: assign_to_condition, assign_inside_condition Style/ConditionalAssignment: Enabled: false -# Offense count: 881 +# Offense count: 957 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles. # SupportedStyles: leading, trailing @@ -144,12 +203,12 @@ Style/DotPosition: Style/DoubleNegation: Enabled: false -# Offense count: 4 +# Offense count: 6 # Cop supports --auto-correct. Style/EachWithObject: Enabled: false -# Offense count: 25 +# Offense count: 26 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles. # SupportedStyles: empty, nil, both @@ -161,24 +220,24 @@ Style/EmptyElse: Style/EmptyLiteral: Enabled: false -# Offense count: 135 +# Offense count: 140 # Cop supports --auto-correct. # Configuration parameters: AllowForAlignment, ForceEqualSignAlignment. Style/ExtraSpacing: Enabled: false -# Offense count: 7 +# Offense count: 6 # Configuration parameters: EnforcedStyle, SupportedStyles. # SupportedStyles: format, sprintf, percent Style/FormatString: Enabled: false -# Offense count: 51 +# Offense count: 201 # Configuration parameters: MinBodyLength. Style/GuardClause: Enabled: false -# Offense count: 9 +# Offense count: 11 Style/IfInsideElse: Enabled: false @@ -188,21 +247,21 @@ Style/IfInsideElse: Style/IfUnlessModifier: Enabled: false -# Offense count: 52 +# Offense count: 53 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth. # SupportedStyles: special_inside_parentheses, consistent, align_brackets Style/IndentArray: Enabled: false -# Offense count: 97 +# Offense count: 95 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth. # SupportedStyles: special_inside_parentheses, consistent, align_braces Style/IndentHash: Enabled: false -# Offense count: 12 +# Offense count: 29 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles. # SupportedStyles: line_count_dependent, lambda, literal @@ -214,7 +273,7 @@ Style/Lambda: Style/LineEndConcatenation: Enabled: false -# Offense count: 13 +# Offense count: 15 # Cop supports --auto-correct. Style/MethodCallParentheses: Enabled: false @@ -223,7 +282,7 @@ Style/MethodCallParentheses: Style/MethodMissing: Enabled: false -# Offense count: 85 +# Offense count: 95 # Cop supports --auto-correct. Style/MutableConstant: Enabled: false @@ -240,14 +299,14 @@ Style/NestedParenthesizedCalls: Style/Next: Enabled: false -# Offense count: 8 +# Offense count: 12 # Cop supports --auto-correct. # Configuration parameters: EnforcedOctalStyle, SupportedOctalStyles. # SupportedOctalStyles: zero_with_o, zero_only Style/NumericLiteralPrefix: Enabled: false -# Offense count: 64 +# Offense count: 53 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles. # SupportedStyles: predicate, comparison @@ -259,7 +318,7 @@ Style/NumericPredicate: Style/ParallelAssignment: Enabled: false -# Offense count: 264 +# Offense count: 294 # Cop supports --auto-correct. # Configuration parameters: PreferredDelimiters. Style/PercentLiteralDelimiters: @@ -277,7 +336,7 @@ Style/PercentQLiterals: Style/PerlBackrefs: Enabled: false -# Offense count: 35 +# Offense count: 38 # Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist. # NamePrefix: is_, has_, have_ # NamePrefixBlacklist: is_, has_, have_ @@ -285,7 +344,7 @@ Style/PerlBackrefs: Style/PredicateName: Enabled: false -# Offense count: 27 +# Offense count: 26 # Cop supports --auto-correct. Style/PreferredHashMethods: Enabled: false @@ -317,12 +376,12 @@ Style/RedundantException: Style/RedundantFreeze: Enabled: false -# Offense count: 408 +# Offense count: 427 # Cop supports --auto-correct. Style/RedundantSelf: Enabled: false -# Offense count: 93 +# Offense count: 97 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles, AllowInnerSlashes. # SupportedStyles: slashes, percent_r, mixed @@ -334,7 +393,12 @@ Style/RegexpLiteral: Style/RescueModifier: Enabled: false -# Offense count: 5 +# Offense count: 114 +# Cop supports --auto-correct. +Style/SafeNavigation: + Enabled: false + +# Offense count: 7 # Cop supports --auto-correct. Style/SelfAssignment: Enabled: false @@ -351,7 +415,7 @@ Style/SingleLineBlockParams: Style/SingleLineMethods: Enabled: false -# Offense count: 124 +# Offense count: 125 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles. # SupportedStyles: space, no_space @@ -364,19 +428,19 @@ Style/SpaceBeforeBlockBraces: Style/SpaceBeforeFirstArg: Enabled: false -# Offense count: 141 +# Offense count: 145 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters. # SupportedStyles: space, no_space Style/SpaceInsideBlockBraces: Enabled: false -# Offense count: 96 +# Offense count: 99 # Cop supports --auto-correct. Style/SpaceInsideBrackets: Enabled: false -# Offense count: 62 +# Offense count: 65 # Cop supports --auto-correct. Style/SpaceInsideParens: Enabled: false @@ -386,21 +450,21 @@ Style/SpaceInsideParens: Style/SpaceInsidePercentLiteralDelimiters: Enabled: false -# Offense count: 40 +# Offense count: 41 # Cop supports --auto-correct. # Configuration parameters: SupportedStyles. # SupportedStyles: use_perl_names, use_english_names Style/SpecialGlobalVars: EnforcedStyle: use_perl_names -# Offense count: 30 +# Offense count: 31 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles. # SupportedStyles: single_quotes, double_quotes Style/StringLiteralsInInterpolation: Enabled: false -# Offense count: 32 +# Offense count: 33 # Cop supports --auto-correct. # Configuration parameters: IgnoredMethods. # IgnoredMethods: respond_to, define_method @@ -414,7 +478,7 @@ Style/SymbolProc: Style/TernaryParentheses: Enabled: false -# Offense count: 24 +# Offense count: 29 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyleForMultiline, SupportedStyles. # SupportedStyles: comma, consistent_comma, no_comma diff --git a/.scss-lint.yml b/.scss-lint.yml index 66f9975d4c..5093702519 100644 --- a/.scss-lint.yml +++ b/.scss-lint.yml @@ -61,7 +61,7 @@ linters: # Separate rule, function, and mixin declarations with empty lines. EmptyLineBetweenBlocks: - enabled: false + enabled: true # Reports when you have an empty rule set. EmptyRule: @@ -79,7 +79,7 @@ linters: # HEX colors should use three-character values where possible. HexLength: - enabled: true + enabled: false # HEX color values should use lower-case colors to differentiate between # letters and numbers, e.g. `#E3E3E3` vs. `#e3e3e3`. @@ -219,7 +219,7 @@ linters: # Property values, @extend, @include, and @import directives, and variable # declarations should always end with a semicolon. TrailingSemicolon: - enabled: false + enabled: true # Reports lines containing trailing whitespace. TrailingWhitespace: diff --git a/.vagrant_enabled b/.vagrant_enabled deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/CHANGELOG b/CHANGELOG.md similarity index 88% rename from CHANGELOG rename to CHANGELOG.md index 1005da293a..f47814ab3b 100644 --- a/CHANGELOG +++ b/CHANGELOG.md @@ -1,30 +1,256 @@ Please view this file on the master branch, on stable branches it's out of date. -v 8.12.4 (unreleased) +## 8.13.2 (2016-10-31) + +- Fix encoding issues on pipeline commits. !6832 +- Use Hash rocket syntax to fix cycle analytics under Ruby 2.1. !6977 +- Modify GitHub importer to be retryable. !7003 +- Fix refs dropdown selection with special characters. !7061 +- Fix horizontal padding for highlight blocks. !7062 +- Pass user instance to `Labels::FindOrCreateService` or `skip_authorization: true`. !7093 +- Fix builds dropdown overlapping bug. !7124 +- Fix applying labels for GitHub-imported MRs. !7139 +- Fix importing MR comments from GitHub. !7139 +- Fix project member access for group links. !7144 +- API: Fix booleans not recognized as such when using the `to_boolean` helper. !7149 +- Fix and improve `Sortable.highest_label_priority`. !7165 +- Fixed sticky merge request tabs when sidebar is pinned. !7167 +- Only remove right connector of first build of last stage. !7179 + +## 8.13.1 (2016-10-25) + +- Fix branch protection API. !6215 +- Fix hidden pipeline graph on commit and MR page. !6895 +- Fix Cycle analytics not showing correct data when filtering by date. !6906 +- Ensure custom provider tab labels don't break layout. !6993 +- Fix issue boards user link when in subdirectory. !7018 +- Refactor and add new environment functionality to CI yaml reference. !7026 +- Fix typo in project settings that prevents users from enabling container registry. !7037 +- Fix events order in `users/:id/events` endpoint. !7039 +- Remove extra line for empty issue description. !7045 +- Don't append issue/MR templates to any existing text. !7050 +- Fix error in generating labels. !7055 +- Stop clearing the database cache on `rake cache:clear`. !7056 +- Only show register tab if signup enabled. !7058 +- Expire and build repository cache after project import. !7064 +- Fix bug where labels would be assigned to issues that were moved. !7065 +- Fix reply-by-email not working due to queue name mismatch. !7068 +- Fix 404 for group pages when GitLab setup uses relative url. !7071 +- Fix `User#to_reference`. !7088 +- Reduce overhead of `LabelFinder` by avoiding `#presence` call. !7094 +- Fix unauthorized users dragging on issue boards. !7096 +- Only schedule `ProjectCacheWorker` jobs when needed. !7099 + +## 8.13.0 (2016-10-22) + +- Fix save button on project pipeline settings page. (!6955) +- All Sidekiq workers now use their own queue +- Avoid race condition when asynchronously removing expired artifacts. (!6881) +- Improve Merge When Build Succeeds triggers and execute on pipeline success. (!6675) +- Respond with 404 Not Found for non-existent tags (Linus Thiel) +- Truncate long labels with ellipsis in labels page +- Improve tabbing usability for sign in page (ClemMakesApps) +- Enforce TrailingSemicolon and EmptyLineBetweenBlocks in scss-lint +- Adding members no longer silently fails when there is extra whitespace +- Update runner version only when updating contacted_at +- Add link from system note to compare with previous version +- Use gitlab-shell v3.6.6 +- Ignore references to internal issues when using external issues tracker +- Ability to resolve merge request conflicts with editor !6374 +- Add `/projects/visible` API endpoint (Ben Boeckel) +- Fix centering of custom header logos (Ashley Dumaine) +- Keep around commits only pipeline creation as pipeline data doesn't change over time +- Update duration at the end of pipeline +- ExpireBuildArtifactsWorker query builds table without ordering enqueuing one job per build to cleanup +- Add group level labels. (!6425) +- Add an example for testing a phoenix application with Gitlab CI in the docs (Manthan Mallikarjun) +- Cancelled pipelines could be retried. !6927 +- Updating verbiage on git basics to be more intuitive +- Fix project_feature record not generated on project creation +- Clarify documentation for Runners API (Gennady Trafimenkov) +- The instrumentation for Banzai::Renderer has been restored +- Change user & group landing page routing from /u/:username to /:username +- Added documentation for .gitattributes files +- Move Pipeline Metrics to separate worker +- AbstractReferenceFilter caches project_refs on RequestStore when active +- Replaced the check sign to arrow in the show build view. !6501 +- Add a /wip slash command to toggle the Work In Progress status of a merge request. !6259 (tbalthazar) +- ProjectCacheWorker updates caches at most once per 15 minutes per project +- Fix Error 500 when viewing old merge requests with bad diff data +- Create a new /templates namespace for the /licenses, /gitignores and /gitlab_ci_ymls API endpoints. !5717 (tbalthazar) +- Fix viewing merged MRs when the source project has been removed !6991 +- Speed-up group milestones show page +- Fix inconsistent options dropdown caret on mobile viewports (ClemMakesApps) +- Extract project#update_merge_requests and SystemHooks to its own worker from GitPushService +- Fix discussion thread from emails for merge requests. !7010 +- Don't include archived projects when creating group milestones. !4940 (Jeroen Jacobs) +- Add tag shortcut from the Commit page. !6543 +- Keep refs for each deployment +- Allow browsing branches that end with '.atom' +- Log LDAP lookup errors and don't swallow unrelated exceptions. !6103 (Markus Koller) +- Replace unique keyframes mixin with keyframe mixin with specific names (ClemMakesApps) +- Add more tests for calendar contribution (ClemMakesApps) +- Update Gitlab Shell to fix some problems with moving projects between storages +- Cache rendered markdown in the database, rather than Redis +- Avoid database queries on Banzai::ReferenceParser::BaseParser for nodes without references +- Simplify Mentionable concern instance methods +- API: Ability to retrieve version information (Robert Schilling) +- Fix permission for setting an issue's due date +- API: Multi-file commit !6096 (mahcsig) +- Unicode emoji are now converted to images +- Revert "Label list shows all issues (opened or closed) with that label" +- Expose expires_at field when sharing project on API +- Fix VueJS template tags being rendered in code comments +- Added copy file path button to merge request diff files +- Fix issue with page scrolling to top when closing or pinning sidebar (lukehowell) +- Add Issue Board API support (andrebsguedes) +- Allow the Koding integration to be configured through the API +- Add new issue button to each list on Issues Board +- Execute specific named route method from toggle_award_url helper method +- Added soft wrap button to repository file/blob editor +- Update namespace validation to forbid reserved names (.git and .atom) (Will Starms) +- Show the time ago a merge request was deployed to an environment +- Add RTL support to markdown renderer (Ebrahim Byagowi) +- Add word-wrap to issue title on issue and milestone boards (ClemMakesApps) +- Fix todos page mobile viewport layout (ClemMakesApps) +- Fix inconsistent highlighting of already selected activity nav-links (ClemMakesApps) +- Remove redundant mixins (ClemMakesApps) +- Added 'Download' button to the Snippets page (Justin DiPierro) +- Add visibility level to project repository +- Fix robots.txt disallowing access to groups starting with "s" (Matt Harrison) +- Close open merge request without source project (Katarzyna Kobierska Ula Budziszewska) +- Fix that manual jobs would no longer block jobs in the next stage. !6604 +- Add configurable email subject suffix (Fu Xu) +- Use defined colour for a language when available !6748 (nilsding) +- Added tooltip to fork count on project show page. (Justin DiPierro) +- Use a ConnectionPool for Rails.cache on Sidekiq servers +- Replace `alias_method_chain` with `Module#prepend` +- Enable GitLab Import/Export for non-admin users. +- Preserve label filters when sorting !6136 (Joseph Frazier) +- MergeRequest#new form load diff asynchronously +- Only update issuable labels if they have been changed +- Take filters in account in issuable counters. !6496 +- Use custom Ruby images to test builds (registry.dev.gitlab.org/gitlab/gitlab-build-images:*) +- Append issue template to existing description !6149 (Joseph Frazier) +- Trending projects now only show public projects and the list of projects is cached for a day +- Memoize Gitlab Shell's secret token (!6599, Justin DiPierro) +- Revoke button in Applications Settings underlines on hover. +- Use higher size on Gitlab::Redis connection pool on Sidekiq servers +- Add missing values to linter !6276 (Katarzyna Kobierska Ula Budziszewska) +- Revert avoid touching file system on Build#artifacts? +- Stop using a Redis lease when updating the project activity timestamp whenever a new event is created +- Add disabled delete button to protected branches (ClemMakesApps) +- Add broadcast messages and alerts below sub-nav +- Better empty state for Groups view +- API: New /users/:id/events endpoint +- Update ruby-prof to 0.16.2. !6026 (Elan Ruusamäe) +- Replace bootstrap caret with fontawesome caret (ClemMakesApps) +- Fix unnecessary escaping of reserved HTML characters in milestone title. !6533 +- Add organization field to user profile +- Change user pages routing from /u/:username/PATH to /users/:username/PATH. Old routes will redirect to the new ones for the time being. +- Fix enter key when navigating search site search dropdown. !6643 (Brennan Roberts) +- Fix deploy status responsiveness error !6633 +- Make searching for commits case insensitive +- Fix resolved discussion display in side-by-side diff view !6575 +- Optimize GitHub importing for speed and memory +- API: expose pipeline data in builds API (!6502, Guilherme Salazar) +- Notify the Merger about merge after successful build (Dimitris Karakasilis) +- Reduce queries needed to find users using their SSH keys when pushing commits +- Prevent rendering the link to all when the author has no access (Katarzyna Kobierska Ula Budziszewska) +- Fix broken repository 500 errors in project list +- Fix the diff in the merge request view when converting a symlink to a regular file +- Fix Pipeline list commit column width should be adjusted +- Close todos when accepting merge requests via the API !6486 (tonygambone) +- Ability to batch assign issues relating to a merge request to the author. !5725 (jamedjo) +- Changed Slack service user referencing from full name to username (Sebastian Poxhofer) +- Retouch environments list and deployments list +- Add multiple command support for all label related slash commands !6780 (barthc) +- Add Container Registry on/off status to Admin Area !6638 (the-undefined) +- Add Nofollow for uppercased scheme in external urls !6820 (the-undefined) +- Allow empty merge requests !6384 (Artem Sidorenko) +- Grouped pipeline dropdown is a scrollable container +- Cleanup Ci::ApplicationController. !6757 (Takuya Noguchi) +- Fixes padding in all clipboard icons that have .btn class +- Fix a typo in doc/api/labels.md +- Fix double-escaping in activities tab (Alexandre Maia) +- API: all unknown routing will be handled with 404 Not Found +- Add docs for request profiling +- Delete dynamic environments +- Fix buggy iOS tooltip layering behavior. +- Make guests unable to view MRs on private projects +- Fix broken Project API docs (Takuya Noguchi) +- Migrate invalid project members (owner -> master) + +## 8.12.7 + + - Prevent running `GfmAutocomplete` setup for each diff note. !6569 + - Fix long commit messages overflow viewport in file tree. !6573 + - Use `gitlab-markup` gem instead of `github-markup` to fix `.rst` file rendering. !6659 + - Prevent flash alert text from being obscured when container is fluid. !6694 + - Fix due date being displayed as `NaN` in Safari. !6797 + - Fix JS bug with select2 because of missing `data-field` attribute in select box. !6812 + - Do not alter `force_remove_source_branch` options on MergeRequest unless specified. !6817 + - Fix GFM autocomplete setup being called several times. !6840 + - Handle case where deployment ref no longer exists. !6855 + +## 8.12.6 + + - Update mailroom to 0.8.1 in Gemfile.lock !6814 + +## 8.12.5 + + - Switch from request to env in ::API::Helpers. !6615 + - Update the mail_room gem to 0.8.1 to fix a race condition with the mailbox watching thread. !6714 + - Improve issue load time performance by avoiding ORDER BY in find_by call. !6724 + - Add a new gitlab:users:clear_all_authentication_tokens task. !6745 + - Don't send Private-Token (API authentication) headers to Sentry + - Share projects via the API only with groups the authenticated user can access + +## 8.12.4 + + - Fix "Copy to clipboard" tooltip to say "Copied!" when clipboard button is clicked. !6294 (lukehowell) + - Fix padding in build sidebar. !6506 + - Changed compare dropdowns to dropdowns with isolated search input. !6550 + - Fix race condition on LFS Token. !6592 + - Fix type mismatch bug when closing Jira issue. !6619 + - Fix lint-doc error. !6623 + - Skip wiki creation when GitHub project has wiki enabled. !6665 + - Fix issues importing services via Import/Export. !6667 + - Restrict failed login attempts for users with 2FA enabled. !6668 + - Fix failed project deletion when feature visibility set to private. !6688 + - Prevent claiming associated model IDs via import. + - Set GitLab project exported file permissions to owner only + - Improve the way merge request versions are compared with each other + +## 8.12.3 -v 8.12.3 - Update Gitlab Shell to support low IO priority for storage moves -v 8.12.2 +## 8.12.2 + - Fix Import/Export not recognising correctly the imported services. - Fix snippets pagination + - Fix "Create project" button layout when visibility options are restricted - Fix List-Unsubscribe header in emails - Fix IssuesController#show degradation including project on loaded notes - Fix an issue with the "Commits" section of the cycle analytics summary. !6513 - Fix errors importing project feature and milestone models using GitLab project import - Make JWT messages Docker-compatible - - Fix an issue with the "Commits" section of the cycle analytics summary. !6513 - Fix duplicate branch entry in the merge request version compare dropdown - Respect the fork_project permission when forking projects - Only update issuable labels if they have been changed - Fix bug where 'Search results' repeated many times when a search in the emoji search form is cleared (Xavier Bick) (@zeiv) - Fix resolve discussion buttons endpoint path + - Refactor remnants of CoffeeScript destructured opts and super !6261 + +## 8.12.1 -v 8.12.1 - Fix a memory leak in HTML::Pipeline::SanitizationFilter::WHITELIST - Fix issue with search filter labels not displaying -v 8.12.0 +## 8.12.0 (2016-09-22) + + - Removes inconsistency regarding tagging immediatelly as merged once you create a new branch. !6408 - Update the rouge gem to 2.0.6, which adds highlighting support for JSX, Prometheus, and others. !6251 - Only check :can_resolve permission if the note is resolvable - Bump fog-aws to v0.11.0 to support ap-south-1 region @@ -32,10 +258,10 @@ v 8.12.0 - Allow to set request_access_enabled for groups and projects - Cleanup misalignments in Issue list view !6206 - Only create a protected branch upon a push to a new branch if a rule for that branch doesn't exist + - Add Pipelines for Commit - Prune events older than 12 months. (ritave) - Prepend blank line to `Closes` message on merge request linked to issue (lukehowell) - Fix issues/merge-request templates dropdown for forked projects - - Amends the packager.io configuration file to create a build for Ubuntu 16.04. !6247 (Jon "The Nice Guy" Spriggs) - Filter tags by name !6121 - Update gitlab shell secret file also when it is empty. !3774 (glensc) - Give project selection dropdowns responsive width, make non-wrapping. @@ -52,12 +278,14 @@ v 8.12.0 - Move pushes_since_gc from the database to Redis - Limit number of shown environments on Merge Request: show only environments for target_branch, source_branch and tags - Add font color contrast to external label in admin area (ClemMakesApps) + - Fix find file navigation links (ClemMakesApps) - Change logo animation to CSS (ClemMakesApps) - Instructions for enabling Git packfile bitmaps !6104 - Use Search::GlobalService.new in the `GET /projects/search/:query` endpoint - Fix long comments in diffs messing with table width - Add spec covering 'Gitlab::Git::committer_hash' !6433 (dandunckelman) - Fix pagination on user snippets page + - Honor "fixed layout" preference in more places !6422 - Run CI builds with the permissions of users !5735 - Fix sorting of issues in API - Fix download artifacts button links !6407 @@ -70,11 +298,14 @@ v 8.12.0 - Fix file permissions change when updating a file on the Gitlab UI !5979 - Added horizontal padding on build page sidebar on code coverage block. !6196 (Vitaly Baev) - Change merge_error column from string to text type + - Fix issue with search filter labels not displaying - Reduce contributions calendar data payload (ClemMakesApps) - Show all pipelines for merge requests even from discarded commits !6414 - Replace contributions calendar timezone payload with dates (ClemMakesApps) + - Changed MR widget build status to pipeline status !6335 - Add `web_url` field to issue, merge request, and snippet API objects (Ben Boeckel) - Enable pipeline events by default !6278 + - Add pipeline email service !6019 - Move parsing of sidekiq ps into helper !6245 (pascalbetz) - Added go to issue boards keyboard shortcut - Expose `sha` and `merge_commit_sha` in merge request API (Ben Boeckel) @@ -96,6 +327,7 @@ v 8.12.0 - Increase ci_builds artifacts_size column to 8-byte integer to allow larger files - Add textarea autoresize after comment (ClemMakesApps) - Do not write SSH public key 'comments' to authorized_keys !6381 + - Add due date to issue todos - Refresh todos count cache when an Issue/MR is deleted - Fix branches page dropdown sort alignment (ClemMakesApps) - Hides merge request button on branches page is user doesn't have permissions @@ -104,6 +336,7 @@ v 8.12.0 - Fix markdown anchor icon interaction (ClemMakesApps) - Test migration paths from 8.5 until current release !4874 - Replace animateEmoji timeout with eventListener (ClemMakesApps) + - Show badges in Milestone tabs. !5946 (Dan Rowden) - Optimistic locking for Issues and Merge Requests (title and description overriding prevention) - Require confirmation when not logged in for unsubscribe links !6223 (Maximiliano Perez Coto) - Add `wiki_page_events` to project hook APIs (Ben Boeckel) @@ -114,6 +347,7 @@ v 8.12.0 - Remove prefixes from transition CSS property (ClemMakesApps) - Add Sentry logging to API calls - Add BroadcastMessage API + - Merge request tabs are fixed when scrolling page - Use 'git update-ref' for safer web commits !6130 - Sort pipelines requested through the API - Automatically expand hidden discussions when accessed by a permalink !5585 (Mike Greiling) @@ -121,6 +355,7 @@ v 8.12.0 - Change pipeline duration to be jobs running time instead of simple wall time from start to end !6084 - Show queued time when showing a pipeline !6084 - Remove unused mixins (ClemMakesApps) + - Fix issue board label filtering appending already filtered labels - Add search to all issue board lists - Scroll active tab into view on mobile - Fix groups sort dropdown alignment (ClemMakesApps) @@ -205,7 +440,27 @@ v 8.12.0 - Fix non-master branch readme display in tree view - Add UX improvements for merge request version diffs -v 8.11.6 +## 8.11.9 + + - Don't send Private-Token (API authentication) headers to Sentry + - Share projects via the API only with groups the authenticated user can access + +## 8.11.8 + + - Respect the fork_project permission when forking projects + - Set a restrictive CORS policy on the API for credentialed requests + - API: disable rails session auth for non-GET/HEAD requests + - Escape HTML nodes in builds commands in CI linter + +## 8.11.7 + + - Avoid conflict with admin labels when importing GitHub labels. !6158 + - Restores `fieldName` to allow only string values in `gl_dropdown.js`. !6234 + - Allow the Rails cookie to be used for API authentication. + - Login/Register UX upgrade !6328 + +## 8.11.6 + - Fix unnecessary horizontal scroll area in pipeline visualizations. !6005 - Make merge conflict file size limit 200 KB, to match the docs. !6052 - Fix an error where we were unable to create a CommitStatus for running state. !6107 @@ -215,7 +470,8 @@ v 8.11.6 - Fix DB schema to match latest migration. !6256 - Exclude some pending or inactivated rows in Member scopes. -v 8.11.5 +## 8.11.5 + - Optimize branch lookups and force a repository reload for Repository#find_branch. !6087 - Fix member expiration date picker after update. !6184 - Fix suggested colors options for new labels in the admin area. !6138 @@ -228,7 +484,8 @@ v 8.11.5 - Fix confidential issues being exposed as public using gitlab.com export - Use oj gem for faster JSON processing -v 8.11.4 +## 8.11.4 + - Fix resolving conflicts on forks. !6082 - Fix diff commenting on merge requests created prior to 8.10. !6029 - Fix pipelines tab layout regression. !5952 @@ -245,7 +502,8 @@ v 8.11.4 - Remove gitorious. !5866 - Allow compare merge request versions -v 8.11.3 +## 8.11.3 + - Allow system info page to handle case where info is unavailable - Label list shows all issues (opened or closed) with that label - Don't show resolve conflicts link before MR status is updated @@ -256,24 +514,26 @@ v 8.11.3 - Automatically expand hidden discussions when accessed by a permalink !5585 (Mike Greiling) - Issues filters reset button -v 8.11.2 +## 8.11.2 + - Show "Create Merge Request" widget for push events to fork projects on the source project. !5978 - Use gitlab-workhorse 0.7.11 !5983 - Does not halt the GitHub import process when an error occurs. !5763 - Fix file links on project page when default view is Files !5933 - Fixed enter key in search input not working !5888 -v 8.11.1 +## 8.11.1 + - Pulled due to packaging error. -v 8.11.0 +## 8.11.0 (2016-08-22) + - Use test coverage value from the latest successful pipeline in badge. !5862 - Add test coverage report badge. !5708 - Remove the http_parser.rb dependency by removing the tinder gem. !5758 (tbalthazar) - Add Koding (online IDE) integration - Ability to specify branches for Pivotal Tracker integration (Egor Lynko) - Fix don't pass a local variable called `i` to a partial. !20510 (herminiotorres) - - Add delimiter to project stars and forks count (ClemMakesApps) - Fix rename `add_users_into_project` and `projects_ids`. !20512 (herminiotorres) - Fix adding line comments on the initial commit to a repo !5900 - Fix the title of the toggle dropdown button. !5515 (herminiotorres) @@ -327,7 +587,6 @@ v 8.11.0 - Enforce 2FA restrictions on API authentication endpoints !5820 - Limit git rev-list output count to one in forced push check - Show deployment status on merge requests with external URLs - - Fix branch title trailing space on hover (ClemMakesApps) - Clean up unused routes (Josef Strzibny) - Fix issue on empty project to allow developers to only push to protected branches if given permission - API: Add enpoints for pipelines @@ -421,35 +680,58 @@ v 8.11.0 - Update gitlab_git gem to 10.4.7 - Simplify SQL queries of marking a todo as done -v 8.10.9 +## 8.10.12 + + - Don't send Private-Token (API authentication) headers to Sentry + - Share projects via the API only with groups the authenticated user can access + +## 8.10.11 + + - Respect the fork_project permission when forking projects + - Set a restrictive CORS policy on the API for credentialed requests + - API: disable rails session auth for non-GET/HEAD requests + - Escape HTML nodes in builds commands in CI linter + +## 8.10.10 + + - Allow the Rails cookie to be used for API authentication. + +## 8.10.9 + - Exclude some pending or inactivated rows in Member scopes -v 8.10.8 +## 8.10.8 + - Fix information disclosure in issue boards. - Fix privilege escalation in project import. -v 8.10.7 +## 8.10.7 + - Upgrade Hamlit to 2.6.1. !5873 - Upgrade Doorkeeper to 4.2.0. !5881 -v 8.10.6 +## 8.10.6 + - Upgrade Rails to 4.2.7.1 for security fixes. !5781 - Restore "Largest repository" sort option on Admin > Projects page. !5797 - Fix privilege escalation via project export. - Require administrator privileges to perform a project import. -v 8.10.5 +## 8.10.5 + - Add a data migration to fix some missing timestamps in the members table. !5670 - Revert the "Defend against 'Host' header injection" change in the source NGINX templates. !5706 - Cache project count for 5 minutes to reduce DB load. !5746 & !5754 -v 8.10.4 +## 8.10.4 + - Don't close referenced upstream issues from a forked project. - Fixes issue with dropdowns `enter` key not working correctly. !5544 - Fix Import/Export project import not working in HA mode. !5618 - Fix Import/Export error checking versions. !5638 -v 8.10.3 +## 8.10.3 + - Fix Import/Export issue importing milestones and labels not associated properly. !5426 - Fix timing problems running imports on production. !5523 - Add a log message when a project is scheduled for destruction for debugging. !5540 @@ -460,7 +742,8 @@ v 8.10.3 - Trim extra displayed carriage returns in diffs and files with CRLFs. !5588 - Fix label already exist error message in the right sidebar. -v 8.10.2 +## 8.10.2 + - User can now search branches by name. !5144 - Page is now properly rendered after committing the first file and creating the first branch. !5399 - Add branch or tag icon to ref in builds page. !5434 @@ -481,7 +764,8 @@ v 8.10.2 - Fix missing schema update for `20160722221922`. !5512 - Update `gitlab-shell` version to 3.2.1 in the 8.9->8.10 update guide. !5516 -v 8.10.1 +## 8.10.1 + - Refactor repository storages documentation. !5428 - Gracefully handle case when keep-around references are corrupted or exist already. !5430 - Add detailed info on storage path mountpoints. !5437 @@ -490,7 +774,8 @@ v 8.10.1 - Ignore invalid trusted proxies in X-Forwarded-For header. !5454 - Add links to the real markdown.md file for all GFM examples. !5458 -v 8.10.0 +## 8.10.0 (2016-07-22) + - Fix profile activity heatmap to show correct day name (eanplatter) - Speed up ExternalWikiHelper#get_project_wiki_path - Expose {should,force}_remove_source_branch (Ben Boeckel) @@ -652,18 +937,34 @@ v 8.10.0 - Export and import avatar as part of project import/export - Fix migration corrupting import data for old version upgrades - Show tooltip on GitLab export link in new project page + - Fix import_data wrongly saved as a result of an invalid import_url !5206 + +## 8.9.11 + + - Respect the fork_project permission when forking projects + - Set a restrictive CORS policy on the API for credentialed requests + - API: disable rails session auth for non-GET/HEAD requests + - Escape HTML nodes in builds commands in CI linter + +## 8.9.10 + + - Allow the Rails cookie to be used for API authentication. + +## 8.9.9 -v 8.9.9 - Exclude some pending or inactivated rows in Member scopes -v 8.9.8 +## 8.9.8 + - Upgrade Doorkeeper to 4.2.0. !5881 -v 8.9.7 +## 8.9.7 + - Upgrade Rails to 4.2.7.1 for security fixes. !5781 - Require administrator privileges to perform a project import. -v 8.9.6 +## 8.9.6 + - Fix importing of events under notes for GitLab projects. !5154 - Fix log statements in import/export. !5129 - Fix commit avatar alignment in compare view. !5128 @@ -672,13 +973,8 @@ v 8.9.6 - Keeps issue number when importing from Gitlab.com - Add Pending tab for Builds (Katarzyna Kobierska, Urszula Budziszewska) -v 8.9.7 (unreleased) - - Fix import_data wrongly saved as a result of an invalid import_url +## 8.9.5 -v 8.9.6 - - Fix importing of events under notes for GitLab projects - -v 8.9.5 - Add more debug info to import/export and memory killer. !5108 - Fixed avatar alignment in new MR view. !5095 - Fix diff comments not showing up in activity feed. !5069 @@ -693,7 +989,8 @@ v 8.9.5 - Update RedCloth to 4.3.2 for CVE-2012-6684. !4929 (Takuya Noguchi) - Improve the request / withdraw access button. !4860 -v 8.9.4 +## 8.9.4 + - Fix privilege escalation issue with OAuth external users. - Ensure references to private repos aren't shown to logged-out users. - Fixed search field blur not removing focus. !4704 @@ -707,7 +1004,8 @@ v 8.9.4 - Expiry date on pinned nav cookie. !5009 - Updated breakpoint for sidebar pinning. !5019 -v 8.9.3 +## 8.9.3 + - Fix encrypted data backwards compatibility after upgrading attr_encrypted gem. !4963 - Fix rendering of commit notes. !4953 - Resolve "Pin should show up at 1280px min". !4947 @@ -724,12 +1022,14 @@ v 8.9.3 - Use update_columns to bypass all the dirty code on active_record. !4985 - Fix restore Rake task warning message output !4980 -v 8.9.2 +## 8.9.2 + - Fix visibility of snippets when searching. - Fix an information disclosure when requesting access to a group containing private projects. - Update omniauth-saml to 1.6.0 !4951 -v 8.9.1 +## 8.9.1 + - Refactor labels documentation. !3347 - Eager load award emoji on notes. !4628 - Fix some CI wording in documentation. !4660 @@ -773,7 +1073,8 @@ v 8.9.1 - Add SMTP as default delivery method to match gitlab-org/omnibus-gitlab!826. !4915 - Remove duplicate 'New Page' button on edit wiki page -v 8.9.0 +## 8.9.0 (2016-06-22) + - Fix group visibility form layout in application settings - Fix builds API response not including commit data - Fix error when CI job variables key specified but not defined @@ -928,21 +1229,26 @@ v 8.9.0 - Add tooltip to pin/unpin navbar - Add new sub nav style to Wiki and Graphs sub navigation -v 8.8.9 +## 8.8.9 + - Upgrade Doorkeeper to 4.2.0. !5881 -v 8.8.8 +## 8.8.8 + - Upgrade Rails to 4.2.7.1 for security fixes. !5781 -v 8.8.7 +## 8.8.7 + - Fix privilege escalation issue with OAuth external users. - Ensure references to private repos aren't shown to logged-out users. -v 8.8.6 +## 8.8.6 + - Fix visibility of snippets when searching. - Update omniauth-saml to 1.6.0 !4951 -v 8.8.5 +## 8.8.5 + - Import GitHub repositories respecting the API rate limit !4166 - Fix todos page throwing errors when you have a project pending deletion !4300 - Disable Webhooks before proceeding with the GitHub import !4470 @@ -955,12 +1261,14 @@ v 8.8.5 - Banzai::Filter::UploadLinkFilter use XPath instead CSS expressions - Banzai::Filter::ExternalLinkFilter use XPath instead CSS expressions -v 8.8.4 +## 8.8.4 + - Fix LDAP-based login for users with 2FA enabled. !4493 - Added descriptions to notification settings dropdown - Due date can be removed from milestones -v 8.8.3 +## 8.8.3 + - Fix 404 page when viewing TODOs that contain milestones or labels in different projects. !4312 - Fixed JS error when trying to remove discussion form. !4303 - Fixed issue with button color when no CI enabled. !4287 @@ -979,7 +1287,8 @@ v 8.8.3 - Fix missing number on generated ordered list element. !4437 - Prevent disclosure of notes on confidential issues in search results. -v 8.8.2 +## 8.8.2 + - Added remove due date button. !4209 - Fix Error 500 when accessing application settings due to nil disabled OAuth sign-in sources. !4242 - Fix Error 500 in CI charts by gracefully handling commits with no durations. !4245 @@ -990,13 +1299,15 @@ v 8.8.2 - When creating a .gitignore file a dropdown with templates will be provided. !4075 - Fix concurrent request when updating build log in browser. !4183 -v 8.8.1 +## 8.8.1 + - Add documentation for the "Health Check" feature - Allow anonymous users to access a public project's pipelines !4233 - Fix MySQL compatibility in zero downtime migrations helpers - Fix the CI login to Container Registry (the gitlab-ci-token user) -v 8.8.0 +## 8.8.0 (2016-05-22) + - Implement GFM references for milestones (Alejandro Rodríguez) - Snippets tab under user profile. !4001 (Long Nguyen) - Fix error when using link to uploads in global snippets @@ -1072,34 +1383,40 @@ v 8.8.0 - When creating a .gitignore file a dropdown with templates will be provided - Shows the issue/MR list search/filter form and corrects the mobile styling for guest users. #17562 -v 8.7.9 +## 8.7.9 + - Fix privilege escalation issue with OAuth external users. - Ensure references to private repos aren't shown to logged-out users. -v 8.7.8 +## 8.7.8 + - Fix visibility of snippets when searching. - Update omniauth-saml to 1.6.0 !4951 -v 8.7.7 +## 8.7.7 + - Fix import by `Any Git URL` broken if the URL contains a space - Prevent unauthorized access to other projects build traces - Forbid scripting for wiki files - Only show notes through JSON on confidential issues that the user has access to -v 8.7.6 +## 8.7.6 + - Fix links on wiki pages for relative url setups. !4131 (Artem Sidorenko) - Fix import from GitLab.com to a private instance failure. !4181 - Fix external imports not finding the import data. !4106 - Fix notification delay when changing status of an issue - Bump Workhorse to 0.7.5 so it can serve raw diffs -v 8.7.5 +## 8.7.5 + - Fix relative links in wiki pages. !4050 - Fix always showing build notification message when switching between merge requests !4086 - Fix an issue when filtering merge requests with more than one label. !3886 - Fix short note for the default scope on build page (Takuya Noguchi) -v 8.7.4 +## 8.7.4 + - Links for Redmine issue references are generated correctly again !4048 (Benedikt Huss) - Fix setting trusted proxies !3970 - Fix BitBucket importer bug when throwing exceptions !3941 @@ -1108,20 +1425,23 @@ v 8.7.4 - Running rake gitlab:db:drop_tables uses "IF EXISTS" as a precaution !4100 - Use a case-insensitive comparison in sanitizing URI schemes -v 8.7.3 +## 8.7.3 + - Emails, Gitlab::Email::Message, Gitlab::Diff, and Premailer::Adapter::Nokogiri are now instrumented - Merge request widget displays TeamCity build state and code coverage correctly again. - Fix the line code when importing PR review comments from GitHub. !4010 - Wikis are now initialized on legacy projects when checking repositories - Remove animate.css in favor of a smaller subset of animations. !3937 (Connor Shea) -v 8.7.2 +## 8.7.2 + - The "New Branch" button is now loaded asynchronously - Fix error 500 when trying to create a wiki page - Updated spacing between notification label and button - Label titles in filters are now escaped properly -v 8.7.1 +## 8.7.1 + - Throttle the update of `project.last_activity_at` to 1 minute. !3848 - Fix .gitlab-ci.yml parsing issue when hidde job is a template without script definition. !3849 - Fix license detection to detect all license files, not only known licenses. !3878 @@ -1131,7 +1451,8 @@ v 8.7.1 - Update width of search box to fix Safari bug. !3900 (Jedidiah) - Use the `can?` helper instead of `current_user.can?` -v 8.7.0 +## 8.7.0 (2016-04-22) + - Gitlab::GitAccess and Gitlab::GitAccessWiki are now instrumented - Fix vulnerability that made it possible to gain access to private labels and milestones - The number of InfluxDB points stored per UDP packet can now be configured @@ -1247,12 +1568,14 @@ v 8.7.0 - Add RAW build trace output and button on build page - Add incremental build trace update into CI API -v 8.6.9 +## 8.6.9 + - Prevent unauthorized access to other projects build traces - Forbid scripting for wiki files - Only show notes through JSON on confidential issues that the user has access to -v 8.6.8 +## 8.6.8 + - Prevent privilege escalation via "impersonate" feature - Prevent privilege escalation via notes API - Prevent privilege escalation via project webhook API @@ -1265,12 +1588,14 @@ v 8.6.8 - Prevent information disclosure via project labels - Prevent information disclosure via new merge request page -v 8.6.7 +## 8.6.7 + - Fix persistent XSS vulnerability in `commit_person_link` helper - Fix persistent XSS vulnerability in Label and Milestone dropdowns - Fix vulnerability that made it possible to enumerate private projects belonging to group -v 8.6.6 +## 8.6.6 + - Expire the exists cache before deletion to ensure project dir actually exists (Stan Hu). !3413 - Fix error on language detection when repository has no HEAD (e.g., master branch) (Jeroen Bobbeldijk). !3654 - Fix revoking of authorized OAuth applications (Connor Shea). !3690 @@ -1278,7 +1603,8 @@ v 8.6.6 - Issuable header is consistent between issues and merge requests - Improved spacing in issuable header on mobile -v 8.6.5 +## 8.6.5 + - Fix importing from GitHub Enterprise. !3529 - Perform the language detection after updating merge requests in `GitPushService`, leading to faster visual feedback for the end-user. !3533 - Check permissions when user attempts to import members from another project. !3535 @@ -1287,11 +1613,13 @@ v 8.6.5 - Unblock user when active_directory is disabled and it can be found !3550 - Fix a 2FA authentication spoofing vulnerability. -v 8.6.4 +## 8.6.4 + - Don't attempt to fetch any tags from a forked repo (Stan Hu) - Redesign the Labels page -v 8.6.3 +## 8.6.3 + - Mentions on confidential issues doesn't create todos for non-members. !3374 - Destroy related todos when an Issue/MR is deleted. !3376 - Fix error 500 when target is nil on todo list. !3376 @@ -1304,7 +1632,8 @@ v 8.6.3 - Fix issue with dropdowns not selecting values. !3478 - Update gitlab-shell version and doc to 2.6.12. gitlab-org/gitlab-ee!280 -v 8.6.2 +## 8.6.2 + - Fix dropdown alignment. !3298 - Fix issuable sidebar overlaps on tablet. !3299 - Make dropdowns pixel perfect. !3337 @@ -1326,7 +1655,8 @@ v 8.6.2 - Gracefully handle notes on deleted commits in merge requests (Stan Hu). !3402 - Fixed issue with notification settings not saving. !3452 -v 8.6.1 +## 8.6.1 + - Add option to reload the schema before restoring a database backup. !2807 - Display navigation controls on mobile. !3214 - Fixed bug where participants would not work correctly on merge requests. !3329 @@ -1341,7 +1671,8 @@ v 8.6.1 - Fixes issue with assign milestone not loading milestone list. !3346 - Fix an issue causing the Dashboard/Milestones page to be blank. !3348 -v 8.6.0 +## 8.6.0 (2016-03-22) + - Add ability to move issue to another project - Prevent tokens in the import URL to be showed by the UI - Fix bug where wrong commit ID was being used in a merge request diff to show old image (Stan Hu) @@ -1406,11 +1737,13 @@ v 8.6.0 - Trigger a todo for mentions on commits page - Let project owners and admins soft delete issues and merge requests -v 8.5.13 +## 8.5.13 + - Prevent unauthorized access to other projects build traces - Forbid scripting for wiki files -v 8.5.12 +## 8.5.12 + - Prevent privilege escalation via "impersonate" feature - Prevent privilege escalation via notes API - Prevent privilege escalation via project webhook API @@ -1421,41 +1754,51 @@ v 8.5.12 - Prevent information disclosure via project labels - Prevent information disclosure via new merge request page -v 8.5.11 +## 8.5.11 + - Fix persistent XSS vulnerability in `commit_person_link` helper -v 8.5.10 +## 8.5.10 + - Fix a 2FA authentication spoofing vulnerability. -v 8.5.9 +## 8.5.9 + - Don't attempt to fetch any tags from a forked repo (Stan Hu). -v 8.5.8 +## 8.5.8 + - Bump Git version requirement to 2.7.4 -v 8.5.7 +## 8.5.7 + - Bump Git version requirement to 2.7.3 -v 8.5.6 +## 8.5.6 + - Obtain a lease before querying LDAP -v 8.5.5 +## 8.5.5 + - Ensure removing a project removes associated Todo entries - Prevent a 500 error in Todos when author was removed - Fix pagination for filtered dashboard and explore pages - Fix "Show all" link behavior -v 8.5.4 +## 8.5.4 + - Do not cache requests for badges (including builds badge) -v 8.5.3 +## 8.5.3 + - Flush repository caches before renaming projects - Sort starred projects on dashboard based on last activity by default - Show commit message in JIRA mention comment - Makes issue page and merge request page usable on mobile browsers. - Improved UI for profile settings -v 8.5.2 +## 8.5.2 + - Fix sidebar overlapping content when screen width was below 1200px - Don't repeat labels listed on Labels tab - Bring the "branded appearance" feature from EE to CE @@ -1472,7 +1815,8 @@ v 8.5.2 - Don't show "Welcome to GitLab" when the search didn't return any projects - Add Todos documentation -v 8.5.1 +## 8.5.1 + - Fix group projects styles - Show Crowd login tab when sign in is disabled and Crowd is enabled (Peter Hudec) - Fix a set of small UI glitches in project, profile, and wiki pages @@ -1492,7 +1836,8 @@ v 8.5.1 - Add build coverage in project's builds page (Steffen Köhler) - Changed # to ! for merge requests in activity view -v 8.5.0 +## 8.5.0 (2016-02-22) + - Fix duplicate "me" in tooltip of the "thumbsup" awards Emoji (Stan Hu) - Cache various Repository methods to improve performance - Fix duplicated branch creation/deletion Webhooks/service notifications when using Web UI (Stan Hu) @@ -1571,11 +1916,13 @@ v 8.5.0 - Show label row when filtering issues or merge requests by label (Nuttanart Pornprasitsakul) - Add Todos -v 8.4.11 +## 8.4.11 + - Prevent unauthorized access to other projects build traces - Forbid scripting for wiki files -v 8.4.10 +## 8.4.10 + - Prevent privilege escalation via "impersonate" feature - Prevent privilege escalation via notes API - Prevent privilege escalation via project webhook API @@ -1586,28 +1933,35 @@ v 8.4.10 - Prevent information disclosure via project labels - Prevent information disclosure via new merge request page -v 8.4.9 +## 8.4.9 + - Fix persistent XSS vulnerability in `commit_person_link` helper -v 8.4.8 +## 8.4.8 + - Fix a 2FA authentication spoofing vulnerability. -v 8.4.7 +## 8.4.7 + - Don't attempt to fetch any tags from a forked repo (Stan Hu). -v 8.4.6 +## 8.4.6 + - Bump Git version requirement to 2.7.4 -v 8.4.5 +## 8.4.5 + - No CE-specific changes -v 8.4.4 +## 8.4.4 + - Update omniauth-saml gem to 1.4.2 - Prevent long-running backup tasks from timing out the database connection - Add a Project setting to allow guests to view build logs (defaults to true) - Sort project milestones by due date including issue editor (Oliver Rogers / Orih) -v 8.4.3 +## 8.4.3 + - Increase lfs_objects size column to 8-byte integer to allow files larger than 2.1GB - Correctly highlight MR diff when MR has merge conflicts @@ -1618,7 +1972,8 @@ v 8.4.3 performance monitoring - Allow autosize textareas to also be manually resized -v 8.4.2 +## 8.4.2 + - Bump required gitlab-workhorse version to bring in a fix for missing artifacts in the build artifacts browser - Get rid of those ugly borders on the file tree view @@ -1631,14 +1986,16 @@ v 8.4.2 - Fix method undefined when using external commit status in builds - Fix highlighting in blame view. -v 8.4.1 +## 8.4.1 + - Apply security updates for Rails (4.2.5.1), rails-html-sanitizer (1.0.3), and Nokogiri (1.6.7.2) - Fix redirect loop during import - Fix diff highlighting for all syntax themes - Delete project and associations in a background worker -v 8.4.0 +## 8.4.0 (2016-01-22) + - Allow LDAP users to change their email if it was not set by the LDAP server - Ensure Gravatar host looks like an actual host - Consider re-assign as a mention from a notification point of view @@ -1711,11 +2068,13 @@ v 8.4.0 - Add IP check against DNSBLs at account sign-up - Added cache:key to .gitlab-ci.yml allowing to fine tune the caching -v 8.3.10 +## 8.3.10 + - Prevent unauthorized access to other projects build traces - Forbid scripting for wiki files -v 8.3.9 +## 8.3.9 + - Prevent privilege escalation via "impersonate" feature - Prevent privilege escalation via notes API - Prevent privilege escalation via project webhook API @@ -1724,22 +2083,28 @@ v 8.3.9 - Prevent information disclosure via project labels - Prevent information disclosure via new merge request page -v 8.3.8 +## 8.3.8 + - Fix persistent XSS vulnerability in `commit_person_link` helper -v 8.3.7 +## 8.3.7 + - Fix a 2FA authentication spoofing vulnerability. -v 8.3.6 +## 8.3.6 + - Don't attempt to fetch any tags from a forked repo (Stan Hu). -v 8.3.5 +## 8.3.5 + - Bump Git version requirement to 2.7.4 -v 8.3.4 +## 8.3.4 + - Use gitlab-workhorse 0.5.4 (fixes API routing bug) -v 8.3.3 +## 8.3.3 + - Preserve CE behavior with JIRA integration by only calling API if URL is set - Fix duplicated branch creation/deletion events when using Web UI (Stan Hu) - Add configurable LDAP server query timeout @@ -1755,17 +2120,20 @@ v 8.3.3 - Fix: maintain milestone filter between Open and Closed tabs (Greg Smethells) - Fix missing artifacts and build traces for build created before 8.3 -v 8.3.2 +## 8.3.2 + - Disable --follow in `git log` to avoid loading duplicate commit data in infinite scroll (Stan Hu) - Add support for Google reCAPTCHA in user registration -v 8.3.1 +## 8.3.1 + - Fix Error 500 when global milestones have slashes (Stan Hu) - Fix Error 500 when doing a search in dashboard before visiting any project (Stan Hu) - Fix LDAP identity and user retrieval when special characters are used - Move Sidekiq-cron configuration to gitlab.yml -v 8.3.0 +## 8.3.0 (2015-12-22) + - Bump rack-attack to 4.3.1 for security fix (Stan Hu) - API support for starred projects for authorized user (Zeger-Jan van de Weg) - Add open_issues_count to project API (Stan Hu) @@ -1833,11 +2201,13 @@ v 8.3.0 - Expose Git's version in the admin area - Show "New Merge Request" buttons on canonical repos when you have a fork (Josh Frye) -v 8.2.6 +## 8.2.6 + - Prevent unauthorized access to other projects build traces - Forbid scripting for wiki files -v 8.2.5 +## 8.2.5 + - Prevent privilege escalation via "impersonate" feature - Prevent privilege escalation via notes API - Prevent privilege escalation via project webhook API @@ -1845,10 +2215,12 @@ v 8.2.5 - Prevent information disclosure via project labels - Prevent information disclosure via new merge request page -v 8.2.4 +## 8.2.4 + - Bump Git version requirement to 2.7.4 -v 8.2.3 +## 8.2.3 + - Fix application settings cache not expiring after changes (Stan Hu) - Fix Error 500s when creating global milestones with Unicode characters (Stan Hu) - Update documentation for "Guest" permissions @@ -1857,7 +2229,8 @@ v 8.2.3 - Webhook payload has an added, modified and removed properties for each commit - Fix 500 error when creating a merge request that removes a submodule -v 8.2.2 +## 8.2.2 + - Fix 404 in redirection after removing a project (Stan Hu) - Ensure cached application settings are refreshed at startup (Stan Hu) - Fix Error 500 when viewing user's personal projects from admin page (Stan Hu) @@ -1867,11 +2240,13 @@ v 8.2.2 - Make current user the first user in assignee dropdown in issues detail page (Stan Hu) - Fix: duplicate email notifications on issue comments -v 8.2.1 +## 8.2.1 + - Forcefully update builds that didn't want to update with state machine - Fix: saving GitLabCiService as Admin Template -v 8.2.0 +## 8.2.0 (2015-11-22) + - Improved performance of finding projects and groups in various places - Improved performance of rendering user profile pages and Atom feeds - Expose build artifacts path as config option @@ -1931,19 +2306,22 @@ v 8.2.0 - Prevent the last owner of a group from being able to delete themselves by 'adding' themselves as a master (James Lopez) - Add Award Emoji to issue and merge request pages -v 8.1.4 +## 8.1.4 + - Fix bug where manually merged branches in a MR would end up with an empty diff (Stan Hu) - Prevent redirect loop when home_page_url is set to the root URL - Fix incoming email config defaults - Remove CSS property preventing hard tabs from rendering in Chromium 45 (Stan Hu) -v 8.1.3 +## 8.1.3 + - Force update refs/merge-requests/X/head upon a push to the source branch of a merge request (Stan Hu) - Spread out runner contacted_at updates - Use issue editor as cross reference comment author when issue is edited with a new mention - Add Facebook authentication -v 8.1.1 +## 8.1.2 + - Fix cloning Wiki repositories via HTTP (Stan Hu) - Add migration to remove satellites directory - Fix specific runners visibility @@ -1953,10 +2331,12 @@ v 8.1.1 - Fix CI badge - Allow developer to manage builds -v 8.1.1 +## 8.1.1 + - Removed, see 8.1.2 -v 8.1.0 +## 8.1.0 (2015-10-22) + - Ensure MySQL CI limits DB migrations occur after the fields have been created (Stan Hu) - Fix duplicate repositories in GitHub import page (Stan Hu) - Redirect to a default path if HTTP_REFERER is not set (Stan Hu) @@ -2041,11 +2421,13 @@ v 8.1.0 - Fix padding of outdated discussion item. - Animate the logo on hover -v 8.0.5 +## 8.0.5 + - Correct lookup-by-email for LDAP logins - Fix loading spinner sometimes not being hidden on Merge Request tab switches -v 8.0.4 +## 8.0.4 + - Fix Message-ID header to be RFC 2111-compliant to prevent e-mails being dropped (Stan Hu) - Fix referrals for :back and relative URL installs - Fix anchors to comments in diffs @@ -2054,13 +2436,15 @@ v 8.0.4 - Fix search in Files - Add full project namespace to payload of system webhooks (Ricardo Band) -v 8.0.3 +## 8.0.3 + - Fix URL shown in Slack notifications - Fix bug where projects would appear to be stuck in the forked import state (Stan Hu) - Fix Error 500 in creating merge requests with > 1000 diffs (Stan Hu) - Add work_in_progress key to MR webhooks (Ben Boeckel) -v 8.0.2 +## 8.0.2 + - Fix default avatar not rendering in network graph (Stan Hu) - Skip check_initd_configured_correctly on omnibus installs - Prevent double-prefixing of help page paths @@ -2074,10 +2458,12 @@ v 8.0.2 - Add option to use StartTLS with Reply by email IMAP server. - Allow AWS S3 Server-Side Encryption with Amazon S3-Managed Keys for backups (Paul Beattie) -v 8.0.1 +## 8.0.1 + - Improve CI migration procedure and documentation -v 8.0.0 +## 8.0.0 (2015-09-22) + - Fix Markdown links not showing up in dashboard activity feed (Stan Hu) - Remove milestones from merge requests when milestones are deleted (Stan Hu) - Fix HTML link that was improperly escaped in new user e-mail (Stan Hu) @@ -2142,5 +2528,6 @@ v 8.0.0 - Redirect from incorrectly cased group or project path to correct one (Francesco Levorato) - Removed API calls from CE to CI -v 7.14.3 through 0.8.0 - - See changelogs/archive.md +## 7.14.3 through 0.8.0 + +- See [changelogs/archive.md](changelogs/archive.md) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d5e15bfce1..b4635e50c2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -226,8 +226,7 @@ a feedback issue (if there isn't one already) and leave a comment asking for it to be marked as `Accepting merge requests`. Please include screenshots or wireframes if the feature will also change the UI. -Merge requests can be filed either at [GitLab.com][gitlab-mr-tracker] or at -[github.com][github-mr-tracker]. +Merge requests should be opened at [GitLab.com][gitlab-mr-tracker]. If you are new to GitLab development (or web development in general), see the [I want to contribute!](#i-want-to-contribute) section to get you started with @@ -246,10 +245,17 @@ tests are least likely to receive timely feedback. The workflow to make a merge request is as follows: 1. Fork the project into your personal space on GitLab.com -1. Create a feature branch, branch away from `master`. +1. Create a feature branch, branch away from `master` 1. Write [tests](https://gitlab.com/gitlab-org/gitlab-development-kit#running-the-tests) and code -1. Add your changes to the [CHANGELOG](CHANGELOG) -1. If you are writing documentation, make sure to read the [documentation styleguide][doc-styleguide] +1. Add your changes to the [CHANGELOG.md](CHANGELOG.md): + 1. If you are fixing a ~regression issue, you can add your entry to the next + patch release (e.g. `8.12.5` if current version is `8.12.4`) + 1. Otherwise, add your entry to the next minor release (e.g. `8.13.0` if + current version is `8.12.4` + 1. Please add your entry at a random place among the entries of the targeted + release +1. If you are writing documentation, make sure to follow the + [documentation styleguide][doc-styleguide] 1. If you have multiple commits please combine them into one commit by [squashing them][git-squash] 1. Push the commit(s) to your fork @@ -258,7 +264,7 @@ request is as follows: 1. The MR description should give a motive for your change and the method you used to achieve it, see the [merge request description format] (#merge-request-description-format) -1. If the MR changes the UI it should include before and after screenshots +1. If the MR changes the UI it should include *Before* and *After* screenshots 1. If the MR changes CSS classes please include the list of affected pages, `grep css-class ./app -R` 1. Link any relevant [issues][ce-tracker] in the merge request description and @@ -270,7 +276,9 @@ request is as follows: [shell command guidelines](doc/development/shell_commands.md) 1. If your code creates new files on disk please read the [shared files guidelines](doc/development/shared_files.md). -1. When writing commit messages please follow [these](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) [guidelines](http://chris.beams.io/posts/git-commit/). +1. When writing commit messages please follow + [these](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) + [guidelines](http://chris.beams.io/posts/git-commit/). 1. If your merge request adds one or more migrations, make sure to execute all migrations on a fresh database before the MR is reviewed. If the review leads to large changes in the MR, do this again once the review is complete. @@ -305,23 +313,6 @@ Please ensure that your merge request meets the contribution acceptance criteria When having your code reviewed and when reviewing merge requests please take the [code review guidelines](doc/development/code_review.md) into account. -### Merge request description format - -Please submit merge requests using the following template in the merge request -description area. Copy-paste it to retain the markdown format. - -``` -## What does this MR do? - -## Are there points in the code the reviewer needs to double check? - -## Why was this MR needed? - -## What are the relevant issue numbers? - -## Screenshots (if relevant) -``` - ### Contribution acceptance criteria 1. The change is as small as possible @@ -333,8 +324,8 @@ description area. Copy-paste it to retain the markdown format. aforementioned failing test 1. Your MR initially contains a single commit (please use `git rebase -i` to squash commits) -1. Your changes can merge without problems (if not please merge `master`, never - rebase commits pushed to the remote server) +1. Your changes can merge without problems (if not please rebase if you're the + only one working on your feature branch, otherwise, merge `master`) 1. Does not break any existing functionality 1. Fixes one specific issue or implements one specific feature (do not combine things, send separate merge requests if needed) @@ -352,7 +343,10 @@ description area. Copy-paste it to retain the markdown format. entire line to follow it. This prevents linting tools from generating warnings. - Don't touch neighbouring lines. As an exception, automatic mass refactoring modifications may leave style non-compliant. -1. If the merge request adds any new libraries (gems, JavaScript libraries, 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. If the merge request adds any new libraries (gems, JavaScript libraries, + 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. ## Changes for Stable Releases @@ -468,7 +462,6 @@ available at [http://contributor-covenant.org/version/1/1/0/](http://contributor [accepting-mrs-ce]: https://gitlab.com/gitlab-org/gitlab-ce/issues?label_name=Accepting+Merge+Requests [accepting-mrs-ee]: https://gitlab.com/gitlab-org/gitlab-ee/issues?label_name=Accepting+Merge+Requests [gitlab-mr-tracker]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests -[github-mr-tracker]: https://github.com/gitlabhq/gitlabhq/pulls [gdk]: https://gitlab.com/gitlab-org/gitlab-development-kit [git-squash]: https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits [closed-merge-requests]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests?assignee_id=&label_name=&milestone_id=&scope=&sort=&state=closed diff --git a/GITLAB_SHELL_VERSION b/GITLAB_SHELL_VERSION index 9575d51bad..4f2c1d15f6 100644 --- a/GITLAB_SHELL_VERSION +++ b/GITLAB_SHELL_VERSION @@ -1 +1 @@ -3.6.1 +3.6.6 diff --git a/GITLAB_WORKHORSE_VERSION b/GITLAB_WORKHORSE_VERSION index 100435be13..7ada0d303f 100644 --- a/GITLAB_WORKHORSE_VERSION +++ b/GITLAB_WORKHORSE_VERSION @@ -1 +1 @@ -0.8.2 +0.8.5 diff --git a/Gemfile b/Gemfile index 54d3170d81..46245ab62d 100644 --- a/Gemfile +++ b/Gemfile @@ -6,10 +6,8 @@ gem 'rails-deprecated_sanitizer', '~> 1.0.3' # Responders respond_to and respond_with gem 'responders', '~> 2.0' -# Specify a sprockets version due to increased performance -# See https://gitlab.com/gitlab-org/gitlab-ce/issues/6069 -gem 'sprockets', '~> 3.6.0' -gem 'sprockets-es6' +gem 'sprockets', '~> 3.7.0' +gem 'sprockets-es6', '~> 0.9.2' # Default values for AR models gem 'default_value_for', '~> 3.0.0' @@ -19,7 +17,7 @@ gem 'mysql2', '~> 0.3.16', group: :mysql gem 'pg', '~> 0.18.2', group: :postgres # Authentication libraries -gem 'devise', '~> 4.0' +gem 'devise', '~> 4.2' gem 'doorkeeper', '~> 4.2.0' gem 'omniauth', '~> 1.3.1' gem 'omniauth-auth0', '~> 1.4.1' @@ -31,7 +29,7 @@ gem 'omniauth-github', '~> 1.1.1' gem 'omniauth-gitlab', '~> 1.0.0' gem 'omniauth-google-oauth2', '~> 0.4.1' gem 'omniauth-kerberos', '~> 0.3.0', group: :kerberos -gem 'omniauth-saml', '~> 1.6.0' +gem 'omniauth-saml', '~> 1.7.0' gem 'omniauth-shibboleth', '~> 1.2.0' gem 'omniauth-twitter', '~> 1.2.0' gem 'omniauth_crowd', '~> 2.2.0' @@ -53,7 +51,7 @@ gem 'browser', '~> 2.2' # Extracting information from a git repository # Provide access to Gitlab::Git library -gem 'gitlab_git', '~> 10.6.6' +gem 'gitlab_git', '~> 10.6.8' # LDAP Auth # GitLab fork with several improvements to original library. For full list of changes @@ -101,17 +99,18 @@ gem 'unf', '~> 0.1.4' gem 'seed-fu', '~> 2.3.5' # Markdown and HTML processing -gem 'html-pipeline', '~> 1.11.0' -gem 'task_list', '~> 1.0.2', require: 'task_list/railtie' -gem 'github-markup', '~> 1.4' -gem 'redcarpet', '~> 3.3.3' -gem 'RedCloth', '~> 4.3.2' -gem 'rdoc', '~>3.6' -gem 'org-ruby', '~> 0.9.12' -gem 'creole', '~> 0.5.0' -gem 'wikicloth', '0.8.1' -gem 'asciidoctor', '~> 1.5.2' -gem 'rouge', '~> 2.0' +gem 'html-pipeline', '~> 1.11.0' +gem 'deckar01-task_list', '1.0.5', require: 'task_list/railtie' +gem 'gitlab-markup', '~> 1.5.0' +gem 'redcarpet', '~> 3.3.3' +gem 'RedCloth', '~> 4.3.2' +gem 'rdoc', '~>3.6' +gem 'org-ruby', '~> 0.9.12' +gem 'creole', '~> 0.5.0' +gem 'wikicloth', '0.8.1' +gem 'asciidoctor', '~> 1.5.2' +gem 'rouge', '~> 2.0' +gem 'truncato', '~> 0.7.8' # See https://groups.google.com/forum/#!topic/ruby-security-ann/aSbgDiwb24s # and https://groups.google.com/forum/#!topic/ruby-security-ann/Dy7YiKb_pMM @@ -122,8 +121,8 @@ gem 'diffy', '~> 3.0.3' # Application server group :unicorn do - gem 'unicorn', '~> 4.9.0' - gem 'unicorn-worker-killer', '~> 0.4.2' + gem 'unicorn', '~> 5.1.0' + gem 'unicorn-worker-killer', '~> 0.4.4' end # State machine @@ -132,11 +131,10 @@ gem 'state_machines-activerecord', '~> 0.4.0' gem 'after_commit_queue', '~> 1.3.0' # Issue tags -gem 'acts-as-taggable-on', '~> 3.4' +gem 'acts-as-taggable-on', '~> 4.0' # Background jobs -gem 'sinatra', '~> 1.4.4', require: false -gem 'sidekiq', '~> 4.0' +gem 'sidekiq', '~> 4.2' gem 'sidekiq-cron', '~> 0.4.0' gem 'redis-namespace', '~> 1.5.2' @@ -213,7 +211,7 @@ gem 'oj', '~> 2.17.4' gem 'chronic', '~> 0.10.2' gem 'chronic_duration', '~> 0.10.6' -gem 'sass-rails', '~> 5.0.0' +gem 'sass-rails', '~> 5.0.6' gem 'coffee-rails', '~> 4.1.0' gem 'uglifier', '~> 2.7.2' gem 'turbolinks', '~> 2.5.0' @@ -227,14 +225,14 @@ gem 'gon', '~> 6.1.0' gem 'jquery-atwho-rails', '~> 1.3.2' gem 'jquery-rails', '~> 4.1.0' gem 'jquery-ui-rails', '~> 5.0.0' -gem 'request_store', '~> 1.3.0' +gem 'request_store', '~> 1.3' gem 'select2-rails', '~> 3.5.9' gem 'virtus', '~> 1.0.1' gem 'net-ssh', '~> 3.0.1' gem 'base32', '~> 0.3.0' # Sentry integration -gem 'sentry-raven', '~> 1.1.0' +gem 'sentry-raven', '~> 2.0.0' gem 'premailer-rails', '~> 1.9.0' @@ -298,12 +296,11 @@ group :development, :test do gem 'spring-commands-spinach', '~> 1.1.0' gem 'spring-commands-teaspoon', '~> 0.0.2' - gem 'rubocop', '~> 0.42.0', require: false + gem 'rubocop', '~> 0.43.0', require: false gem 'rubocop-rspec', '~> 1.5.0', require: false gem 'scss_lint', '~> 0.47.0', require: false gem 'haml_lint', '~> 0.18.2', require: false gem 'simplecov', '0.12.0', require: false - gem 'flog', '~> 4.3.2', require: false gem 'flay', '~> 2.6.1', require: false gem 'bundler-audit', '~> 0.5.0', require: false @@ -311,6 +308,8 @@ group :development, :test do gem 'license_finder', '~> 2.1.0', require: false gem 'knapsack', '~> 1.11.0' + + gem 'activerecord_sane_schema_dumper', '0.2' end group :test do @@ -323,19 +322,15 @@ group :test do gem 'timecop', '~> 0.8.0' end -group :production do - gem 'gitlab_meta', '7.0' -end - gem 'newrelic_rpm', '~> 3.16' gem 'octokit', '~> 4.3.0' -gem 'mail_room', '~> 0.8' +gem 'mail_room', '~> 0.8.1' gem 'email_reply_parser', '~> 0.5.8' -gem 'ruby-prof', '~> 0.15.9' +gem 'ruby-prof', '~> 0.16.2' ## CI gem 'activerecord-session_store', '~> 1.0.0' @@ -348,7 +343,7 @@ gem 'oauth2', '~> 1.2.0' gem 'paranoia', '~> 2.0' # Health check -gem 'health_check', '~> 2.1.0' +gem 'health_check', '~> 2.2.0' # System information gem 'vmstat', '~> 2.2' diff --git a/Gemfile.lock b/Gemfile.lock index 3b15f3654a..442184b922 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -38,14 +38,16 @@ GEM multi_json (~> 1.11, >= 1.11.2) rack (>= 1.5.2, < 3) railties (>= 4.0, < 5.1) + activerecord_sane_schema_dumper (0.2) + rails (>= 4, < 5) activesupport (4.2.7.1) i18n (~> 0.7) json (~> 1.7, >= 1.7.7) minitest (~> 5.1) thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) - acts-as-taggable-on (3.5.0) - activerecord (>= 3.2, < 5) + acts-as-taggable-on (4.0.0) + activerecord (>= 4.0) addressable (2.3.8) after_commit_queue (1.3.0) activerecord (>= 3.0) @@ -157,11 +159,15 @@ GEM database_cleaner (1.5.3) debug_inspector (0.0.2) debugger-ruby_core_source (1.3.8) + deckar01-task_list (1.0.5) + activesupport (~> 4.0) + html-pipeline + rack (~> 1.0) default_value_for (3.0.2) activerecord (>= 3.2.0, < 5.1) descendants_tracker (0.0.4) thread_safe (~> 0.3, >= 0.3.1) - devise (4.1.1) + devise (4.2.0) bcrypt (~> 3.0) orm_adapter (~> 0.1) railties (>= 4.1.0, < 5.1) @@ -209,9 +215,6 @@ GEM flay (2.6.1) ruby_parser (~> 3.0) sexp_processor (~> 4.0) - flog (4.3.2) - ruby_parser (~> 3.1, > 3.1.0) - sexp_processor (~> 4.4) flowdock (0.7.1) httparty (~> 0.7) multi_json @@ -279,12 +282,12 @@ GEM diff-lcs (~> 1.1) mime-types (>= 1.16, < 3) posix-spawn (~> 0.3) - gitlab_git (10.6.6) + gitlab-markup (1.5.0) + gitlab_git (10.6.8) activesupport (~> 4.0) charlock_holmes (~> 0.7.3) github-linguist (~> 4.7.0) rugged (~> 0.24.0) - gitlab_meta (7.0) gitlab_omniauth-ldap (1.2.1) net-ldap (~> 0.9) omniauth (~> 1.0) @@ -334,7 +337,7 @@ GEM thor tilt hashie (3.4.4) - health_check (2.1.0) + health_check (2.2.1) rails (>= 4.0) hipchat (1.5.2) httparty @@ -399,7 +402,7 @@ GEM systemu (~> 2.6.2) mail (2.6.4) mime-types (>= 1.16, < 4) - mail_room (0.8.0) + mail_room (0.8.1) method_source (0.8.2) mime-types (2.99.3) mimemagic (0.3.0) @@ -470,9 +473,9 @@ GEM omniauth-oauth2 (1.3.1) oauth2 (~> 1.0) omniauth (~> 1.2) - omniauth-saml (1.6.0) + omniauth-saml (1.7.0) omniauth (~> 1.3) - ruby-saml (~> 1.3) + ruby-saml (~> 1.4) omniauth-shibboleth (1.2.1) omniauth (>= 1.0.0) omniauth-twitter (1.2.1) @@ -487,7 +490,7 @@ GEM orm_adapter (0.5.0) paranoia (2.1.4) activerecord (~> 4.0) - parser (2.3.1.2) + parser (2.3.1.4) ast (~> 2.2) pg (0.18.4) pkg-config (1.1.7) @@ -554,7 +557,7 @@ GEM rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) rainbow (2.1.0) - raindrops (0.15.0) + raindrops (0.17.0) rake (10.5.0) rb-fsevent (0.9.6) rb-inotify (0.9.5) @@ -588,7 +591,7 @@ GEM request_store (1.3.1) rerun (0.11.0) listen (~> 3.0) - responders (2.1.1) + responders (2.3.0) railties (>= 4.2.0, < 5.1) rinku (2.0.0) rotp (2.1.2) @@ -620,7 +623,7 @@ GEM rspec-retry (0.4.5) rspec-core rspec-support (3.5.0) - rubocop (0.42.0) + rubocop (0.43.0) parser (>= 2.3.1.1, < 3.0) powerpack (~> 0.1) rainbow (>= 1.99.1, < 3.0) @@ -630,9 +633,9 @@ GEM rubocop (>= 0.40.0) ruby-fogbugz (0.2.1) crack (~> 0.4) - ruby-prof (0.15.9) + ruby-prof (0.16.2) ruby-progressbar (1.8.1) - ruby-saml (1.3.0) + ruby-saml (1.4.1) nokogiri (>= 1.5.10) ruby_parser (3.8.2) sexp_processor (~> 4.1) @@ -645,7 +648,7 @@ GEM sanitize (2.1.0) nokogiri (>= 1.4.4) sass (3.4.22) - sass-rails (5.0.5) + sass-rails (5.0.6) railties (>= 4.0.0, < 6) sass (~> 3.1) sprockets (>= 2.8, < 4.0) @@ -665,19 +668,19 @@ GEM activesupport (>= 3.1) select2-rails (3.5.9.3) thor (~> 0.14) - sentry-raven (1.1.0) - faraday (>= 0.7.6) + sentry-raven (2.0.2) + faraday (>= 0.7.6, < 0.10.x) settingslogic (2.0.9) sexp_processor (4.7.0) sham_rack (1.3.6) rack shoulda-matchers (2.8.0) activesupport (>= 3.0.0) - sidekiq (4.1.4) + sidekiq (4.2.1) concurrent-ruby (~> 1.0) connection_pool (~> 2.2, >= 2.2.0) + rack-protection (~> 1.5) redis (~> 3.2, >= 3.2.1) - sinatra (>= 1.4.7) sidekiq-cron (0.4.0) redis-namespace (>= 1.5.2) rufus-scheduler (>= 2.0.24) @@ -687,10 +690,6 @@ GEM json (>= 1.8, < 3) simplecov-html (~> 0.10.0) simplecov-html (0.10.0) - sinatra (1.4.7) - rack (~> 1.5) - rack-protection (~> 1.4) - tilt (>= 1.3, < 3) slack-notifier (1.2.1) slop (3.6.0) spinach (0.8.10) @@ -710,10 +709,10 @@ GEM spring (>= 0.9.1) spring-commands-teaspoon (0.0.2) spring (>= 0.9.1) - sprockets (3.6.3) + sprockets (3.7.0) concurrent-ruby (~> 1.0) rack (> 1, < 3) - sprockets-es6 (0.9.0) + sprockets-es6 (0.9.2) babel-source (>= 5.8.11) babel-transpiler sprockets (>= 3.0.0) @@ -733,8 +732,6 @@ GEM ffi sysexits (1.2.0) systemu (2.6.5) - task_list (1.0.2) - html-pipeline teaspoon (1.1.5) railties (>= 3.2.5, < 6) teaspoon-jasmine (2.2.0) @@ -751,6 +748,9 @@ GEM tilt (2.0.5) timecop (0.8.1) timfel-krb5-auth (0.8.3) + truncato (0.7.8) + htmlentities (~> 4.3.1) + nokogiri (~> 1.6.1) turbolinks (2.5.3) coffee-rails tzinfo (1.2.2) @@ -764,9 +764,8 @@ GEM unf_ext unf_ext (0.0.7.2) unicode-display_width (1.1.1) - unicorn (4.9.0) + unicorn (5.1.0) kgio (~> 2.6) - rack raindrops (~> 0.7) unicorn-worker-killer (0.4.4) get_process_mem (~> 0) @@ -809,7 +808,8 @@ DEPENDENCIES RedCloth (~> 4.3.2) ace-rails-ap (~> 4.1.0) activerecord-session_store (~> 1.0.0) - acts-as-taggable-on (~> 3.4) + activerecord_sane_schema_dumper (= 0.2) + acts-as-taggable-on (~> 4.0) addressable (~> 2.3.8) after_commit_queue (~> 1.3.0) akismet (~> 2.0) @@ -840,8 +840,9 @@ DEPENDENCIES creole (~> 0.5.0) d3_rails (~> 3.5.0) database_cleaner (~> 1.5.0) + deckar01-task_list (= 1.0.5) default_value_for (~> 3.0.0) - devise (~> 4.0) + devise (~> 4.2) devise-two-factor (~> 3.0.0) diffy (~> 3.0.3) doorkeeper (~> 4.2.0) @@ -851,7 +852,6 @@ DEPENDENCIES factory_girl_rails (~> 4.6.0) ffaker (~> 2.0.0) flay (~> 2.6.1) - flog (~> 4.3.2) fog-aws (~> 0.9) fog-azure (~> 0.0) fog-core (~> 1.40) @@ -865,10 +865,9 @@ DEPENDENCIES gemnasium-gitlab-service (~> 0.2) gemojione (~> 3.0) github-linguist (~> 4.7.0) - github-markup (~> 1.4) gitlab-flowdock-git-hook (~> 1.0.1) - gitlab_git (~> 10.6.6) - gitlab_meta (= 7.0) + gitlab-markup (~> 1.5.0) + gitlab_git (~> 10.6.8) gitlab_omniauth-ldap (~> 1.2.1) gollum-lib (~> 4.2) gollum-rugged_adapter (~> 0.4.2) @@ -877,7 +876,7 @@ DEPENDENCIES grape-entity (~> 0.4.2) haml_lint (~> 0.18.2) hamlit (~> 2.6.1) - health_check (~> 2.1.0) + health_check (~> 2.2.0) hipchat (~> 1.5.0) html-pipeline (~> 1.11.0) httparty (~> 0.13.3) @@ -894,7 +893,7 @@ DEPENDENCIES license_finder (~> 2.1.0) licensee (~> 8.0.0) loofah (~> 2.0.3) - mail_room (~> 0.8) + mail_room (~> 0.8.1) method_source (~> 0.8) minitest (~> 5.7.0) mousetrap-rails (~> 1.4.6) @@ -916,7 +915,7 @@ DEPENDENCIES omniauth-gitlab (~> 1.0.0) omniauth-google-oauth2 (~> 0.4.1) omniauth-kerberos (~> 0.3.0) - omniauth-saml (~> 1.6.0) + omniauth-saml (~> 1.7.0) omniauth-shibboleth (~> 1.2.0) omniauth-twitter (~> 1.2.0) omniauth_crowd (~> 2.2.0) @@ -939,31 +938,30 @@ DEPENDENCIES redis (~> 3.2) redis-namespace (~> 1.5.2) redis-rails (~> 4.0.0) - request_store (~> 1.3.0) + request_store (~> 1.3) rerun (~> 0.11.0) responders (~> 2.0) rouge (~> 2.0) rqrcode-rails3 (~> 0.1.7) rspec-rails (~> 3.5.0) rspec-retry (~> 0.4.5) - rubocop (~> 0.42.0) + rubocop (~> 0.43.0) rubocop-rspec (~> 1.5.0) ruby-fogbugz (~> 0.2.1) - ruby-prof (~> 0.15.9) + ruby-prof (~> 0.16.2) sanitize (~> 2.0) - sass-rails (~> 5.0.0) + sass-rails (~> 5.0.6) scss_lint (~> 0.47.0) sdoc (~> 0.3.20) seed-fu (~> 2.3.5) select2-rails (~> 3.5.9) - sentry-raven (~> 1.1.0) + sentry-raven (~> 2.0.0) settingslogic (~> 2.0.9) sham_rack (~> 1.3.6) shoulda-matchers (~> 2.8.0) - sidekiq (~> 4.0) + sidekiq (~> 4.2) sidekiq-cron (~> 0.4.0) simplecov (= 0.12.0) - sinatra (~> 1.4.4) slack-notifier (~> 1.2.0) spinach-rails (~> 0.2.1) spinach-rerun-reporter (~> 0.0.2) @@ -971,23 +969,23 @@ DEPENDENCIES spring-commands-rspec (~> 1.0.4) spring-commands-spinach (~> 1.1.0) spring-commands-teaspoon (~> 0.0.2) - sprockets (~> 3.6.0) - sprockets-es6 + sprockets (~> 3.7.0) + sprockets-es6 (~> 0.9.2) state_machines-activerecord (~> 0.4.0) sys-filesystem (~> 1.1.6) - task_list (~> 1.0.2) teaspoon (~> 1.1.0) teaspoon-jasmine (~> 2.2.0) test_after_commit (~> 0.4.2) thin (~> 1.7.0) timecop (~> 0.8.0) + truncato (~> 0.7.8) turbolinks (~> 2.5.0) u2f (~> 0.2.1) uglifier (~> 2.7.2) underscore-rails (~> 1.8.0) unf (~> 0.1.4) - unicorn (~> 4.9.0) - unicorn-worker-killer (~> 0.4.2) + unicorn (~> 5.1.0) + unicorn-worker-killer (~> 0.4.4) version_sorter (~> 2.1.0) virtus (~> 1.0.1) vmstat (~> 2.2) @@ -996,4 +994,4 @@ DEPENDENCIES wikicloth (= 0.8.1) BUNDLED WITH - 1.12.5 + 1.13.2 diff --git a/README.md b/README.md index 3df8bfa04c..a6b30aff5a 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,13 @@ # GitLab -[![build status](https://gitlab.com/gitlab-org/gitlab-ce/badges/master/build.svg)](https://gitlab.com/gitlab-org/gitlab-ce/commits/master) -[![coverage report](https://gitlab.com/gitlab-org/gitlab-ce/badges/master/coverage.svg?job=coverage)](https://gitlab.com/gitlab-org/gitlab-ce/commits/master) +[![Build status](https://gitlab.com/gitlab-org/gitlab-ce/badges/master/build.svg)](https://gitlab.com/gitlab-org/gitlab-ce/commits/master) +[![CE coverage report](https://gitlab.com/gitlab-org/gitlab-ce/badges/master/coverage.svg?job=coverage)](http://gitlab-org.gitlab.io/gitlab-ce/coverage-ruby) [![Code Climate](https://codeclimate.com/github/gitlabhq/gitlabhq.svg)](https://codeclimate.com/github/gitlabhq/gitlabhq) +[![Core Infrastructure Initiative Best Practices](https://bestpractices.coreinfrastructure.org/projects/42/badge)](https://bestpractices.coreinfrastructure.org/projects/42) ## Canonical source -The source of GitLab Community Edition is [hosted on GitLab.com](https://gitlab.com/gitlab-org/gitlab-ce/) and there are mirrors to make [contributing](CONTRIBUTING.md) as easy as possible. +The canonical source of GitLab Community Edition is [hosted on GitLab.com](https://gitlab.com/gitlab-org/gitlab-ce/). ## Open source software to collaborate on code diff --git a/VERSION b/VERSION index e12be1cc63..3b3df40190 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.12.3 +8.13.3 diff --git a/app/assets/images/mailers/ci_pipeline_notif_v1/gitlab-logo-full-horizontal.gif b/app/assets/images/mailers/ci_pipeline_notif_v1/gitlab-logo-full-horizontal.gif new file mode 100644 index 0000000000000000000000000000000000000000..3f4ef31947bc4a53d6b2d243d6e9f2c975c84b77 GIT binary patch literal 3654 zcmV-M4!QA1Nk%w1VYC230QUd@+}`2*r77u5GW^ANX>f=jiI*;Ntt!nf!z;^T4>$)Y$!eE48`6@bL2gsww=EF8!q@v9`VEYgWq5(U6v* zuCcoBq?eJHqx<8-_V)JuY$p5gu(Y z#mf5X)9mf;^vuNI;^h3HD)-*n;zB9?pFR5R+xu-Pp{B9N%Ffu@-Tkmb{EIH?RW8oZ z)Q*#%`SS7hWi9&n_x-6c``xqTR6YD{D2_55-v+T7pv+SSm~*ZA%0{-q|Eou~Tt@%!1U{-!6x#mwhUE%Nj8%+Ay6?Ct66 z?f$4N?e6c!$jFUJB%<}T`KGr_vYj7oR9p% zaN$BKr>nH%MJ)TzkjKi;z{AP@Z726=EUU1%tFO5JtTm{twU3se>2Y5Ea3|zOEd6gM zk(Z*8m!t3S@%?Tl`1twy`T3BRqWJju{B9=UK`HA-EB$XKke8$N_4bgLqWx|s;X*0* z_xF;Qq>+}Q_4f9&x4-%M`v0sf;X^9xhryJ4p{x9FCiG${_nc+_l_vh3C-I+);z22qn55)THtSa}?OZnC;pFtXrlzU0{G%rP zZ6@MFDf;^QA^8LV00000EC2ui0JH!?000R80RIUbNU)&6g9sBUT*$DY!-o(fN}MQg zMwl}cC-wq2#ZtzPAVZ3jn8IASXd@d!qQ&h>uaq!j%9Lp6#EBw@W*QXI=*i7aI)e%g zT1uEd1Q3P_OwqxpfG|p@m99kKPuhX0V8bpnWXqqwn;3=i6u`${sv@Ms z%ANbKsM(`Qg))_PSHKjyfTfn?Y8LBIAhZZ~y%M;w&_-qN-h>pCS{VU%%@T;~xHC+< znGr+^n!=9J%mPe!ULBH}ImLyu1Vs#cG3(nD%WTVR_5=aSGA-L{o0$&*kGPXNY|6X$ zXqhPno#vfdxpjp?GSrSe6Vie0{;DwlzD~ZNZsNRs1BuydhCLe1&mJ#N{~z=CXJN#Q zKE1hsy!Bbvi+1>3B}hy_d{tG@t_jevCv106J)*A?!0 zoP!BAQU1dV08}V~3Izh`(uO1|)N#-#cu;{!10zMCf;S4p@lY=*es~p&Atl(~f-=JN zOCGQgGs_0KO!C7dN92-=F_cFC$qN~2BrvEzm9*eNAgdh203Nt_;mJtasIb8VmO2E^ z6ErmI?6c4MMh!^LbTS;Y*fyIA0Y8f53`2)di>yOJ7$89_x8$tz&N~mY#R&)mE%eYt7mdIP z@6^Kc(mL1jKolu~Utq0|*J#blG(qz8rxI72Z&hiPis{z0e+JETG5+D=1@3JL=FuklYw(0E;3X4djsDzzBSbH%EgKw=iFL2uL7u0VQ0B^ou7O9N|Ph5B-^jGP1yJXz3d$ zq6if@gkmdK!NTA60;I`fPZxo-XuJL0R|Mr08QWrA$VW} z>k$qZTL?z48wwhyM`9{!H;J^EhNRz05LXzi9R)i7Y#_m1{R>cHV{J*u(-r3 zR^bCp%r98>Ge|f80FVaNwE!DBfI~GVF^exmfNL?EgcQ?I4HQhkSd%aY3gGq+5exwh zBn-d<5&^<~94>JiGz;S#2f}0UfDI%>0~RU=5>qM_ z=0I40fl1(^1-}po1YdapM2umS*2AC%)94Rqh~tA6+yxS3aDi7o!wMm(1T1XHI)Tt3 z5d3phF6yEG0u2ackHqw&F_FoyK~5wInaD*m@<2eD6^|gv_(lRsFo8XE@r$qgq!uce zPQ;PZA5S0$8?846?PZh=1)yU_D)9<>5`+$4@J0ezMS?~AbC`V`-9VFBzlQum7cocz zHX^`^FZiMv4uq!61~w388lxJz_{SPLnNbPy0G!M#Wg2O4k6M8678ZbGRqr5$IR zl2Ft@K#+|^xb+gKFh)&p%Ew|Jlc$6Ce#lnRwEM)+y zR#l8-3}*(@Xiju8uN6FSWmWkR3wVCy4GO@c0uu5D6s&**tOICHRd&~cDl;Lv(1RjY zfQw20q#+RaECFGY8cn7OB(V#4fe0u8#?68faMn9x8bdnL$0eebn0rQrgq{QatT=5T!HZ-+)L{c5_7x^LY!DUzVgon;z?AV&V#7*PAUa5>3L@~5 z4`9K?n+<>j##}f76Bs{SRVC!0>)#7J!vHoAi7pn9iz6i98=@P?8(MJMePLK2#h6+N zWRcV*584YpL=kqZ*EfFQ+afh1;8Wfjaq0Rt4sD5^OL3MKY9AVTrrcHrU&zW84*6oCm;95tzu+CT{ysoM?s0vBIcL@^HHf&x^4 z+b6XERtHCp0ZWJmJrFhFM0oC3qM-t&5P?qK;DdeO;!bt4-7)}yf~3L_>92_OKPXTK zCm18^I8f`bm!aFzmwpyb2;^S90Khsaf&-&ig(N1x(0??b8j6@jof2@#1XKe6*+hsM ztT2Z!XOs|Qe4IO!Fi!j+0mqzyJp8;|ZoipA*hE?bR4lz(Rdmsn8Kz` zFeVGZ1v`LgB-Bo#R5-g31b-kQPw)uM)eo$sSs8T!ZdO(^VjUu&ZFo0vW1=0tWB{N=y$vUcrhqAZWM+jWPJ{heO%}uL=b@) z

ohIKUu;%|V2N^MU6!f^j$_BG6de)=l4phf>HJ+b|9zMT4IIbc5*-h$Ywy4$y0gL8zQ)C4=Agp#;~QcwU*kYiBT567T~W`PWR*bizZR)>dbqZo(j@P%SE zhGgUpiD(v!=r|#eS#3B34gdwUD2Z!u2mSRofkO@vViq*O2-P!#=Ee^dfCW5ujDgq- zE&xGjkUV4157(ds^w5fYxK0;<26Hd~aHfs5s0OM~eEbk&7YGf$$cSTrV@+@eYv7LV z*b7{6Y5XuoHxMDwcnz%(Ruy0XF5r*;*bAaC08Ib}qQrczxC;-^1Vf+-)#Z>52?d3) z4)TBmL2wG&;0h8TN7?9+4#|xM5Dx|E1~NAQipP>R`43DZU5e=3`Cnqn7WRjQaWc=}sv6^zH3cDEx&c{COt(<;wh`Cj5{l{Bh@$O>0Ctoo+kF!((I0Y@v)}(W+wXg^!f1a`_h{8S1IzgtL>74^TD|5 zihA)|C;I2j=xtc#M=ktwCj4+F`DiBTMJoCC^yN=B{Fo-|hj!#hF6@eVVk0nrYz+|D*THk z{j^T|&yxD}@cH!f`03{ERw(t+%Jj#-^S`#|YE=66@%r@h`|#uV>gfHXDfs8(_~6^* zOf&V<%=*`;>Ud@Q)1Cawhy28M`@Lu7T}Jz_MgFWd?w^tVrz+`7G38%K?^r1AM=Rk$ zDgAFI>_#j6YbN}qCj6u({ca}VLMh`zDgUP@{B9=VLMi{IC;g-*W$-(r@#PF-1@Mt>!m?!zRi~F%j{jx~zmx%qeOZ)5C z``4)brYZipWcv8?|A;5=Vl(ZNg#EK!`^SFzq#_UBa>xFdVLMi$4>-zHP{G%rP zZ6@MFDf;^QA^8LV00000EC2ui0B!(e000R80RIUbNU&f*5R{M@T*$DY!-o+65ux-T zqD6=}0*Ing=c31t7Nb!S1?UjSlmCL0a#bn-%9kh~Xh7u()ijtM103-OXGJ8OKqJDa zM9bfiH$fprS^>wOzcfLTN?nL$r@sM76i!|E&6rc8fVPVLhbhh14U5JW1Z35ppcO>a zCY`jVsM8}?EuI68r! z&P!bUhSStG-3EF*G1UjWOc$Cw|1tE2d0)9wh80ug(Vl_>j3Qfu1Z@$Wf=;0Vid2V; zvfp&*DZ(K^iwLOT2902olp?&i0%C~HttikH5HcoV2uV3`A&A=y&b(CQvmi~ySqdY@`=!z2}00l~!AQC8JgC$0}qzpJ=qlb$( zy5a_f4MuY%m`@pjlND}!3FtjdHkb~ZAktC^B``I>Xq%0I@SinM0{YbvEW8B5GI(OC zCy?=3;-#ierJ=z~A~<2Frl|1$@t=^WI_2mHDDg4rjT;!T<#A8wAt#ncV1bemp@MlP zq}Ew+YOPOUauOx3LL1^Z{`{jsO;MBF6-&^keqfXs50A*(n%cFqW|x zu*=$X*PTiny7&?i2Q?i3U;zMS*Dd(jr`Tf3+aQ`E!6}0`o(cf`024(75H-;OKdV4t zMhlG#ehLDuAg*962(Z$*-54;j3O}!S0MQ+n^P|cfu$*3Z3PXrKT-<@%o^}hhu%QY+ z{Kx^#Lwp}VyzGPY?mOWz9IiWKrr5&x^JuqF!tlh)(hKDc2|&Q|#IKTo^Ut56P3Y5q z)k^8upPfnq+%JEN4-WYf`|_(WK>_-{!$t1e=MUb+&uponfCW}ZJ~1OB0Y6zstd z81f7`tdNCq0AT0;U?ITv#bO94IN;rINI^LiU?CCcg*SdkKEP#ggSsa3GnG!vwk6 zKQ*526va3vs!SnB$b8Y$r=C=CzPrjXncH0Fo(ipp zW;29$^y5_(u#S%yLK8hms3OVPxl@pWtcfeeS2;f&v1Vj!%&t zwQE04kqFQZ#}uL!97>=2!=X~6TtKmhI+6-Tn%cB(w5^p5rhwbC{nQWSrQlUxP)o5$ zVH2;=EEQYWRI}{@xqw=3{dbxyLH%qp*g5$ z05|3Fn0F_)zB*T^CZL9n22z1OG`W0CzyJUX=UpnVGl9ok;ePwOXMy}Tz(1tv1=Gd~ z(1D0_5xp;Y9Sq?{7eojrc1Z5QQ+(uN$&t_UagIMYK(-%_iiOHZTJ_ zoHj%t5!~U|Be6S$dqy+gKbXlUOvFK?(tmA6MKKnPhA zFRcB@He(Elz&jIfzb+6sNc2GmNMp`_flD{_tcO4aGEf#hD1ad(juKGEP8HF;+^!oL z^FGFDlYy-!IZW0;;(8LeAFx2f0G-0{eyn;Hy`HhmU($>{+*o!Mwj}#B*^dstVh4q= z)X;(AfedtDb%1N5^x}95zg`s`;huU>AVC8H03(ep7$nbe(QR1}zz*>idr}^d2@}YH zcKx`dCW9vjqRM?N1lL6g`k~5nvf=`|Kt{y>J{F3RGd9 z{r>&?*RNmi-n~0{@?=j>PhVf(zkmN;zkdDf*|YQK&o5oNbjFMsXV0G9xpU{9J$tTR zy?XE7z4!0mPn|k-{`~pVrcGP4XwlK5M;|_X`03N9_3PI^fByXM-@k_r9a^$v$({Txjvc#v`SSGX(>HG1c>DJ4IdkS5IB?+O$BzpaE}S@V zVt;@C|Ns9P1~*Xr$pUtu4u}NB2?P6=2Ct^(me#iRj?S(Y9w|QI?k-JE4>1O*i5(8i zN*qi!Jk4w(5~d5g6xrFlL_DpV1erXv8B|tx3Ntf_bEyb63Go|yISZI|>oBm(DK`tV zNPDRYT8|3K_v6G0Lr(X8P7Mh~&5UFr z9-#=KM-x&UcxJX{@VuCCSkX_FS7*V5sSm~d*e&8Tem1(uoa6Qg(XcF3IC@^tMdW~l Uz@z00*d$wa7(Be1t-xRn0D%4fzW@LL literal 0 HcmV?d00001 diff --git a/app/assets/images/mailers/ci_pipeline_notif_v1/icon-check-green-inverted.gif b/app/assets/images/mailers/ci_pipeline_notif_v1/icon-check-green-inverted.gif new file mode 100644 index 0000000000000000000000000000000000000000..27a55b1d61fd88ef897d0021de7570288e5db0e6 GIT binary patch literal 369 zcmZ?wbhEHblwy!#xXQrbw!P%x=a=7p|M>d*d-9>qk3YX89_&au)ET|MIdWf<(fZUs z|Nj2__wUZfCk4l+G@M(o|JnJQA0EH|`8jHTbMc9(6{lwHdUE>Sr)P_9?Ob+ekL$ML zvXe8+HfGeGnfvVPo8&`XpMHLQ^5xa7504$U7X1JJ-*9~j166_IPZqFwIv^6{CkD2@ z1Ct6obfo%EEGeoCDVX8yRiJy${ORQ`42(;r ym9B7I)xBW7+r~{v3*EPE+Uc=-UEKbLEdl%Y9$npYBvndM;&kf8OP5m}8LR;vhn6e= literal 0 HcmV?d00001 diff --git a/app/assets/images/mailers/ci_pipeline_notif_v1/icon-commit-gray.gif b/app/assets/images/mailers/ci_pipeline_notif_v1/icon-commit-gray.gif new file mode 100644 index 0000000000000000000000000000000000000000..8fe3281d2f6dc2fe80c94290a2fe73c93bfdd06e GIT binary patch literal 278 zcmV+x0qOonNk%w1VHyA$0K@?(X;Z z_t)3g_4W0&wYAgJ)8pggzP`Tr`1rWExWB)@nwpxqxw)O4o#^Q3=jZ3<=H}_?>64R_ zm6etM|Nj6000000A^8LV00000EC2ui02%-q000G(U?+}bX`X1Ru59bRa4gSblq3;N zOvZ5-6GH4U00=l70buZW5el1)MIy083&IuzuxT(vjK&54L17kww1cu4C`gLIhT=#E z7MadPi9{ke6($uNe|<(5djNfefP##M0va6|XliV3aB_5Z3m7O{U0)qxV`VK*QBze{ cSuI3HNJ>mGJ3T)^G&VRiyuH4^z$PI8I|k%^kN^Mx literal 0 HcmV?d00001 diff --git a/app/assets/images/mailers/ci_pipeline_notif_v1/icon-x-red-inverted.gif b/app/assets/images/mailers/ci_pipeline_notif_v1/icon-x-red-inverted.gif new file mode 100644 index 0000000000000000000000000000000000000000..4260e312929d8fa0e9aacda888f99c5d86bc75b0 GIT binary patch literal 1013 zcmZ?wbhEHblwy!#_|Cv^H=+Lb>-Se}lfGTO`}x?#2l?Hfj$HV5<<3>RTTzAWS zP|$PTJ?s0ehhNTI{qy0|HOJID@paeTv+w70+)Hcz`{U3_Xo^PSk5>#mu9K79Uh_wo0e4}U#>^ZoXt*Gsm2 zI&|(qQSZI*d=& zpS=8f;pXr6pMKnX^5yi^zhAyx(hvXt|3AYh7!3i^LqPE-3s{p5hy>*c298S%%^Wfw z8x|aF<`CA3Ik6$3LzY)bVavlqEUhgvDI9{67#a>TIhak$D4gKh+AGamA+tk4`+QSB`6&8tR^ww5W{>YIgX{C37Xj?s|^j#~ZFyv->u6h&Ek+AKET3X%Ap&D6;eUANS7dqThx(-H;W35OH9R?3^X ze3d+`z&JmeRqE@_g9^QDCWnPW8cG*4bFin+xgoLhLFoAff>ApZnpQgsNrg0cc<rah^faaA+;mR9H$jo?3@zWo3D?@8_SYnma~ zG=pzwhFsPNzM>g?TQl_E&tLz({rGn2_LKS<->%>PbnwjMnrZhlTL1n2^Z(cHD;h!f zGuuAyI{tFX$`_MY{Qdds#iSKqFW$bb8Fo!O?C;m_pLU;oIc@cy&)=R;T>f(MimO1o zK7P3jG&!i`vUbS7KY#!I{(Vh5^qNNSgPhLmI^nkhi$Co-@#)anr;W27WVKz_3A?Tt z^6lFF$F~({v?>8R&|M%}{)9kwy-Aom_u9j9xgOi(%B8Ai(0v(9CXJBXY{%!OK>y VmMtM07@u6|mX_JV$;HB84FGFZ9HamM literal 0 HcmV?d00001 diff --git a/app/assets/javascripts/LabelManager.js b/app/assets/javascripts/LabelManager.js deleted file mode 100644 index d4a4c7abaa..0000000000 --- a/app/assets/javascripts/LabelManager.js +++ /dev/null @@ -1,115 +0,0 @@ -(function() { - this.LabelManager = (function() { - LabelManager.prototype.errorMessage = 'Unable to update label prioritization at this time'; - - function LabelManager(opts) { - // Defaults - var ref, ref1, ref2; - if (opts == null) { - opts = {}; - } - this.togglePriorityButton = (ref = opts.togglePriorityButton) != null ? ref : $('.js-toggle-priority'), this.prioritizedLabels = (ref1 = opts.prioritizedLabels) != null ? ref1 : $('.js-prioritized-labels'), this.otherLabels = (ref2 = opts.otherLabels) != null ? ref2 : $('.js-other-labels'); - this.prioritizedLabels.sortable({ - items: 'li', - placeholder: 'list-placeholder', - axis: 'y', - update: this.onPrioritySortUpdate.bind(this) - }); - this.bindEvents(); - } - - LabelManager.prototype.bindEvents = function() { - return this.togglePriorityButton.on('click', this, this.onTogglePriorityClick); - }; - - LabelManager.prototype.onTogglePriorityClick = function(e) { - var $btn, $label, $tooltip, _this, action; - e.preventDefault(); - _this = e.data; - $btn = $(e.currentTarget); - $label = $("#" + ($btn.data('domId'))); - action = $btn.parents('.js-prioritized-labels').length ? 'remove' : 'add'; - // Make sure tooltip will hide - $tooltip = $("#" + ($btn.find('.has-tooltip:visible').attr('aria-describedby'))); - $tooltip.tooltip('destroy'); - return _this.toggleLabelPriority($label, action); - }; - - LabelManager.prototype.toggleLabelPriority = function($label, action, persistState) { - var $from, $target, _this, url, xhr; - if (persistState == null) { - persistState = true; - } - _this = this; - url = $label.find('.js-toggle-priority').data('url'); - $target = this.prioritizedLabels; - $from = this.otherLabels; - // Optimistic update - if (action === 'remove') { - $target = this.otherLabels; - $from = this.prioritizedLabels; - } - if ($from.find('li').length === 1) { - $from.find('.empty-message').removeClass('hidden'); - } - if (!$target.find('li').length) { - $target.find('.empty-message').addClass('hidden'); - } - $label.detach().appendTo($target); - // Return if we are not persisting state - if (!persistState) { - return; - } - if (action === 'remove') { - xhr = $.ajax({ - url: url, - type: 'DELETE' - }); - // Restore empty message - if (!$from.find('li').length) { - $from.find('.empty-message').removeClass('hidden'); - } - } else { - xhr = this.savePrioritySort($label, action); - } - return xhr.fail(this.rollbackLabelPosition.bind(this, $label, action)); - }; - - LabelManager.prototype.onPrioritySortUpdate = function() { - var xhr; - xhr = this.savePrioritySort(); - return xhr.fail(function() { - return new Flash(this.errorMessage, 'alert'); - }); - }; - - LabelManager.prototype.savePrioritySort = function() { - return $.post({ - url: this.prioritizedLabels.data('url'), - data: { - label_ids: this.getSortedLabelsIds() - } - }); - }; - - LabelManager.prototype.rollbackLabelPosition = function($label, originalAction) { - var action; - action = originalAction === 'remove' ? 'add' : 'remove'; - this.toggleLabelPriority($label, action, false); - return new Flash(this.errorMessage, 'alert'); - }; - - LabelManager.prototype.getSortedLabelsIds = function() { - var sortedIds; - sortedIds = []; - this.prioritizedLabels.find('li').each(function() { - return sortedIds.push($(this).data('id')); - }); - return sortedIds; - }; - - return LabelManager; - - })(); - -}).call(this); diff --git a/app/assets/javascripts/activities.js b/app/assets/javascripts/activities.js index d5e11e22be..f4f8cf0418 100644 --- a/app/assets/javascripts/activities.js +++ b/app/assets/javascripts/activities.js @@ -21,16 +21,14 @@ }; Activities.prototype.toggleFilter = function(sender) { - var event_filters, filter; + var filter = sender.attr("id").split("_")[0]; + $('.event-filter .active').removeClass("active"); - event_filters = $.cookie("event_filter"); - filter = sender.attr("id").split("_")[0]; - $.cookie("event_filter", (event_filters !== filter ? filter : ""), { + $.cookie("event_filter", filter, { path: gon.relative_url_root || '/' }); - if (event_filters !== filter) { - return sender.closest('li').toggleClass("active"); - } + + sender.closest('li').toggleClass("active"); }; return Activities; diff --git a/app/assets/javascripts/api.js b/app/assets/javascripts/api.js index 7e5e9fa9ae..56ec1489f8 100644 --- a/app/assets/javascripts/api.js +++ b/app/assets/javascripts/api.js @@ -6,11 +6,10 @@ groupProjectsPath: "/api/:version/groups/:id/projects.json", projectsPath: "/api/:version/projects.json?simple=true", labelsPath: "/:namespace_path/:project_path/labels", - licensePath: "/api/:version/licenses/:key", - gitignorePath: "/api/:version/gitignores/:key", - gitlabCiYmlPath: "/api/:version/gitlab_ci_ymls/:key", + licensePath: "/api/:version/templates/licenses/:key", + gitignorePath: "/api/:version/templates/gitignores/:key", + gitlabCiYmlPath: "/api/:version/templates/gitlab_ci_ymls/:key", issuableTemplatePath: "/:namespace_path/:project_path/templates/:type/:key", - group: function(group_id, callback) { var url = Api.buildUrl(Api.groupPath) .replace(':id', group_id); @@ -23,12 +22,13 @@ }, // Return groups list. Filtered by query // Only active groups retrieved - groups: function(query, skip_ldap, callback) { + groups: function(query, skip_ldap, skip_groups, callback) { var url = Api.buildUrl(Api.groupsPath); return $.ajax({ url: url, data: { search: query, + skip_groups: skip_groups, per_page: 20 }, dataType: "json" diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index c029bf3b5c..8a61669822 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -247,7 +247,7 @@ $this.toggleClass('active'); var notesHolders = $this.closest('.diff-file').find('.notes_holder'); if ($this.hasClass('active')) { - notesHolders.show(); + notesHolders.show().find('.hide').show(); } else { notesHolders.hide(); } diff --git a/app/assets/javascripts/blob/blob_ci_yaml.js b/app/assets/javascripts/blob/blob_ci_yaml.js deleted file mode 100644 index 6875857496..0000000000 --- a/app/assets/javascripts/blob/blob_ci_yaml.js +++ /dev/null @@ -1,46 +0,0 @@ - -/*= require blob/template_selector */ - -(function() { - var extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, - hasProp = {}.hasOwnProperty; - - this.BlobCiYamlSelector = (function(superClass) { - extend(BlobCiYamlSelector, superClass); - - function BlobCiYamlSelector() { - return BlobCiYamlSelector.__super__.constructor.apply(this, arguments); - } - - BlobCiYamlSelector.prototype.requestFile = function(query) { - return Api.gitlabCiYml(query.name, this.requestFileSuccess.bind(this)); - }; - - return BlobCiYamlSelector; - - })(TemplateSelector); - - this.BlobCiYamlSelectors = (function() { - function BlobCiYamlSelectors(opts) { - var ref; - this.$dropdowns = (ref = opts.$dropdowns) != null ? ref : $('.js-gitlab-ci-yml-selector'), this.editor = opts.editor; - this.$dropdowns.each((function(_this) { - return function(i, dropdown) { - var $dropdown; - $dropdown = $(dropdown); - return new BlobCiYamlSelector({ - pattern: /(.gitlab-ci.yml)/, - data: $dropdown.data('data'), - wrapper: $dropdown.closest('.js-gitlab-ci-yml-selector-wrap'), - dropdown: $dropdown, - editor: _this.editor - }); - }; - })(this)); - } - - return BlobCiYamlSelectors; - - })(); - -}).call(this); diff --git a/app/assets/javascripts/blob/blob_ci_yaml.js.es6 b/app/assets/javascripts/blob/blob_ci_yaml.js.es6 new file mode 100644 index 0000000000..d6ea4f84f5 --- /dev/null +++ b/app/assets/javascripts/blob/blob_ci_yaml.js.es6 @@ -0,0 +1,40 @@ +/*= require blob/template_selector */ +((global) => { + + class BlobCiYamlSelector extends gl.TemplateSelector { + requestFile(query) { + return Api.gitlabCiYml(query.name, this.requestFileSuccess.bind(this)); + } + + requestFileSuccess(file) { + return super.requestFileSuccess(file); + } + } + + global.BlobCiYamlSelector = BlobCiYamlSelector; + + class BlobCiYamlSelectors { + constructor({ editor, $dropdowns } = {}) { + this.editor = editor; + this.$dropdowns = $dropdowns || $('.js-gitlab-ci-yml-selector'); + this.initSelectors(); + } + + initSelectors() { + const editor = this.editor; + this.$dropdowns.each((i, dropdown) => { + const $dropdown = $(dropdown); + return new BlobCiYamlSelector({ + editor, + pattern: /(.gitlab-ci.yml)/, + data: $dropdown.data('data'), + wrapper: $dropdown.closest('.js-gitlab-ci-yml-selector-wrap'), + dropdown: $dropdown + }); + }); + } + } + + global.BlobCiYamlSelectors = BlobCiYamlSelectors; + +})(window.gl || (window.gl = {})); diff --git a/app/assets/javascripts/blob/blob_gitignore_selector.js b/app/assets/javascripts/blob/blob_gitignore_selector.js index 54a09e919f..cd746b05cf 100644 --- a/app/assets/javascripts/blob/blob_gitignore_selector.js +++ b/app/assets/javascripts/blob/blob_gitignore_selector.js @@ -18,6 +18,6 @@ return BlobGitignoreSelector; - })(TemplateSelector); + })(gl.TemplateSelector); }).call(this); diff --git a/app/assets/javascripts/blob/blob_license_selector.js b/app/assets/javascripts/blob/blob_license_selector.js index 9a8ef08f4e..2701df3e6d 100644 --- a/app/assets/javascripts/blob/blob_license_selector.js +++ b/app/assets/javascripts/blob/blob_license_selector.js @@ -23,6 +23,6 @@ return BlobLicenseSelector; - })(TemplateSelector); + })(gl.TemplateSelector); }).call(this); diff --git a/app/assets/javascripts/blob/blob_license_selectors.js b/app/assets/javascripts/blob/blob_license_selectors.js deleted file mode 100644 index 39237705e8..0000000000 --- a/app/assets/javascripts/blob/blob_license_selectors.js +++ /dev/null @@ -1,25 +0,0 @@ -(function() { - this.BlobLicenseSelectors = (function() { - function BlobLicenseSelectors(opts) { - var ref; - this.$dropdowns = (ref = opts.$dropdowns) != null ? ref : $('.js-license-selector'), this.editor = opts.editor; - this.$dropdowns.each((function(_this) { - return function(i, dropdown) { - var $dropdown; - $dropdown = $(dropdown); - return new BlobLicenseSelector({ - pattern: /^(.+\/)?(licen[sc]e|copying)($|\.)/i, - data: $dropdown.data('data'), - wrapper: $dropdown.closest('.js-license-selector-wrap'), - dropdown: $dropdown, - editor: _this.editor - }); - }; - })(this)); - } - - return BlobLicenseSelectors; - - })(); - -}).call(this); diff --git a/app/assets/javascripts/blob/blob_license_selectors.js.es6 b/app/assets/javascripts/blob/blob_license_selectors.js.es6 new file mode 100644 index 0000000000..153ed45755 --- /dev/null +++ b/app/assets/javascripts/blob/blob_license_selectors.js.es6 @@ -0,0 +1,21 @@ +((global) => { + class BlobLicenseSelectors { + constructor({ $dropdowns, editor }) { + this.$dropdowns = $('.js-license-selector'); + this.editor = editor; + this.$dropdowns.each((i, dropdown) => { + const $dropdown = $(dropdown); + return new BlobLicenseSelector({ + editor, + pattern: /^(.+\/)?(licen[sc]e|copying)($|\.)/i, + data: $dropdown.data('data'), + wrapper: $dropdown.closest('.js-license-selector-wrap'), + dropdown: $dropdown, + }); + }); + } + } + + global.BlobLicenseSelectors = BlobLicenseSelectors; + +})(window.gl || (window.gl = {})); diff --git a/app/assets/javascripts/blob/template_selector.js b/app/assets/javascripts/blob/template_selector.js deleted file mode 100644 index 95352164d7..0000000000 --- a/app/assets/javascripts/blob/template_selector.js +++ /dev/null @@ -1,100 +0,0 @@ -(function() { - var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; - - this.TemplateSelector = (function() { - function TemplateSelector(opts) { - var ref; - if (opts == null) { - opts = {}; - } - this.onClick = bind(this.onClick, this); - this.dropdown = opts.dropdown, this.data = opts.data, this.pattern = opts.pattern, this.wrapper = opts.wrapper, this.editor = opts.editor, this.fileEndpoint = opts.fileEndpoint, this.$input = (ref = opts.$input) != null ? ref : $('#file_name'); - this.dropdownIcon = $('.fa-chevron-down', this.dropdown); - this.buildDropdown(); - this.bindEvents(); - this.onFilenameUpdate(); - - this.autosizeUpdateEvent = document.createEvent('Event'); - this.autosizeUpdateEvent.initEvent('autosize:update', true, false); - } - - TemplateSelector.prototype.buildDropdown = function() { - return this.dropdown.glDropdown({ - data: this.data, - filterable: true, - selectable: true, - toggleLabel: this.toggleLabel, - search: { - fields: ['name'] - }, - clicked: this.onClick, - text: function(item) { - return item.name; - } - }); - }; - - TemplateSelector.prototype.bindEvents = function() { - return this.$input.on('keyup blur', (function(_this) { - return function(e) { - return _this.onFilenameUpdate(); - }; - })(this)); - }; - - TemplateSelector.prototype.toggleLabel = function(item) { - return item.name; - }; - - TemplateSelector.prototype.onFilenameUpdate = function() { - var filenameMatches; - if (!this.$input.length) { - return; - } - filenameMatches = this.pattern.test(this.$input.val().trim()); - if (!filenameMatches) { - this.wrapper.addClass('hidden'); - return; - } - return this.wrapper.removeClass('hidden'); - }; - - TemplateSelector.prototype.onClick = function(item, el, e) { - e.preventDefault(); - return this.requestFile(item); - }; - - TemplateSelector.prototype.requestFile = function(item) { - // This `requestFile` method is an abstract method that should - // be added by all subclasses. - }; - - // To be implemented on the extending class - // e.g. - // Api.gitignoreText item.name, @requestFileSuccess.bind(@) - TemplateSelector.prototype.requestFileSuccess = function(file, skipFocus) { - this.editor.setValue(file.content, 1); - if (!skipFocus) this.editor.focus(); - - if (this.editor instanceof jQuery) { - this.editor.get(0).dispatchEvent(this.autosizeUpdateEvent); - } - }; - - TemplateSelector.prototype.startLoadingSpinner = function() { - this.dropdownIcon - .addClass('fa-spinner fa-spin') - .removeClass('fa-chevron-down'); - }; - - TemplateSelector.prototype.stopLoadingSpinner = function() { - this.dropdownIcon - .addClass('fa-chevron-down') - .removeClass('fa-spinner fa-spin'); - }; - - return TemplateSelector; - - })(); - -}).call(this); diff --git a/app/assets/javascripts/blob/template_selector.js.es6 b/app/assets/javascripts/blob/template_selector.js.es6 new file mode 100644 index 0000000000..2d5c6ade05 --- /dev/null +++ b/app/assets/javascripts/blob/template_selector.js.es6 @@ -0,0 +1,97 @@ +((global) => { + class TemplateSelector { + constructor({ dropdown, data, pattern, wrapper, editor, fileEndpoint, $input } = {}) { + this.onClick = this.onClick.bind(this); + this.dropdown = dropdown; + this.data = data; + this.pattern = pattern; + this.wrapper = wrapper; + this.editor = editor; + this.fileEndpoint = fileEndpoint; + this.$input = $input || $('#file_name'); + this.dropdownIcon = $('.fa-chevron-down', this.dropdown); + this.buildDropdown(); + this.bindEvents(); + this.onFilenameUpdate(); + + this.autosizeUpdateEvent = document.createEvent('Event'); + this.autosizeUpdateEvent.initEvent('autosize:update', true, false); + } + + buildDropdown() { + return this.dropdown.glDropdown({ + data: this.data, + filterable: true, + selectable: true, + toggleLabel: this.toggleLabel, + search: { + fields: ['name'] + }, + clicked: this.onClick, + text: function(item) { + return item.name; + } + }); + } + + bindEvents() { + return this.$input.on('keyup blur', (e) => this.onFilenameUpdate()); + } + + toggleLabel(item) { + return item.name; + } + + onFilenameUpdate() { + var filenameMatches; + if (!this.$input.length) { + return; + } + filenameMatches = this.pattern.test(this.$input.val().trim()); + if (!filenameMatches) { + this.wrapper.addClass('hidden'); + return; + } + return this.wrapper.removeClass('hidden'); + } + + onClick(item, el, e) { + e.preventDefault(); + return this.requestFile(item); + } + + requestFile(item) { + // This `requestFile` method is an abstract method that should + // be added by all subclasses. + } + + // To be implemented on the extending class + // e.g. + // Api.gitignoreText item.name, @requestFileSuccess.bind(@) + requestFileSuccess(file, { skipFocus } = {}) { + const oldValue = this.editor.getValue(); + let newValue = file.content; + + this.editor.setValue(newValue, 1); + if (!skipFocus) this.editor.focus(); + + if (this.editor instanceof jQuery) { + this.editor.get(0).dispatchEvent(this.autosizeUpdateEvent); + } + } + + startLoadingSpinner() { + this.dropdownIcon + .addClass('fa-spinner fa-spin') + .removeClass('fa-chevron-down'); + } + + stopLoadingSpinner() { + this.dropdownIcon + .addClass('fa-chevron-down') + .removeClass('fa-spinner fa-spin'); + } + } + + global.TemplateSelector = TemplateSelector; + })(window.gl || ( window.gl = {})); diff --git a/app/assets/javascripts/blob_edit/edit_blob.js b/app/assets/javascripts/blob_edit/edit_blob.js index b846bab042..8db4f6a3b2 100644 --- a/app/assets/javascripts/blob_edit/edit_blob.js +++ b/app/assets/javascripts/blob_edit/edit_blob.js @@ -22,13 +22,14 @@ // submitted textarea })(this)); this.initModePanesAndLinks(); - new BlobLicenseSelectors({ + this.initSoftWrap(); + new gl.BlobLicenseSelectors({ editor: this.editor }); new BlobGitignoreSelectors({ editor: this.editor }); - new BlobCiYamlSelectors({ + new gl.BlobCiYamlSelectors({ editor: this.editor }); } @@ -50,6 +51,7 @@ this.$editModePanes.hide(); currentPane.fadeIn(200); if (paneId === "#preview") { + this.$toggleButton.hide(); return $.post(currentLink.data("preview-url"), { content: this.editor.getValue() }, function(response) { @@ -57,10 +59,23 @@ return currentPane.syntaxHighlight(); }); } else { + this.$toggleButton.show(); return this.editor.focus(); } }; + EditBlob.prototype.initSoftWrap = function() { + this.isSoftWrapped = false; + this.$toggleButton = $('.soft-wrap-toggle'); + this.$toggleButton.on('click', this.toggleSoftWrap.bind(this)); + }; + + EditBlob.prototype.toggleSoftWrap = function(e) { + this.isSoftWrapped = !this.isSoftWrapped; + this.$toggleButton.toggleClass('soft-wrap-active', this.isSoftWrapped); + this.editor.getSession().setUseWrapMode(this.isSoftWrapped); + }; + return EditBlob; })(); diff --git a/app/assets/javascripts/boards/boards_bundle.js.es6 b/app/assets/javascripts/boards/boards_bundle.js.es6 index 91c12570e0..d4f8f4b942 100644 --- a/app/assets/javascripts/boards/boards_bundle.js.es6 +++ b/app/assets/javascripts/boards/boards_bundle.js.es6 @@ -28,12 +28,13 @@ $(() => { state: Store.state, loading: true, endpoint: $boardApp.dataset.endpoint, + boardId: $boardApp.dataset.boardId, disabled: $boardApp.dataset.disabled === 'true', issueLinkBase: $boardApp.dataset.issueLinkBase }, init: Store.create.bind(Store), created () { - gl.boardService = new BoardService(this.endpoint); + gl.boardService = new BoardService(this.endpoint, this.boardId); }, ready () { Store.disabled = this.disabled; diff --git a/app/assets/javascripts/boards/components/board.js.es6 b/app/assets/javascripts/boards/components/board.js.es6 index 7e86f001f4..cacb36a897 100644 --- a/app/assets/javascripts/boards/components/board.js.es6 +++ b/app/assets/javascripts/boards/components/board.js.es6 @@ -21,7 +21,8 @@ }, data () { return { - filters: Store.state.filters + filters: Store.state.filters, + showIssueForm: false }; }, watch: { @@ -33,6 +34,11 @@ deep: true } }, + methods: { + showNewIssueForm() { + this.showIssueForm = !this.showIssueForm; + } + }, ready () { const options = gl.issueBoards.getBoardSortableDefaultOptions({ disabled: this.disabled, diff --git a/app/assets/javascripts/boards/components/board_blank_state.js.es6 b/app/assets/javascripts/boards/components/board_blank_state.js.es6 index 63d72d857d..ff90f2d6d7 100644 --- a/app/assets/javascripts/boards/components/board_blank_state.js.es6 +++ b/app/assets/javascripts/boards/components/board_blank_state.js.es6 @@ -8,10 +8,8 @@ data () { return { predefinedLabels: [ - new ListLabel({ title: 'Development', color: '#5CB85C' }), - new ListLabel({ title: 'Testing', color: '#F0AD4E' }), - new ListLabel({ title: 'Production', color: '#FF5F00' }), - new ListLabel({ title: 'Ready', color: '#FF0000' }) + new ListLabel({ title: 'To Do', color: '#F0AD4E' }), + new ListLabel({ title: 'Doing', color: '#5CB85C' }) ] } }, diff --git a/app/assets/javascripts/boards/components/board_list.js.es6 b/app/assets/javascripts/boards/components/board_list.js.es6 index 474805c143..7022a29e81 100644 --- a/app/assets/javascripts/boards/components/board_list.js.es6 +++ b/app/assets/javascripts/boards/components/board_list.js.es6 @@ -1,4 +1,5 @@ //= require ./board_card +//= require ./board_new_issue (() => { const Store = gl.issueBoards.BoardsStore; @@ -8,14 +9,16 @@ gl.issueBoards.BoardList = Vue.extend({ components: { - 'board-card': gl.issueBoards.BoardCard + 'board-card': gl.issueBoards.BoardCard, + 'board-new-issue': gl.issueBoards.BoardNewIssue }, props: { disabled: Boolean, list: Object, issues: Array, loading: Boolean, - issueLinkBase: String + issueLinkBase: String, + showIssueForm: Boolean }, data () { return { @@ -73,7 +76,7 @@ group: 'issues', sort: false, disabled: this.disabled, - filter: '.board-list-count', + filter: '.board-list-count, .is-disabled', onStart: (e) => { const card = this.$refs.issue[e.oldIndex]; diff --git a/app/assets/javascripts/boards/components/board_new_issue.js.es6 b/app/assets/javascripts/boards/components/board_new_issue.js.es6 new file mode 100644 index 0000000000..a4fad422ec --- /dev/null +++ b/app/assets/javascripts/boards/components/board_new_issue.js.es6 @@ -0,0 +1,58 @@ +(() => { + window.gl = window.gl || {}; + + gl.issueBoards.BoardNewIssue = Vue.extend({ + props: { + list: Object, + showIssueForm: Boolean + }, + data() { + return { + title: '', + error: false + }; + }, + watch: { + showIssueForm () { + this.$els.input.focus(); + } + }, + methods: { + submit(e) { + e.preventDefault(); + if (this.title.trim() === '') return; + + this.error = false; + + const labels = this.list.label ? [this.list.label] : []; + const issue = new ListIssue({ + title: this.title, + labels + }); + + this.list.newIssue(issue) + .then((data) => { + // Need this because our jQuery very kindly disables buttons on ALL form submissions + $(this.$els.submitButton).enable(); + }) + .catch(() => { + // Need this because our jQuery very kindly disables buttons on ALL form submissions + $(this.$els.submitButton).enable(); + + // Remove the issue + this.list.removeIssue(issue); + + // Show error message + this.error = true; + this.showIssueForm = true; + }); + + this.cancel(); + }, + cancel() { + this.showIssueForm = false; + this.title = ''; + } + } + }); +})(); diff --git a/app/assets/javascripts/boards/mixins/sortable_default_options.js.es6 b/app/assets/javascripts/boards/mixins/sortable_default_options.js.es6 index 44addb3ea9..f629d45c58 100644 --- a/app/assets/javascripts/boards/mixins/sortable_default_options.js.es6 +++ b/app/assets/javascripts/boards/mixins/sortable_default_options.js.es6 @@ -21,7 +21,7 @@ fallbackClass: 'is-dragging', fallbackOnBody: true, ghostClass: 'is-ghost', - filter: '.has-tooltip', + filter: '.has-tooltip, .btn', delay: gl.issueBoards.touchEnabled ? 100 : 0, scrollSensitivity: gl.issueBoards.touchEnabled ? 60 : 100, scrollSpeed: 20, diff --git a/app/assets/javascripts/boards/models/list.js.es6 b/app/assets/javascripts/boards/models/list.js.es6 index 91fd620fdb..5d0a561cdb 100644 --- a/app/assets/javascripts/boards/models/list.js.es6 +++ b/app/assets/javascripts/boards/models/list.js.es6 @@ -87,6 +87,17 @@ class List { }); } + newIssue (issue) { + this.addIssue(issue); + this.issuesSize++; + + return gl.boardService.newIssue(this.id, issue) + .then((resp) => { + const data = resp.json(); + issue.id = data.iid; + }); + } + createIssues (data) { data.forEach((issueObj) => { this.addIssue(new ListIssue(issueObj)); diff --git a/app/assets/javascripts/boards/services/board_service.js.es6 b/app/assets/javascripts/boards/services/board_service.js.es6 index 9b80fb2e99..b9c91cbf31 100644 --- a/app/assets/javascripts/boards/services/board_service.js.es6 +++ b/app/assets/javascripts/boards/services/board_service.js.es6 @@ -1,15 +1,15 @@ class BoardService { - constructor (root) { + constructor (root, boardId) { Vue.http.options.root = root; - this.lists = Vue.resource(`${root}/lists{/id}`, {}, { + this.lists = Vue.resource(`${root}/${boardId}/lists{/id}`, {}, { generate: { method: 'POST', - url: `${root}/lists/generate.json` + url: `${root}/${boardId}/lists/generate.json` } }); - this.issue = Vue.resource(`${root}/issues{/id}`, {}); - this.issues = Vue.resource(`${root}/lists{/id}/issues`, {}); + this.issue = Vue.resource(`${root}/${boardId}/issues{/id}`, {}); + this.issues = Vue.resource(`${root}/${boardId}/lists{/id}/issues`, {}); Vue.http.interceptors.push((request, next) => { request.headers['X-CSRF-Token'] = $.rails.csrfToken(); @@ -58,4 +58,10 @@ class BoardService { to_list_id }); } + + newIssue (id, issue) { + return this.issues.save({ id }, { + issue + }); + } }; diff --git a/app/assets/javascripts/build.js b/app/assets/javascripts/build.js index 78d21c0552..97462a5959 100644 --- a/app/assets/javascripts/build.js +++ b/app/assets/javascripts/build.js @@ -15,18 +15,17 @@ this.hideSidebar = bind(this.hideSidebar, this); this.toggleSidebar = bind(this.toggleSidebar, this); this.updateDropdown = bind(this.updateDropdown, this); + this.$document = $(document); clearInterval(Build.interval); // Init breakpoint checker this.bp = Breakpoints.get(); - $('.js-build-sidebar').niceScroll(); + this.initSidebar(); this.populateJobs(this.build_stage); this.updateStageDropdownText(this.build_stage); - this.hideSidebar(); - $(document).off('click', '.js-sidebar-build-toggle').on('click', '.js-sidebar-build-toggle', this.toggleSidebar); $(window).off('resize.build').on('resize.build', this.hideSidebar); - $(document).off('click', '.stage-item').on('click', '.stage-item', this.updateDropdown); + this.$document.off('click', '.stage-item').on('click', '.stage-item', this.updateDropdown); $('#js-build-scroll > a').off('click').on('click', this.stepTrace); this.updateArtifactRemoveDate(); if ($('#build-trace').length) { @@ -62,6 +61,21 @@ } } + Build.prototype.initSidebar = function() { + this.$sidebar = $('.js-build-sidebar'); + this.sidebarTranslationLimits = { + min: $('.navbar-gitlab').outerHeight() + $('.layout-nav').outerHeight() + } + this.sidebarTranslationLimits.max = this.sidebarTranslationLimits.min + $('.scrolling-tabs-container').outerHeight(); + this.$sidebar.css({ + top: this.sidebarTranslationLimits.max + }); + this.$sidebar.niceScroll(); + this.hideSidebar(); + this.$document.off('click', '.js-sidebar-build-toggle').on('click', '.js-sidebar-build-toggle', this.toggleSidebar); + this.$document.off('scroll.translateSidebar').on('scroll.translateSidebar', this.translateSidebar.bind(this)); + }; + Build.prototype.getInitialBuildTrace = function() { var removeRefreshStatuses = ['success', 'failed', 'canceled', 'skipped'] @@ -129,15 +143,23 @@ Build.prototype.toggleSidebar = function() { if (this.shouldHideSidebar()) { - return $('.js-build-sidebar').toggleClass('right-sidebar-expanded right-sidebar-collapsed'); + return this.$sidebar.toggleClass('right-sidebar-expanded right-sidebar-collapsed'); } }; + Build.prototype.translateSidebar = function(e) { + var newPosition = this.sidebarTranslationLimits.max - document.body.scrollTop; + if (newPosition < this.sidebarTranslationLimits.min) newPosition = this.sidebarTranslationLimits.min; + this.$sidebar.css({ + top: newPosition + }); + }; + Build.prototype.hideSidebar = function() { if (this.shouldHideSidebar()) { - return $('.js-build-sidebar').removeClass('right-sidebar-expanded').addClass('right-sidebar-collapsed'); + return this.$sidebar.removeClass('right-sidebar-expanded').addClass('right-sidebar-collapsed'); } else { - return $('.js-build-sidebar').removeClass('right-sidebar-collapsed').addClass('right-sidebar-expanded'); + return this.$sidebar.removeClass('right-sidebar-collapsed').addClass('right-sidebar-expanded'); } }; @@ -146,7 +168,7 @@ $date = $('.js-artifacts-remove'); if ($date.length) { date = $date.text(); - return $date.text($.timefor(new Date(date.replace(/-/g, '/')), ' ')); + return $date.text($.timefor(new Date(date.replace(/([0-9]+)-([0-9]+)-([0-9]+)/g, '$1/$2/$3')), ' ')); } }; diff --git a/app/assets/javascripts/commit/image-file.js b/app/assets/javascripts/commit/image_file.js similarity index 100% rename from app/assets/javascripts/commit/image-file.js rename to app/assets/javascripts/commit/image_file.js diff --git a/app/assets/javascripts/compare_autocomplete.js b/app/assets/javascripts/compare_autocomplete.js.es6 similarity index 66% rename from app/assets/javascripts/compare_autocomplete.js rename to app/assets/javascripts/compare_autocomplete.js.es6 index 4e3a28cd16..9a2082d97e 100644 --- a/app/assets/javascripts/compare_autocomplete.js +++ b/app/assets/javascripts/compare_autocomplete.js.es6 @@ -9,7 +9,10 @@ var $dropdown, selected; $dropdown = $(this); selected = $dropdown.data('selected'); - return $dropdown.glDropdown({ + const $dropdownContainer = $dropdown.closest('.dropdown'); + const $fieldInput = $(`input[name="${$dropdown.data('field-name')}"]`, $dropdownContainer); + const $filterInput = $('input[type="search"]', $dropdownContainer); + $dropdown.glDropdown({ data: function(term, callback) { return $.ajax({ url: $dropdown.data('refs-url'), @@ -23,8 +26,9 @@ selectable: true, filterable: true, filterByText: true, - fieldName: $dropdown.attr('name'), - filterInput: 'input[type="text"]', + toggleLabel: true, + fieldName: $dropdown.data('field-name'), + filterInput: 'input[type="search"]', renderRow: function(ref) { var link; if (ref.header != null) { @@ -41,6 +45,14 @@ return $el.text().trim(); } }); + $filterInput.on('keyup', (e) => { + const keyCode = e.keyCode || e.which; + if (keyCode !== 13) return; + const text = $filterInput.val(); + $fieldInput.val(text); + $('.dropdown-toggle-text', $dropdown).text(text); + $dropdownContainer.removeClass('open'); + }); }); }; diff --git a/app/assets/javascripts/copy_to_clipboard.js b/app/assets/javascripts/copy_to_clipboard.js index 3e20db7e30..e23bda2fa4 100644 --- a/app/assets/javascripts/copy_to_clipboard.js +++ b/app/assets/javascripts/copy_to_clipboard.js @@ -26,15 +26,15 @@ }; showTooltip = function(target, title) { - return $(target).tooltip({ - container: 'body', - html: 'true', - placement: 'auto bottom', - title: title, - trigger: 'manual' - }).tooltip('show').one('mouseleave', function() { - return $(this).tooltip('hide'); - }); + var $target = $(target); + var originalTitle = $target.data('original-title'); + + $target + .attr('title', 'Copied!') + .tooltip('fixTitle') + .tooltip('show') + .attr('title', originalTitle) + .tooltip('fixTitle'); }; $(function() { diff --git a/app/assets/javascripts/cycle-analytics.js.es6 b/app/assets/javascripts/cycle_analytics.js.es6 similarity index 94% rename from app/assets/javascripts/cycle-analytics.js.es6 rename to app/assets/javascripts/cycle_analytics.js.es6 index cd9886ba58..20791bab94 100644 --- a/app/assets/javascripts/cycle-analytics.js.es6 +++ b/app/assets/javascripts/cycle_analytics.js.es6 @@ -1,3 +1,5 @@ +//= require vue + ((global) => { const COOKIE_NAME = 'cycle_analytics_help_dismissed'; @@ -34,7 +36,11 @@ method: 'GET', dataType: 'json', contentType: 'application/json', - data: { start_date: options.startDate } + data: { + cycle_analytics: { + start_date: options.startDate + } + } }).done((data) => { this.decorateData(data); this.initDropdown(); diff --git a/app/assets/javascripts/diff.js b/app/assets/javascripts/diff.js index c8634b78f2..8086c10ad6 100644 --- a/app/assets/javascripts/diff.js +++ b/app/assets/javascripts/diff.js @@ -7,6 +7,9 @@ function Diff() { $('.files .diff-file').singleFileDiff(); this.filesCommentButton = $('.files .diff-file').filesCommentButton(); + if (this.diffViewType() === 'parallel') { + $('.content-wrapper .container-fluid').removeClass('container-limited'); + } $(document).off('click', '.js-unfold'); $(document).on('click', '.js-unfold', (function(_this) { return function(event) { @@ -52,6 +55,10 @@ })(this)); } + Diff.prototype.diffViewType = function() { + return $('.inline-parallel-buttons a.active').data('view-type'); + } + Diff.prototype.lineNumbers = function(line) { if (!line.children().length) { return [0, 0]; diff --git a/app/assets/javascripts/dispatcher.js b/app/assets/javascripts/dispatcher.js.es6 similarity index 89% rename from app/assets/javascripts/dispatcher.js rename to app/assets/javascripts/dispatcher.js.es6 index ddf11ecf34..a1fe57562f 100644 --- a/app/assets/javascripts/dispatcher.js +++ b/app/assets/javascripts/dispatcher.js.es6 @@ -8,6 +8,7 @@ Dispatcher = (function() { function Dispatcher() { this.initSearch(); + this.initFieldErrors(); this.initPageScripts(); } @@ -20,13 +21,17 @@ path = page.split(':'); shortcut_handler = null; switch (page) { + case 'sessions:new': + new UsernameValidator(); + break; case 'projects:boards:show': + case 'projects:boards:index': shortcut_handler = new ShortcutsNavigation(); break; case 'projects:merge_requests:index': case 'projects:issues:index': Issuable.init(); - new IssuableBulkActions(); + new gl.IssuableBulkActions(); shortcut_handler = new ShortcutsNavigation(); break; case 'projects:issues:show': @@ -40,12 +45,12 @@ new Milestone(); break; case 'dashboard:todos:index': - new Todos(); + new gl.Todos(); break; case 'projects:milestones:new': case 'projects:milestones:edit': new ZenMode(); - new DueDateSelect(); + new gl.DueDateSelectors(); new GLForm($('.milestone-form')); break; case 'groups:milestones:new': @@ -59,7 +64,9 @@ shortcut_handler = new ShortcutsNavigation(); new GLForm($('.issue-form')); new IssuableForm($('.issue-form')); - new IssuableTemplateSelectors(); + new LabelsSelect(); + new MilestoneSelect(); + new gl.IssuableTemplateSelectors(); break; case 'projects:merge_requests:new': case 'projects:merge_requests:edit': @@ -67,7 +74,9 @@ shortcut_handler = new ShortcutsNavigation(); new GLForm($('.merge-request-form')); new IssuableForm($('.merge-request-form')); - new IssuableTemplateSelectors(); + new LabelsSelect(); + new MilestoneSelect(); + new gl.IssuableTemplateSelectors(); break; case 'projects:tags:new': new ZenMode(); @@ -92,9 +101,6 @@ new ZenMode(); new MergedButtons(); break; - case "projects:merge_requests:conflicts": - window.mcui = new MergeConflictResolver() - break; case 'projects:merge_requests:index': shortcut_handler = new ShortcutsNavigation(); Issuable.init(); @@ -111,6 +117,9 @@ new ZenMode(); shortcut_handler = new ShortcutsNavigation(); break; + case 'projects:commit:builds': + new gl.Pipelines(); + break; case 'projects:commits:show': case 'projects:activity': shortcut_handler = new ShortcutsNavigation(); @@ -122,6 +131,9 @@ new TreeView(); } break; + case 'projects:pipelines:show': + new gl.Pipelines(); + break; case 'groups:activity': new Activities(); break; @@ -132,12 +144,12 @@ break; case 'groups:group_members:index': new gl.MemberExpirationDate(); - new GroupMembers(); + new gl.Members(); new UsersSelect(); break; case 'projects:project_members:index': new gl.MemberExpirationDate(); - new ProjectMembers(); + new gl.Members(); new UsersSelect(); break; case 'groups:new': @@ -159,13 +171,15 @@ shortcut_handler = new ShortcutsNavigation(); new ShortcutsBlob(true); break; + case 'groups:labels:new': + case 'groups:labels:edit': case 'projects:labels:new': case 'projects:labels:edit': new Labels(); break; case 'projects:labels:index': if ($('.prioritized-labels').length) { - new LabelManager(); + new gl.LabelManager(); } break; case 'projects:network:show': @@ -279,10 +293,16 @@ Dispatcher.prototype.initSearch = function() { // Only when search form is present if ($('.search').length) { - return new SearchAutocomplete(); + return new gl.SearchAutocomplete(); } }; + Dispatcher.prototype.initFieldErrors = function() { + $('.show-gl-field-errors').each((i, form) => { + new gl.GlFieldErrors(form); + }); + }; + return Dispatcher; })(); diff --git a/app/assets/javascripts/due_date_select.js b/app/assets/javascripts/due_date_select.js deleted file mode 100644 index bf68b7e3a9..0000000000 --- a/app/assets/javascripts/due_date_select.js +++ /dev/null @@ -1,107 +0,0 @@ -(function() { - this.DueDateSelect = (function() { - function DueDateSelect() { - var $datePicker, $dueDate, $loading; - // Milestone edit/new form - $datePicker = $('.datepicker'); - if ($datePicker.length) { - $dueDate = $('#milestone_due_date'); - $datePicker.datepicker({ - dateFormat: 'yy-mm-dd', - onSelect: function(dateText, inst) { - return $dueDate.val(dateText); - } - }).datepicker('setDate', $.datepicker.parseDate('yy-mm-dd', $dueDate.val())); - } - $('.js-clear-due-date').on('click', function(e) { - e.preventDefault(); - return $.datepicker._clearDate($datePicker); - }); - // Issuable sidebar - $loading = $('.js-issuable-update .due_date').find('.block-loading').hide(); - $('.js-due-date-select').each(function(i, dropdown) { - var $block, $dropdown, $dropdownParent, $selectbox, $sidebarValue, $value, $valueContent, abilityName, addDueDate, fieldName, issueUpdateURL; - $dropdown = $(dropdown); - $dropdownParent = $dropdown.closest('.dropdown'); - $datePicker = $dropdownParent.find('.js-due-date-calendar'); - $block = $dropdown.closest('.block'); - $selectbox = $dropdown.closest('.selectbox'); - $value = $block.find('.value'); - $valueContent = $block.find('.value-content'); - $sidebarValue = $('.js-due-date-sidebar-value', $block); - fieldName = $dropdown.data('field-name'); - abilityName = $dropdown.data('ability-name'); - issueUpdateURL = $dropdown.data('issue-update'); - $dropdown.glDropdown({ - hidden: function() { - $selectbox.hide(); - return $value.css('display', ''); - } - }); - addDueDate = function(isDropdown) { - var data, date, mediumDate, value; - // Create the post date - value = $("input[name='" + fieldName + "']").val(); - if (value !== '') { - date = new Date(value.replace(new RegExp('-', 'g'), ',')); - mediumDate = $.datepicker.formatDate('M d, yy', date); - } else { - mediumDate = 'No due date'; - } - data = {}; - data[abilityName] = {}; - data[abilityName].due_date = value; - return $.ajax({ - type: 'PUT', - url: issueUpdateURL, - data: data, - dataType: 'json', - beforeSend: function() { - var cssClass; - $loading.fadeIn(); - if (isDropdown) { - $dropdown.trigger('loading.gl.dropdown'); - $selectbox.hide(); - } - $value.css('display', ''); - cssClass = Date.parse(mediumDate) ? 'bold' : 'no-value'; - $valueContent.html("" + mediumDate + ""); - $sidebarValue.html(mediumDate); - if (value !== '') { - return $('.js-remove-due-date-holder').removeClass('hidden'); - } else { - return $('.js-remove-due-date-holder').addClass('hidden'); - } - } - }).done(function(data) { - if (isDropdown) { - $dropdown.trigger('loaded.gl.dropdown'); - $dropdown.dropdown('toggle'); - } - return $loading.fadeOut(); - }); - }; - $block.on('click', '.js-remove-due-date', function(e) { - e.preventDefault(); - $("input[name='" + fieldName + "']").val(''); - return addDueDate(false); - }); - return $datePicker.datepicker({ - dateFormat: 'yy-mm-dd', - defaultDate: $("input[name='" + fieldName + "']").val(), - altField: "input[name='" + fieldName + "']", - onSelect: function() { - return addDueDate(true); - } - }); - }); - $(document).off('click', '.ui-datepicker-header a').on('click', '.ui-datepicker-header a', function(e) { - return e.stopImmediatePropagation(); - }); - } - - return DueDateSelect; - - })(); - -}).call(this); diff --git a/app/assets/javascripts/due_date_select.js.es6 b/app/assets/javascripts/due_date_select.js.es6 new file mode 100644 index 0000000000..41925fcc8e --- /dev/null +++ b/app/assets/javascripts/due_date_select.js.es6 @@ -0,0 +1,161 @@ +(function(global) { + class DueDateSelect { + constructor({ $dropdown, $loading } = {}) { + const $dropdownParent = $dropdown.closest('.dropdown'); + const $block = $dropdown.closest('.block'); + this.$loading = $loading; + this.$dropdown = $dropdown; + this.$dropdownParent = $dropdownParent; + this.$datePicker = $dropdownParent.find('.js-due-date-calendar'); + this.$block = $block; + this.$selectbox = $dropdown.closest('.selectbox'); + this.$value = $block.find('.value'); + this.$valueContent = $block.find('.value-content'); + this.$sidebarValue = $('.js-due-date-sidebar-value', $block); + this.fieldName = $dropdown.data('field-name'), + this.abilityName = $dropdown.data('ability-name'), + this.issueUpdateURL = $dropdown.data('issue-update') + + this.rawSelectedDate = null; + this.displayedDate = null; + this.datePayload = null; + + this.initGlDropdown(); + this.initRemoveDueDate(); + this.initDatePicker(); + this.initStopPropagation(); + } + + initGlDropdown() { + this.$dropdown.glDropdown({ + hidden: () => { + this.$selectbox.hide(); + this.$value.css('display', ''); + } + }); + } + + initDatePicker() { + this.$datePicker.datepicker({ + dateFormat: 'yy-mm-dd', + defaultDate: $("input[name='" + this.fieldName + "']").val(), + altField: "input[name='" + this.fieldName + "']", + onSelect: () => { + return this.saveDueDate(true); + } + }); + } + + initRemoveDueDate() { + this.$block.on('click', '.js-remove-due-date', (e) => { + e.preventDefault(); + $("input[name='" + this.fieldName + "']").val(''); + return this.saveDueDate(false); + }); + } + + initStopPropagation() { + $(document).off('click', '.ui-datepicker-header a').on('click', '.ui-datepicker-header a', (e) => { + return e.stopImmediatePropagation(); + }); + } + + saveDueDate(isDropdown) { + this.parseSelectedDate(); + this.prepSelectedDate(); + this.submitSelectedDate(isDropdown); + } + + parseSelectedDate() { + this.rawSelectedDate = $("input[name='" + this.fieldName + "']").val(); + if (this.rawSelectedDate.length) { + let dateObj = new Date(this.rawSelectedDate); + this.displayedDate = $.datepicker.formatDate('M d, yy', dateObj); + } else { + this.displayedDate = 'No due date'; + } + } + + prepSelectedDate() { + const datePayload = {}; + datePayload[this.abilityName] = {}; + datePayload[this.abilityName].due_date = this.rawSelectedDate; + this.datePayload = datePayload; + } + + submitSelectedDate(isDropdown) { + return $.ajax({ + type: 'PUT', + url: this.issueUpdateURL, + data: this.datePayload, + dataType: 'json', + beforeSend: () => { + const selectedDateValue = this.datePayload[this.abilityName].due_date; + const displayedDateStyle = this.displayedDate !== 'No due date' ? 'bold' : 'no-value'; + + this.$loading.fadeIn(); + + if (isDropdown) { + this.$dropdown.trigger('loading.gl.dropdown'); + this.$selectbox.hide(); + } + + this.$value.css('display', ''); + this.$valueContent.html(`${this.displayedDate}`); + this.$sidebarValue.html(this.displayedDate); + + return selectedDateValue.length ? + $('.js-remove-due-date-holder').removeClass('hidden') : + $('.js-remove-due-date-holder').addClass('hidden'); + + } + }).done((data) => { + if (isDropdown) { + this.$dropdown.trigger('loaded.gl.dropdown'); + this.$dropdown.dropdown('toggle'); + } + return this.$loading.fadeOut(); + }); + } + } + + class DueDateSelectors { + constructor() { + this.initMilestoneDueDate(); + this.initIssuableSelect(); + } + + initMilestoneDueDate() { + const $datePicker = $('.datepicker'); + + if ($datePicker.length) { + const $dueDate = $('#milestone_due_date'); + $datePicker.datepicker({ + dateFormat: 'yy-mm-dd', + onSelect: (dateText, inst) => { + $dueDate.val(dateText); + } + }).datepicker('setDate', $.datepicker.parseDate('yy-mm-dd', $dueDate.val())); + } + $('.js-clear-due-date').on('click', (e) => { + e.preventDefault(); + $.datepicker._clearDate($datePicker); + }); + } + + initIssuableSelect() { + const $loading = $('.js-issuable-update .due_date').find('.block-loading').hide(); + + $('.js-due-date-select').each((i, dropdown) => { + const $dropdown = $(dropdown); + new DueDateSelect({ + $dropdown, + $loading + }); + }); + } + } + + global.DueDateSelectors = DueDateSelectors; + +})(window.gl || (window.gl = {})); diff --git a/app/assets/javascripts/gfm_auto_complete.js.es6 b/app/assets/javascripts/gfm_auto_complete.js.es6 index d0786bf005..845313b6b3 100644 --- a/app/assets/javascripts/gfm_auto_complete.js.es6 +++ b/app/assets/javascripts/gfm_auto_complete.js.es6 @@ -52,37 +52,27 @@ } } }, - setup: function(input) { + setup: _.debounce(function(input) { // Add GFM auto-completion to all input fields, that accept GFM input. this.input = input || $('.js-gfm-input'); // destroy previous instances this.destroyAtWho(); // set up instances this.setupAtWho(); - if (this.dataSource) { - if (!this.dataLoading && !this.cachedData) { - this.dataLoading = true; - setTimeout((function(_this) { - return function() { - var fetch; - fetch = _this.fetchData(_this.dataSource); - return fetch.done(function(data) { - _this.dataLoading = false; - return _this.loadData(data); - }); - }; - // We should wait until initializations are done - // and only trigger the last .setup since - // The previous .dataSource belongs to the previous issuable - // and the last one will have the **proper** .dataSource property - // TODO: Make this a singleton and turn off events when moving to another page - })(this), 1000); - } - if (this.cachedData != null) { - return this.loadData(this.cachedData); - } + + if (this.dataSource && !this.dataLoading && !this.cachedData) { + this.dataLoading = true; + return this.fetchData(this.dataSource) + .done((data) => { + this.dataLoading = false; + this.loadData(data); + }); + }; + + if (this.cachedData != null) { + return this.loadData(this.cachedData); } - }, + }, 1000), setupAtWho: function() { // Emoji this.input.atwho({ diff --git a/app/assets/javascripts/gl_dropdown.js b/app/assets/javascripts/gl_dropdown.js index 1b6db64120..53762f2965 100644 --- a/app/assets/javascripts/gl_dropdown.js +++ b/app/assets/javascripts/gl_dropdown.js @@ -25,7 +25,7 @@ return function(e) { e.preventDefault(); e.stopPropagation(); - return _this.input.val('').trigger('keyup').focus(); + return _this.input.val('').trigger('input').focus(); }; })(this)); // Key events @@ -37,28 +37,16 @@ e.preventDefault() } }) - .on('keyup', function(e) { - var keyCode; - keyCode = e.which; - if (ARROW_KEY_CODES.indexOf(keyCode) >= 0) { - return; - } + .on('input', function() { if (this.input.val() !== "" && !$inputContainer.hasClass(HAS_VALUE_CLASS)) { $inputContainer.addClass(HAS_VALUE_CLASS); } else if (this.input.val() === "" && $inputContainer.hasClass(HAS_VALUE_CLASS)) { $inputContainer.removeClass(HAS_VALUE_CLASS); } - if (keyCode === 13 && !options.elIsInput) { - return false; - } // Only filter asynchronously only if option remote is set if (this.options.remote) { clearTimeout(timeout); return timeout = setTimeout(function() { - var blurField = this.shouldBlur(keyCode); - if (blurField && this.filterInputBlur) { - this.input.blur(); - } return this.options.query(this.input.val(), function(data) { return this.options.callback(data); }.bind(this)); @@ -255,7 +243,7 @@ _this.fullData = data; _this.parseData(_this.fullData); if (_this.options.filterable && _this.filter && _this.filter.input) { - return _this.filter.input.trigger('keyup'); + return _this.filter.input.trigger('input'); } }; // Remote data @@ -443,6 +431,7 @@ var contentHtml; this.resetRows(); this.addArrowKeyEvent(); + if (this.options.setIndeterminateIds) { this.options.setIndeterminateIds.call(this); } @@ -460,9 +449,21 @@ if (this.options.filterable) { this.filterInput.focus(); } + + if (this.options.showMenuAbove) { + this.positionMenuAbove(); + } + return this.dropdown.trigger('shown.gl.dropdown'); }; + GitLabDropdown.prototype.positionMenuAbove = function() { + var $button = $(this.el); + var $menu = this.dropdown.find('.dropdown-menu'); + + $menu.css('top', ($button.height() + $menu.height()) * -1); + }; + GitLabDropdown.prototype.hidden = function(e) { var $input; this.resetRows(); @@ -474,7 +475,7 @@ // Triggering 'keyup' will re-render the dropdown which is not always required // specially if we want to keep the state of the dropdown needed for bulk-assignment if (!this.options.persistWhenHide) { - $input.trigger("keyup"); + $input.trigger("input"); } if (this.dropdown.find(".dropdown-toggle-page").length) { $('.dropdown-menu', this.dropdown).removeClass(PAGE_TWO_CLASS); @@ -487,14 +488,27 @@ // Render the full menu GitLabDropdown.prototype.renderMenu = function(html) { - var menu_html; - menu_html = ""; if (this.options.renderMenu) { - menu_html = this.options.renderMenu(html); + return this.options.renderMenu(html); } else { - menu_html = $('