From cee57f6ea502ef82c2d5e2c1a28f16f1d753ae74 Mon Sep 17 00:00:00 2001 From: Praveen Arimbrathodiyil Date: Tue, 13 Sep 2016 17:45:13 +0530 Subject: [PATCH] New upstream version 8.11.3+dfsg --- .gitignore | 1 + .gitlab-ci.yml | 144 +- .mailmap | 35 + .rubocop.yml | 25 +- .rubocop_todo.yml | 19 - .ruby-version | 2 +- .simplecov | 4 - CHANGELOG | 184 + CONTRIBUTING.md | 11 +- GITLAB_SHELL_VERSION | 2 +- GITLAB_WORKHORSE_VERSION | 2 +- Gemfile | 36 +- Gemfile.lock | 160 +- PROCESS.md | 2 + VERSION | 2 +- app/assets/images/bg-header.png | Bin 90 -> 0 bytes app/assets/images/bg_fallback.png | Bin 167 -> 0 bytes app/assets/images/chosen-sprite.png | Bin 367 -> 0 bytes app/assets/images/diff_note_add.png | Bin 418 -> 0 bytes app/assets/images/icon-search.png | Bin 222 -> 0 bytes app/assets/images/icon_sprite.png | Bin 2636 -> 0 bytes app/assets/images/images.png | Bin 5806 -> 0 bytes app/assets/images/koding-logo.svg | 8 + app/assets/images/move.png | Bin 197 -> 0 bytes app/assets/images/progress_bar.gif | Bin 494 -> 0 bytes app/assets/images/slider_handles.png | Bin 1341 -> 0 bytes app/assets/images/switch_icon.png | Bin 231 -> 0 bytes app/assets/images/trans_bg.gif | Bin 49 -> 0 bytes app/assets/javascripts/LabelManager.js | 110 + app/assets/javascripts/LabelManager.js.coffee | 92 - app/assets/javascripts/activities.js | 40 + app/assets/javascripts/activities.js.coffee | 24 - app/assets/javascripts/admin.js | 64 + app/assets/javascripts/admin.js.coffee | 51 - app/assets/javascripts/api.js | 145 + app/assets/javascripts/api.js.coffee | 122 - app/assets/javascripts/application.js | 327 + app/assets/javascripts/application.js.coffee | 310 - app/assets/javascripts/aside.js | 26 + app/assets/javascripts/aside.js.coffee | 16 - app/assets/javascripts/autosave.js | 63 + app/assets/javascripts/autosave.js.coffee | 39 - app/assets/javascripts/awards_handler.coffee | 372 - app/assets/javascripts/awards_handler.js | 368 + app/assets/javascripts/behaviors/autosize.js | 30 + .../javascripts/behaviors/autosize.js.coffee | 22 - .../behaviors/details_behavior.coffee | 15 - .../javascripts/behaviors/details_behavior.js | 15 + .../javascripts/behaviors/quick_submit.js | 58 + .../behaviors/quick_submit.js.coffee | 56 - .../javascripts/behaviors/requires_input.js | 45 + .../behaviors/requires_input.js.coffee | 52 - .../behaviors/toggler_behavior.coffee | 14 - .../javascripts/behaviors/toggler_behavior.js | 26 + app/assets/javascripts/blob/blob_ci_yaml.js | 46 + .../javascripts/blob/blob_ci_yaml.js.coffee | 23 - .../javascripts/blob/blob_file_dropzone.js | 62 + .../blob/blob_file_dropzone.js.coffee | 57 - .../blob/blob_gitignore_selector.js | 23 + .../blob/blob_gitignore_selector.js.coffee | 5 - .../blob/blob_gitignore_selectors.js | 25 + .../blob/blob_gitignore_selectors.js.coffee | 17 - .../javascripts/blob/blob_license_selector.js | 28 + .../blob/blob_license_selector.js.coffee | 9 - .../blob/blob_license_selectors.js | 25 + .../blob/blob_license_selectors.js.coffee | 17 - .../javascripts/blob/edit_blob.js.coffee | 42 - .../javascripts/blob/template_selector.js | 90 + .../blob/template_selector.js.coffee | 60 - .../javascripts/blob_edit/blob_edit_bundle.js | 12 + app/assets/javascripts/blob_edit/edit_blob.js | 66 + .../javascripts/boards/boards_bundle.js.es6 | 57 + .../boards/components/board.js.es6 | 81 + .../components/board_blank_state.js.es6 | 49 + .../boards/components/board_card.js.es6 | 43 + .../boards/components/board_delete.js.es6 | 19 + .../boards/components/board_list.js.es6 | 87 + .../components/new_list_dropdown.js.es6 | 54 + .../mixins/sortable_default_options.js.es6 | 35 + .../javascripts/boards/models/issue.js.es6 | 44 + .../javascripts/boards/models/label.js.es6 | 10 + .../javascripts/boards/models/list.js.es6 | 125 + .../javascripts/boards/models/user.js.es6 | 8 + .../boards/services/board_service.js.es6 | 61 + .../boards/stores/boards_store.js.es6 | 112 + .../boards/test_utils/simulate_drag.js | 119 + .../boards/vue_resource_interceptor.js.es6 | 10 + app/assets/javascripts/breakpoints.coffee | 37 - app/assets/javascripts/breakpoints.js | 68 + app/assets/javascripts/broadcast_message.js | 34 + .../javascripts/broadcast_message.js.coffee | 22 - app/assets/javascripts/build.coffee | 114 - app/assets/javascripts/build.js | 162 + app/assets/javascripts/build_artifacts.js | 27 + .../javascripts/build_artifacts.js.coffee | 14 - app/assets/javascripts/commit.js | 13 + app/assets/javascripts/commit.js.coffee | 4 - app/assets/javascripts/commit/file.js | 13 + app/assets/javascripts/commit/file.js.coffee | 5 - app/assets/javascripts/commit/image-file.js | 175 + .../javascripts/commit/image-file.js.coffee | 127 - app/assets/javascripts/commits.js | 58 + app/assets/javascripts/commits.js.coffee | 39 - app/assets/javascripts/compare.js | 91 + app/assets/javascripts/compare.js.coffee | 67 - .../javascripts/compare_autocomplete.js | 51 + .../compare_autocomplete.js.coffee | 41 - .../javascripts/confirm_danger_modal.js | 32 + .../confirm_danger_modal.js.coffee | 20 - app/assets/javascripts/copy_to_clipboard.js | 43 + .../javascripts/copy_to_clipboard.js.coffee | 37 - app/assets/javascripts/create_label.js.es6 | 126 + app/assets/javascripts/diff.js | 66 + app/assets/javascripts/diff.js.coffee | 51 - .../components/comment_resolve_btn.js.es6 | 49 + .../components/jump_to_discussion.js.es6 | 188 + .../diff_notes/components/resolve_btn.js.es6 | 107 + .../components/resolve_count.js.es6 | 18 + .../components/resolve_discussion_btn.js.es6 | 60 + .../diff_notes/diff_notes_bundle.js.es6 | 35 + .../diff_notes/mixins/discussion.js.es6 | 35 + .../diff_notes/mixins/namespace.js.es6 | 9 + .../diff_notes/models/discussion.js.es6 | 87 + .../javascripts/diff_notes/models/note.js.es6 | 9 + .../diff_notes/services/resolve.js.es6 | 88 + .../diff_notes/stores/comments.js.es6 | 53 + app/assets/javascripts/dispatcher.js | 277 + app/assets/javascripts/dispatcher.js.coffee | 171 - app/assets/javascripts/dropzone_input.js | 219 + .../javascripts/dropzone_input.js.coffee | 201 - app/assets/javascripts/due_date_select.js | 104 + .../javascripts/due_date_select.js.coffee | 99 - app/assets/javascripts/extensions/jquery.js | 14 + .../javascripts/extensions/jquery.js.coffee | 11 - .../javascripts/files_comment_button.js | 141 + .../files_comment_button.js.coffee | 98 - app/assets/javascripts/flash.js | 43 + app/assets/javascripts/flash.js.coffee | 28 - .../javascripts/gfm_auto_complete.js.coffee | 228 - .../javascripts/gfm_auto_complete.js.es6 | 335 + app/assets/javascripts/gl_dropdown.js | 737 ++ app/assets/javascripts/gl_dropdown.js.coffee | 647 - app/assets/javascripts/gl_form.js | 53 + app/assets/javascripts/gl_form.js.coffee | 54 - .../javascripts/graphs/graphs_bundle.js | 7 + .../graphs/graphs_bundle.js.coffee | 7 - app/assets/javascripts/graphs/stat_graph.js | 19 + .../javascripts/graphs/stat_graph.js.coffee | 6 - .../graphs/stat_graph_contributors.js | 112 + .../graphs/stat_graph_contributors.js.coffee | 71 - .../graphs/stat_graph_contributors_graph.js | 279 + .../stat_graph_contributors_graph.js.coffee | 173 - .../graphs/stat_graph_contributors_util.js | 135 + .../stat_graph_contributors_util.js.coffee | 98 - app/assets/javascripts/group_avatar.js | 21 + app/assets/javascripts/group_avatar.js.coffee | 9 - app/assets/javascripts/groups.js | 13 + app/assets/javascripts/groups.js.coffee | 4 - app/assets/javascripts/groups_select.js | 67 + .../javascripts/groups_select.js.coffee | 41 - app/assets/javascripts/importer_status.js | 77 + .../javascripts/importer_status.js.coffee | 53 - app/assets/javascripts/issuable.js | 86 + app/assets/javascripts/issuable.js.coffee | 93 - app/assets/javascripts/issuable_context.js | 69 + .../javascripts/issuable_context.js.coffee | 60 - app/assets/javascripts/issuable_form.js | 136 + .../javascripts/issuable_form.js.coffee | 112 - app/assets/javascripts/issue.js | 154 + app/assets/javascripts/issue.js.coffee | 117 - app/assets/javascripts/issue_status_select.js | 35 + .../javascripts/issue_status_select.js.coffee | 18 - .../javascripts/issues-bulk-assignment.js | 161 + .../issues-bulk-assignment.js.coffee | 128 - app/assets/javascripts/labels.js | 44 + app/assets/javascripts/labels.js.coffee | 28 - app/assets/javascripts/labels_select.js | 365 + .../javascripts/labels_select.js.coffee | 386 - app/assets/javascripts/layout_nav.js | 27 + app/assets/javascripts/layout_nav.js.coffee | 24 - app/assets/javascripts/lib/ace.js | 2 + app/assets/javascripts/lib/chart.js | 7 + app/assets/javascripts/lib/chart.js.coffee | 1 - app/assets/javascripts/lib/cropper.js | 7 + app/assets/javascripts/lib/cropper.js.coffee | 1 - app/assets/javascripts/lib/d3.js | 7 + app/assets/javascripts/lib/d3.js.coffee | 1 - app/assets/javascripts/lib/raphael.js | 13 + app/assets/javascripts/lib/raphael.js.coffee | 3 - app/assets/javascripts/lib/utils/animate.js | 49 + .../javascripts/lib/utils/animate.js.coffee | 39 - .../javascripts/lib/utils/common_utils.js | 60 + .../lib/utils/common_utils.js.coffee | 68 - .../javascripts/lib/utils/datetime_utility.js | 72 + .../lib/utils/datetime_utility.js.coffee | 28 - app/assets/javascripts/lib/utils/md5.js | 211 - app/assets/javascripts/lib/utils/notify.js | 41 + .../javascripts/lib/utils/notify.js.coffee | 35 - .../javascripts/lib/utils/text_utility.js | 112 + .../lib/utils/text_utility.js.coffee | 105 - .../javascripts/lib/utils/type_utility.js | 15 + .../lib/utils/type_utility.js.coffee | 9 - .../javascripts/lib/utils/url_utility.js | 74 + .../lib/utils/url_utility.js.coffee | 52 - .../javascripts/lib/utils/utf8_encode.js | 70 - app/assets/javascripts/line_highlighter.js | 115 + .../javascripts/line_highlighter.js.coffee | 148 - app/assets/javascripts/logo.js | 54 + app/assets/javascripts/logo.js.coffee | 44 - .../javascripts/markdown_preview.js.coffee | 119 - .../javascripts/member_expiration_date.js | 32 + .../merge_conflict_data_provider.js.es6 | 341 + .../merge_conflict_resolver.js.es6 | 85 + app/assets/javascripts/merge_request.js | 105 + .../javascripts/merge_request.js.coffee | 82 - app/assets/javascripts/merge_request_tabs.js | 268 + .../javascripts/merge_request_tabs.js.coffee | 252 - .../javascripts/merge_request_widget.js | 185 + .../merge_request_widget.js.coffee | 143 - app/assets/javascripts/merged_buttons.js | 45 + .../javascripts/merged_buttons.js.coffee | 30 - app/assets/javascripts/milestone.js | 195 + app/assets/javascripts/milestone.js.coffee | 146 - app/assets/javascripts/milestone_select.js | 155 + .../javascripts/milestone_select.js.coffee | 137 - app/assets/javascripts/namespace_select.js | 86 + .../javascripts/namespace_select.js.coffee | 56 - .../javascripts/network/branch-graph.js | 404 + .../network/branch-graph.js.coffee | 340 - app/assets/javascripts/network/network.js | 19 + .../javascripts/network/network.js.coffee | 9 - .../javascripts/network/network_bundle.js | 16 + .../network/network_bundle.js.coffee | 17 - app/assets/javascripts/new_branch_form.js | 104 + .../javascripts/new_branch_form.js.coffee | 78 - app/assets/javascripts/new_commit_form.js | 34 + .../javascripts/new_commit_form.js.coffee | 21 - app/assets/javascripts/notes.js | 810 ++ app/assets/javascripts/notes.js.coffee | 694 -- .../javascripts/notifications_dropdown.js | 30 + .../notifications_dropdown.js.coffee | 25 - app/assets/javascripts/notifications_form.js | 58 + .../javascripts/notifications_form.js.coffee | 49 - app/assets/javascripts/pager.js | 63 + app/assets/javascripts/pager.js.coffee | 44 - app/assets/javascripts/pipeline.js.es6 | 15 + app/assets/javascripts/preview_markdown.js | 150 + app/assets/javascripts/profile/gl_crop.js | 169 + .../javascripts/profile/gl_crop.js.coffee | 152 - app/assets/javascripts/profile/profile.js | 102 + .../javascripts/profile/profile.js.coffee | 83 - .../javascripts/profile/profile_bundle.js | 7 + .../profile/profile_bundle.js.coffee | 2 - app/assets/javascripts/project.js | 109 + app/assets/javascripts/project.js.coffee | 91 - app/assets/javascripts/project_avatar.js | 21 + .../javascripts/project_avatar.js.coffee | 9 - app/assets/javascripts/project_find_file.js | 170 + .../javascripts/project_find_file.js.coffee | 125 - app/assets/javascripts/project_fork.js | 14 + app/assets/javascripts/project_fork.js.coffee | 5 - app/assets/javascripts/project_import.js | 13 + .../javascripts/project_import.js.coffee | 5 - app/assets/javascripts/project_members.js | 10 + .../javascripts/project_members.js.coffee | 4 - app/assets/javascripts/project_new.js | 40 + app/assets/javascripts/project_new.js.coffee | 23 - app/assets/javascripts/project_select.js | 102 + .../javascripts/project_select.js.coffee | 72 - app/assets/javascripts/project_show.js | 9 + app/assets/javascripts/project_show.js.coffee | 3 - app/assets/javascripts/projects_list.js | 48 + .../javascripts/projects_list.js.coffee | 36 - .../protected_branch_access_dropdown.js.es6 | 28 + .../protected_branch_create.js.es6 | 54 + .../protected_branch_dropdown.js.es6 | 75 + .../javascripts/protected_branch_edit.js.es6 | 66 + .../protected_branch_edit_list.js.es6 | 17 + .../protected_branch_select.js.coffee | 40 - .../javascripts/protected_branches.js.coffee | 22 - app/assets/javascripts/right_sidebar.js | 201 + .../javascripts/right_sidebar.js.coffee | 175 - app/assets/javascripts/search.js | 93 + app/assets/javascripts/search.js.coffee | 75 - app/assets/javascripts/search_autocomplete.js | 370 + .../javascripts/search_autocomplete.js.coffee | 335 - app/assets/javascripts/shortcuts.js | 97 + app/assets/javascripts/shortcuts.js.coffee | 60 - app/assets/javascripts/shortcuts_blob.coffee | 10 - app/assets/javascripts/shortcuts_blob.js | 28 + .../shortcuts_dashboard_navigation.js | 39 + .../shortcuts_dashboard_navigation.js.coffee | 14 - app/assets/javascripts/shortcuts_find_file.js | 35 + .../javascripts/shortcuts_find_file.js.coffee | 19 - .../javascripts/shortcuts_issuable.coffee | 53 - app/assets/javascripts/shortcuts_issuable.js | 75 + .../javascripts/shortcuts_navigation.coffee | 23 - .../javascripts/shortcuts_navigation.js | 64 + app/assets/javascripts/shortcuts_network.js | 27 + .../javascripts/shortcuts_network.js.coffee | 12 - app/assets/javascripts/sidebar.js | 41 + app/assets/javascripts/sidebar.js.coffee | 37 - app/assets/javascripts/single_file_diff.js | 87 + .../javascripts/single_file_diff.js.coffee | 54 - .../javascripts/snippet/snippet_bundle.js | 12 + app/assets/javascripts/star.js | 31 + app/assets/javascripts/star.js.coffee | 24 - app/assets/javascripts/subscription.js | 41 + app/assets/javascripts/subscription.js.coffee | 26 - app/assets/javascripts/subscription_select.js | 35 + .../javascripts/subscription_select.js.coffee | 18 - .../javascripts/syntax_highlight.coffee | 20 - app/assets/javascripts/syntax_highlight.js | 18 + .../issuable_template_selector.js.es6 | 51 + .../issuable_template_selectors.js.es6 | 29 + app/assets/javascripts/todos.js | 144 + app/assets/javascripts/todos.js.coffee | 110 - app/assets/javascripts/tree.js | 65 + app/assets/javascripts/tree.js.coffee | 50 - app/assets/javascripts/u2f/authenticate.js | 89 + .../javascripts/u2f/authenticate.js.coffee | 75 - app/assets/javascripts/u2f/error.js | 27 + app/assets/javascripts/u2f/error.js.coffee | 13 - app/assets/javascripts/u2f/register.js | 87 + app/assets/javascripts/u2f/register.js.coffee | 63 - app/assets/javascripts/u2f/util.js | 13 + app/assets/javascripts/u2f/util.js.coffee | 3 - app/assets/javascripts/user.js | 31 + app/assets/javascripts/user.js.coffee | 17 - app/assets/javascripts/user_tabs.js | 119 + app/assets/javascripts/user_tabs.js.coffee | 156 - app/assets/javascripts/users/calendar.js | 192 + .../javascripts/users/calendar.js.coffee | 194 - app/assets/javascripts/users/users_bundle.js | 7 + .../javascripts/users/users_bundle.js.coffee | 2 - app/assets/javascripts/users_select.js | 355 + app/assets/javascripts/users_select.js.coffee | 330 - app/assets/javascripts/wikis.js | 37 + app/assets/javascripts/wikis.js.coffee | 19 - app/assets/javascripts/zen_mode.js | 80 + app/assets/javascripts/zen_mode.js.coffee | 80 - app/assets/stylesheets/behaviors.scss | 5 + app/assets/stylesheets/framework/avatar.scss | 20 +- app/assets/stylesheets/framework/buttons.scss | 15 +- .../stylesheets/framework/dropdowns.scss | 16 +- app/assets/stylesheets/framework/files.scss | 2 +- app/assets/stylesheets/framework/lists.scss | 11 +- .../stylesheets/framework/markdown_area.scss | 5 + app/assets/stylesheets/framework/mixins.scss | 7 +- app/assets/stylesheets/framework/nav.scss | 2 - app/assets/stylesheets/framework/panels.scss | 5 + app/assets/stylesheets/framework/sidebar.scss | 4 + .../stylesheets/framework/typography.scss | 42 +- .../stylesheets/framework/variables.scss | 5 +- app/assets/stylesheets/highlight/dark.scss | 7 +- app/assets/stylesheets/highlight/monokai.scss | 7 +- .../stylesheets/highlight/solarized_dark.scss | 7 +- .../highlight/solarized_light.scss | 13 +- app/assets/stylesheets/highlight/white.scss | 13 +- .../mailers/repository_push_email.scss | 83 +- app/assets/stylesheets/pages/boards.scss | 306 + app/assets/stylesheets/pages/builds.scss | 91 +- app/assets/stylesheets/pages/commit.scss | 9 + app/assets/stylesheets/pages/commits.scss | 6 +- app/assets/stylesheets/pages/dashboard.scss | 4 - app/assets/stylesheets/pages/detail_page.scss | 7 - app/assets/stylesheets/pages/diff.scss | 5 +- .../stylesheets/pages/environments.scss | 30 + app/assets/stylesheets/pages/groups.scss | 8 +- app/assets/stylesheets/pages/issuable.scss | 9 + app/assets/stylesheets/pages/issues.scss | 32 +- app/assets/stylesheets/pages/labels.scss | 11 + .../stylesheets/pages/merge_conflicts.scss | 238 + .../stylesheets/pages/merge_requests.scss | 17 +- app/assets/stylesheets/pages/note_form.scss | 26 + app/assets/stylesheets/pages/notes.scss | 77 + app/assets/stylesheets/pages/pipelines.scss | 208 +- app/assets/stylesheets/pages/profile.scss | 6 + app/assets/stylesheets/pages/projects.scss | 61 +- app/assets/stylesheets/pages/tree.scss | 6 +- .../admin/application_settings_controller.rb | 2 + app/controllers/admin/groups_controller.rb | 6 +- .../admin/impersonations_controller.rb | 2 +- .../admin/requests_profiles_controller.rb | 17 + app/controllers/admin/spam_logs_controller.rb | 10 + .../admin/system_info_controller.rb | 8 +- app/controllers/application_controller.rb | 56 - app/controllers/autocomplete_controller.rb | 33 +- app/controllers/concerns/diff_for_path.rb | 6 +- .../concerns/issuable_collections.rb | 84 + app/controllers/concerns/issues_action.rb | 10 +- .../concerns/merge_requests_action.rb | 10 +- app/controllers/concerns/service_params.rb | 19 +- app/controllers/concerns/spammable_actions.rb | 25 + app/controllers/dashboard/todos_controller.rb | 11 +- .../explore/application_controller.rb | 2 +- .../groups/group_members_controller.rb | 9 +- app/controllers/groups_controller.rb | 4 +- app/controllers/help_controller.rb | 2 +- .../import/bitbucket_controller.rb | 2 - app/controllers/import/gitlab_controller.rb | 2 - .../import/gitlab_projects_controller.rb | 5 + app/controllers/koding_controller.rb | 15 + .../profiles/passwords_controller.rb | 1 + .../profiles/two_factor_auths_controller.rb | 12 +- .../profiles/u2f_registrations_controller.rb | 7 + .../projects/application_controller.rb | 1 + app/controllers/projects/badges_controller.rb | 18 +- app/controllers/projects/blob_controller.rb | 16 +- .../projects/board_lists_controller.rb | 65 + .../projects/boards/application_controller.rb | 15 + .../projects/boards/issues_controller.rb | 56 + .../projects/boards/lists_controller.rb | 81 + app/controllers/projects/boards_controller.rb | 15 + .../projects/branches_controller.rb | 2 + app/controllers/projects/builds_controller.rb | 2 +- app/controllers/projects/commit_controller.rb | 12 +- .../projects/compare_controller.rb | 19 +- .../projects/deploy_keys_controller.rb | 20 +- .../projects/discussions_controller.rb | 43 + .../projects/environments_controller.rb | 23 +- .../projects/git_http_client_controller.rb | 120 + .../projects/git_http_controller.rb | 142 +- .../projects/group_links_controller.rb | 4 +- app/controllers/projects/hooks_controller.rb | 1 + app/controllers/projects/issues_controller.rb | 32 +- .../projects/lfs_api_controller.rb | 94 + .../projects/lfs_storage_controller.rb | 92 + .../projects/merge_requests_controller.rb | 115 +- app/controllers/projects/notes_controller.rb | 99 +- .../projects/pipelines_controller.rb | 2 +- .../projects/pipelines_settings_controller.rb | 8 +- .../projects/project_members_controller.rb | 9 +- .../projects/protected_branches_controller.rb | 39 +- .../projects/templates_controller.rb | 19 + app/controllers/projects/wikis_controller.rb | 2 +- app/controllers/projects_controller.rb | 36 +- app/controllers/registrations_controller.rb | 2 +- app/controllers/search_controller.rb | 2 +- app/controllers/sessions_controller.rb | 2 +- app/finders/issuable_finder.rb | 2 +- app/finders/move_to_project_finder.rb | 14 + app/finders/projects_finder.rb | 3 +- app/finders/todos_finder.rb | 28 +- app/helpers/appearances_helper.rb | 2 + app/helpers/application_helper.rb | 13 +- app/helpers/application_settings_helper.rb | 4 + app/helpers/avatars_helper.rb | 4 - app/helpers/blob_helper.rb | 60 +- app/helpers/ci_status_helper.rb | 26 +- app/helpers/commits_helper.rb | 50 +- app/helpers/diff_helper.rb | 64 +- app/helpers/explore_helper.rb | 2 +- app/helpers/issuables_helper.rb | 9 + app/helpers/issues_helper.rb | 32 - app/helpers/lfs_helper.rb | 67 + app/helpers/members_helper.rb | 6 - app/helpers/nav_helper.rb | 1 + app/helpers/notes_helper.rb | 62 +- app/helpers/projects_helper.rb | 79 +- app/helpers/search_helper.rb | 5 +- app/helpers/selects_helper.rb | 30 +- app/helpers/sorting_helper.rb | 12 +- app/helpers/time_helper.rb | 17 +- app/helpers/todos_helper.rb | 4 +- app/helpers/tree_helper.rb | 18 +- app/mailers/emails/issues.rb | 5 + app/mailers/emails/merge_requests.rb | 12 + app/models/ability.rb | 103 +- app/models/application_setting.rb | 6 + app/models/blob.rb | 7 + app/models/board.rb | 7 + app/models/ci/build.rb | 59 +- app/models/ci/pipeline.rb | 159 +- app/models/commit.rb | 45 +- app/models/commit_status.rb | 50 +- app/models/compare.rb | 66 + app/models/concerns/expirable.rb | 15 + app/models/concerns/faster_cache_keys.rb | 16 + app/models/concerns/issuable.rb | 21 +- app/models/concerns/note_on_diff.rb | 29 +- .../concerns/protected_branch_access.rb | 7 + app/models/concerns/sortable.rb | 14 + app/models/concerns/spammable.rb | 68 + app/models/concerns/statuseable.rb | 46 +- app/models/concerns/token_authenticatable.rb | 30 +- app/models/deployment.rb | 6 + app/models/diff_note.rb | 91 +- app/models/discussion.rb | 177 + app/models/environment.rb | 18 + app/models/group.rb | 24 +- app/models/hooks/project_hook.rb | 1 + app/models/hooks/web_hook.rb | 1 + app/models/issue.rb | 38 + app/models/key.rb | 5 +- app/models/label.rb | 2 + app/models/legacy_diff_note.rb | 26 +- app/models/list.rb | 34 + app/models/member.rb | 8 +- app/models/members/project_member.rb | 15 +- app/models/merge_request.rb | 105 +- app/models/merge_request_diff.rb | 14 +- app/models/namespace.rb | 2 + app/models/note.rb | 63 +- app/models/project.rb | 62 +- app/models/project_group_link.rb | 4 +- .../project_services/builds_email_service.rb | 3 +- .../project_services/campfire_service.rb | 51 +- .../project_services/hipchat_service.rb | 21 +- .../pivotaltracker_service.rb | 31 +- app/models/project_team.rb | 102 +- app/models/project_wiki.rb | 4 + app/models/protected_branch.rb | 9 + .../protected_branch/merge_access_level.rb | 22 + .../protected_branch/push_access_level.rb | 25 + app/models/repository.rb | 157 +- app/models/service.rb | 7 +- app/models/spam_log.rb | 4 + app/models/spam_report.rb | 5 - app/models/todo.rb | 19 + app/models/u2f_registration.rb | 7 +- app/models/user.rb | 19 +- app/models/user_agent_detail.rb | 9 + app/services/akismet_service.rb | 79 + ...ntainer_registry_authentication_service.rb | 12 +- app/services/boards/base_service.rb | 5 + app/services/boards/create_service.rb | 16 + app/services/boards/issues/list_service.rb | 68 + app/services/boards/issues/move_service.rb | 59 + app/services/boards/lists/create_service.rb | 22 + app/services/boards/lists/destroy_service.rb | 25 + app/services/boards/lists/generate_service.rb | 36 + app/services/boards/lists/move_service.rb | 51 + app/services/ci/create_builds_service.rb | 62 - .../ci/create_pipeline_builds_service.rb | 42 + app/services/ci/create_pipeline_service.rb | 96 +- .../ci/create_trigger_request_service.rb | 17 +- app/services/ci/process_pipeline_service.rb | 77 + app/services/compare_service.rb | 6 +- app/services/create_branch_service.rb | 24 +- app/services/create_commit_builds_service.rb | 69 - app/services/create_spam_log_service.rb | 13 - app/services/delete_branch_service.rb | 9 +- app/services/delete_tag_service.rb | 9 +- app/services/delete_user_service.rb | 9 +- app/services/destroy_group_service.rb | 16 +- app/services/files/base_service.rb | 1 + app/services/files/update_service.rb | 23 + app/services/git_push_service.rb | 35 +- app/services/git_tag_push_service.rb | 26 +- app/services/ham_service.rb | 26 + app/services/issuable_base_service.rb | 101 +- app/services/issues/close_service.rb | 2 + app/services/issues/create_service.rb | 38 +- app/services/issues/reopen_service.rb | 2 + app/services/issues/update_service.rb | 7 +- .../members/authorized_destroy_service.rb | 19 + app/services/members/destroy_service.rb | 12 +- app/services/merge_requests/base_service.rb | 9 +- app/services/merge_requests/build_service.rb | 2 +- app/services/merge_requests/close_service.rb | 2 + app/services/merge_requests/create_service.rb | 25 +- .../merge_requests/get_urls_service.rb | 63 + .../merge_request_diff_cache_service.rb | 8 + .../merge_requests/refresh_service.rb | 2 +- app/services/merge_requests/reopen_service.rb | 2 + .../merge_requests/resolve_service.rb | 31 + ...esolved_discussion_notification_service.rb | 10 + app/services/merge_requests/update_service.rb | 11 +- app/services/notes/create_service.rb | 27 +- app/services/notes/post_process_service.rb | 2 +- app/services/notes/slash_commands_service.rb | 33 + app/services/notification_service.rb | 49 +- app/services/projects/autocomplete_service.rb | 27 +- app/services/projects/destroy_service.rb | 8 +- .../projects/enable_deploy_key_service.rb | 17 + app/services/projects/participants_service.rb | 38 +- app/services/projects/update_service.rb | 2 +- .../protected_branches/create_service.rb | 11 + .../protected_branches/update_service.rb | 13 + .../slash_commands/interpret_service.rb | 236 + app/services/spam_service.rb | 78 + app/services/system_note_service.rb | 160 +- app/services/test_hook_service.rb | 2 +- app/services/todo_service.rb | 13 +- app/services/user_agent_detail_service.rb | 13 + app/uploaders/artifact_uploader.rb | 1 - app/uploaders/attachment_uploader.rb | 2 - app/uploaders/avatar_uploader.rb | 2 - app/uploaders/file_uploader.rb | 1 - app/uploaders/lfs_object_uploader.rb | 2 - .../application_settings/_form.html.haml | 28 +- .../admin/background_jobs/_head.html.haml | 4 + app/views/admin/builds/_build.html.haml | 12 +- app/views/admin/dashboard/index.html.haml | 4 + app/views/admin/labels/_form.html.haml | 3 - .../admin/requests_profiles/index.html.haml | 26 + app/views/admin/spam_logs/_spam_log.html.haml | 5 + app/views/admin/system_info/show.html.haml | 12 +- app/views/admin/users/show.html.haml | 8 +- app/views/dashboard/todos/index.html.haml | 19 + .../devise/sessions/_new_crowd.html.haml | 2 +- .../devise/shared/_omniauth_box.html.haml | 2 +- .../discussions/_diff_discussion.html.haml | 6 + .../discussions/_diff_with_notes.html.haml | 17 + app/views/discussions/_discussion.html.haml | 48 + app/views/discussions/_headline.html.haml | 14 + app/views/discussions/_jump_to_next.html.haml | 9 + app/views/discussions/_notes.html.haml | 15 + .../_parallel_diff_discussion.html.haml | 21 + app/views/discussions/_resolve_all.html.haml | 11 + .../group_members/_new_group_member.html.haml | 9 + app/views/groups/group_members/update.js.haml | 1 + app/views/groups/show.html.haml | 2 +- app/views/help/ui.html.haml | 2 +- app/views/import/bitbucket/status.html.haml | 4 +- app/views/import/fogbugz/status.html.haml | 3 +- app/views/import/github/status.html.haml | 7 +- app/views/import/gitlab/status.html.haml | 3 +- app/views/import/gitorious/status.html.haml | 3 +- app/views/import/google_code/status.html.haml | 3 +- app/views/koding/index.html.haml | 6 + .../layouts/_init_auto_complete.html.haml | 4 +- app/views/layouts/_page.html.haml | 5 +- app/views/layouts/application.html.haml | 2 +- app/views/layouts/koding.html.haml | 5 + app/views/layouts/nav/_admin.html.haml | 2 +- app/views/layouts/nav/_dashboard.html.haml | 5 + app/views/layouts/nav/_project.html.haml | 4 +- app/views/layouts/project.html.haml | 6 +- app/views/notify/new_issue_email.text.erb | 2 + .../new_mention_in_issue_email.html.haml | 12 + .../new_mention_in_issue_email.text.erb | 7 + ...w_mention_in_merge_request_email.html.haml | 15 + ...ew_mention_in_merge_request_email.text.erb | 9 + .../notify/new_merge_request_email.text.erb | 2 + .../notify/repository_push_email.html.haml | 3 +- .../resolved_all_discussions_email.html.haml | 2 + .../resolved_all_discussions_email.text.erb | 3 + app/views/profiles/accounts/show.html.haml | 2 +- .../personal_access_tokens/index.html.haml | 4 + .../profiles/two_factor_auths/show.html.haml | 31 +- app/views/projects/_home_panel.html.haml | 5 +- app/views/projects/_zen.html.haml | 3 +- app/views/projects/badges/badge.svg.erb | 36 + app/views/projects/blob/_actions.html.haml | 3 +- app/views/projects/blob/_image.html.haml | 16 +- app/views/projects/blob/diff.html.haml | 34 +- app/views/projects/blob/edit.html.haml | 18 +- app/views/projects/blob/new.html.haml | 9 +- .../boards/components/_blank_state.html.haml | 15 + .../boards/components/_board.html.haml | 43 + .../boards/components/_card.html.haml | 33 + app/views/projects/boards/show.html.haml | 19 + app/views/projects/branches/_commit.html.haml | 2 +- app/views/projects/branches/index.html.haml | 40 +- app/views/projects/builds/_sidebar.html.haml | 200 +- app/views/projects/builds/show.html.haml | 28 +- .../projects/buttons/_dropdown.html.haml | 2 +- app/views/projects/buttons/_fork.html.haml | 12 +- app/views/projects/buttons/_koding.html.haml | 7 + app/views/projects/ci/builds/_build.html.haml | 15 +- .../ci/builds/_build_pipeline.html.haml | 14 + .../projects/ci/pipelines/_pipeline.html.haml | 48 +- app/views/projects/commit/_ci_menu.html.haml | 2 +- .../projects/commit/_commit_box.html.haml | 8 +- app/views/projects/commit/_pipeline.html.haml | 26 +- .../projects/commit/_pipelines_list.haml | 17 + app/views/projects/commit/show.html.haml | 2 +- app/views/projects/compare/_form.html.haml | 2 +- app/views/projects/compare/show.html.haml | 2 +- app/views/projects/deployments/_actions.haml | 6 +- .../projects/deployments/_commit.html.haml | 8 +- .../deployments/_deployment.html.haml | 1 + app/views/projects/diffs/_content.html.haml | 2 +- app/views/projects/diffs/_diffs.html.haml | 19 +- app/views/projects/diffs/_file.html.haml | 16 +- app/views/projects/diffs/_line.html.haml | 22 +- .../projects/diffs/_match_line.html.haml | 7 - .../diffs/_match_line_parallel.html.haml | 4 - .../projects/diffs/_parallel_view.html.haml | 55 +- app/views/projects/diffs/_stats.html.haml | 2 +- app/views/projects/diffs/_text_file.html.haml | 20 +- app/views/projects/diffs/_warning.html.haml | 2 +- app/views/projects/edit.html.haml | 2 + .../environments/_environment.html.haml | 8 +- .../projects/environments/_form.html.haml | 29 +- .../projects/environments/edit.html.haml | 6 + .../projects/environments/index.html.haml | 7 +- app/views/projects/environments/new.html.haml | 14 +- .../projects/environments/show.html.haml | 6 +- .../_generic_commit_status_pipeline.html.haml | 9 + .../projects/graphs/ci/_build_times.haml | 7 +- app/views/projects/graphs/ci/_builds.haml | 7 +- app/views/projects/graphs/commits.html.haml | 4 + app/views/projects/graphs/show.html.haml | 2 +- .../projects/group_links/index.html.haml | 11 + .../projects/hooks/_project_hook.html.haml | 2 +- app/views/projects/issues/_head.html.haml | 7 +- .../projects/issues/_issue_by_email.html.haml | 27 + .../projects/issues/_new_branch.html.haml | 2 +- .../issues/_related_branches.html.haml | 4 +- app/views/projects/issues/index.html.haml | 15 +- app/views/projects/issues/show.html.haml | 11 +- .../merge_requests/_discussion.html.haml | 3 + .../merge_requests/_new_submit.html.haml | 13 +- .../projects/merge_requests/_show.html.haml | 33 +- .../merge_requests/conflicts.html.haml | 29 + .../conflicts/_commit_stats.html.haml | 20 + .../conflicts/_inline_view.html.haml | 28 + .../conflicts/_parallel_view.html.haml | 27 + .../conflicts/_submit_form.html.haml | 15 + .../merge_requests/show/_builds.html.haml | 1 - .../merge_requests/show/_diffs.html.haml | 3 +- .../merge_requests/show/_pipelines.html.haml | 1 + .../merge_requests/widget/_heading.html.haml | 13 + .../merge_requests/widget/_merged.html.haml | 2 +- .../merge_requests/widget/_open.html.haml | 10 +- .../merge_requests/widget/_show.html.haml | 3 +- .../widget/open/_conflicts.html.haml | 13 +- app/views/projects/new.html.haml | 40 +- .../notes/_diff_notes_with_reply.html.haml | 7 - .../_diff_notes_with_reply_parallel.html.haml | 25 - .../projects/notes/_discussion.html.haml | 46 - app/views/projects/notes/_form.html.haml | 10 +- app/views/projects/notes/_hints.html.haml | 13 +- app/views/projects/notes/_note.html.haml | 56 +- app/views/projects/notes/_notes.html.haml | 12 +- .../discussions/_diff_with_notes.html.haml | 17 - .../notes/discussions/_notes.html.haml | 6 - app/views/projects/pipelines/_info.html.haml | 2 +- app/views/projects/pipelines/new.html.haml | 2 +- .../pipelines_settings/_badge.html.haml | 27 + .../pipelines_settings/show.html.haml | 25 +- .../_new_project_member.html.haml | 9 + .../projects/project_members/index.html.haml | 2 +- .../projects/project_members/update.js.haml | 1 + .../_branches_list.html.haml | 36 +- .../_create_protected_branch.html.haml | 41 + .../protected_branches/_dropdown.html.haml | 12 +- .../_protected_branch.html.haml | 12 +- .../_update_protected_branch.html.haml | 10 + .../protected_branches/index.html.haml | 32 +- app/views/projects/releases/edit.html.haml | 16 +- app/views/projects/show.html.haml | 8 +- .../tree/_tree_commit_column.html.haml | 2 +- app/views/projects/tree/_tree_row.html.haml | 6 + app/views/projects/update.js.haml | 2 +- app/views/projects/wikis/_form.html.haml | 11 +- app/views/search/results/_note.html.haml | 8 +- app/views/shared/_labels_row.html.haml | 6 +- app/views/shared/icons/_icon_play.svg | 1 + .../shared/icons/_icon_status_cancel.svg | 14 +- .../shared/icons/_icon_status_failed.svg | 14 +- .../shared/icons/_icon_status_pending.svg | 15 +- .../shared/icons/_icon_status_running.svg | 14 +- .../shared/icons/_icon_status_success.svg | 17 +- .../shared/icons/_icon_status_warning.svg | 17 +- app/views/shared/icons/_next_discussion.svg | 1 + app/views/shared/issuable/_filter.html.haml | 14 +- app/views/shared/issuable/_form.html.haml | 29 +- .../issuable/_label_page_default.html.haml | 12 +- app/views/shared/issuable/_sidebar.html.haml | 2 +- app/views/shared/members/_member.html.haml | 22 +- app/views/shared/projects/_project.html.haml | 4 +- app/views/shared/snippets/_form.html.haml | 9 +- app/views/shared/web_hooks/_form.html.haml | 23 +- app/views/u2f/_register.html.haml | 13 +- app/workers/email_receiver_worker.rb | 52 +- app/workers/emails_on_push_worker.rb | 19 +- app/workers/group_destroy_worker.rb | 17 + app/workers/irker_worker.rb | 6 +- app/workers/post_receive.rb | 4 + app/workers/project_destroy_worker.rb | 2 +- .../remove_expired_group_links_worker.rb | 7 + app/workers/remove_expired_members_worker.rb | 13 + app/workers/repository_fork_worker.rb | 4 + app/workers/repository_import_worker.rb | 6 + app/workers/requests_profiles_worker.rb | 9 + config/application.rb | 8 +- config/dependency_decisions.yml | 31 +- config/initializers/1_settings.rb | 9 + config/initializers/5_backend.rb | 3 - config/initializers/devise.rb | 3 + config/initializers/doorkeeper.rb | 3 +- config/initializers/metrics.rb | 14 + config/initializers/mime_types.rb | 7 + config/initializers/request_profiler.rb | 5 + config/initializers/secret_token.rb | 101 +- config/initializers/session_store.rb | 4 +- config/initializers/sidekiq.rb | 15 +- config/mail_room.yml | 53 +- config/resque.yml.example | 34 +- config/routes.rb | 115 +- db/fixtures/development/04_project.rb | 1 - db/fixtures/development/14_builds.rb | 107 +- .../development/16_protected_branches.rb | 12 + db/migrate/20140407135544_fix_namespaces.rb | 10 +- ...4938_add_protected_branches_push_access.rb | 17 + ...952_add_protected_branches_merge_access.rb | 17 + ...erge_to_protected_branches_merge_access.rb | 29 + ..._push_to_protected_branches_push_access.rb | 29 + ...lopers_can_push_from_protected_branches.rb | 19 + ...opers_can_merge_from_protected_branches.rb | 19 + ...160716115711_add_queued_at_to_ci_builds.rb | 9 + .../20160724205507_add_resolved_to_notes.rb | 10 + ...5083350_add_external_url_to_enviroments.rb | 9 + ...0160727163552_create_user_agent_details.rb | 18 + db/migrate/20160727191041_create_boards.rb | 13 + db/migrate/20160727193336_create_lists.rb | 16 + ...081025_add_pipeline_events_to_web_hooks.rb | 16 + ...8103734_add_pipeline_events_to_services.rb | 16 + ...173930_remove_project_id_from_spam_logs.rb | 29 + ...20160801163421_add_expires_at_to_member.rb | 29 + ...63709_add_submitted_as_ham_to_spam_logs.rb | 20 + ..._remove_builds_enable_index_on_projects.rb | 9 + ...1903_add_unique_index_to_lists_label_id.rb | 15 + ...0805041956_add_deleted_at_to_namespaces.rb | 12 + ...102349_remove_ci_runner_trigram_indexes.rb | 27 + ...20160810142633_remove_redundant_indexes.rb | 112 + ...12_add_column_name_to_u2f_registrations.rb | 29 + ...3006_add_koding_to_application_settings.rb | 10 + ...60817154936_add_discussion_ids_to_notes.rb | 13 + ...8_add_expires_at_to_project_group_links.rb | 29 + ...9221631_add_index_to_note_discussion_id.rb | 14 + ...on_id_because_it_was_calculated_wrongly.rb | 12 + db/schema.rb | 145 +- doc/README.md | 7 +- doc/administration/build_artifacts.md | 90 + doc/administration/container_registry.md | 7 +- doc/administration/custom_hooks.md | 3 +- doc/administration/high_availability/redis.md | 301 +- doc/administration/housekeeping.md | 2 +- doc/administration/integration/koding.md | 242 + .../raketasks/project_import_export.md | 15 +- doc/administration/repository_checks.md | 5 +- doc/api/README.md | 15 +- doc/api/access_requests.md | 147 + doc/api/award_emoji.md | 24 +- doc/api/branches.md | 12 +- doc/api/build_triggers.md | 8 +- doc/api/build_variables.md | 10 +- doc/api/builds.md | 66 +- doc/api/ci/builds.md | 12 +- doc/api/ci/runners.md | 4 +- doc/api/commits.md | 19 +- doc/api/deploy_key_multiple_projects.md | 8 +- doc/api/deploy_keys.md | 58 +- doc/api/deployments.md | 218 + doc/api/enviroments.md | 117 + doc/api/groups.md | 948 +- doc/api/issues.md | 22 +- doc/api/labels.md | 12 +- doc/api/licenses.md | 2 +- doc/api/members.md | 185 + doc/api/merge_requests.md | 10 +- doc/api/milestones.md | 2 +- doc/api/namespaces.md | 4 +- doc/api/notes.md | 6 +- doc/api/oauth2.md | 56 +- doc/api/pipelines.md | 207 + doc/api/projects.md | 98 +- doc/api/repository_files.md | 16 + doc/api/runners.md | 16 +- doc/api/services.md | 4 +- doc/api/session.md | 4 +- doc/api/settings.md | 4 +- doc/api/sidekiq_metrics.md | 8 +- doc/api/system_hooks.md | 8 +- doc/api/tags.md | 2 +- doc/api/todos.md | 8 +- doc/ci/README.md | 2 +- doc/ci/build_artifacts/README.md | 177 +- .../img/build_artifacts_browser.png | Bin 82102 -> 0 bytes .../img/build_artifacts_browser_button.png | Bin 7230 -> 0 bytes doc/ci/docker/using_docker_build.md | 2 +- doc/ci/examples/php.md | 4 +- doc/ci/pipelines.md | 37 + doc/ci/quick_start/README.md | 14 +- doc/ci/triggers/README.md | 22 +- doc/ci/yaml/README.md | 83 +- doc/container_registry/README.md | 9 +- .../img/mitmproxy-docker.png | Bin 0 -> 407004 bytes doc/container_registry/troubleshooting.md | 141 + doc/development/README.md | 37 +- doc/development/adding_database_indexes.md | 123 + doc/development/doc_styleguide.md | 95 +- doc/development/gotchas.md | 5 +- doc/development/newlines_styleguide.md | 102 + doc/development/performance.md | 9 +- doc/development/rake_tasks.md | 30 +- doc/development/ui_guide.md | 52 +- doc/development/what_requires_downtime.md | 161 + doc/gitlab-basics/start-using-git.md | 8 + doc/install/installation.md | 27 +- doc/integration/README.md | 1 + doc/integration/akismet.md | 38 +- doc/integration/bitbucket.md | 2 +- doc/integration/github.md | 2 +- doc/integration/gitlab.md | 2 +- doc/integration/img/spam_log.png | Bin 0 -> 187190 bytes doc/integration/img/submit_issue.png | Bin 0 -> 174556 bytes doc/integration/twitter.md | 2 +- ...corporate_contributor_license_agreement.md | 14 +- doc/markdown/markdown.md | 705 +- doc/monitoring/health_check.md | 6 +- doc/monitoring/performance/influxdb_schema.md | 9 + doc/raketasks/backup_restore.md | 39 +- doc/raketasks/cleanup.md | 4 +- doc/raketasks/user_management.md | 4 +- doc/update/4.0-to-4.1.md | 2 +- doc/update/4.2-to-5.0.md | 2 +- doc/update/5.0-to-5.1.md | 2 +- doc/update/5.2-to-5.3.md | 2 +- doc/update/5.3-to-5.4.md | 2 +- doc/update/6.9-to-7.0.md | 2 +- doc/update/7.0-to-7.1.md | 2 +- doc/update/7.14-to-8.0.md | 2 +- doc/update/8.10-to-8.11.md | 191 + doc/user/admin_area/img/admin_labels.png | Bin 0 -> 91459 bytes doc/user/admin_area/labels.md | 9 + .../settings/continuous_integration.md | 20 + .../img/admin_area_maximum_artifacts_size.png | Bin 0 -> 6227 bytes .../img/admin_area_settings_button.png | Bin 0 -> 9184 bytes .../logo.png => user/img/markdown_logo.png} | Bin .../video.mp4 => user/img/markdown_video.mp4} | Bin doc/user/markdown.md | 786 ++ doc/user/project/builds/artifacts.md | 104 + .../builds/img/build_artifacts_browser.png | Bin 0 -> 8365 bytes .../img/build_artifacts_browser_button.png | Bin 0 -> 11041 bytes .../img/build_artifacts_builds_page.png | Bin 0 -> 55625 bytes .../img/build_artifacts_pipelines_page.png | Bin 0 -> 73038 bytes doc/user/project/description_templates.md | 42 + .../project/img/description_templates.png | Bin 0 -> 20444 bytes doc/user/project/img/issue_board.png | Bin 0 -> 275093 bytes doc/user/project/img/issue_board_add_list.png | Bin 0 -> 22391 bytes .../img/issue_board_search_backlog.png | Bin 0 -> 25948 bytes .../project/img/issue_board_system_notes.png | Bin 0 -> 20637 bytes .../img/issue_board_welcome_message.png | Bin 0 -> 78694 bytes .../project/img/koding_build-in-progress.png | Bin 0 -> 70949 bytes doc/user/project/img/koding_build-logs.png | Bin 0 -> 263623 bytes doc/user/project/img/koding_build-success.png | Bin 0 -> 304666 bytes .../project/img/koding_commit-koding.yml.png | Bin 0 -> 302703 bytes .../img/koding_different-stack-on-mr-try.png | Bin 0 -> 333649 bytes doc/user/project/img/koding_edit-on-ide.png | Bin 0 -> 330880 bytes doc/user/project/img/koding_enable-koding.png | Bin 0 -> 73499 bytes doc/user/project/img/koding_landing.png | Bin 0 -> 268455 bytes .../img/koding_open-gitlab-from-koding.png | Bin 0 -> 32559 bytes doc/user/project/img/koding_run-in-ide.png | Bin 0 -> 65465 bytes doc/user/project/img/koding_run-mr-in-ide.png | Bin 0 -> 339759 bytes doc/user/project/img/koding_set-up-ide.png | Bin 0 -> 207481 bytes doc/user/project/img/koding_stack-import.png | Bin 0 -> 500352 bytes doc/user/project/img/koding_start-build.png | Bin 0 -> 105253 bytes .../img/protected_branches_devs_can_push.png | Bin 23976 -> 19312 bytes .../project/img/protected_branches_list.png | Bin 16817 -> 16223 bytes .../project/img/protected_branches_page.png | Bin 0 -> 17839 bytes doc/user/project/issue_board.md | 187 + doc/user/project/koding.md | 128 + doc/user/project/labels.md | 54 +- .../merge_requests/img/conflict_section.png | Bin 0 -> 247537 bytes .../merge_requests/img/discussion_view.png | Bin 0 -> 292754 bytes .../img/discussions_resolved.png | Bin 0 -> 12840 bytes .../img/merge_request_widget.png | Bin 0 -> 32292 bytes .../img/resolve_comment_button.png | Bin 0 -> 14075 bytes .../img/resolve_discussion_button.png | Bin 0 -> 18405 bytes .../merge_request_discussion_resolution.md | 40 + .../merge_requests/resolve_conflicts.md | 42 + doc/user/project/protected_branches.md | 86 +- doc/user/project/settings/import_export.md | 24 +- doc/user/project/slash_commands.md | 30 + doc/web_hooks/web_hooks.md | 172 + doc/workflow/README.md | 3 + doc/workflow/award_emoji.md | 6 +- doc/workflow/cherry_pick_changes.md | 3 +- doc/workflow/file_finder.md | 2 +- .../importing/import_projects_from_github.md | 3 - doc/workflow/notifications.md | 7 +- doc/workflow/revert_changes.md | 2 +- .../share_projects_with_other_groups.md | 18 +- doc/workflow/shortcuts.md | 73 +- doc/workflow/shortcuts.png | Bin 108209 -> 0 bytes doc/workflow/todos.md | 2 +- doc/workflow/web_editor.md | 3 +- features/dashboard/new_project.feature | 2 +- features/explore/groups.feature | 25 - features/project/commits/branches.feature | 1 + features/project/merge_requests.feature | 9 + features/steps/dashboard/dashboard.rb | 1 + features/steps/dashboard/event_filters.rb | 13 +- features/steps/dashboard/issues.rb | 5 + features/steps/dashboard/merge_requests.rb | 5 + features/steps/dashboard/new_project.rb | 5 +- features/steps/explore/groups.rb | 4 - features/steps/group/members.rb | 4 +- features/steps/project/badges/build.rb | 2 +- features/steps/project/builds/artifacts.rb | 1 + features/steps/project/commits/branches.rb | 7 +- .../steps/project/forked_merge_requests.rb | 3 + features/steps/project/issues/issues.rb | 4 +- features/steps/project/merge_requests.rb | 6 + features/steps/project/source/browse_files.rb | 12 +- features/steps/project/team_management.rb | 4 +- features/steps/project/wiki.rb | 2 + features/steps/shared/builds.rb | 8 +- features/steps/shared/issuable.rb | 4 +- features/support/env.rb | 5 +- features/support/wait_for_ajax.rb | 11 + lib/api/access_requests.rb | 90 + lib/api/api.rb | 17 +- lib/api/branches.rb | 42 +- lib/api/builds.rb | 21 + lib/api/commit_statuses.rb | 2 +- lib/api/commits.rb | 4 +- lib/api/deploy_keys.rb | 104 +- lib/api/deployments.rb | 40 + lib/api/entities.rb | 73 +- lib/api/environments.rb | 83 + lib/api/group_members.rb | 87 - lib/api/helpers.rb | 30 +- lib/api/helpers/members_helpers.rb | 13 + lib/api/internal.rb | 4 + lib/api/issues.rb | 21 +- lib/api/members.rb | 158 + lib/api/merge_requests.rb | 2 +- lib/api/pipelines.rb | 74 + lib/api/project_hooks.rb | 2 + lib/api/project_members.rb | 110 - lib/api/projects.rb | 4 +- lib/api/session.rb | 1 + lib/api/templates.rb | 26 +- lib/api/todos.rb | 8 +- lib/backup/files.rb | 2 +- lib/backup/manager.rb | 2 +- lib/backup/repository.rb | 8 +- lib/banzai/filter/autolink_filter.rb | 15 +- lib/banzai/filter/emoji_filter.rb | 10 +- lib/banzai/filter/markdown_filter.rb | 14 +- lib/banzai/filter/relative_link_filter.rb | 11 +- lib/banzai/filter/sanitization_filter.rb | 4 +- lib/banzai/filter/syntax_highlight_filter.rb | 26 +- lib/banzai/filter/video_link_filter.rb | 3 - lib/banzai/reference_extractor.rb | 9 +- lib/banzai/reference_parser/issue_parser.rb | 7 +- lib/banzai/renderer.rb | 16 +- lib/ci/api/builds.rb | 8 + lib/ci/charts.rb | 96 +- lib/ci/gitlab_ci_yaml_processor.rb | 196 +- lib/ci/static_model.rb | 49 - lib/extracts_path.rb | 12 +- lib/gitlab/access.rb | 1 + lib/gitlab/akismet_helper.rb | 47 - lib/gitlab/auth.rb | 44 +- lib/gitlab/backend/grack_auth.rb | 163 - lib/gitlab/badge/base.rb | 21 + lib/gitlab/badge/build.rb | 46 - lib/gitlab/badge/build/metadata.rb | 28 + lib/gitlab/badge/build/status.rb | 37 + lib/gitlab/badge/build/template.rb | 47 + lib/gitlab/badge/coverage/metadata.rb | 30 + lib/gitlab/badge/coverage/report.rb | 55 + lib/gitlab/badge/coverage/template.rb | 52 + lib/gitlab/badge/metadata.rb | 36 + lib/gitlab/badge/template.rb | 49 + lib/gitlab/changes_list.rb | 25 + lib/gitlab/checks/change_access.rb | 26 +- lib/gitlab/checks/force_push.rb | 4 +- lib/gitlab/ci/config.rb | 2 +- lib/gitlab/ci/config/node/artifacts.rb | 35 + lib/gitlab/ci/config/node/attributable.rb | 23 + lib/gitlab/ci/config/node/cache.rb | 10 +- lib/gitlab/ci/config/node/commands.rb | 33 + lib/gitlab/ci/config/node/configurable.rb | 25 +- lib/gitlab/ci/config/node/entry.rb | 53 +- lib/gitlab/ci/config/node/factory.rb | 47 +- lib/gitlab/ci/config/node/global.rb | 32 +- lib/gitlab/ci/config/node/hidden_job.rb | 23 + lib/gitlab/ci/config/node/job.rb | 123 + lib/gitlab/ci/config/node/jobs.rb | 48 + .../config/node/legacy_validation_helpers.rb | 4 - lib/gitlab/ci/config/node/null.rb | 34 + lib/gitlab/ci/config/node/stage.rb | 22 + lib/gitlab/ci/config/node/trigger.rb | 26 + lib/gitlab/ci/config/node/undefined.rb | 21 +- lib/gitlab/ci/config/node/validatable.rb | 10 +- lib/gitlab/ci/config/node/validator.rb | 17 +- lib/gitlab/ci/config/node/validators.rb | 22 +- lib/gitlab/conflict/file.rb | 197 + lib/gitlab/conflict/file_collection.rb | 57 + lib/gitlab/conflict/parser.rb | 71 + lib/gitlab/current_settings.rb | 1 + .../build.rb} | 6 +- .../note.rb} | 6 +- lib/gitlab/data_builder/pipeline.rb | 62 + .../push.rb} | 6 +- lib/gitlab/database.rb | 6 +- lib/gitlab/diff/file.rb | 5 +- lib/gitlab/diff/file_collection/base.rb | 35 + lib/gitlab/diff/file_collection/commit.rb | 14 + lib/gitlab/diff/file_collection/compare.rb | 14 + .../diff/file_collection/merge_request.rb | 73 + lib/gitlab/diff/highlight.rb | 7 +- lib/gitlab/diff/inline_diff.rb | 74 +- lib/gitlab/diff/line.rb | 34 +- lib/gitlab/diff/parallel_diff.rb | 63 +- lib/gitlab/diff/position.rb | 18 +- lib/gitlab/downtime_check/message.rb | 19 +- lib/gitlab/email/handler.rb | 18 + lib/gitlab/email/handler/base_handler.rb | 61 + .../email/handler/create_issue_handler.rb | 52 + .../email/handler/create_note_handler.rb | 55 + lib/gitlab/email/message/repository_push.rb | 21 +- lib/gitlab/email/receiver.rb | 117 +- lib/gitlab/git.rb | 18 + lib/gitlab/git_access.rb | 8 +- lib/gitlab/git_post_receive.rb | 1 - lib/gitlab/github_import/branch_formatter.rb | 4 - lib/gitlab/github_import/hook_formatter.rb | 23 - lib/gitlab/github_import/importer.rb | 162 +- .../github_import/pull_request_formatter.rb | 26 +- lib/gitlab/import_export/avatar_restorer.rb | 1 - lib/gitlab/import_export/json_hash_builder.rb | 9 +- lib/gitlab/import_export/members_mapper.rb | 13 +- lib/gitlab/import_export/relation_factory.rb | 16 +- lib/gitlab/incoming_email.rb | 6 +- lib/gitlab/ldap/access.rb | 2 +- lib/gitlab/ldap/adapter.rb | 2 +- lib/gitlab/lfs/response.rb | 329 - lib/gitlab/lfs/router.rb | 98 - lib/gitlab/mail_room.rb | 47 + lib/gitlab/metrics.rb | 17 +- lib/gitlab/metrics/instrumentation.rb | 13 +- lib/gitlab/metrics/method_call.rb | 4 +- lib/gitlab/metrics/metric.rb | 9 +- lib/gitlab/metrics/rack_middleware.rb | 4 + lib/gitlab/metrics/sidekiq_middleware.rb | 4 + lib/gitlab/metrics/system.rb | 8 +- lib/gitlab/metrics/transaction.rb | 42 +- lib/gitlab/middleware/rails_queue_duration.rb | 2 +- lib/gitlab/popen.rb | 2 +- lib/gitlab/redis.rb | 94 +- lib/gitlab/request_profiler.rb | 19 + lib/gitlab/request_profiler/middleware.rb | 54 + lib/gitlab/request_profiler/profile.rb | 43 + .../request_store_middleware.rb | 13 + .../slash_commands/command_definition.rb | 57 + lib/gitlab/slash_commands/dsl.rb | 98 + lib/gitlab/slash_commands/extractor.rb | 122 + lib/gitlab/template/base_template.rb | 71 +- .../template/finders/base_template_finder.rb | 35 + .../finders/global_template_finder.rb | 38 + .../template/finders/repo_template_finder.rb | 59 + .../{gitignore.rb => gitignore_template.rb} | 6 +- ...ab_ci_yml.rb => gitlab_ci_yml_template.rb} | 6 +- lib/gitlab/template/issue_template.rb | 19 + lib/gitlab/template/merge_request_template.rb | 19 + lib/gitlab/themes.rb | 16 +- lib/gitlab/user_access.rb | 12 +- lib/gitlab/utils.rb | 2 +- lib/gitlab/workhorse.rb | 6 + lib/tasks/downtime_check.rake | 26 +- lib/tasks/gitlab/bulk_add_permission.rake | 12 +- lib/tasks/gitlab/check.rake | 28 +- lib/tasks/gitlab/info.rake | 4 +- lib/tasks/gitlab/shell.rake | 12 +- lib/tasks/gitlab/task_helpers.rake | 14 +- lib/tasks/gitlab/web_hook.rake | 4 +- lib/tasks/spinach.rake | 8 +- lib/tasks/test.rake | 2 +- public/404.html | 84 +- public/422.html | 82 +- public/500.html | 77 +- public/502.html | 27 +- public/503.html | 27 +- public/deploy.html | 98 +- scripts/lint-doc.sh | 15 + scripts/merge-simplecov | 30 + scripts/prepare_build.sh | 7 +- spec/config/mail_room_spec.rb | 41 +- .../admin/groups_controller_spec.rb | 25 + .../admin/impersonations_controller_spec.rb | 2 + .../admin/spam_logs_controller_spec.rb | 12 + .../admin/users_controller_spec.rb | 2 +- .../application_controller_spec.rb | 6 +- .../autocomplete_controller_spec.rb | 341 +- .../groups/avatars_controller_spec.rb | 2 +- .../groups/milestones_controller_spec.rb | 2 +- spec/controllers/groups_controller_spec.rb | 30 + .../profiles/avatars_controller_spec.rb | 2 +- .../profiles/keys_controller_spec.rb | 18 +- .../projects/avatars_controller_spec.rb | 2 +- .../projects/boards/issues_controller_spec.rb | 120 + .../projects/boards/lists_controller_spec.rb | 241 + .../projects/boards_controller_spec.rb | 43 + .../projects/commit_controller_spec.rb | 48 +- .../projects/commits_controller_spec.rb | 2 +- .../projects/compare_controller_spec.rb | 23 +- .../projects/discussions_controller_spec.rb | 125 + .../projects/environments_controller_spec.rb | 58 + .../projects/forks_controller_spec.rb | 10 +- .../projects/issues_controller_spec.rb | 167 +- .../merge_requests_controller_spec.rb | 166 +- .../projects/milestones_controller_spec.rb | 2 +- .../projects/notes_controller_spec.rb | 133 +- .../protected_branches_controller_spec.rb | 2 +- .../projects/raw_controller_spec.rb | 2 +- .../projects/services_controller_spec.rb | 4 +- .../projects/templates_controller_spec.rb | 48 + spec/controllers/projects_controller_spec.rb | 10 +- spec/factories/boards.rb | 5 + spec/factories/broadcast_messages.rb | 4 +- spec/factories/ci/builds.rb | 21 + spec/factories/ci/pipelines.rb | 20 +- spec/factories/ci/trigger_requests.rb | 3 +- spec/factories/commit_statuses.rb | 24 + spec/factories/environments.rb | 1 + spec/factories/issues.rb | 10 + spec/factories/lists.rb | 20 + spec/factories/project_hooks.rb | 10 + spec/factories/projects.rb | 6 + spec/factories/protected_branches.rb | 23 + spec/factories/user_agent_details.rb | 7 + spec/factories_spec.rb | 2 +- .../admin/admin_abuse_reports_spec.rb | 4 +- ...admin_disables_git_access_protocol_spec.rb | 1 - spec/features/admin/admin_hooks_spec.rb | 6 +- spec/features/admin/admin_projects_spec.rb | 6 +- spec/features/admin/admin_system_info_spec.rb | 47 +- spec/features/admin/admin_users_spec.rb | 28 +- spec/features/atom/dashboard_spec.rb | 6 +- spec/features/atom/issues_spec.rb | 4 +- spec/features/atom/users_spec.rb | 12 +- spec/features/boards/boards_spec.rb | 634 + spec/features/ci_lint_spec.rb | 2 +- spec/features/commits_spec.rb | 2 +- spec/features/compare_spec.rb | 6 +- spec/features/dashboard/label_filter_spec.rb | 2 +- spec/features/dashboard_issues_spec.rb | 6 +- spec/features/environments_spec.rb | 4 +- .../features/gitlab_flavored_markdown_spec.rb | 24 +- spec/features/help_pages_spec.rb | 2 +- .../issuables/default_sort_order_spec.rb | 195 + spec/features/issues/award_emoji_spec.rb | 10 +- spec/features/issues/award_spec.rb | 8 +- .../issues/bulk_assignment_labels_spec.rb | 8 +- spec/features/issues/filter_by_labels_spec.rb | 48 +- .../issues/filter_by_milestone_spec.rb | 6 +- spec/features/issues/filter_issues_spec.rb | 40 +- spec/features/issues/issue_sidebar_spec.rb | 8 +- .../features/issues/new_branch_button_spec.rb | 2 +- spec/features/issues/todo_spec.rb | 4 +- spec/features/issues/update_issues_spec.rb | 12 +- .../issues/user_uses_slash_commands_spec.rb | 58 + spec/features/issues_spec.rb | 66 +- spec/features/login_spec.rb | 4 +- spec/features/merge_requests/award_spec.rb | 8 +- .../features/merge_requests/conflicts_spec.rb | 73 + .../merge_requests/create_new_mr_spec.rb | 21 +- .../merge_requests/created_from_fork_spec.rb | 12 +- .../merge_requests/diff_notes_resolve_spec.rb | 497 + spec/features/merge_requests/edit_mr_spec.rb | 2 +- .../filter_by_milestone_spec.rb | 6 +- .../merge_when_build_succeeds_spec.rb | 2 +- .../features/merge_requests/pipelines_spec.rb | 48 + .../user_lists_merge_requests_spec.rb | 33 +- .../user_uses_slash_commands_spec.rb | 32 + spec/features/milestone_spec.rb | 4 +- spec/features/notes_on_merge_requests_spec.rb | 12 +- .../participants_autocomplete_spec.rb | 6 +- spec/features/profile_spec.rb | 4 +- spec/features/profiles/password_spec.rb | 45 + spec/features/profiles/preferences_spec.rb | 4 + .../features/projects/badges/coverage_spec.rb | 82 + spec/features/projects/badges/list_spec.rb | 44 +- spec/features/projects/branches_spec.rb~HEAD | 32 - .../projects/files/editing_a_file_spec.rb | 34 + ...files_sort_submodules_with_folders_spec.rb | 29 + ...project_owner_creates_license_file_spec.rb | 1 + ...eate_license_file_in_empty_project_spec.rb | 1 + spec/features/projects/group_links_spec.rb | 32 + .../import_export/import_file_spec.rb | 98 +- .../projects/issuable_templates_spec.rb | 89 + spec/features/projects/issues/list_spec.rb | 20 + .../labels/update_prioritization_spec.rb | 4 +- ...r_adds_member_with_expiration_date_spec.rb | 45 + .../projects/merge_requests/list_spec.rb | 20 + .../features/{ => projects}/pipelines_spec.rb | 85 +- .../projects/project_settings_spec.rb | 41 + spec/features/projects/ref_switcher_spec.rb | 29 + spec/features/projects_spec.rb | 37 +- .../access_control_ce_spec.rb | 71 + spec/features/protected_branches_spec.rb | 14 +- spec/features/search_spec.rb | 38 +- .../security/dashboard_access_spec.rb | 14 + spec/features/todos/todos_sorting_spec.rb | 67 + spec/features/todos/todos_spec.rb | 2 +- spec/features/u2f_spec.rb | 66 +- spec/features/variables_spec.rb | 9 +- spec/finders/branches_finder_spec.rb | 14 +- spec/finders/merge_requests_finder_spec.rb | 4 +- spec/finders/move_to_project_finder_spec.rb | 75 + spec/finders/notes_finder_spec.rb | 4 +- spec/finders/projects_finder_spec.rb | 75 +- spec/finders/todos_finder_spec.rb | 70 + spec/fixtures/api/schemas/issue.json | 48 + spec/fixtures/api/schemas/issues.json | 4 + spec/fixtures/api/schemas/list.json | 39 + spec/fixtures/api/schemas/lists.json | 4 + .../fixtures/config/redis_new_format_host.yml | 29 + .../config/redis_new_format_socket.yml | 6 + .../fixtures/config/redis_old_format_host.yml | 5 + .../config/redis_old_format_socket.yml | 3 + spec/fixtures/emails/commands_in_reply.eml | 43 + spec/fixtures/emails/commands_only_reply.eml | 41 + spec/fixtures/emails/valid_new_issue.eml | 23 + .../fixtures/emails/valid_new_issue_empty.eml | 18 + .../emails/wrong_authentication_token.eml | 18 + ...wrong_reply_key.eml => wrong_mail_key.eml} | 0 spec/fixtures/parallel_diff_result.yml | 800 -- .../project_services/campfire/rooms.json | 22 + .../project_services/campfire/rooms2.json | 22 + spec/helpers/application_helper_spec.rb | 37 +- spec/helpers/blob_helper_spec.rb | 50 +- spec/helpers/diff_helper_spec.rb | 106 +- spec/helpers/emails_helper_spec.rb | 12 +- spec/helpers/events_helper_spec.rb | 14 +- spec/helpers/gitlab_markdown_helper_spec.rb | 20 +- spec/helpers/graph_helper_spec.rb | 2 +- spec/helpers/groups_helper_spec.rb | 4 +- spec/helpers/issuables_helper_spec.rb | 16 + spec/helpers/issues_helper_spec.rb | 101 +- spec/helpers/members_helper_spec.rb | 48 - spec/helpers/notes_helper_spec.rb | 64 +- spec/helpers/page_layout_helper_spec.rb | 9 + spec/helpers/projects_helper_spec.rb | 38 + spec/helpers/search_helper_spec.rb | 2 +- spec/helpers/submodule_helper_spec.rb | 28 +- spec/helpers/time_helper_spec.rb | 16 +- spec/helpers/tree_helper_spec.rb | 4 +- spec/initializers/secret_token_spec.rb | 200 + spec/javascripts/application_spec.js | 32 + spec/javascripts/application_spec.js.coffee | 30 - spec/javascripts/awards_handler_spec.js | 187 + .../javascripts/awards_handler_spec.js.coffee | 200 - spec/javascripts/behaviors/autosize_spec.js | 21 + .../behaviors/autosize_spec.js.coffee | 11 - .../behaviors/quick_submit_spec.js | 93 + .../behaviors/quick_submit_spec.js.coffee | 70 - .../behaviors/requires_input_spec.js | 44 + .../behaviors/requires_input_spec.js.coffee | 49 - .../boards/boards_store_spec.js.es6 | 164 + spec/javascripts/boards/issue_spec.js.es6 | 83 + spec/javascripts/boards/list_spec.js.es6 | 89 + spec/javascripts/boards/mock_data.js.es6 | 53 + .../datetime_utility_spec.js.coffee | 31 + .../diff_comments_store_spec.js.es6 | 122 + spec/javascripts/extensions/array_spec.js | 22 + .../extensions/array_spec.js.coffee | 12 - spec/javascripts/extensions/jquery_spec.js | 42 + .../extensions/jquery_spec.js.coffee | 34 - spec/javascripts/fixtures/emoji_menu.coffee | 957 -- spec/javascripts/fixtures/emoji_menu.js | 4 + .../fixtures/gl_dropdown.html.haml | 16 + .../fixtures/issue_sidebar_label.html.haml | 16 + spec/javascripts/gl_dropdown_spec.js.es6 | 119 + spec/javascripts/issue_spec.js | 121 + spec/javascripts/issue_spec.js.coffee | 109 - .../labels_issue_sidebar_spec.js.es6 | 89 + spec/javascripts/line_highlighter_spec.js | 229 + .../line_highlighter_spec.js.coffee | 158 - spec/javascripts/merge_request_spec.js | 28 + spec/javascripts/merge_request_spec.js.coffee | 23 - spec/javascripts/merge_request_tabs_spec.js | 106 + .../merge_request_tabs_spec.js.coffee | 88 - spec/javascripts/merge_request_widget_spec.js | 74 + .../merge_request_widget_spec.js.coffee | 55 - spec/javascripts/new_branch_spec.js | 170 + spec/javascripts/new_branch_spec.js.coffee | 160 - spec/javascripts/notes_spec.js | 41 + spec/javascripts/notes_spec.js.coffee | 26 - spec/javascripts/project_title_spec.js | 60 + spec/javascripts/project_title_spec.js.coffee | 37 - spec/javascripts/right_sidebar_spec.js | 70 + spec/javascripts/right_sidebar_spec.js.coffee | 69 - spec/javascripts/search_autocomplete_spec.js | 159 + .../search_autocomplete_spec.js.coffee | 149 - spec/javascripts/shortcuts_issuable_spec.js | 74 + .../shortcuts_issuable_spec.js.coffee | 82 - spec/javascripts/spec_helper.coffee | 47 - spec/javascripts/spec_helper.js | 22 + spec/javascripts/syntax_highlight_spec.js | 44 + .../syntax_highlight_spec.js.coffee | 42 - spec/javascripts/u2f/authenticate_spec.coffee | 51 - spec/javascripts/u2f/authenticate_spec.js | 75 + spec/javascripts/u2f/mock_u2f_device.js | 33 + .../javascripts/u2f/mock_u2f_device.js.coffee | 15 - spec/javascripts/u2f/register_spec.js | 81 + spec/javascripts/u2f/register_spec.js.coffee | 56 - spec/javascripts/zen_mode_spec.js | 73 + spec/javascripts/zen_mode_spec.js.coffee | 51 - .../filter/relative_link_filter_spec.rb | 39 +- .../filter/table_of_contents_filter_spec.rb | 2 - .../banzai/filter/upload_link_filter_spec.rb | 2 - .../banzai/filter/video_link_filter_spec.rb | 1 - .../reference_parser/issue_parser_spec.rb | 12 +- spec/lib/ci/charts_spec.rb | 20 +- spec/lib/ci/gitlab_ci_yaml_processor_spec.rb | 85 +- spec/lib/disable_email_interceptor_spec.rb | 2 +- spec/lib/extracts_path_spec.rb | 24 +- spec/lib/gitlab/akismet_helper_spec.rb | 35 - spec/lib/gitlab/asciidoc_spec.rb | 4 +- spec/lib/gitlab/auth_spec.rb | 10 +- spec/lib/gitlab/badge/build/metadata_spec.rb | 27 + spec/lib/gitlab/badge/build/status_spec.rb | 94 + spec/lib/gitlab/badge/build/template_spec.rb | 82 + spec/lib/gitlab/badge/build_spec.rb | 123 - .../gitlab/badge/coverage/metadata_spec.rb | 30 + spec/lib/gitlab/badge/coverage/report_spec.rb | 106 + .../gitlab/badge/coverage/template_spec.rb | 130 + spec/lib/gitlab/badge/shared/metadata.rb | 21 + spec/lib/gitlab/changes_list_spec.rb | 30 + spec/lib/gitlab/checks/change_access_spec.rb | 99 + .../gitlab/ci/config/node/artifacts_spec.rb | 45 + .../ci/config/node/attributable_spec.rb | 43 + .../gitlab/ci/config/node/commands_spec.rb | 49 + .../lib/gitlab/ci/config/node/factory_spec.rb | 38 +- spec/lib/gitlab/ci/config/node/global_spec.rb | 66 +- .../gitlab/ci/config/node/hidden_job_spec.rb | 58 + spec/lib/gitlab/ci/config/node/job_spec.rb | 86 + spec/lib/gitlab/ci/config/node/jobs_spec.rb | 87 + spec/lib/gitlab/ci/config/node/null_spec.rb | 41 + spec/lib/gitlab/ci/config/node/stage_spec.rb | 38 + .../lib/gitlab/ci/config/node/trigger_spec.rb | 56 + .../gitlab/ci/config/node/undefined_spec.rb | 32 +- .../gitlab/ci/config/node/validatable_spec.rb | 4 + .../gitlab/conflict/file_collection_spec.rb | 24 + spec/lib/gitlab/conflict/file_spec.rb | 261 + spec/lib/gitlab/conflict/parser_spec.rb | 193 + .../build_spec.rb} | 4 +- .../note_spec.rb} | 4 +- spec/lib/gitlab/data_builder/pipeline_spec.rb | 36 + .../push_spec.rb} | 2 +- spec/lib/gitlab/diff/file_spec.rb | 2 +- spec/lib/gitlab/diff/highlight_spec.rb | 2 +- spec/lib/gitlab/diff/line_mapper_spec.rb | 2 +- spec/lib/gitlab/diff/parallel_diff_spec.rb | 48 +- spec/lib/gitlab/diff/parser_spec.rb | 2 +- spec/lib/gitlab/diff/position_spec.rb | 42 + .../lib/gitlab/downtime_check/message_spec.rb | 26 +- spec/lib/gitlab/email/email_shared_blocks.rb | 41 + .../handler/create_issue_handler_spec.rb | 79 + .../email/handler/create_note_handler_spec.rb | 177 + .../email/message/repository_push_spec.rb | 13 +- spec/lib/gitlab/email/receiver_spec.rb | 157 +- spec/lib/gitlab/git/hook_spec.rb | 1 - spec/lib/gitlab/git_access_spec.rb | 102 +- .../github_import/branch_formatter_spec.rb | 14 - .../github_import/hook_formatter_spec.rb | 65 - .../lib/gitlab/github_import/importer_spec.rb | 132 + .../pull_request_formatter_spec.rb | 56 +- .../import_export/members_mapper_spec.rb | 20 + spec/lib/gitlab/import_export/project.json | 6 +- .../project_tree_restorer_spec.rb | 23 +- spec/lib/gitlab/import_export/reader_spec.rb | 3 +- spec/lib/gitlab/incoming_email_spec.rb | 4 +- spec/lib/gitlab/ldap/access_spec.rb | 2 +- spec/lib/gitlab/ldap/user_spec.rb | 2 +- .../gitlab/metrics/instrumentation_spec.rb | 12 +- spec/lib/gitlab/metrics/metric_spec.rb | 18 + .../gitlab/metrics/rack_middleware_spec.rb | 9 + .../gitlab/metrics/sidekiq_middleware_spec.rb | 24 +- spec/lib/gitlab/metrics/system_spec.rb | 12 +- spec/lib/gitlab/metrics/transaction_spec.rb | 73 +- spec/lib/gitlab/metrics_spec.rb | 30 + .../middleware/rails_queue_duration_spec.rb | 2 +- spec/lib/gitlab/o_auth/user_spec.rb | 6 +- .../lib/gitlab/project_search_results_spec.rb | 12 +- spec/lib/gitlab/redis_spec.rb | 79 + spec/lib/gitlab/saml/user_spec.rb | 10 +- spec/lib/gitlab/search_results_spec.rb | 12 +- .../slash_commands/command_definition_spec.rb | 173 + spec/lib/gitlab/slash_commands/dsl_spec.rb | 77 + .../gitlab/slash_commands/extractor_spec.rb | 215 + ...ore_spec.rb => gitignore_template_spec.rb} | 4 +- .../template/gitlab_ci_yml_template_spec.rb | 41 + .../gitlab/template/issue_template_spec.rb | 89 + .../template/merge_request_template_spec.rb | 89 + spec/lib/gitlab/upgrader_spec.rb | 6 +- spec/lib/gitlab/user_access_spec.rb | 56 +- spec/mailers/emails/merge_requests_spec.rb | 19 + spec/mailers/emails/profile_spec.rb | 2 +- spec/mailers/notify_spec.rb | 26 +- spec/models/ability_spec.rb | 168 + spec/models/application_setting_spec.rb | 22 +- spec/models/blob_spec.rb | 22 + spec/models/board_spec.rb | 12 + spec/models/broadcast_message_spec.rb | 8 +- spec/models/build_spec.rb | 143 +- spec/models/ci/pipeline_spec.rb | 523 +- spec/models/ci/trigger_spec.rb | 4 +- spec/models/commit_spec.rb | 41 + spec/models/commit_status_spec.rb | 12 +- spec/models/compare_spec.rb | 77 + .../models/concerns/faster_cache_keys_spec.rb | 17 + spec/models/concerns/mentionable_spec.rb | 6 +- spec/models/concerns/milestoneish_spec.rb | 36 +- spec/models/concerns/spammable_spec.rb | 33 + .../concerns/token_authenticatable_spec.rb | 2 +- spec/models/deployment_spec.rb | 24 + spec/models/diff_note_spec.rb | 302 +- spec/models/discussion_spec.rb | 615 + spec/models/environment_spec.rb | 52 + spec/models/forked_project_link_spec.rb | 10 +- spec/models/global_milestone_spec.rb | 12 +- spec/models/group_spec.rb | 6 +- spec/models/hooks/project_hook_spec.rb | 4 +- spec/models/hooks/system_hook_spec.rb | 2 +- spec/models/issue_spec.rb | 253 + spec/models/key_spec.rb | 9 +- spec/models/label_spec.rb | 6 +- spec/models/legacy_diff_note_spec.rb | 31 +- spec/models/list_spec.rb | 117 + spec/models/member_spec.rb | 28 +- spec/models/members/group_member_spec.rb | 4 +- spec/models/members/project_member_spec.rb | 9 +- spec/models/merge_request_diff_spec.rb | 12 +- spec/models/merge_request_spec.rb | 262 +- spec/models/milestone_spec.rb | 20 +- spec/models/namespace_spec.rb | 6 +- spec/models/network/graph_spec.rb | 12 + spec/models/note_spec.rb | 121 +- spec/models/project_security_spec.rb | 18 +- .../project_services/asana_service_spec.rb | 8 +- .../project_services/assembla_service_spec.rb | 4 +- .../builds_email_service_spec.rb | 8 +- .../project_services/campfire_service_spec.rb | 58 + .../project_services/drone_ci_service_spec.rb | 4 +- .../external_wiki_service_spec.rb | 2 +- .../project_services/flowdock_service_spec.rb | 4 +- .../gemnasium_service_spec.rb | 4 +- .../gitlab_issue_tracker_service_spec.rb | 4 +- .../project_services/hipchat_service_spec.rb | 95 +- .../project_services/irker_service_spec.rb | 13 +- .../project_services/jira_service_spec.rb | 12 +- .../pivotaltracker_service_spec.rb | 71 + .../project_services/pushover_service_spec.rb | 6 +- .../slack_service/note_message_spec.rb | 1 + .../slack_service/wiki_page_message_spec.rb | 4 +- .../project_services/slack_service_spec.rb | 34 +- spec/models/project_spec.rb | 197 +- spec/models/project_team_spec.rb | 82 +- spec/models/repository_spec.rb | 97 +- spec/models/service_spec.rb | 4 +- spec/models/user_agent_detail_spec.rb | 31 + spec/models/user_spec.rb | 89 +- spec/models/wiki_page_spec.rb | 6 +- spec/requests/api/access_requests_spec.rb | 246 + spec/requests/api/api_helpers_spec.rb | 30 +- spec/requests/api/award_emoji_spec.rb | 6 +- spec/requests/api/branches_spec.rb | 42 +- spec/requests/api/builds_spec.rb | 69 +- spec/requests/api/commit_statuses_spec.rb | 10 +- spec/requests/api/commits_spec.rb | 63 +- spec/requests/api/deploy_keys.rb | 38 - spec/requests/api/deploy_keys_spec.rb | 160 + spec/requests/api/deployments_spec.rb | 60 + spec/requests/api/environments_spec.rb | 130 + spec/requests/api/files_spec.rb | 22 +- spec/requests/api/fork_spec.rb | 12 +- spec/requests/api/group_members_spec.rb | 199 - spec/requests/api/groups_spec.rb | 56 +- spec/requests/api/internal_spec.rb | 18 + spec/requests/api/issues_spec.rb | 111 +- spec/requests/api/keys_spec.rb | 6 +- spec/requests/api/labels_spec.rb | 60 +- spec/requests/api/members_spec.rb | 314 + spec/requests/api/merge_requests_spec.rb | 88 +- spec/requests/api/milestones_spec.rb | 30 +- spec/requests/api/namespaces_spec.rb | 10 +- spec/requests/api/notes_spec.rb | 56 +- spec/requests/api/oauth_tokens_spec.rb | 33 + spec/requests/api/pipelines_spec.rb | 133 + spec/requests/api/project_hooks_spec.rb | 44 +- spec/requests/api/project_members_spec.rb | 166 - spec/requests/api/project_snippets_spec.rb | 2 +- spec/requests/api/projects_spec.rb | 246 +- spec/requests/api/repositories_spec.rb | 40 +- spec/requests/api/runners_spec.rb | 98 +- spec/requests/api/services_spec.rb | 22 +- spec/requests/api/session_spec.rb | 23 +- spec/requests/api/settings_spec.rb | 4 +- spec/requests/api/system_hooks_spec.rb | 20 +- spec/requests/api/tags_spec.rb | 34 +- spec/requests/api/templates_spec.rb | 65 +- spec/requests/api/todos_spec.rb | 12 + spec/requests/api/triggers_spec.rb | 47 +- spec/requests/api/users_spec.rb | 229 +- spec/requests/api/variables_spec.rb | 38 +- spec/requests/ci/api/builds_spec.rb | 205 +- spec/requests/ci/api/triggers_spec.rb | 19 +- spec/requests/git_http_spec.rb | 57 +- spec/requests/lfs_http_spec.rb | 59 +- spec/routing/admin_routing_spec.rb | 5 - spec/routing/project_routing_spec.rb | 17 +- spec/routing/routing_spec.rb | 17 +- spec/services/boards/create_service_spec.rb | 35 + .../boards/issues/list_service_spec.rb | 73 + .../boards/issues/move_service_spec.rb | 140 + .../boards/lists/create_service_spec.rb | 54 + .../boards/lists/destroy_service_spec.rb | 47 + .../boards/lists/generate_service_spec.rb | 40 + .../boards/lists/move_service_spec.rb | 110 + .../services/ci/create_builds_service_spec.rb | 32 - .../ci/create_pipeline_service_spec.rb | 214 + .../ci/create_trigger_request_service_spec.rb | 5 +- .../ci/image_for_build_service_spec.rb | 4 +- .../ci/process_pipeline_service_spec.rb | 328 + .../create_commit_builds_service_spec.rb | 241 - spec/services/create_snippet_service_spec.rb | 4 +- spec/services/delete_user_service_spec.rb | 8 +- spec/services/destroy_group_service_spec.rb | 60 +- spec/services/event_create_service_spec.rb | 14 +- spec/services/files/update_service_spec.rb | 84 + spec/services/git_hooks_service_spec.rb | 6 +- spec/services/git_push_service_spec.rb | 26 +- .../issues/bulk_update_service_spec.rb | 133 +- spec/services/issues/close_service_spec.rb | 22 +- spec/services/issues/create_service_spec.rb | 2 + spec/services/issues/reopen_service_spec.rb | 25 + spec/services/issues/update_service_spec.rb | 13 +- .../merge_requests/build_service_spec.rb | 8 +- .../merge_requests/close_service_spec.rb | 20 +- .../merge_requests/create_service_spec.rb | 13 +- .../merge_requests/get_urls_service_spec.rb | 134 + .../merge_request_diff_cache_service_spec.rb | 17 + .../merge_requests/merge_service_spec.rb | 4 +- .../merge_when_build_succeeds_service_spec.rb | 10 +- .../merge_requests/refresh_service_spec.rb | 10 +- .../merge_requests/reopen_service_spec.rb | 25 +- ...esolved_discussion_notification_service.rb | 46 + .../merge_requests/update_service_spec.rb | 13 +- spec/services/notes/create_service_spec.rb | 32 +- .../notes/slash_commands_service_spec.rb | 140 + spec/services/notification_service_spec.rb | 132 +- .../projects/autocomplete_service_spec.rb | 14 +- spec/services/projects/create_service_spec.rb | 6 +- .../enable_deploy_key_service_spec.rb | 27 + spec/services/projects/fork_service_spec.rb | 8 +- spec/services/projects/update_service_spec.rb | 18 +- .../repair_ldap_blocked_user_service_spec.rb | 4 +- spec/services/search_service_spec.rb | 8 +- .../slash_commands/interpret_service_spec.rb | 384 + spec/services/system_note_service_spec.rb | 12 +- spec/services/test_hook_service_spec.rb | 2 +- spec/services/todo_service_spec.rb | 78 +- spec/simplecov_env.rb | 55 + spec/spec_helper.rb | 7 +- spec/support/api/members_shared_examples.rb | 11 + spec/support/api/schema_matcher.rb | 8 + spec/support/api_helpers.rb | 14 +- spec/support/email_helpers.rb | 10 + spec/support/fake_u2f_device.rb | 5 +- spec/support/import_export/import_export.yml | 4 + ..._service_slash_commands_shared_examples.rb | 83 + ...issuable_slash_commands_shared_examples.rb | 289 + spec/support/issue_helpers.rb | 13 + spec/support/merge_request_helpers.rb | 13 + spec/support/select2_helper.rb | 2 +- spec/support/test_env.rb | 44 +- .../updating_mentions_shared_examples.rb | 32 + spec/tasks/gitlab/backup_rake_spec.rb | 16 +- spec/tasks/gitlab/db_rake_spec.rb | 8 +- spec/teaspoon_env.rb | 10 +- .../admin/dashboard/index.html.haml_spec.rb | 20 + .../shared/_signin_box.html.haml_spec.rb | 2 +- spec/views/layouts/_head.html.haml_spec.rb | 36 + .../projects/builds/show.html.haml_spec.rb | 22 +- .../_related_branches.html.haml_spec.rb | 21 + .../merge_requests/_heading.html.haml_spec.rb | 26 + .../projects/tree/show.html.haml_spec.rb | 37 + spec/workers/build_email_worker_spec.rb | 2 +- spec/workers/email_receiver_worker_spec.rb | 2 +- spec/workers/emails_on_push_worker_spec.rb | 38 +- spec/workers/group_destroy_worker_spec.rb | 19 + spec/workers/post_receive_spec.rb | 14 +- spec/workers/project_destroy_worker_spec.rb | 24 + .../remove_expired_group_links_worker_spec.rb | 24 + .../remove_expired_members_worker_spec.rb | 58 + vendor/assets/javascripts/Sortable.js | 1285 ++ vendor/assets/javascripts/task_list.js | 119 + vendor/assets/javascripts/task_list.js.coffee | 258 - .../assets/javascripts/vue-resource.full.js | 1318 ++ vendor/assets/javascripts/vue-resource.js.erb | 2 + vendor/assets/javascripts/vue-resource.min.js | 7 + vendor/assets/javascripts/vue.full.js | 10073 ++++++++++++++++ vendor/assets/javascripts/vue.js.erb | 2 + vendor/assets/javascripts/vue.min.js | 9 + vendor/gitignore/Elm.gitignore | 2 +- .../Global/VisualStudioCode.gitignore | 6 +- vendor/gitignore/Go.gitignore | 3 + vendor/gitignore/Leiningen.gitignore | 3 +- vendor/gitignore/Objective-C.gitignore | 2 +- vendor/gitignore/Scala.gitignore | 4 + vendor/gitignore/SugarCRM.gitignore | 2 + vendor/gitignore/TeX.gitignore | 11 + vendor/gitignore/Terraform.gitignore | 3 + vendor/gitignore/Unity.gitignore | 3 +- vendor/gitlab-ci-yml/C++.gitlab-ci.yml | 26 + vendor/gitlab-ci-yml/Elixir.gitlab-ci.yml | 2 +- vendor/gitlab-ci-yml/Grails.gitlab-ci.yml | 40 + vendor/gitlab-ci-yml/LaTeX.gitlab-ci.yml | 11 + vendor/gitlab-ci-yml/Pages/Hexo.gitlab-ci.yml | 26 +- .../gitlab-ci-yml/Pages/JBake.gitlab-ci.yml | 32 + vendor/gitlab-ci-yml/Ruby.gitlab-ci.yml | 8 + 1713 files changed, 67074 insertions(+), 25607 deletions(-) create mode 100644 .mailmap delete mode 100644 .simplecov delete mode 100644 app/assets/images/bg-header.png delete mode 100644 app/assets/images/bg_fallback.png delete mode 100644 app/assets/images/chosen-sprite.png delete mode 100644 app/assets/images/diff_note_add.png delete mode 100644 app/assets/images/icon-search.png delete mode 100644 app/assets/images/icon_sprite.png delete mode 100644 app/assets/images/images.png create mode 100644 app/assets/images/koding-logo.svg delete mode 100644 app/assets/images/move.png delete mode 100644 app/assets/images/progress_bar.gif delete mode 100644 app/assets/images/slider_handles.png delete mode 100644 app/assets/images/switch_icon.png delete mode 100644 app/assets/images/trans_bg.gif create mode 100644 app/assets/javascripts/LabelManager.js delete mode 100644 app/assets/javascripts/LabelManager.js.coffee create mode 100644 app/assets/javascripts/activities.js delete mode 100644 app/assets/javascripts/activities.js.coffee create mode 100644 app/assets/javascripts/admin.js delete mode 100644 app/assets/javascripts/admin.js.coffee create mode 100644 app/assets/javascripts/api.js delete mode 100644 app/assets/javascripts/api.js.coffee create mode 100644 app/assets/javascripts/application.js delete mode 100644 app/assets/javascripts/application.js.coffee create mode 100644 app/assets/javascripts/aside.js delete mode 100644 app/assets/javascripts/aside.js.coffee create mode 100644 app/assets/javascripts/autosave.js delete mode 100644 app/assets/javascripts/autosave.js.coffee delete mode 100644 app/assets/javascripts/awards_handler.coffee create mode 100644 app/assets/javascripts/awards_handler.js create mode 100644 app/assets/javascripts/behaviors/autosize.js delete mode 100644 app/assets/javascripts/behaviors/autosize.js.coffee delete mode 100644 app/assets/javascripts/behaviors/details_behavior.coffee create mode 100644 app/assets/javascripts/behaviors/details_behavior.js create mode 100644 app/assets/javascripts/behaviors/quick_submit.js delete mode 100644 app/assets/javascripts/behaviors/quick_submit.js.coffee create mode 100644 app/assets/javascripts/behaviors/requires_input.js delete mode 100644 app/assets/javascripts/behaviors/requires_input.js.coffee delete mode 100644 app/assets/javascripts/behaviors/toggler_behavior.coffee create mode 100644 app/assets/javascripts/behaviors/toggler_behavior.js create mode 100644 app/assets/javascripts/blob/blob_ci_yaml.js delete mode 100644 app/assets/javascripts/blob/blob_ci_yaml.js.coffee create mode 100644 app/assets/javascripts/blob/blob_file_dropzone.js delete mode 100644 app/assets/javascripts/blob/blob_file_dropzone.js.coffee create mode 100644 app/assets/javascripts/blob/blob_gitignore_selector.js delete mode 100644 app/assets/javascripts/blob/blob_gitignore_selector.js.coffee create mode 100644 app/assets/javascripts/blob/blob_gitignore_selectors.js delete mode 100644 app/assets/javascripts/blob/blob_gitignore_selectors.js.coffee create mode 100644 app/assets/javascripts/blob/blob_license_selector.js delete mode 100644 app/assets/javascripts/blob/blob_license_selector.js.coffee create mode 100644 app/assets/javascripts/blob/blob_license_selectors.js delete mode 100644 app/assets/javascripts/blob/blob_license_selectors.js.coffee delete mode 100644 app/assets/javascripts/blob/edit_blob.js.coffee create mode 100644 app/assets/javascripts/blob/template_selector.js delete mode 100644 app/assets/javascripts/blob/template_selector.js.coffee create mode 100644 app/assets/javascripts/blob_edit/blob_edit_bundle.js create mode 100644 app/assets/javascripts/blob_edit/edit_blob.js create mode 100644 app/assets/javascripts/boards/boards_bundle.js.es6 create mode 100644 app/assets/javascripts/boards/components/board.js.es6 create mode 100644 app/assets/javascripts/boards/components/board_blank_state.js.es6 create mode 100644 app/assets/javascripts/boards/components/board_card.js.es6 create mode 100644 app/assets/javascripts/boards/components/board_delete.js.es6 create mode 100644 app/assets/javascripts/boards/components/board_list.js.es6 create mode 100644 app/assets/javascripts/boards/components/new_list_dropdown.js.es6 create mode 100644 app/assets/javascripts/boards/mixins/sortable_default_options.js.es6 create mode 100644 app/assets/javascripts/boards/models/issue.js.es6 create mode 100644 app/assets/javascripts/boards/models/label.js.es6 create mode 100644 app/assets/javascripts/boards/models/list.js.es6 create mode 100644 app/assets/javascripts/boards/models/user.js.es6 create mode 100644 app/assets/javascripts/boards/services/board_service.js.es6 create mode 100644 app/assets/javascripts/boards/stores/boards_store.js.es6 create mode 100755 app/assets/javascripts/boards/test_utils/simulate_drag.js create mode 100644 app/assets/javascripts/boards/vue_resource_interceptor.js.es6 delete mode 100644 app/assets/javascripts/breakpoints.coffee create mode 100644 app/assets/javascripts/breakpoints.js create mode 100644 app/assets/javascripts/broadcast_message.js delete mode 100644 app/assets/javascripts/broadcast_message.js.coffee delete mode 100644 app/assets/javascripts/build.coffee create mode 100644 app/assets/javascripts/build.js create mode 100644 app/assets/javascripts/build_artifacts.js delete mode 100644 app/assets/javascripts/build_artifacts.js.coffee create mode 100644 app/assets/javascripts/commit.js delete mode 100644 app/assets/javascripts/commit.js.coffee create mode 100644 app/assets/javascripts/commit/file.js delete mode 100644 app/assets/javascripts/commit/file.js.coffee create mode 100644 app/assets/javascripts/commit/image-file.js delete mode 100644 app/assets/javascripts/commit/image-file.js.coffee create mode 100644 app/assets/javascripts/commits.js delete mode 100644 app/assets/javascripts/commits.js.coffee create mode 100644 app/assets/javascripts/compare.js delete mode 100644 app/assets/javascripts/compare.js.coffee create mode 100644 app/assets/javascripts/compare_autocomplete.js delete mode 100644 app/assets/javascripts/compare_autocomplete.js.coffee create mode 100644 app/assets/javascripts/confirm_danger_modal.js delete mode 100644 app/assets/javascripts/confirm_danger_modal.js.coffee create mode 100644 app/assets/javascripts/copy_to_clipboard.js delete mode 100644 app/assets/javascripts/copy_to_clipboard.js.coffee create mode 100644 app/assets/javascripts/create_label.js.es6 create mode 100644 app/assets/javascripts/diff.js delete mode 100644 app/assets/javascripts/diff.js.coffee create mode 100644 app/assets/javascripts/diff_notes/components/comment_resolve_btn.js.es6 create mode 100644 app/assets/javascripts/diff_notes/components/jump_to_discussion.js.es6 create mode 100644 app/assets/javascripts/diff_notes/components/resolve_btn.js.es6 create mode 100644 app/assets/javascripts/diff_notes/components/resolve_count.js.es6 create mode 100644 app/assets/javascripts/diff_notes/components/resolve_discussion_btn.js.es6 create mode 100644 app/assets/javascripts/diff_notes/diff_notes_bundle.js.es6 create mode 100644 app/assets/javascripts/diff_notes/mixins/discussion.js.es6 create mode 100644 app/assets/javascripts/diff_notes/mixins/namespace.js.es6 create mode 100644 app/assets/javascripts/diff_notes/models/discussion.js.es6 create mode 100644 app/assets/javascripts/diff_notes/models/note.js.es6 create mode 100644 app/assets/javascripts/diff_notes/services/resolve.js.es6 create mode 100644 app/assets/javascripts/diff_notes/stores/comments.js.es6 create mode 100644 app/assets/javascripts/dispatcher.js delete mode 100644 app/assets/javascripts/dispatcher.js.coffee create mode 100644 app/assets/javascripts/dropzone_input.js delete mode 100644 app/assets/javascripts/dropzone_input.js.coffee create mode 100644 app/assets/javascripts/due_date_select.js delete mode 100644 app/assets/javascripts/due_date_select.js.coffee create mode 100644 app/assets/javascripts/extensions/jquery.js delete mode 100644 app/assets/javascripts/extensions/jquery.js.coffee create mode 100644 app/assets/javascripts/files_comment_button.js delete mode 100644 app/assets/javascripts/files_comment_button.js.coffee create mode 100644 app/assets/javascripts/flash.js delete mode 100644 app/assets/javascripts/flash.js.coffee delete mode 100644 app/assets/javascripts/gfm_auto_complete.js.coffee create mode 100644 app/assets/javascripts/gfm_auto_complete.js.es6 create mode 100644 app/assets/javascripts/gl_dropdown.js delete mode 100644 app/assets/javascripts/gl_dropdown.js.coffee create mode 100644 app/assets/javascripts/gl_form.js delete mode 100644 app/assets/javascripts/gl_form.js.coffee create mode 100644 app/assets/javascripts/graphs/graphs_bundle.js delete mode 100644 app/assets/javascripts/graphs/graphs_bundle.js.coffee create mode 100644 app/assets/javascripts/graphs/stat_graph.js delete mode 100644 app/assets/javascripts/graphs/stat_graph.js.coffee create mode 100644 app/assets/javascripts/graphs/stat_graph_contributors.js delete mode 100644 app/assets/javascripts/graphs/stat_graph_contributors.js.coffee create mode 100644 app/assets/javascripts/graphs/stat_graph_contributors_graph.js delete mode 100644 app/assets/javascripts/graphs/stat_graph_contributors_graph.js.coffee create mode 100644 app/assets/javascripts/graphs/stat_graph_contributors_util.js delete mode 100644 app/assets/javascripts/graphs/stat_graph_contributors_util.js.coffee create mode 100644 app/assets/javascripts/group_avatar.js delete mode 100644 app/assets/javascripts/group_avatar.js.coffee create mode 100644 app/assets/javascripts/groups.js delete mode 100644 app/assets/javascripts/groups.js.coffee create mode 100644 app/assets/javascripts/groups_select.js delete mode 100644 app/assets/javascripts/groups_select.js.coffee create mode 100644 app/assets/javascripts/importer_status.js delete mode 100644 app/assets/javascripts/importer_status.js.coffee create mode 100644 app/assets/javascripts/issuable.js delete mode 100644 app/assets/javascripts/issuable.js.coffee create mode 100644 app/assets/javascripts/issuable_context.js delete mode 100644 app/assets/javascripts/issuable_context.js.coffee create mode 100644 app/assets/javascripts/issuable_form.js delete mode 100644 app/assets/javascripts/issuable_form.js.coffee create mode 100644 app/assets/javascripts/issue.js delete mode 100644 app/assets/javascripts/issue.js.coffee create mode 100644 app/assets/javascripts/issue_status_select.js delete mode 100644 app/assets/javascripts/issue_status_select.js.coffee create mode 100644 app/assets/javascripts/issues-bulk-assignment.js delete mode 100644 app/assets/javascripts/issues-bulk-assignment.js.coffee create mode 100644 app/assets/javascripts/labels.js delete mode 100644 app/assets/javascripts/labels.js.coffee create mode 100644 app/assets/javascripts/labels_select.js delete mode 100644 app/assets/javascripts/labels_select.js.coffee create mode 100644 app/assets/javascripts/layout_nav.js delete mode 100644 app/assets/javascripts/layout_nav.js.coffee create mode 100644 app/assets/javascripts/lib/ace.js create mode 100644 app/assets/javascripts/lib/chart.js delete mode 100644 app/assets/javascripts/lib/chart.js.coffee create mode 100644 app/assets/javascripts/lib/cropper.js delete mode 100644 app/assets/javascripts/lib/cropper.js.coffee create mode 100644 app/assets/javascripts/lib/d3.js delete mode 100644 app/assets/javascripts/lib/d3.js.coffee create mode 100644 app/assets/javascripts/lib/raphael.js delete mode 100644 app/assets/javascripts/lib/raphael.js.coffee create mode 100644 app/assets/javascripts/lib/utils/animate.js delete mode 100644 app/assets/javascripts/lib/utils/animate.js.coffee create mode 100644 app/assets/javascripts/lib/utils/common_utils.js delete mode 100644 app/assets/javascripts/lib/utils/common_utils.js.coffee create mode 100644 app/assets/javascripts/lib/utils/datetime_utility.js delete mode 100644 app/assets/javascripts/lib/utils/datetime_utility.js.coffee delete mode 100644 app/assets/javascripts/lib/utils/md5.js create mode 100644 app/assets/javascripts/lib/utils/notify.js delete mode 100644 app/assets/javascripts/lib/utils/notify.js.coffee create mode 100644 app/assets/javascripts/lib/utils/text_utility.js delete mode 100644 app/assets/javascripts/lib/utils/text_utility.js.coffee create mode 100644 app/assets/javascripts/lib/utils/type_utility.js delete mode 100644 app/assets/javascripts/lib/utils/type_utility.js.coffee create mode 100644 app/assets/javascripts/lib/utils/url_utility.js delete mode 100644 app/assets/javascripts/lib/utils/url_utility.js.coffee delete mode 100644 app/assets/javascripts/lib/utils/utf8_encode.js create mode 100644 app/assets/javascripts/line_highlighter.js delete mode 100644 app/assets/javascripts/line_highlighter.js.coffee create mode 100644 app/assets/javascripts/logo.js delete mode 100644 app/assets/javascripts/logo.js.coffee delete mode 100644 app/assets/javascripts/markdown_preview.js.coffee create mode 100644 app/assets/javascripts/member_expiration_date.js create mode 100644 app/assets/javascripts/merge_conflict_data_provider.js.es6 create mode 100644 app/assets/javascripts/merge_conflict_resolver.js.es6 create mode 100644 app/assets/javascripts/merge_request.js delete mode 100644 app/assets/javascripts/merge_request.js.coffee create mode 100644 app/assets/javascripts/merge_request_tabs.js delete mode 100644 app/assets/javascripts/merge_request_tabs.js.coffee create mode 100644 app/assets/javascripts/merge_request_widget.js delete mode 100644 app/assets/javascripts/merge_request_widget.js.coffee create mode 100644 app/assets/javascripts/merged_buttons.js delete mode 100644 app/assets/javascripts/merged_buttons.js.coffee create mode 100644 app/assets/javascripts/milestone.js delete mode 100644 app/assets/javascripts/milestone.js.coffee create mode 100644 app/assets/javascripts/milestone_select.js delete mode 100644 app/assets/javascripts/milestone_select.js.coffee create mode 100644 app/assets/javascripts/namespace_select.js delete mode 100644 app/assets/javascripts/namespace_select.js.coffee create mode 100644 app/assets/javascripts/network/branch-graph.js delete mode 100644 app/assets/javascripts/network/branch-graph.js.coffee create mode 100644 app/assets/javascripts/network/network.js delete mode 100644 app/assets/javascripts/network/network.js.coffee create mode 100644 app/assets/javascripts/network/network_bundle.js delete mode 100644 app/assets/javascripts/network/network_bundle.js.coffee create mode 100644 app/assets/javascripts/new_branch_form.js delete mode 100644 app/assets/javascripts/new_branch_form.js.coffee create mode 100644 app/assets/javascripts/new_commit_form.js delete mode 100644 app/assets/javascripts/new_commit_form.js.coffee create mode 100644 app/assets/javascripts/notes.js delete mode 100644 app/assets/javascripts/notes.js.coffee create mode 100644 app/assets/javascripts/notifications_dropdown.js delete mode 100644 app/assets/javascripts/notifications_dropdown.js.coffee create mode 100644 app/assets/javascripts/notifications_form.js delete mode 100644 app/assets/javascripts/notifications_form.js.coffee create mode 100644 app/assets/javascripts/pager.js delete mode 100644 app/assets/javascripts/pager.js.coffee create mode 100644 app/assets/javascripts/pipeline.js.es6 create mode 100644 app/assets/javascripts/preview_markdown.js create mode 100644 app/assets/javascripts/profile/gl_crop.js delete mode 100644 app/assets/javascripts/profile/gl_crop.js.coffee create mode 100644 app/assets/javascripts/profile/profile.js delete mode 100644 app/assets/javascripts/profile/profile.js.coffee create mode 100644 app/assets/javascripts/profile/profile_bundle.js delete mode 100644 app/assets/javascripts/profile/profile_bundle.js.coffee create mode 100644 app/assets/javascripts/project.js delete mode 100644 app/assets/javascripts/project.js.coffee create mode 100644 app/assets/javascripts/project_avatar.js delete mode 100644 app/assets/javascripts/project_avatar.js.coffee create mode 100644 app/assets/javascripts/project_find_file.js delete mode 100644 app/assets/javascripts/project_find_file.js.coffee create mode 100644 app/assets/javascripts/project_fork.js delete mode 100644 app/assets/javascripts/project_fork.js.coffee create mode 100644 app/assets/javascripts/project_import.js delete mode 100644 app/assets/javascripts/project_import.js.coffee create mode 100644 app/assets/javascripts/project_members.js delete mode 100644 app/assets/javascripts/project_members.js.coffee create mode 100644 app/assets/javascripts/project_new.js delete mode 100644 app/assets/javascripts/project_new.js.coffee create mode 100644 app/assets/javascripts/project_select.js delete mode 100644 app/assets/javascripts/project_select.js.coffee create mode 100644 app/assets/javascripts/project_show.js delete mode 100644 app/assets/javascripts/project_show.js.coffee create mode 100644 app/assets/javascripts/projects_list.js delete mode 100644 app/assets/javascripts/projects_list.js.coffee create mode 100644 app/assets/javascripts/protected_branch_access_dropdown.js.es6 create mode 100644 app/assets/javascripts/protected_branch_create.js.es6 create mode 100644 app/assets/javascripts/protected_branch_dropdown.js.es6 create mode 100644 app/assets/javascripts/protected_branch_edit.js.es6 create mode 100644 app/assets/javascripts/protected_branch_edit_list.js.es6 delete mode 100644 app/assets/javascripts/protected_branch_select.js.coffee delete mode 100644 app/assets/javascripts/protected_branches.js.coffee create mode 100644 app/assets/javascripts/right_sidebar.js delete mode 100644 app/assets/javascripts/right_sidebar.js.coffee create mode 100644 app/assets/javascripts/search.js delete mode 100644 app/assets/javascripts/search.js.coffee create mode 100644 app/assets/javascripts/search_autocomplete.js delete mode 100644 app/assets/javascripts/search_autocomplete.js.coffee create mode 100644 app/assets/javascripts/shortcuts.js delete mode 100644 app/assets/javascripts/shortcuts.js.coffee delete mode 100644 app/assets/javascripts/shortcuts_blob.coffee create mode 100644 app/assets/javascripts/shortcuts_blob.js create mode 100644 app/assets/javascripts/shortcuts_dashboard_navigation.js delete mode 100644 app/assets/javascripts/shortcuts_dashboard_navigation.js.coffee create mode 100644 app/assets/javascripts/shortcuts_find_file.js delete mode 100644 app/assets/javascripts/shortcuts_find_file.js.coffee delete mode 100644 app/assets/javascripts/shortcuts_issuable.coffee create mode 100644 app/assets/javascripts/shortcuts_issuable.js delete mode 100644 app/assets/javascripts/shortcuts_navigation.coffee create mode 100644 app/assets/javascripts/shortcuts_navigation.js create mode 100644 app/assets/javascripts/shortcuts_network.js delete mode 100644 app/assets/javascripts/shortcuts_network.js.coffee create mode 100644 app/assets/javascripts/sidebar.js delete mode 100644 app/assets/javascripts/sidebar.js.coffee create mode 100644 app/assets/javascripts/single_file_diff.js delete mode 100644 app/assets/javascripts/single_file_diff.js.coffee create mode 100644 app/assets/javascripts/snippet/snippet_bundle.js create mode 100644 app/assets/javascripts/star.js delete mode 100644 app/assets/javascripts/star.js.coffee create mode 100644 app/assets/javascripts/subscription.js delete mode 100644 app/assets/javascripts/subscription.js.coffee create mode 100644 app/assets/javascripts/subscription_select.js delete mode 100644 app/assets/javascripts/subscription_select.js.coffee delete mode 100644 app/assets/javascripts/syntax_highlight.coffee create mode 100644 app/assets/javascripts/syntax_highlight.js create mode 100644 app/assets/javascripts/templates/issuable_template_selector.js.es6 create mode 100644 app/assets/javascripts/templates/issuable_template_selectors.js.es6 create mode 100644 app/assets/javascripts/todos.js delete mode 100644 app/assets/javascripts/todos.js.coffee create mode 100644 app/assets/javascripts/tree.js delete mode 100644 app/assets/javascripts/tree.js.coffee create mode 100644 app/assets/javascripts/u2f/authenticate.js delete mode 100644 app/assets/javascripts/u2f/authenticate.js.coffee create mode 100644 app/assets/javascripts/u2f/error.js delete mode 100644 app/assets/javascripts/u2f/error.js.coffee create mode 100644 app/assets/javascripts/u2f/register.js delete mode 100644 app/assets/javascripts/u2f/register.js.coffee create mode 100644 app/assets/javascripts/u2f/util.js delete mode 100644 app/assets/javascripts/u2f/util.js.coffee create mode 100644 app/assets/javascripts/user.js delete mode 100644 app/assets/javascripts/user.js.coffee create mode 100644 app/assets/javascripts/user_tabs.js delete mode 100644 app/assets/javascripts/user_tabs.js.coffee create mode 100644 app/assets/javascripts/users/calendar.js delete mode 100644 app/assets/javascripts/users/calendar.js.coffee create mode 100644 app/assets/javascripts/users/users_bundle.js delete mode 100644 app/assets/javascripts/users/users_bundle.js.coffee create mode 100644 app/assets/javascripts/users_select.js delete mode 100644 app/assets/javascripts/users_select.js.coffee create mode 100644 app/assets/javascripts/wikis.js delete mode 100644 app/assets/javascripts/wikis.js.coffee create mode 100644 app/assets/javascripts/zen_mode.js delete mode 100644 app/assets/javascripts/zen_mode.js.coffee create mode 100644 app/assets/stylesheets/pages/boards.scss create mode 100644 app/assets/stylesheets/pages/merge_conflicts.scss create mode 100644 app/controllers/admin/requests_profiles_controller.rb create mode 100644 app/controllers/concerns/issuable_collections.rb create mode 100644 app/controllers/concerns/spammable_actions.rb create mode 100644 app/controllers/koding_controller.rb create mode 100644 app/controllers/profiles/u2f_registrations_controller.rb create mode 100644 app/controllers/projects/board_lists_controller.rb create mode 100644 app/controllers/projects/boards/application_controller.rb create mode 100644 app/controllers/projects/boards/issues_controller.rb create mode 100644 app/controllers/projects/boards/lists_controller.rb create mode 100644 app/controllers/projects/boards_controller.rb create mode 100644 app/controllers/projects/discussions_controller.rb create mode 100644 app/controllers/projects/git_http_client_controller.rb create mode 100644 app/controllers/projects/lfs_api_controller.rb create mode 100644 app/controllers/projects/lfs_storage_controller.rb create mode 100644 app/controllers/projects/templates_controller.rb create mode 100644 app/finders/move_to_project_finder.rb create mode 100644 app/helpers/lfs_helper.rb create mode 100644 app/models/board.rb create mode 100644 app/models/compare.rb create mode 100644 app/models/concerns/expirable.rb create mode 100644 app/models/concerns/faster_cache_keys.rb create mode 100644 app/models/concerns/protected_branch_access.rb create mode 100644 app/models/concerns/spammable.rb create mode 100644 app/models/discussion.rb create mode 100644 app/models/list.rb create mode 100644 app/models/protected_branch/merge_access_level.rb create mode 100644 app/models/protected_branch/push_access_level.rb delete mode 100644 app/models/spam_report.rb create mode 100644 app/models/user_agent_detail.rb create mode 100644 app/services/akismet_service.rb create mode 100644 app/services/boards/base_service.rb create mode 100644 app/services/boards/create_service.rb create mode 100644 app/services/boards/issues/list_service.rb create mode 100644 app/services/boards/issues/move_service.rb create mode 100644 app/services/boards/lists/create_service.rb create mode 100644 app/services/boards/lists/destroy_service.rb create mode 100644 app/services/boards/lists/generate_service.rb create mode 100644 app/services/boards/lists/move_service.rb delete mode 100644 app/services/ci/create_builds_service.rb create mode 100644 app/services/ci/create_pipeline_builds_service.rb create mode 100644 app/services/ci/process_pipeline_service.rb delete mode 100644 app/services/create_commit_builds_service.rb delete mode 100644 app/services/create_spam_log_service.rb create mode 100644 app/services/ham_service.rb create mode 100644 app/services/members/authorized_destroy_service.rb create mode 100644 app/services/merge_requests/get_urls_service.rb create mode 100644 app/services/merge_requests/merge_request_diff_cache_service.rb create mode 100644 app/services/merge_requests/resolve_service.rb create mode 100644 app/services/merge_requests/resolved_discussion_notification_service.rb create mode 100644 app/services/notes/slash_commands_service.rb create mode 100644 app/services/projects/enable_deploy_key_service.rb create mode 100644 app/services/protected_branches/create_service.rb create mode 100644 app/services/protected_branches/update_service.rb create mode 100644 app/services/slash_commands/interpret_service.rb create mode 100644 app/services/spam_service.rb create mode 100644 app/services/user_agent_detail_service.rb create mode 100644 app/views/admin/requests_profiles/index.html.haml create mode 100644 app/views/discussions/_diff_discussion.html.haml create mode 100644 app/views/discussions/_diff_with_notes.html.haml create mode 100644 app/views/discussions/_discussion.html.haml create mode 100644 app/views/discussions/_headline.html.haml create mode 100644 app/views/discussions/_jump_to_next.html.haml create mode 100644 app/views/discussions/_notes.html.haml create mode 100644 app/views/discussions/_parallel_diff_discussion.html.haml create mode 100644 app/views/discussions/_resolve_all.html.haml create mode 100644 app/views/koding/index.html.haml create mode 100644 app/views/layouts/koding.html.haml create mode 100644 app/views/notify/new_mention_in_issue_email.html.haml create mode 100644 app/views/notify/new_mention_in_issue_email.text.erb create mode 100644 app/views/notify/new_mention_in_merge_request_email.html.haml create mode 100644 app/views/notify/new_mention_in_merge_request_email.text.erb create mode 100644 app/views/notify/resolved_all_discussions_email.html.haml create mode 100644 app/views/notify/resolved_all_discussions_email.text.erb create mode 100644 app/views/projects/badges/badge.svg.erb create mode 100644 app/views/projects/boards/components/_blank_state.html.haml create mode 100644 app/views/projects/boards/components/_board.html.haml create mode 100644 app/views/projects/boards/components/_card.html.haml create mode 100644 app/views/projects/boards/show.html.haml create mode 100644 app/views/projects/buttons/_koding.html.haml create mode 100644 app/views/projects/ci/builds/_build_pipeline.html.haml create mode 100644 app/views/projects/commit/_pipelines_list.haml delete mode 100644 app/views/projects/diffs/_match_line.html.haml delete mode 100644 app/views/projects/diffs/_match_line_parallel.html.haml create mode 100644 app/views/projects/environments/edit.html.haml create mode 100644 app/views/projects/generic_commit_statuses/_generic_commit_status_pipeline.html.haml create mode 100644 app/views/projects/issues/_issue_by_email.html.haml create mode 100644 app/views/projects/merge_requests/conflicts.html.haml create mode 100644 app/views/projects/merge_requests/conflicts/_commit_stats.html.haml create mode 100644 app/views/projects/merge_requests/conflicts/_inline_view.html.haml create mode 100644 app/views/projects/merge_requests/conflicts/_parallel_view.html.haml create mode 100644 app/views/projects/merge_requests/conflicts/_submit_form.html.haml create mode 100644 app/views/projects/merge_requests/show/_pipelines.html.haml delete mode 100644 app/views/projects/notes/_diff_notes_with_reply.html.haml delete mode 100644 app/views/projects/notes/_diff_notes_with_reply_parallel.html.haml delete mode 100644 app/views/projects/notes/_discussion.html.haml delete mode 100644 app/views/projects/notes/discussions/_diff_with_notes.html.haml delete mode 100644 app/views/projects/notes/discussions/_notes.html.haml create mode 100644 app/views/projects/pipelines_settings/_badge.html.haml create mode 100644 app/views/projects/protected_branches/_create_protected_branch.html.haml create mode 100644 app/views/projects/protected_branches/_update_protected_branch.html.haml create mode 100644 app/views/projects/tree/_tree_row.html.haml create mode 100644 app/views/shared/icons/_icon_play.svg create mode 100644 app/views/shared/icons/_next_discussion.svg create mode 100644 app/workers/group_destroy_worker.rb create mode 100644 app/workers/remove_expired_group_links_worker.rb create mode 100644 app/workers/remove_expired_members_worker.rb create mode 100644 app/workers/requests_profiles_worker.rb create mode 100644 config/initializers/request_profiler.rb create mode 100644 db/fixtures/development/16_protected_branches.rb create mode 100644 db/migrate/20160705054938_add_protected_branches_push_access.rb create mode 100644 db/migrate/20160705054952_add_protected_branches_merge_access.rb create mode 100644 db/migrate/20160705055254_move_from_developers_can_merge_to_protected_branches_merge_access.rb create mode 100644 db/migrate/20160705055308_move_from_developers_can_push_to_protected_branches_push_access.rb create mode 100644 db/migrate/20160705055809_remove_developers_can_push_from_protected_branches.rb create mode 100644 db/migrate/20160705055813_remove_developers_can_merge_from_protected_branches.rb create mode 100644 db/migrate/20160716115711_add_queued_at_to_ci_builds.rb create mode 100644 db/migrate/20160724205507_add_resolved_to_notes.rb create mode 100644 db/migrate/20160725083350_add_external_url_to_enviroments.rb create mode 100644 db/migrate/20160727163552_create_user_agent_details.rb create mode 100644 db/migrate/20160727191041_create_boards.rb create mode 100644 db/migrate/20160727193336_create_lists.rb create mode 100644 db/migrate/20160728081025_add_pipeline_events_to_web_hooks.rb create mode 100644 db/migrate/20160728103734_add_pipeline_events_to_services.rb create mode 100644 db/migrate/20160729173930_remove_project_id_from_spam_logs.rb create mode 100644 db/migrate/20160801163421_add_expires_at_to_member.rb create mode 100644 db/migrate/20160801163709_add_submitted_as_ham_to_spam_logs.rb create mode 100644 db/migrate/20160802010328_remove_builds_enable_index_on_projects.rb create mode 100644 db/migrate/20160803161903_add_unique_index_to_lists_label_id.rb create mode 100644 db/migrate/20160805041956_add_deleted_at_to_namespaces.rb create mode 100644 db/migrate/20160810102349_remove_ci_runner_trigram_indexes.rb create mode 100644 db/migrate/20160810142633_remove_redundant_indexes.rb create mode 100644 db/migrate/20160816161312_add_column_name_to_u2f_registrations.rb create mode 100644 db/migrate/20160817133006_add_koding_to_application_settings.rb create mode 100644 db/migrate/20160817154936_add_discussion_ids_to_notes.rb create mode 100644 db/migrate/20160818205718_add_expires_at_to_project_group_links.rb create mode 100644 db/migrate/20160819221631_add_index_to_note_discussion_id.rb create mode 100644 db/migrate/20160819221833_reset_diff_note_discussion_id_because_it_was_calculated_wrongly.rb create mode 100644 doc/administration/build_artifacts.md create mode 100644 doc/administration/integration/koding.md create mode 100644 doc/api/access_requests.md create mode 100644 doc/api/deployments.md create mode 100644 doc/api/enviroments.md create mode 100644 doc/api/members.md create mode 100644 doc/api/pipelines.md delete mode 100644 doc/ci/build_artifacts/img/build_artifacts_browser.png delete mode 100644 doc/ci/build_artifacts/img/build_artifacts_browser_button.png create mode 100644 doc/container_registry/img/mitmproxy-docker.png create mode 100644 doc/container_registry/troubleshooting.md create mode 100644 doc/development/adding_database_indexes.md create mode 100644 doc/development/newlines_styleguide.md create mode 100644 doc/development/what_requires_downtime.md create mode 100644 doc/integration/img/spam_log.png create mode 100644 doc/integration/img/submit_issue.png create mode 100644 doc/update/8.10-to-8.11.md create mode 100644 doc/user/admin_area/img/admin_labels.png create mode 100644 doc/user/admin_area/labels.md create mode 100644 doc/user/admin_area/settings/continuous_integration.md create mode 100644 doc/user/admin_area/settings/img/admin_area_maximum_artifacts_size.png create mode 100644 doc/user/admin_area/settings/img/admin_area_settings_button.png rename doc/{markdown/img/logo.png => user/img/markdown_logo.png} (100%) rename doc/{markdown/img/video.mp4 => user/img/markdown_video.mp4} (100%) create mode 100644 doc/user/markdown.md create mode 100644 doc/user/project/builds/artifacts.md create mode 100644 doc/user/project/builds/img/build_artifacts_browser.png create mode 100644 doc/user/project/builds/img/build_artifacts_browser_button.png create mode 100644 doc/user/project/builds/img/build_artifacts_builds_page.png create mode 100644 doc/user/project/builds/img/build_artifacts_pipelines_page.png create mode 100644 doc/user/project/description_templates.md create mode 100644 doc/user/project/img/description_templates.png create mode 100644 doc/user/project/img/issue_board.png create mode 100644 doc/user/project/img/issue_board_add_list.png create mode 100644 doc/user/project/img/issue_board_search_backlog.png create mode 100644 doc/user/project/img/issue_board_system_notes.png create mode 100644 doc/user/project/img/issue_board_welcome_message.png create mode 100644 doc/user/project/img/koding_build-in-progress.png create mode 100644 doc/user/project/img/koding_build-logs.png create mode 100644 doc/user/project/img/koding_build-success.png create mode 100644 doc/user/project/img/koding_commit-koding.yml.png create mode 100644 doc/user/project/img/koding_different-stack-on-mr-try.png create mode 100644 doc/user/project/img/koding_edit-on-ide.png create mode 100644 doc/user/project/img/koding_enable-koding.png create mode 100644 doc/user/project/img/koding_landing.png create mode 100644 doc/user/project/img/koding_open-gitlab-from-koding.png create mode 100644 doc/user/project/img/koding_run-in-ide.png create mode 100644 doc/user/project/img/koding_run-mr-in-ide.png create mode 100644 doc/user/project/img/koding_set-up-ide.png create mode 100644 doc/user/project/img/koding_stack-import.png create mode 100644 doc/user/project/img/koding_start-build.png create mode 100644 doc/user/project/img/protected_branches_page.png create mode 100644 doc/user/project/issue_board.md create mode 100644 doc/user/project/koding.md create mode 100644 doc/user/project/merge_requests/img/conflict_section.png create mode 100644 doc/user/project/merge_requests/img/discussion_view.png create mode 100644 doc/user/project/merge_requests/img/discussions_resolved.png create mode 100644 doc/user/project/merge_requests/img/merge_request_widget.png create mode 100644 doc/user/project/merge_requests/img/resolve_comment_button.png create mode 100644 doc/user/project/merge_requests/img/resolve_discussion_button.png create mode 100644 doc/user/project/merge_requests/merge_request_discussion_resolution.md create mode 100644 doc/user/project/merge_requests/resolve_conflicts.md create mode 100644 doc/user/project/slash_commands.md delete mode 100644 doc/workflow/shortcuts.png create mode 100644 features/support/wait_for_ajax.rb create mode 100644 lib/api/access_requests.rb create mode 100644 lib/api/deployments.rb create mode 100644 lib/api/environments.rb delete mode 100644 lib/api/group_members.rb create mode 100644 lib/api/helpers/members_helpers.rb create mode 100644 lib/api/members.rb create mode 100644 lib/api/pipelines.rb delete mode 100644 lib/api/project_members.rb delete mode 100644 lib/ci/static_model.rb delete mode 100644 lib/gitlab/akismet_helper.rb delete mode 100644 lib/gitlab/backend/grack_auth.rb create mode 100644 lib/gitlab/badge/base.rb delete mode 100644 lib/gitlab/badge/build.rb create mode 100644 lib/gitlab/badge/build/metadata.rb create mode 100644 lib/gitlab/badge/build/status.rb create mode 100644 lib/gitlab/badge/build/template.rb create mode 100644 lib/gitlab/badge/coverage/metadata.rb create mode 100644 lib/gitlab/badge/coverage/report.rb create mode 100644 lib/gitlab/badge/coverage/template.rb create mode 100644 lib/gitlab/badge/metadata.rb create mode 100644 lib/gitlab/badge/template.rb create mode 100644 lib/gitlab/changes_list.rb create mode 100644 lib/gitlab/ci/config/node/artifacts.rb create mode 100644 lib/gitlab/ci/config/node/attributable.rb create mode 100644 lib/gitlab/ci/config/node/commands.rb create mode 100644 lib/gitlab/ci/config/node/hidden_job.rb create mode 100644 lib/gitlab/ci/config/node/job.rb create mode 100644 lib/gitlab/ci/config/node/jobs.rb create mode 100644 lib/gitlab/ci/config/node/null.rb create mode 100644 lib/gitlab/ci/config/node/stage.rb create mode 100644 lib/gitlab/ci/config/node/trigger.rb create mode 100644 lib/gitlab/conflict/file.rb create mode 100644 lib/gitlab/conflict/file_collection.rb create mode 100644 lib/gitlab/conflict/parser.rb rename lib/gitlab/{build_data_builder.rb => data_builder/build.rb} (96%) rename lib/gitlab/{note_data_builder.rb => data_builder/note.rb} (97%) create mode 100644 lib/gitlab/data_builder/pipeline.rb rename lib/gitlab/{push_data_builder.rb => data_builder/push.rb} (98%) create mode 100644 lib/gitlab/diff/file_collection/base.rb create mode 100644 lib/gitlab/diff/file_collection/commit.rb create mode 100644 lib/gitlab/diff/file_collection/compare.rb create mode 100644 lib/gitlab/diff/file_collection/merge_request.rb create mode 100644 lib/gitlab/email/handler.rb create mode 100644 lib/gitlab/email/handler/base_handler.rb create mode 100644 lib/gitlab/email/handler/create_issue_handler.rb create mode 100644 lib/gitlab/email/handler/create_note_handler.rb delete mode 100644 lib/gitlab/github_import/hook_formatter.rb delete mode 100644 lib/gitlab/lfs/response.rb delete mode 100644 lib/gitlab/lfs/router.rb create mode 100644 lib/gitlab/mail_room.rb create mode 100644 lib/gitlab/request_profiler.rb create mode 100644 lib/gitlab/request_profiler/middleware.rb create mode 100644 lib/gitlab/request_profiler/profile.rb create mode 100644 lib/gitlab/sidekiq_middleware/request_store_middleware.rb create mode 100644 lib/gitlab/slash_commands/command_definition.rb create mode 100644 lib/gitlab/slash_commands/dsl.rb create mode 100644 lib/gitlab/slash_commands/extractor.rb create mode 100644 lib/gitlab/template/finders/base_template_finder.rb create mode 100644 lib/gitlab/template/finders/global_template_finder.rb create mode 100644 lib/gitlab/template/finders/repo_template_finder.rb rename lib/gitlab/template/{gitignore.rb => gitignore_template.rb} (63%) rename lib/gitlab/template/{gitlab_ci_yml.rb => gitlab_ci_yml_template.rb} (72%) create mode 100644 lib/gitlab/template/issue_template.rb create mode 100644 lib/gitlab/template/merge_request_template.rb create mode 100755 scripts/lint-doc.sh create mode 100755 scripts/merge-simplecov create mode 100644 spec/controllers/admin/groups_controller_spec.rb create mode 100644 spec/controllers/projects/boards/issues_controller_spec.rb create mode 100644 spec/controllers/projects/boards/lists_controller_spec.rb create mode 100644 spec/controllers/projects/boards_controller_spec.rb create mode 100644 spec/controllers/projects/discussions_controller_spec.rb create mode 100644 spec/controllers/projects/environments_controller_spec.rb create mode 100644 spec/controllers/projects/templates_controller_spec.rb create mode 100644 spec/factories/boards.rb create mode 100644 spec/factories/lists.rb create mode 100644 spec/factories/user_agent_details.rb create mode 100644 spec/features/boards/boards_spec.rb create mode 100644 spec/features/issuables/default_sort_order_spec.rb create mode 100644 spec/features/issues/user_uses_slash_commands_spec.rb create mode 100644 spec/features/merge_requests/conflicts_spec.rb create mode 100644 spec/features/merge_requests/diff_notes_resolve_spec.rb create mode 100644 spec/features/merge_requests/pipelines_spec.rb create mode 100644 spec/features/merge_requests/user_uses_slash_commands_spec.rb create mode 100644 spec/features/profiles/password_spec.rb create mode 100644 spec/features/projects/badges/coverage_spec.rb delete mode 100644 spec/features/projects/branches_spec.rb~HEAD create mode 100644 spec/features/projects/files/editing_a_file_spec.rb create mode 100644 spec/features/projects/files/files_sort_submodules_with_folders_spec.rb create mode 100644 spec/features/projects/group_links_spec.rb create mode 100644 spec/features/projects/issuable_templates_spec.rb create mode 100644 spec/features/projects/issues/list_spec.rb create mode 100644 spec/features/projects/members/master_adds_member_with_expiration_date_spec.rb create mode 100644 spec/features/projects/merge_requests/list_spec.rb rename spec/features/{ => projects}/pipelines_spec.rb (72%) create mode 100644 spec/features/projects/project_settings_spec.rb create mode 100644 spec/features/projects/ref_switcher_spec.rb create mode 100644 spec/features/protected_branches/access_control_ce_spec.rb create mode 100644 spec/features/todos/todos_sorting_spec.rb create mode 100644 spec/finders/move_to_project_finder_spec.rb create mode 100644 spec/finders/todos_finder_spec.rb create mode 100644 spec/fixtures/api/schemas/issue.json create mode 100644 spec/fixtures/api/schemas/issues.json create mode 100644 spec/fixtures/api/schemas/list.json create mode 100644 spec/fixtures/api/schemas/lists.json create mode 100644 spec/fixtures/config/redis_new_format_host.yml create mode 100644 spec/fixtures/config/redis_new_format_socket.yml create mode 100644 spec/fixtures/config/redis_old_format_host.yml create mode 100644 spec/fixtures/config/redis_old_format_socket.yml create mode 100644 spec/fixtures/emails/commands_in_reply.eml create mode 100644 spec/fixtures/emails/commands_only_reply.eml create mode 100644 spec/fixtures/emails/valid_new_issue.eml create mode 100644 spec/fixtures/emails/valid_new_issue_empty.eml create mode 100644 spec/fixtures/emails/wrong_authentication_token.eml rename spec/fixtures/emails/{wrong_reply_key.eml => wrong_mail_key.eml} (100%) delete mode 100644 spec/fixtures/parallel_diff_result.yml create mode 100644 spec/fixtures/project_services/campfire/rooms.json create mode 100644 spec/fixtures/project_services/campfire/rooms2.json create mode 100644 spec/helpers/issuables_helper_spec.rb create mode 100644 spec/initializers/secret_token_spec.rb create mode 100644 spec/javascripts/application_spec.js delete mode 100644 spec/javascripts/application_spec.js.coffee create mode 100644 spec/javascripts/awards_handler_spec.js delete mode 100644 spec/javascripts/awards_handler_spec.js.coffee create mode 100644 spec/javascripts/behaviors/autosize_spec.js delete mode 100644 spec/javascripts/behaviors/autosize_spec.js.coffee create mode 100644 spec/javascripts/behaviors/quick_submit_spec.js delete mode 100644 spec/javascripts/behaviors/quick_submit_spec.js.coffee create mode 100644 spec/javascripts/behaviors/requires_input_spec.js delete mode 100644 spec/javascripts/behaviors/requires_input_spec.js.coffee create mode 100644 spec/javascripts/boards/boards_store_spec.js.es6 create mode 100644 spec/javascripts/boards/issue_spec.js.es6 create mode 100644 spec/javascripts/boards/list_spec.js.es6 create mode 100644 spec/javascripts/boards/mock_data.js.es6 create mode 100644 spec/javascripts/datetime_utility_spec.js.coffee create mode 100644 spec/javascripts/diff_comments_store_spec.js.es6 create mode 100644 spec/javascripts/extensions/array_spec.js delete mode 100644 spec/javascripts/extensions/array_spec.js.coffee create mode 100644 spec/javascripts/extensions/jquery_spec.js delete mode 100644 spec/javascripts/extensions/jquery_spec.js.coffee delete mode 100644 spec/javascripts/fixtures/emoji_menu.coffee create mode 100644 spec/javascripts/fixtures/emoji_menu.js create mode 100644 spec/javascripts/fixtures/gl_dropdown.html.haml create mode 100644 spec/javascripts/fixtures/issue_sidebar_label.html.haml create mode 100644 spec/javascripts/gl_dropdown_spec.js.es6 create mode 100644 spec/javascripts/issue_spec.js delete mode 100644 spec/javascripts/issue_spec.js.coffee create mode 100644 spec/javascripts/labels_issue_sidebar_spec.js.es6 create mode 100644 spec/javascripts/line_highlighter_spec.js delete mode 100644 spec/javascripts/line_highlighter_spec.js.coffee create mode 100644 spec/javascripts/merge_request_spec.js delete mode 100644 spec/javascripts/merge_request_spec.js.coffee create mode 100644 spec/javascripts/merge_request_tabs_spec.js delete mode 100644 spec/javascripts/merge_request_tabs_spec.js.coffee create mode 100644 spec/javascripts/merge_request_widget_spec.js delete mode 100644 spec/javascripts/merge_request_widget_spec.js.coffee create mode 100644 spec/javascripts/new_branch_spec.js delete mode 100644 spec/javascripts/new_branch_spec.js.coffee create mode 100644 spec/javascripts/notes_spec.js delete mode 100644 spec/javascripts/notes_spec.js.coffee create mode 100644 spec/javascripts/project_title_spec.js delete mode 100644 spec/javascripts/project_title_spec.js.coffee create mode 100644 spec/javascripts/right_sidebar_spec.js delete mode 100644 spec/javascripts/right_sidebar_spec.js.coffee create mode 100644 spec/javascripts/search_autocomplete_spec.js delete mode 100644 spec/javascripts/search_autocomplete_spec.js.coffee create mode 100644 spec/javascripts/shortcuts_issuable_spec.js delete mode 100644 spec/javascripts/shortcuts_issuable_spec.js.coffee delete mode 100644 spec/javascripts/spec_helper.coffee create mode 100644 spec/javascripts/spec_helper.js create mode 100644 spec/javascripts/syntax_highlight_spec.js delete mode 100644 spec/javascripts/syntax_highlight_spec.js.coffee delete mode 100644 spec/javascripts/u2f/authenticate_spec.coffee create mode 100644 spec/javascripts/u2f/authenticate_spec.js create mode 100644 spec/javascripts/u2f/mock_u2f_device.js delete mode 100644 spec/javascripts/u2f/mock_u2f_device.js.coffee create mode 100644 spec/javascripts/u2f/register_spec.js delete mode 100644 spec/javascripts/u2f/register_spec.js.coffee create mode 100644 spec/javascripts/zen_mode_spec.js delete mode 100644 spec/javascripts/zen_mode_spec.js.coffee delete mode 100644 spec/lib/gitlab/akismet_helper_spec.rb create mode 100644 spec/lib/gitlab/badge/build/metadata_spec.rb create mode 100644 spec/lib/gitlab/badge/build/status_spec.rb create mode 100644 spec/lib/gitlab/badge/build/template_spec.rb delete mode 100644 spec/lib/gitlab/badge/build_spec.rb create mode 100644 spec/lib/gitlab/badge/coverage/metadata_spec.rb create mode 100644 spec/lib/gitlab/badge/coverage/report_spec.rb create mode 100644 spec/lib/gitlab/badge/coverage/template_spec.rb create mode 100644 spec/lib/gitlab/badge/shared/metadata.rb create mode 100644 spec/lib/gitlab/changes_list_spec.rb create mode 100644 spec/lib/gitlab/checks/change_access_spec.rb create mode 100644 spec/lib/gitlab/ci/config/node/artifacts_spec.rb create mode 100644 spec/lib/gitlab/ci/config/node/attributable_spec.rb create mode 100644 spec/lib/gitlab/ci/config/node/commands_spec.rb create mode 100644 spec/lib/gitlab/ci/config/node/hidden_job_spec.rb create mode 100644 spec/lib/gitlab/ci/config/node/job_spec.rb create mode 100644 spec/lib/gitlab/ci/config/node/jobs_spec.rb create mode 100644 spec/lib/gitlab/ci/config/node/null_spec.rb create mode 100644 spec/lib/gitlab/ci/config/node/stage_spec.rb create mode 100644 spec/lib/gitlab/ci/config/node/trigger_spec.rb create mode 100644 spec/lib/gitlab/conflict/file_collection_spec.rb create mode 100644 spec/lib/gitlab/conflict/file_spec.rb create mode 100644 spec/lib/gitlab/conflict/parser_spec.rb rename spec/lib/gitlab/{build_data_builder_spec.rb => data_builder/build_spec.rb} (88%) rename spec/lib/gitlab/{note_data_builder_spec.rb => data_builder/note_spec.rb} (97%) create mode 100644 spec/lib/gitlab/data_builder/pipeline_spec.rb rename spec/lib/gitlab/{push_data_builder_spec.rb => data_builder/push_spec.rb} (97%) create mode 100644 spec/lib/gitlab/email/email_shared_blocks.rb create mode 100644 spec/lib/gitlab/email/handler/create_issue_handler_spec.rb create mode 100644 spec/lib/gitlab/email/handler/create_note_handler_spec.rb delete mode 100644 spec/lib/gitlab/github_import/hook_formatter_spec.rb create mode 100644 spec/lib/gitlab/github_import/importer_spec.rb create mode 100644 spec/lib/gitlab/redis_spec.rb create mode 100644 spec/lib/gitlab/slash_commands/command_definition_spec.rb create mode 100644 spec/lib/gitlab/slash_commands/dsl_spec.rb create mode 100644 spec/lib/gitlab/slash_commands/extractor_spec.rb rename spec/lib/gitlab/template/{gitignore_spec.rb => gitignore_template_spec.rb} (88%) create mode 100644 spec/lib/gitlab/template/gitlab_ci_yml_template_spec.rb create mode 100644 spec/lib/gitlab/template/issue_template_spec.rb create mode 100644 spec/lib/gitlab/template/merge_request_template_spec.rb create mode 100644 spec/mailers/emails/merge_requests_spec.rb create mode 100644 spec/models/board_spec.rb create mode 100644 spec/models/compare_spec.rb create mode 100644 spec/models/concerns/faster_cache_keys_spec.rb create mode 100644 spec/models/concerns/spammable_spec.rb create mode 100644 spec/models/discussion_spec.rb create mode 100644 spec/models/list_spec.rb create mode 100644 spec/models/network/graph_spec.rb create mode 100644 spec/models/user_agent_detail_spec.rb create mode 100644 spec/requests/api/access_requests_spec.rb delete mode 100644 spec/requests/api/deploy_keys.rb create mode 100644 spec/requests/api/deploy_keys_spec.rb create mode 100644 spec/requests/api/deployments_spec.rb create mode 100644 spec/requests/api/environments_spec.rb delete mode 100644 spec/requests/api/group_members_spec.rb create mode 100644 spec/requests/api/members_spec.rb create mode 100644 spec/requests/api/oauth_tokens_spec.rb create mode 100644 spec/requests/api/pipelines_spec.rb delete mode 100644 spec/requests/api/project_members_spec.rb create mode 100644 spec/services/boards/create_service_spec.rb create mode 100644 spec/services/boards/issues/list_service_spec.rb create mode 100644 spec/services/boards/issues/move_service_spec.rb create mode 100644 spec/services/boards/lists/create_service_spec.rb create mode 100644 spec/services/boards/lists/destroy_service_spec.rb create mode 100644 spec/services/boards/lists/generate_service_spec.rb create mode 100644 spec/services/boards/lists/move_service_spec.rb delete mode 100644 spec/services/ci/create_builds_service_spec.rb create mode 100644 spec/services/ci/create_pipeline_service_spec.rb create mode 100644 spec/services/ci/process_pipeline_service_spec.rb delete mode 100644 spec/services/create_commit_builds_service_spec.rb create mode 100644 spec/services/files/update_service_spec.rb create mode 100644 spec/services/issues/reopen_service_spec.rb create mode 100644 spec/services/merge_requests/get_urls_service_spec.rb create mode 100644 spec/services/merge_requests/merge_request_diff_cache_service_spec.rb create mode 100644 spec/services/merge_requests/resolved_discussion_notification_service.rb create mode 100644 spec/services/notes/slash_commands_service_spec.rb create mode 100644 spec/services/projects/enable_deploy_key_service_spec.rb create mode 100644 spec/services/slash_commands/interpret_service_spec.rb create mode 100644 spec/simplecov_env.rb create mode 100644 spec/support/api/members_shared_examples.rb create mode 100644 spec/support/api/schema_matcher.rb create mode 100644 spec/support/issuable_create_service_slash_commands_shared_examples.rb create mode 100644 spec/support/issuable_slash_commands_shared_examples.rb create mode 100644 spec/support/issue_helpers.rb create mode 100644 spec/support/merge_request_helpers.rb create mode 100644 spec/support/updating_mentions_shared_examples.rb create mode 100644 spec/views/admin/dashboard/index.html.haml_spec.rb create mode 100644 spec/views/layouts/_head.html.haml_spec.rb create mode 100644 spec/views/projects/issues/_related_branches.html.haml_spec.rb create mode 100644 spec/views/projects/merge_requests/_heading.html.haml_spec.rb create mode 100644 spec/views/projects/tree/show.html.haml_spec.rb create mode 100644 spec/workers/group_destroy_worker_spec.rb create mode 100644 spec/workers/project_destroy_worker_spec.rb create mode 100644 spec/workers/remove_expired_group_links_worker_spec.rb create mode 100644 spec/workers/remove_expired_members_worker_spec.rb create mode 100644 vendor/assets/javascripts/Sortable.js create mode 100644 vendor/assets/javascripts/task_list.js delete mode 100644 vendor/assets/javascripts/task_list.js.coffee create mode 100644 vendor/assets/javascripts/vue-resource.full.js create mode 100644 vendor/assets/javascripts/vue-resource.js.erb create mode 100644 vendor/assets/javascripts/vue-resource.min.js create mode 100644 vendor/assets/javascripts/vue.full.js create mode 100644 vendor/assets/javascripts/vue.js.erb create mode 100644 vendor/assets/javascripts/vue.min.js create mode 100644 vendor/gitlab-ci-yml/C++.gitlab-ci.yml create mode 100644 vendor/gitlab-ci-yml/Grails.gitlab-ci.yml create mode 100644 vendor/gitlab-ci-yml/LaTeX.gitlab-ci.yml create mode 100644 vendor/gitlab-ci-yml/Pages/JBake.gitlab-ci.yml diff --git a/.gitignore b/.gitignore index ce6a363fe3..1bf9a47aef 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,7 @@ /config/secrets.yml /config/sidekiq.yml /coverage/* +/coverage-javascript/ /db/*.sqlite3 /db/*.sqlite3-journal /db/data.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2d33bad588..be5614520a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,7 +1,7 @@ -image: "ruby:2.1" +image: "ruby:2.3.1" cache: - key: "ruby21" + key: "ruby-231" paths: - vendor/apt - vendor/ruby @@ -15,6 +15,7 @@ variables: USE_DB: "true" USE_BUNDLE_INSTALL: "true" GIT_DEPTH: "20" + PHANTOMJS_VERSION: "2.1.1" before_script: - source ./scripts/prepare_build.sh @@ -28,6 +29,7 @@ stages: - prepare - test - post-test +- pages # Prepare and merge knapsack tests .knapsack-state: &knapsack-state @@ -40,6 +42,7 @@ stages: paths: - knapsack/ artifacts: + expire_in: 31d paths: - knapsack/ @@ -81,8 +84,10 @@ update-knapsack: - cp knapsack/rspec_report.json ${KNAPSACK_REPORT_PATH} - knapsack rspec artifacts: + expire_in: 31d paths: - knapsack/ + - coverage/ .spinach-knapsack: &spinach-knapsack stage: test @@ -97,8 +102,10 @@ update-knapsack: - 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)' artifacts: + expire_in: 31d paths: - knapsack/ + - coverage/ rspec 0 20: *rspec-knapsack rspec 1 20: *rspec-knapsack @@ -132,68 +139,68 @@ spinach 7 10: *spinach-knapsack spinach 8 10: *spinach-knapsack spinach 9 10: *spinach-knapsack -# Execute all testing suites against Ruby 2.3 -.ruby-23: &ruby-23 - image: "ruby:2.3" +# Execute all testing suites against Ruby 2.1 +.ruby-21: &ruby-21 + image: "ruby:2.1" <<: *use-db only: - master cache: - key: "ruby-23" + key: "ruby21" paths: - vendor/apt - vendor/ruby -.rspec-knapsack-ruby23: &rspec-knapsack-ruby23 +.rspec-knapsack-ruby21: &rspec-knapsack-ruby21 <<: *rspec-knapsack - <<: *ruby-23 + <<: *ruby-21 -.spinach-knapsack-ruby23: &spinach-knapsack-ruby23 +.spinach-knapsack-ruby21: &spinach-knapsack-ruby21 <<: *spinach-knapsack - <<: *ruby-23 + <<: *ruby-21 -rspec 0 20 ruby23: *rspec-knapsack-ruby23 -rspec 1 20 ruby23: *rspec-knapsack-ruby23 -rspec 2 20 ruby23: *rspec-knapsack-ruby23 -rspec 3 20 ruby23: *rspec-knapsack-ruby23 -rspec 4 20 ruby23: *rspec-knapsack-ruby23 -rspec 5 20 ruby23: *rspec-knapsack-ruby23 -rspec 6 20 ruby23: *rspec-knapsack-ruby23 -rspec 7 20 ruby23: *rspec-knapsack-ruby23 -rspec 8 20 ruby23: *rspec-knapsack-ruby23 -rspec 9 20 ruby23: *rspec-knapsack-ruby23 -rspec 10 20 ruby23: *rspec-knapsack-ruby23 -rspec 11 20 ruby23: *rspec-knapsack-ruby23 -rspec 12 20 ruby23: *rspec-knapsack-ruby23 -rspec 13 20 ruby23: *rspec-knapsack-ruby23 -rspec 14 20 ruby23: *rspec-knapsack-ruby23 -rspec 15 20 ruby23: *rspec-knapsack-ruby23 -rspec 16 20 ruby23: *rspec-knapsack-ruby23 -rspec 17 20 ruby23: *rspec-knapsack-ruby23 -rspec 18 20 ruby23: *rspec-knapsack-ruby23 -rspec 19 20 ruby23: *rspec-knapsack-ruby23 +rspec 0 20 ruby21: *rspec-knapsack-ruby21 +rspec 1 20 ruby21: *rspec-knapsack-ruby21 +rspec 2 20 ruby21: *rspec-knapsack-ruby21 +rspec 3 20 ruby21: *rspec-knapsack-ruby21 +rspec 4 20 ruby21: *rspec-knapsack-ruby21 +rspec 5 20 ruby21: *rspec-knapsack-ruby21 +rspec 6 20 ruby21: *rspec-knapsack-ruby21 +rspec 7 20 ruby21: *rspec-knapsack-ruby21 +rspec 8 20 ruby21: *rspec-knapsack-ruby21 +rspec 9 20 ruby21: *rspec-knapsack-ruby21 +rspec 10 20 ruby21: *rspec-knapsack-ruby21 +rspec 11 20 ruby21: *rspec-knapsack-ruby21 +rspec 12 20 ruby21: *rspec-knapsack-ruby21 +rspec 13 20 ruby21: *rspec-knapsack-ruby21 +rspec 14 20 ruby21: *rspec-knapsack-ruby21 +rspec 15 20 ruby21: *rspec-knapsack-ruby21 +rspec 16 20 ruby21: *rspec-knapsack-ruby21 +rspec 17 20 ruby21: *rspec-knapsack-ruby21 +rspec 18 20 ruby21: *rspec-knapsack-ruby21 +rspec 19 20 ruby21: *rspec-knapsack-ruby21 -spinach 0 10 ruby23: *spinach-knapsack-ruby23 -spinach 1 10 ruby23: *spinach-knapsack-ruby23 -spinach 2 10 ruby23: *spinach-knapsack-ruby23 -spinach 3 10 ruby23: *spinach-knapsack-ruby23 -spinach 4 10 ruby23: *spinach-knapsack-ruby23 -spinach 5 10 ruby23: *spinach-knapsack-ruby23 -spinach 6 10 ruby23: *spinach-knapsack-ruby23 -spinach 7 10 ruby23: *spinach-knapsack-ruby23 -spinach 8 10 ruby23: *spinach-knapsack-ruby23 -spinach 9 10 ruby23: *spinach-knapsack-ruby23 +spinach 0 10 ruby21: *spinach-knapsack-ruby21 +spinach 1 10 ruby21: *spinach-knapsack-ruby21 +spinach 2 10 ruby21: *spinach-knapsack-ruby21 +spinach 3 10 ruby21: *spinach-knapsack-ruby21 +spinach 4 10 ruby21: *spinach-knapsack-ruby21 +spinach 5 10 ruby21: *spinach-knapsack-ruby21 +spinach 6 10 ruby21: *spinach-knapsack-ruby21 +spinach 7 10 ruby21: *spinach-knapsack-ruby21 +spinach 8 10 ruby21: *spinach-knapsack-ruby21 +spinach 9 10 ruby21: *spinach-knapsack-ruby21 # Other generic tests -.static-analyses-variables: &static-analyses-variables +.ruby-static-analysis: &ruby-static-analysis variables: SIMPLECOV: "false" USE_DB: "false" USE_BUNDLE_INSTALL: "true" .exec: &exec - <<: *static-analyses-variables + <<: *ruby-static-analysis stage: test script: - bundle exec $CI_BUILD_NAME @@ -216,20 +223,54 @@ teaspoon: stage: test <<: *use-db script: + - curl --silent --location https://deb.nodesource.com/setup_6.x | bash - + - apt-get install --assume-yes nodejs + - npm install --global istanbul - teaspoon + artifacts: + name: coverage-javascript + expire_in: 31d + paths: + - coverage-javascript/default/ + +lint-doc: + stage: test + image: "phusion/baseimage:latest" + before_script: [] + script: + - scripts/lint-doc.sh bundler:audit: stage: test - <<: *static-analyses-variables + <<: *ruby-static-analysis only: - master script: - "bundle exec bundle-audit check --update --ignore OSVDB-115941" +coverage: + stage: post-test + services: [] + variables: + USE_DB: "false" + USE_BUNDLE_INSTALL: "true" + script: + - bundle exec scripts/merge-simplecov + artifacts: + name: coverage + expire_in: 31d + paths: + - coverage/index.html + - coverage/assets/ + + # Notify slack in the end notify:slack: stage: post-test + variables: + USE_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 " when: on_failure @@ -238,3 +279,20 @@ notify:slack: - tags@gitlab-org/gitlab-ce - master@gitlab-org/gitlab-ee - tags@gitlab-org/gitlab-ee + +pages: + before_script: [] + stage: pages + dependencies: + - coverage + - teaspoon + script: + - mv public/ .public/ + - mkdir public/ + - mv coverage public/coverage-ruby + - mv coverage-javascript/default/ public/coverage-javascript/ + artifacts: + paths: + - public + only: + - master diff --git a/.mailmap b/.mailmap new file mode 100644 index 0000000000..bd5ac22132 --- /dev/null +++ b/.mailmap @@ -0,0 +1,35 @@ +# +# This list is used by git-shortlog to make contributions from the +# same person appearing to be so. +# + +Achilleas Pipinellis +Achilleas Pipinellis +Dmitriy Zaporozhets +Dmitriy Zaporozhets +Douwe Maan +Douwe Maan +Grzegorz Bizon +Grzegorz Bizon +Jacob Vosmaer +Jacob Vosmaer Jacob Vosmaer (GitLab) +Jacob Schatz +Jacob Schatz +Jacob Schatz +James Lopez +James Lopez +Kamil Trzciński +Marin Jankovski +Phil Hughes +Rémy Coutable +Robert Schilling +Robert Schilling +Robert Speicher +Stan Hu +Stan Hu +Stan Hu +Stan Hu stanhu +Sytse Sijbrandij +Sytse Sijbrandij +Sytse Sijbrandij +Sytse Sijbrandij dosire diff --git a/.rubocop.yml b/.rubocop.yml index db0bcfadcf..282f4539f0 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -149,19 +149,19 @@ Style/EmptyLinesAroundAccessModifier: # Keeps track of empty lines around block bodies. Style/EmptyLinesAroundBlockBody: - Enabled: false + Enabled: true # Keeps track of empty lines around class bodies. Style/EmptyLinesAroundClassBody: - Enabled: false + Enabled: true # Keeps track of empty lines around module bodies. Style/EmptyLinesAroundModuleBody: - Enabled: false + Enabled: true # Keeps track of empty lines around method bodies. Style/EmptyLinesAroundMethodBody: - Enabled: false + Enabled: true # Avoid the use of END blocks. Style/EndBlock: @@ -291,6 +291,10 @@ Style/MultilineMethodDefinitionBraceLayout: Style/MultilineOperationIndentation: Enabled: false +# Avoid multi-line `? :` (the ternary operator), use if/unless instead. +Style/MultilineTernaryOperator: + Enabled: true + # Favor unless over if for negative conditions (or control flow or). Style/NegatedIf: Enabled: true @@ -369,6 +373,10 @@ Style/SpaceAfterNot: Style/SpaceAfterSemicolon: Enabled: true +# Use space around equals in parameter default +Style/SpaceAroundEqualsInParameterDefault: + Enabled: true + # Use a space around keywords if appropriate. Style/SpaceAroundKeyword: Enabled: true @@ -506,6 +514,15 @@ Metrics/PerceivedComplexity: #################### Lint ################################ +# Checks for useless access modifiers. +Lint/UselessAccessModifier: + Enabled: true + +# Checks for attempts to use `private` or `protected` to set the visibility +# of a class method, which does not work. +Lint/IneffectiveAccessModifier: + Enabled: false + # Checks for ambiguous operators in the first argument of a method invocation # without parentheses. Lint/AmbiguousOperator: diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 9310e71188..20daf1619a 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -19,10 +19,6 @@ Lint/AssignmentInCondition: Lint/HandleExceptions: Enabled: false -# Offense count: 21 -Lint/IneffectiveAccessModifier: - Enabled: false - # Offense count: 2 Lint/Loop: Enabled: false @@ -48,10 +44,6 @@ Lint/UnusedBlockArgument: Lint/UnusedMethodArgument: Enabled: false -# Offense count: 11 -Lint/UselessAccessModifier: - Enabled: false - # Offense count: 12 # Cop supports --auto-correct. Performance/PushSplat: @@ -226,10 +218,6 @@ Style/LineEndConcatenation: Style/MethodCallParentheses: Enabled: false -# Offense count: 3 -Style/MultilineTernaryOperator: - Enabled: false - # Offense count: 62 # Cop supports --auto-correct. Style/MutableConstant: @@ -351,13 +339,6 @@ Style/SingleLineBlockParams: Style/SingleLineMethods: Enabled: false -# Offense count: 14 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyle, SupportedStyles. -# SupportedStyles: space, no_space -Style/SpaceAroundEqualsInParameterDefault: - Enabled: false - # Offense count: 119 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles. diff --git a/.ruby-version b/.ruby-version index ebf14b4698..2bf1c1ccf3 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.1.8 +2.3.1 diff --git a/.simplecov b/.simplecov deleted file mode 100644 index d979288df4..0000000000 --- a/.simplecov +++ /dev/null @@ -1,4 +0,0 @@ -# .simplecov -SimpleCov.start 'rails' do - merge_timeout 3600 -end diff --git a/CHANGELOG b/CHANGELOG index bae0f96c52..22c5cd7b79 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,183 @@ Please view this file on the master branch, on stable branches it's out of date. +v 8.11.3 + - Don't show resolve conflicts link before MR status is updated + - Fix IE11 fork button bug !598 + - Don't prevent viewing the MR when git refs for conflicts can't be found on disk + - Allow system info page to handle case where info is unavailable + - Fix external issue tracker "Issues" link leading to 404s + - Don't try to show merge conflict resolution info if a merge conflict contains non-UTF-8 characters + - Label list shows all issues (opened or closed) with that label + - Automatically expand hidden discussions when accessed by a permalink !5585 (Mike Greiling) + +v 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 + - Pulled due to packaging error. + +v 8.11.0 + - 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) + - 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) + - Rename `markdown_preview` routes to `preview_markdown`. (Christopher Bartz) + - Update to Ruby 2.3.1. !4948 + - Add Issues Board !5548 + - Allow resolving merge conflicts in the UI !5479 + - Improve diff performance by eliminating redundant checks for text blobs + - Ensure that branch names containing escapable characters (e.g. %20) aren't unescaped indiscriminately. !5770 (ewiltshi) + - Convert switch icon into icon font (ClemMakesApps) + - API: Endpoints for enabling and disabling deploy keys + - API: List access requests, request access, approve, and deny access requests to a project or a group. !4833 + - Use long options for curl examples in documentation !5703 (winniehell) + - Added tooltip listing label names to the labels value in the collapsed issuable sidebar + - Remove magic comments (`# encoding: UTF-8`) from Ruby files. !5456 (winniehell) + - GitLab Performance Monitoring can now track custom events such as the number of tags pushed to a repository + - Add support for relative links starting with ./ or / to RelativeLinkFilter (winniehell) + - Allow naming U2F devices !5833 + - Ignore URLs starting with // in Markdown links !5677 (winniehell) + - Fix CI status icon link underline (ClemMakesApps) + - The Repository class is now instrumented + - Fix commit mention font inconsistency (ClemMakesApps) + - Do not escape URI when extracting path !5878 (winniehell) + - Fix filter label tooltip HTML rendering (ClemMakesApps) + - Cache the commit author in RequestStore to avoid extra lookups in PostReceive + - Expand commit message width in repo view (ClemMakesApps) + - Cache highlighted diff lines for merge requests + - Pre-create all builds for a Pipeline when the new Pipeline is created !5295 + - Allow merge request diff notes and discussions to be explicitly marked as resolved + - API: Add deployment endpoints + - API: Add Play endpoint on Builds + - Fix of 'Commits being passed to custom hooks are already reachable when using the UI' + - Show wall clock time when showing a pipeline. !5734 + - Show member roles to all users on members page + - Project.visible_to_user is instrumented again + - Fix awardable button mutuality loading spinners (ClemMakesApps) + - Sort todos by date and priority + - Add support for using RequestStore within Sidekiq tasks via SIDEKIQ_REQUEST_STORE env variable + - Optimize maximum user access level lookup in loading of notes + - Send notification emails to users newly mentioned in issue and MR edits !5800 + - Add "No one can push" as an option for protected branches. !5081 + - Improve performance of AutolinkFilter#text_parse by using XPath + - Add experimental Redis Sentinel support !1877 + - Rendering of SVGs as blobs is now limited to SVGs with a size smaller or equal to 2MB + - Fix branches page dropdown sort initial state (ClemMakesApps) + - Environments have an url to link to + - Various redundant database indexes have been removed + - Update `timeago` plugin to use multiple string/locale settings + - Remove unused images (ClemMakesApps) + - Get issue and merge request description templates from repositories + - Add hover state to todos !5361 (winniehell) + - Fix icon alignment of star and fork buttons !5451 (winniehell) + - 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 + - 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 + - Add green outline to New Branch button. !5447 (winniehell) + - Optimize generating of cache keys for issues and notes + - Fix repository push email formatting in Outlook + - Improve performance of syntax highlighting Markdown code blocks + - Update to gitlab_git 10.4.1 and take advantage of preserved Ref objects + - Remove delay when hitting "Reply..." button on page with a lot of discussions + - Retrieve rendered HTML from cache in one request + - Fix renaming repository when name contains invalid chararacters under project settings + - Upgrade Grape from 0.13.0 to 0.15.0. !4601 + - Trigram indexes for the "ci_runners" table have been removed to speed up UPDATE queries + - Fix devise deprecation warnings. + - Check for 2FA when using Git over HTTP and only allow PersonalAccessTokens as password in that case !5764 + - Update version_sorter and use new interface for faster tag sorting + - Optimize checking if a user has read access to a list of issues !5370 + - Store all DB secrets in secrets.yml, under descriptive names !5274 + - Fix syntax highlighting in file editor + - Support slash commands in issue and merge request descriptions as well as comments. !5021 + - Nokogiri's various parsing methods are now instrumented + - Add archived badge to project list !5798 + - Add simple identifier to public SSH keys (muteor) + - Admin page now references docs instead of a specific file !5600 (AnAverageHuman) + - Fix filter input alignment (ClemMakesApps) + - Include old revision in merge request update hooks (Ben Boeckel) + - Add build event color in HipChat messages (David Eisner) + - Make fork counter always clickable. !5463 (winniehell) + - Document that webhook secret token is sent in X-Gitlab-Token HTTP header !5664 (lycoperdon) + - Gitlab::Highlight is now instrumented + - All created issues, API or WebUI, can be submitted to Akismet for spam check !5333 + - Allow users to import cross-repository pull requests from GitHub + - The overhead of instrumented method calls has been reduced + - Remove `search_id` of labels dropdown filter to fix 'Missleading URI for labels in Merge Requests and Issues view'. !5368 (Scott Le) + - Load project invited groups and members eagerly in `ProjectTeam#fetch_members` + - Add pipeline events hook + - Bump gitlab_git to speedup DiffCollection iterations + - Rewrite description of a blocked user in admin settings. (Elias Werberich) + - Make branches sortable without push permission !5462 (winniehell) + - Check for Ci::Build artifacts at database level on pipeline partial + - Convert image diff background image to CSS (ClemMakesApps) + - Remove unnecessary index_projects_on_builds_enabled index from the projects table + - Make "New issue" button in Issue page less obtrusive !5457 (winniehell) + - Gitlab::Metrics.current_transaction needs to be public for RailsQueueDuration + - Fix search for notes which belongs to deleted objects + - Allow Akismet to be trained by submitting issues as spam or ham !5538 + - Add GitLab Workhorse version to admin dashboard (Katarzyna Kobierska Ula Budziszewska) + - Allow branch names ending with .json for graph and network page !5579 (winniehell) + - Add the `sprockets-es6` gem + - Improve OAuth2 client documentation (muteor) + - Fix diff comments inverted toggle bug (ClemMakesApps) + - Multiple trigger variables show in separate lines (Katarzyna Kobierska Ula Budziszewska) + - Profile requests when a header is passed + - Avoid calculation of line_code and position for _line partial when showing diff notes on discussion tab. + - Speedup DiffNote#active? on discussions, preloading noteables and avoid touching git repository to return diff_refs when possible + - Add commit stats in commit api. !5517 (dixpac) + - Add CI configuration button on project page + - Fix merge request new view not changing code view rendering style + - edit_blob_link will use blob passed onto the options parameter + - Make error pages responsive (Takuya Noguchi) + - The performance of the project dropdown used for moving issues has been improved + - Fix skip_repo parameter being ignored when destroying a namespace + - Add all builds into stage/job dropdowns on builds page + - Change requests_profiles resource constraint to catch virtually any file + - Bump gitlab_git to lazy load compare commits + - Reduce number of queries made for merge_requests/:id/diffs + - Add the option to set the expiration date for the project membership when giving a user access to a project. !5599 (Adam Niedzielski) + - Sensible state specific default sort order for issues and merge requests !5453 (tomb0y) + - Fix bug where destroying a namespace would not always destroy projects + - Fix RequestProfiler::Middleware error when code is reloaded in development + - Allow horizontal scrolling of code blocks in issue body + - Catch what warden might throw when profiling requests to re-throw it + - Avoid commit lookup on diff_helper passing existing local variable to the helper method + - Add description to new_issue email and new_merge_request_email in text/plain content type. !5663 (dixpac) + - Speed up and reduce memory usage of Commit#repo_changes, Repository#expire_avatar_cache and IrkerWorker + - Add unfold links for Side-by-Side view. !5415 (Tim Masliuchenko) + - Adds support for pending invitation project members importing projects + - Add pipeline visualization/graph on pipeline page + - Update devise initializer to turn on changed password notification emails. !5648 (tombell) + - Avoid to show the original password field when password is automatically set. !5712 (duduribeiro) + - Fix importing GitLab projects with an invalid MR source project + - Sort folders with submodules in Files view !5521 + - Each `File::exists?` replaced to `File::exist?` because of deprecate since ruby version 2.2.0 + - Add auto-completition in pipeline (Katarzyna Kobierska Ula Budziszewska) + - Add pipelines tab to merge requests + - Fix notification_service argument error of declined invitation emails + - Fix a memory leak caused by Banzai::Filter::SanitizationFilter + - Speed up todos queries by limiting the projects set we join with + - Ensure file editing in UI does not overwrite commited changes without warning user + - Eliminate unneeded calls to Repository#blob_at when listing commits with no path + - Update gitlab_git gem to 10.4.7 + - Simplify SQL queries of marking a todo as done + +v 8.10.6 (unreleased) + - Fix import/export configuration missing some included attributes + v 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 @@ -20,6 +198,7 @@ v 8.10.3 - Fix importer for GitHub Pull Requests when a branch was removed. !5573 - Ignore invalid IPs in X-Forwarded-For when trusted proxies are configured. !5584 - 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 - User can now search branches by name. !5144 @@ -98,6 +277,9 @@ v 8.10.0 - Fix check for New Branch button on Issue page. !4630 (winniehell) - Fix GFM autocomplete not working on wiki pages - Fixed enter key not triggering click on first row when searching in a dropdown + - Updated dropdowns in issuable form to use new GitLab dropdown style + - Make images fit to the size of the viewport !4810 + - Fix check for New Branch button on Issue page !4630 (winniehell) - Fix MR-auto-close text added to description. !4836 - Support U2F devices in Firefox. !5177 - Fix issue, preventing users w/o push access to sort tags. !5105 (redetection) @@ -115,6 +297,7 @@ v 8.10.0 - The Markdown reference parsers now re-use query results to prevent running the same queries multiple times. !5020 - Updated project header design - Issuable collapsed assignee tooltip is now the users name + - Fix compare view not changing code view rendering style - Exclude email check from the standard health check - Updated layout for Projects, Groups, Users on Admin area. !4424 - Fix changing issue state columns in milestone view @@ -159,6 +342,7 @@ v 8.10.0 - Fix new snippet style bug (elliotec) - Instrument Rinku usage - Be explicit to define merge request discussion variables + - Use cache for todos counter calling TodoService - Metrics for Rouge::Plugins::Redcarpet and Rouge::Formatters::HTMLGitlab - RailsCache metris now includes fetch_hit/fetch_miss and read_hit/read_miss info. - Allow [ci skip] to be in any case and allow [skip ci]. !4785 (simon_w) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 14ff05c9aa..fbc8e15beb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -41,6 +41,8 @@ abbreviation. If you have read this guide and want to know how the GitLab [core team] operates please see [the GitLab contributing process](PROCESS.md). +- [GitLab Inc engineers should refer to the engineering workflow document](https://about.gitlab.com/handbook/engineering/workflow/) + ## Contributor license agreement By submitting code as an individual you agree to the @@ -334,6 +336,10 @@ request is as follows: 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. 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. +1. For more complex migrations, write tests. The **official merge window** is in the beginning of the month from the 1st to the 7th day of the month. This is the best time to submit an MR and get @@ -459,8 +465,10 @@ merge request: - multi-line method chaining style **Option B**: dot `.` on previous line - string literal quoting style **Option A**: single quoted by default 1. [Rails](https://github.com/bbatsov/rails-style-guide) +1. [Newlines styleguide][newlines-styleguide] 1. [Testing](doc/development/testing.md) -1. [CoffeeScript](https://github.com/thoughtbot/guides/tree/master/style/coffeescript) +1. [JavaScript (ES6)](https://github.com/airbnb/javascript) +1. [JavaScript (ES5)](https://github.com/airbnb/javascript/tree/master/es5) 1. [SCSS styleguide][scss-styleguide] 1. [Shell commands](doc/development/shell_commands.md) created by GitLab contributors to enhance security @@ -530,6 +538,7 @@ available at [http://contributor-covenant.org/version/1/1/0/](http://contributor [rss-naming]: https://github.com/bbatsov/ruby-style-guide/blob/master/README.md#naming [doc-styleguide]: doc/development/doc_styleguide.md "Documentation styleguide" [scss-styleguide]: doc/development/scss_styleguide.md "SCSS styleguide" +[newlines-styleguide]: doc/development/newlines_styleguide.md "Newlines styleguide" [gitlab-design]: https://gitlab.com/gitlab-org/gitlab-design [free Antetype viewer (Mac OSX only)]: https://itunes.apple.com/us/app/antetype-viewer/id824152298?mt=12 [`gitlab8.atype` file]: https://gitlab.com/gitlab-org/gitlab-design/tree/master/current/ diff --git a/GITLAB_SHELL_VERSION b/GITLAB_SHELL_VERSION index e4604e3afd..18091983f5 100644 --- a/GITLAB_SHELL_VERSION +++ b/GITLAB_SHELL_VERSION @@ -1 +1 @@ -3.2.1 +3.4.0 diff --git a/GITLAB_WORKHORSE_VERSION b/GITLAB_WORKHORSE_VERSION index e7c7d3cc3c..b4d6d12101 100644 --- a/GITLAB_WORKHORSE_VERSION +++ b/GITLAB_WORKHORSE_VERSION @@ -1 +1 @@ -0.7.8 +0.7.11 diff --git a/Gemfile b/Gemfile index 92e666c1bb..194379dd68 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source 'https://rubygems.org' -gem 'rails', '4.2.7' +gem 'rails', '4.2.7.1' gem 'rails-deprecated_sanitizer', '~> 1.0.3' # Responders respond_to and respond_with @@ -9,6 +9,7 @@ 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' # Default values for AR models gem 'default_value_for', '~> 3.0.0' @@ -19,7 +20,7 @@ gem 'pg', '~> 0.18.2', group: :postgres # Authentication libraries gem 'devise', '~> 4.0' -gem 'doorkeeper', '~> 4.0' +gem 'doorkeeper', '~> 4.2.0' gem 'omniauth', '~> 1.3.1' gem 'omniauth-auth0', '~> 1.4.1' gem 'omniauth-azure-oauth2', '~> 0.0.6' @@ -52,7 +53,7 @@ gem 'browser', '~> 2.2' # Extracting information from a git repository # Provide access to Gitlab::Git library -gem 'gitlab_git', '~> 10.3.2' +gem 'gitlab_git', '~> 10.4.7' # LDAP Auth # GitLab fork with several improvements to original library. For full list of changes @@ -68,7 +69,7 @@ gem 'gollum-rugged_adapter', '~> 0.4.2', require: false gem 'github-linguist', '~> 4.7.0', require: 'linguist' # API -gem 'grape', '~> 0.13.0' +gem 'grape', '~> 0.15.0' gem 'grape-entity', '~> 0.4.2' gem 'rack-cors', '~> 0.4.0', require: 'rack/cors' @@ -76,7 +77,7 @@ gem 'rack-cors', '~> 0.4.0', require: 'rack/cors' gem 'kaminari', '~> 0.17.0' # HAML -gem 'hamlit', '~> 2.5' +gem 'hamlit', '~> 2.6.1' # Files attachments gem 'carrierwave', '~> 0.10.0' @@ -153,7 +154,7 @@ gem 'settingslogic', '~> 2.0.9' # Misc -gem 'version_sorter', '~> 2.0.0' +gem 'version_sorter', '~> 2.1.0' # Cache gem 'redis-rails', '~> 4.0.0' @@ -162,9 +163,6 @@ gem 'redis-rails', '~> 4.0.0' gem 'redis', '~> 3.2' gem 'connection_pool', '~> 2.0' -# Campfire integration -gem 'tinder', '~> 1.10.0' - # HipChat integration gem 'hipchat', '~> 1.5.0' @@ -203,7 +201,7 @@ gem 'licensee', '~> 8.0.0' gem 'rack-attack', '~> 4.3.1' # Ace editor -gem 'ace-rails-ap', '~> 4.0.2' +gem 'ace-rails-ap', '~> 4.1.0' # Keyboard shortcuts gem 'mousetrap-rails', '~> 1.4.6' @@ -211,7 +209,8 @@ gem 'mousetrap-rails', '~> 1.4.6' # Detect and convert string character encoding gem 'charlock_holmes', '~> 0.7.3' -# Parse duration +# Parse time & duration +gem 'chronic', '~> 0.10.2' gem 'chronic_duration', '~> 0.10.6' gem 'sass-rails', '~> 5.0.0' @@ -224,7 +223,7 @@ gem 'addressable', '~> 2.3.8' gem 'bootstrap-sass', '~> 3.3.0' gem 'font-awesome-rails', '~> 4.6.1' gem 'gemojione', '~> 3.0' -gem 'gon', '~> 6.0.1' +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' @@ -252,7 +251,7 @@ group :development do gem 'letter_opener_web', '~> 1.3.0' gem 'rerun', '~> 0.11.0' - gem 'bullet', '~> 5.0.0', require: false + gem 'bullet', '~> 5.2.0', require: false gem 'rblineprof', '~> 0.3.6', platform: :mri, require: false gem 'web-console', '~> 2.0' @@ -274,7 +273,7 @@ group :development, :test do gem 'awesome_print', '~> 1.2.0', require: false gem 'fuubar', '~> 2.0.0' - gem 'database_cleaner', '~> 1.4.0' + gem 'database_cleaner', '~> 1.5.0' gem 'factory_girl_rails', '~> 4.6.0' gem 'rspec-rails', '~> 3.5.0' gem 'rspec-retry', '~> 0.4.5' @@ -302,7 +301,7 @@ group :development, :test do gem 'rubocop', '~> 0.41.2', require: false gem 'rubocop-rspec', '~> 1.5.0', require: false gem 'scss_lint', '~> 0.47.0', require: false - gem 'simplecov', '~> 0.11.0', 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 @@ -316,6 +315,7 @@ end group :test do gem 'shoulda-matchers', '~> 2.8.0', require: false gem 'email_spec', '~> 1.6.0' + gem 'json-schema', '~> 2.6.2' gem 'webmock', '~> 1.21.0' gem 'test_after_commit', '~> 0.4.2' gem 'sham_rack', '~> 1.3.6' @@ -325,7 +325,7 @@ group :production do gem 'gitlab_meta', '7.0' end -gem 'newrelic_rpm', '~> 3.14' +gem 'newrelic_rpm', '~> 3.16' gem 'octokit', '~> 4.3.0' @@ -333,6 +333,8 @@ gem 'mail_room', '~> 0.8' gem 'email_reply_parser', '~> 0.5.8' +gem 'ruby-prof', '~> 0.15.9' + ## CI gem 'activerecord-session_store', '~> 1.0.0' gem 'nested_form', '~> 0.3.2' @@ -347,5 +349,5 @@ gem 'paranoia', '~> 2.0' gem 'health_check', '~> 2.1.0' # System information -gem 'vmstat', '~> 2.1.1' +gem 'vmstat', '~> 2.2' gem 'sys-filesystem', '~> 1.1.6' diff --git a/Gemfile.lock b/Gemfile.lock index e2b3d55ee0..0c28975060 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,35 +2,35 @@ GEM remote: https://rubygems.org/ specs: RedCloth (4.3.2) - ace-rails-ap (4.0.2) - actionmailer (4.2.7) - actionpack (= 4.2.7) - actionview (= 4.2.7) - activejob (= 4.2.7) + ace-rails-ap (4.1.0) + actionmailer (4.2.7.1) + actionpack (= 4.2.7.1) + actionview (= 4.2.7.1) + activejob (= 4.2.7.1) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 1.0, >= 1.0.5) - actionpack (4.2.7) - actionview (= 4.2.7) - activesupport (= 4.2.7) + actionpack (4.2.7.1) + actionview (= 4.2.7.1) + activesupport (= 4.2.7.1) rack (~> 1.6) rack-test (~> 0.6.2) rails-dom-testing (~> 1.0, >= 1.0.5) rails-html-sanitizer (~> 1.0, >= 1.0.2) - actionview (4.2.7) - activesupport (= 4.2.7) + actionview (4.2.7.1) + activesupport (= 4.2.7.1) builder (~> 3.1) erubis (~> 2.7.0) rails-dom-testing (~> 1.0, >= 1.0.5) rails-html-sanitizer (~> 1.0, >= 1.0.2) - activejob (4.2.7) - activesupport (= 4.2.7) + activejob (4.2.7.1) + activesupport (= 4.2.7.1) globalid (>= 0.3.0) - activemodel (4.2.7) - activesupport (= 4.2.7) + activemodel (4.2.7.1) + activesupport (= 4.2.7.1) builder (~> 3.1) - activerecord (4.2.7) - activemodel (= 4.2.7) - activesupport (= 4.2.7) + activerecord (4.2.7.1) + activemodel (= 4.2.7.1) + activesupport (= 4.2.7.1) arel (~> 6.0) activerecord-session_store (1.0.0) actionpack (>= 4.0, < 5.1) @@ -38,7 +38,7 @@ GEM multi_json (~> 1.11, >= 1.11.2) rack (>= 1.5.2, < 3) railties (>= 4.0, < 5.1) - activesupport (4.2.7) + activesupport (4.2.7.1) i18n (~> 0.7) json (~> 1.7, >= 1.7.7) minitest (~> 5.1) @@ -59,7 +59,7 @@ GEM oauth2 (~> 1.0) asciidoctor (1.5.3) ast (2.3.0) - attr_encrypted (3.0.1) + attr_encrypted (3.0.3) encryptor (~> 3.0.0) attr_required (1.0.0) autoprefixer-rails (6.2.3) @@ -85,6 +85,10 @@ GEM faraday (~> 0.9) faraday_middleware (~> 0.10) nokogiri (~> 1.6) + babel-source (5.8.35) + babel-transpiler (0.7.0) + babel-source (>= 4.0, < 6) + execjs (~> 2.0) babosa (1.0.2) base32 (0.3.2) bcrypt (3.1.11) @@ -100,9 +104,9 @@ GEM brakeman (3.3.2) browser (2.2.0) builder (3.2.2) - bullet (5.0.0) + bullet (5.2.0) activesupport (>= 3.0.0) - uniform_notifier (~> 1.9.0) + uniform_notifier (~> 1.10.0) bundler-audit (0.5.0) bundler (~> 1.2) thor (~> 0.18) @@ -124,6 +128,7 @@ GEM mime-types (>= 1.16) cause (0.1) charlock_holmes (0.7.3) + chronic (0.10.2) chronic_duration (0.10.6) numerizer (~> 0.1.1) chunky_png (1.3.5) @@ -149,11 +154,11 @@ GEM d3_rails (3.5.11) railties (>= 3.1.0) daemons (1.2.3) - database_cleaner (1.4.1) + database_cleaner (1.5.3) debug_inspector (0.0.2) debugger-ruby_core_source (1.3.8) - default_value_for (3.0.1) - activerecord (>= 3.2.0, < 5.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) @@ -171,7 +176,7 @@ GEM diff-lcs (1.2.5) diffy (3.0.7) docile (1.1.5) - doorkeeper (4.0.0) + doorkeeper (4.2.0) railties (>= 4.2) dropzonejs-rails (0.7.2) rails (> 3.1) @@ -274,7 +279,7 @@ GEM diff-lcs (~> 1.1) mime-types (>= 1.16, < 3) posix-spawn (~> 0.3) - gitlab_git (10.3.2) + gitlab_git (10.4.7) activesupport (~> 4.0) charlock_holmes (~> 0.7.3) github-linguist (~> 4.7.0) @@ -285,7 +290,7 @@ GEM omniauth (~> 1.0) pyu-ruby-sasl (~> 0.0.3.1) rubyntlm (~> 0.3) - globalid (0.3.6) + globalid (0.3.7) activesupport (>= 4.1.0) gollum-grit_adapter (1.0.1) gitlab-grit (~> 2.7, >= 2.7.1) @@ -299,12 +304,12 @@ GEM gollum-rugged_adapter (0.4.2) mime-types (>= 1.15) rugged (~> 0.24.0, >= 0.21.3) - gon (6.0.1) + gon (6.1.0) actionpack (>= 3.0) json multi_json request_store (>= 1.0) - grape (0.13.0) + grape (0.15.0) activesupport builder hashie (>= 2.1.0) @@ -317,7 +322,7 @@ GEM grape-entity (0.4.8) activesupport multi_json (>= 1.3.2) - hamlit (2.5.0) + hamlit (2.6.1) temple (~> 0.7.6) thor tilt @@ -331,11 +336,10 @@ GEM activesupport (>= 2) nokogiri (~> 1.4) htmlentities (4.3.4) - http_parser.rb (0.5.3) httparty (0.13.7) json (~> 1.8) multi_xml (>= 0.5.2) - httpclient (2.7.0.1) + httpclient (2.8.2) i18n (0.7.0) ice_nine (0.11.1) influxdb (0.2.3) @@ -353,6 +357,8 @@ GEM jquery-ui-rails (5.0.5) railties (>= 3.2.16) json (1.8.3) + json-schema (2.6.2) + addressable (~> 2.3.8) jwt (1.5.4) kaminari (0.17.0) actionpack (>= 3.0.0) @@ -400,7 +406,7 @@ GEM nested_form (0.3.2) net-ldap (0.12.1) net-ssh (3.0.1) - newrelic_rpm (3.14.1.311) + newrelic_rpm (3.16.0.318) nokogiri (1.6.8) mini_portile2 (~> 2.1.0) pkg-config (~> 1.1.7) @@ -505,7 +511,7 @@ GEM rack-cors (0.4.0) rack-mount (0.8.3) rack (>= 1.0.0) - rack-oauth2 (1.2.1) + rack-oauth2 (1.2.3) activesupport (>= 2.3) attr_required (>= 0.0.5) httpclient (>= 2.4) @@ -515,16 +521,16 @@ GEM rack rack-test (0.6.3) rack (>= 1.0) - rails (4.2.7) - actionmailer (= 4.2.7) - actionpack (= 4.2.7) - actionview (= 4.2.7) - activejob (= 4.2.7) - activemodel (= 4.2.7) - activerecord (= 4.2.7) - activesupport (= 4.2.7) + rails (4.2.7.1) + actionmailer (= 4.2.7.1) + actionpack (= 4.2.7.1) + actionview (= 4.2.7.1) + activejob (= 4.2.7.1) + activemodel (= 4.2.7.1) + activerecord (= 4.2.7.1) + activesupport (= 4.2.7.1) bundler (>= 1.3.0, < 2.0) - railties (= 4.2.7) + railties (= 4.2.7.1) sprockets-rails rails-deprecated_sanitizer (1.0.3) activesupport (>= 4.2.0.alpha) @@ -534,9 +540,9 @@ GEM rails-deprecated_sanitizer (>= 1.0.1) rails-html-sanitizer (1.0.3) loofah (~> 2.0) - railties (4.2.7) - actionpack (= 4.2.7) - activesupport (= 4.2.7) + railties (4.2.7.1) + actionpack (= 4.2.7.1) + activesupport (= 4.2.7.1) rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) rainbow (2.1.0) @@ -571,7 +577,7 @@ GEM redis-store (~> 1.1.0) redis-store (1.1.7) redis (>= 2.2) - request_store (1.3.0) + request_store (1.3.1) rerun (0.11.0) listen (~> 3.0) responders (2.1.1) @@ -616,6 +622,7 @@ GEM rubocop (>= 0.40.0) ruby-fogbugz (0.2.1) crack (~> 0.4) + ruby-prof (0.15.9) ruby-progressbar (1.8.1) ruby-saml (1.3.0) nokogiri (>= 1.5.10) @@ -667,10 +674,9 @@ GEM redis-namespace (>= 1.5.2) rufus-scheduler (>= 2.0.24) sidekiq (>= 4.0.0) - simple_oauth (0.1.9) - simplecov (0.11.2) + simplecov (0.12.0) docile (~> 1.1.0) - json (~> 1.8) + json (>= 1.8, < 3) simplecov-html (~> 0.10.0) simplecov-html (0.10.0) sinatra (1.4.7) @@ -700,6 +706,10 @@ GEM sprockets (3.6.3) concurrent-ruby (~> 1.0) rack (> 1, < 3) + sprockets-es6 (0.9.0) + babel-source (>= 5.8.11) + babel-transpiler + sprockets (>= 3.0.0) sprockets-rails (3.1.1) actionpack (>= 4.0) activesupport (>= 4.0) @@ -733,21 +743,8 @@ GEM tilt (2.0.5) timecop (0.8.1) timfel-krb5-auth (0.8.3) - tinder (1.10.1) - eventmachine (~> 1.0) - faraday (~> 0.9.0) - faraday_middleware (~> 0.9) - hashie (>= 1.0) - json (~> 1.8.0) - mime-types - multi_json (~> 1.7) - twitter-stream (~> 0.1) turbolinks (2.5.3) coffee-rails - twitter-stream (0.1.16) - eventmachine (>= 0.12.8) - http_parser.rb (~> 0.5.1) - simple_oauth (~> 0.1.4) tzinfo (1.2.2) thread_safe (~> 0.1) u2f (0.2.1) @@ -766,16 +763,16 @@ GEM unicorn-worker-killer (0.4.4) get_process_mem (~> 0) unicorn (>= 4, < 6) - uniform_notifier (1.9.0) + uniform_notifier (1.10.0) uuid (2.3.8) macaddr (~> 1.0) - version_sorter (2.0.0) + version_sorter (2.1.0) virtus (1.0.5) axiom-types (~> 0.1) coercible (~> 1.0) descendants_tracker (~> 0.0, >= 0.0.3) equalizer (~> 0.0, >= 0.0.9) - vmstat (2.1.1) + vmstat (2.2.0) warden (1.2.6) rack (>= 1.0) web-console (2.3.0) @@ -802,7 +799,7 @@ PLATFORMS DEPENDENCIES RedCloth (~> 4.3.2) - ace-rails-ap (~> 4.0.2) + ace-rails-ap (~> 4.1.0) activerecord-session_store (~> 1.0.0) acts-as-taggable-on (~> 3.4) addressable (~> 2.3.8) @@ -821,24 +818,25 @@ DEPENDENCIES bootstrap-sass (~> 3.3.0) brakeman (~> 3.3.0) browser (~> 2.2) - bullet (~> 5.0.0) + bullet (~> 5.2.0) bundler-audit (~> 0.5.0) byebug (~> 8.2.1) capybara (~> 2.6.2) capybara-screenshot (~> 1.0.0) carrierwave (~> 0.10.0) charlock_holmes (~> 0.7.3) + chronic (~> 0.10.2) chronic_duration (~> 0.10.6) coffee-rails (~> 4.1.0) connection_pool (~> 2.0) creole (~> 0.5.0) d3_rails (~> 3.5.0) - database_cleaner (~> 1.4.0) + database_cleaner (~> 1.5.0) default_value_for (~> 3.0.0) devise (~> 4.0) devise-two-factor (~> 3.0.0) diffy (~> 3.0.3) - doorkeeper (~> 4.0) + doorkeeper (~> 4.2.0) dropzonejs-rails (~> 0.7.1) email_reply_parser (~> 0.5.8) email_spec (~> 1.6.0) @@ -861,15 +859,15 @@ DEPENDENCIES github-linguist (~> 4.7.0) github-markup (~> 1.4) gitlab-flowdock-git-hook (~> 1.0.1) - gitlab_git (~> 10.3.2) + gitlab_git (~> 10.4.7) gitlab_meta (= 7.0) gitlab_omniauth-ldap (~> 1.2.1) gollum-lib (~> 4.2) gollum-rugged_adapter (~> 0.4.2) - gon (~> 6.0.1) - grape (~> 0.13.0) + gon (~> 6.1.0) + grape (~> 0.15.0) grape-entity (~> 0.4.2) - hamlit (~> 2.5) + hamlit (~> 2.6.1) health_check (~> 2.1.0) hipchat (~> 1.5.0) html-pipeline (~> 1.11.0) @@ -879,6 +877,7 @@ DEPENDENCIES jquery-rails (~> 4.1.0) jquery-turbolinks (~> 2.1.0) jquery-ui-rails (~> 5.0.0) + json-schema (~> 2.6.2) jwt kaminari (~> 0.17.0) knapsack (~> 1.11.0) @@ -893,7 +892,7 @@ DEPENDENCIES mysql2 (~> 0.3.16) nested_form (~> 0.3.2) net-ssh (~> 3.0.1) - newrelic_rpm (~> 3.14) + newrelic_rpm (~> 3.16) nokogiri (~> 1.6.7, >= 1.6.7.2) oauth2 (~> 1.2.0) octokit (~> 4.3.0) @@ -920,7 +919,7 @@ DEPENDENCIES rack-attack (~> 4.3.1) rack-cors (~> 0.4.0) rack-oauth2 (~> 1.2.1) - rails (= 4.2.7) + rails (= 4.2.7.1) rails-deprecated_sanitizer (~> 1.0.3) rainbow (~> 2.1.0) rblineprof (~> 0.3.6) @@ -940,6 +939,7 @@ DEPENDENCIES rubocop (~> 0.41.2) rubocop-rspec (~> 1.5.0) ruby-fogbugz (~> 0.2.1) + ruby-prof (~> 0.15.9) sanitize (~> 2.0) sass-rails (~> 5.0.0) scss_lint (~> 0.47.0) @@ -952,7 +952,7 @@ DEPENDENCIES shoulda-matchers (~> 2.8.0) sidekiq (~> 4.0) sidekiq-cron (~> 0.4.0) - simplecov (~> 0.11.0) + simplecov (= 0.12.0) sinatra (~> 1.4.4) six (~> 0.2.0) slack-notifier (~> 1.2.0) @@ -963,6 +963,7 @@ DEPENDENCIES spring-commands-spinach (~> 1.1.0) spring-commands-teaspoon (~> 0.0.2) sprockets (~> 3.6.0) + sprockets-es6 state_machines-activerecord (~> 0.4.0) sys-filesystem (~> 1.1.6) task_list (~> 1.0.2) @@ -970,7 +971,6 @@ DEPENDENCIES teaspoon-jasmine (~> 2.2.0) test_after_commit (~> 0.4.2) thin (~> 1.7.0) - tinder (~> 1.10.0) turbolinks (~> 2.5.0) u2f (~> 0.2.1) uglifier (~> 2.7.2) @@ -978,9 +978,9 @@ DEPENDENCIES unf (~> 0.1.4) unicorn (~> 4.9.0) unicorn-worker-killer (~> 0.4.2) - version_sorter (~> 2.0.0) + version_sorter (~> 2.1.0) virtus (~> 1.0.1) - vmstat (~> 2.1.1) + vmstat (~> 2.2) web-console (~> 2.0) webmock (~> 1.21.0) wikicloth (= 0.8.1) diff --git a/PROCESS.md b/PROCESS.md index fe3a963110..8e1a3f7360 100644 --- a/PROCESS.md +++ b/PROCESS.md @@ -8,6 +8,8 @@ treatment, etc.). And so that maintainers know what to expect from contributors (use the latest version, ensure that the issue is addressed, friendly treatment, etc.). +- [GitLab Inc engineers should refer to the engineering workflow document](https://about.gitlab.com/handbook/engineering/workflow/) + ## Common actions ### Issue team diff --git a/VERSION b/VERSION index c92c95d0fa..dba04c1e17 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.10.5 +8.11.3 diff --git a/app/assets/images/bg-header.png b/app/assets/images/bg-header.png deleted file mode 100644 index 639271c6fafc58a2007f22478ba2d52e57c2a2ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrJ!2~4T^fnv@Qi`4~jv*C{$shUqk}JRbVB{7z o*FXLK{{D!%|GzkwMMmCa*wD*!=-tVWNzopr0OhwE{Qv*} diff --git a/app/assets/images/bg_fallback.png b/app/assets/images/bg_fallback.png deleted file mode 100644 index 5c55bc79dec6eb904d293440e804fcc19f7632f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^{6L(-!2~3)wf}7aQhA;(jv*C{Z>PF4HaG|{Z2ZT$ z@NjKGe!;uuKWTSwmBvaxO^=x7+FUo!eeS!sx$geuPG4&8i&iw<=k#~}{@?WS1t55< z;@A7vw#zyD_Wpl*3$DLj_55V+66<~Hb$`q*%#AL6RKDitl8x*Ofxuq*$90~%pk)t$ PHZyp-`njxgN@xNAwV_Ds diff --git a/app/assets/images/chosen-sprite.png b/app/assets/images/chosen-sprite.png deleted file mode 100644 index 3d936b07d443fb420a71cac72750537bb54ad2cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 367 zcmV-#0g(QQP)rVvpT6H`&B>cm7v)IPyPO`$3xP?(8` z2rQS~6|Q0%uFB`U_7R&iJ)E%D(}1UP&R?HRY)Y#lb|xa4amY+W6Lz8^ zq9)>yfqLwn=;4efLOlash22sUaF7ymag`u^OE_w&gp{IMz>%F4Lb?nVSCx2Sw^DNJ zT2!tapuiExlvn}E=nz=-=cq44^`h_%HhGcw{W zO04D4+)!Ng#E8A_9MaX81ct@v!szi1hH$l)DOpy%x&O4b;MbP{#RnNLzbvNZ*fRhC N002ovPDHLkV1m;9s3ZUY diff --git a/app/assets/images/diff_note_add.png b/app/assets/images/diff_note_add.png deleted file mode 100644 index 0084422e3303593e2f067c7de013413f393b0f88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 418 zcmV;T0bTxyP)8dnWDw0JZn0}i>C%>#5=5MIa+mk{1LDUhX3F3oC}iQt)=y*eo~)sl_me*F5#wk~<_3w-OE`S5S~Q2><{9 M07*qoM6N<$g2t@G3;+NC diff --git a/app/assets/images/icon-search.png b/app/assets/images/icon-search.png deleted file mode 100644 index 3c1c146541d456a042db5768154a307b9b535e9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222 zcmV<403rX0P)5vSVcK(ZtkIYMS1>=xAsgSm>tW*g_}2G>l!Q;?}eEEEyQ3;>?Fu zmfX8e#kRSjW@62WqMw>WU&d}cD2j<*YPv2wxpL}VF|(gl4onp@yIG~@)19sSXU}Hx Y4Q!Q1#b(kbvH$=807*qoM6N<$f)-g`=l}o! diff --git a/app/assets/images/icon_sprite.png b/app/assets/images/icon_sprite.png deleted file mode 100644 index 2e7a5023398e7aa1d2794755af4f90d59b431919..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2636 zcmY*bX*e5L7mjAo+SO=@Ce*&~N-Km~YO5HvYi+d~6Gg3IqOG-vUF;pi(pamuT5HnS z877p`qA0b71c}-vX6F0x{W#}7&wbB5=RNN^KW?Ih`8{?P5DNeRU^h0>x1^s!bVFTc zqI+LYKM(-G!egwjYZdm_cHR{W>owkf=R@-hPq6PC=80SBg!fgVxj0Wzi{6~w^OUNh z#)?!?1A`ybxt=Tp=%!40gF~MPB(OZSZD3TbYYWy%HrEeezAh^)1ih?v8vPN89`1my zFQkcC0fYlWet<$2PBerg{iat*J7?uradu*|S@0GbG2H>8{gXcXTM(kRV3 zlrHktS2l$|8|E&?wokQ%Qbk3&tIK-Bb( zdSk|x7F~{Coe!*yAM|Z~5n5DyvJlHN9#_TQFfXq-aiI*;CC`Mh~ zOUr*8dT;JW0nZ&|djz8=u&4&gglx#tQ-5Bx>ksh zB;$zToM+aywx&Kl)j#s`4vrS6f1R#%%-HW^ee-!7p4xqo(@W&oHQYE`Y;zCnrcfM6jl0?Im;@@eADkQrXcD)>|enuTF4}@7+E-oO^SC&0Xn>Weq$c zdq_!2Dl*NK=96gV{G$b|X4?R{(Cu^4!?<9M+Y;Mn7!m(SkKqDc32$?TY1%_FDbmnI zwa13HVN#|($Nh_Wp%F>b>QXcF*ZFZqe;{k3*DVF?84>WvjoH|uE&d&m9 zBCJ`)FCytvW3k>UFfUpec&RXy9+97$m1Sga&#$DH=WB%di^1vs9WE|w(H=g#Ds0@K z`eGz?r;%WLPch%QG^r?ZTWv7JuN!`v>TM3zH*W#`SP_CMk+{K@AfL?{m(xa+D!0(9 z*_+}{UhP@D)=5q(eDHx&YND{@q%Ml6bWEp4Gd@X`|D9xWrd(k;LMHt>k=Aj3x|?Cb zH`-qvZ&F-RLU|*dtbDYdF%`PgzE-Hn;g3F{QMh57nBqB)uyBuFJSaTv4zAD>JQ?Jw z3Nz8N`3O6(ayp}oYu4kKI4!$ND}+GJF7Ze*vwJLR&Tcp2; zIofSBU+www(vthmr*`FE&yeQ_2rxZ948)Km2 zHD<=f$(frja&Jhonesj`FwlJ{ODfL1L|g9P5D(O~;amj;i&!aXzmIjn0e?UQMG^56Zx`0_!4!Kr9; zy}6N5TCHR2(Bbx+k6UL_b0gti@{R0aYN*E(Q z8~|%YynQbK6qS(3{l?T0vaKAVFq5a^#YU&T&fvNa*cgASAEgWmKzv>L@bVd0Gh~D- z?qZaE-x%)PfQIc_Sz2aneQJNu^7E|l%n@bH;4{d*M#*g@jTQKks8cBpFP2sD99iUf zw*#Ys8VMJABzH5)5#w%}^VUxQs}P#hLQy=Z#19bY>XIIDO4!4fYvkr1kE$2LlkAp7 z3_02rzncz}SgIdLp@YJGdZXrB{0p|`y9EB*4JI2(US3{*d*^p)Jb^&o*RR=IU%gwm z%8!aS4#FxPROS>F7dvHUWC&MRS3iA$o|(eg!qZuSeydYdF-NT$-!KO+_1x3(+L6O`~$XbF^@0;XiW9aJx*3;oG!DRVN0$q)w*(=oljw}ScP(L7xQN*7&(waA5V=W%K` znWL4W6>rFauFI5{SiZs|z9`~(dm(bs)#V^@MuZfgxsW-+os^lZ&EqQwlUs{~Lt#q3 z7Q;LjNKo<;BoDnt%fn#4BGGmQ;eqykW!Kb3p<3(PbQo9w(<1ofjEX7^A3+*#QC9j~ zR&g$?>&A%q<0A;h`1Ztnd(b`3SL2~M6s^GJ#C3)$T{&NeaHas*LM9$kEZW_?(d+~1 z4eV|u*D+i)>^nWI`Du*$4ggqik>_<5(n5Vjl49axuuRQRG6%gec@$tTkHv0`3JGJ~ zObn$(bgNVFprv)!)hOtKBNey;MYU3a)bP1zu4(8ic%?Y_)d$4!ybqC!B_At#@U2Ci z(G{eo?{n1k<h1v_ zTC#p!U0+S%M{!!N2a87zZ!ks{3#f9tGs@Be^;w(wdQ$e%{=q&9edAMhl&0wJsBAplb)`Y zDe1mSMn*0Lpdme}T0fm9BfIiUPfOE0kbFCr+Q+7^=2hz;X#Hzy+SV#laAsy^P}ksK zkOH&ck_U!lap49Z8S}~-Xdj;av9zm{nAo2}^o*zfD3f$}Y;1C@TRQS1FO!n~XCn3X zX31OTcJ0W@6dzCy;e>VakSOK@YBX~Ksr|CcwkuhlCD)hm=!$6zzqqa?F`+wrOGsWZ zd7m5$>i7r_+#3JrKp+rI{F-bDfSF&_CJ5FoTU0l9`%`UgJY6y&&0wFY!WkQa+vY=mX=K=b50^Jc_F-@6Xo*SH zr$=A&8%%N(_rDYt7A87&eJ#*wCWg*C3n1nLmzkDX!cC+cBR0$Z%xycH{de56F&IoD zw3b&j@OAG>U)o$pkGzurf_s2>O_}xK=Ed1@KseS9>d>~m`>ouPU|s84gjB`(|Cn!8 z!6wVlGV^Y9^Tyy>$p6I5xP8g9^F2G-`8JfRqQJAvYhrBde~_%JuOG)+zvyT8`RV4y zRIQu%`S10&?Hcb^Gt0lpIg%fMn#pIWokF6nrBhb-6&qzgTp!BSqG7si&Cjl|AiU&h69x=<=#ej*MX!g1|8h+7yu82&qbj^fTeCugiH`fzJv0NQ?z zM0TUtGHvQTQaoqs`@GvP#5`C8)Kt?#6P%>{Fat6kR1V5QLizaaSPnVGR~+1DTUG7j z&XtM8#|lxwLvPguR04KqIp#h;Q<-iJKJHBs))6D2>V70dsr}Doa}4&j_k4@tk>D<` z;>+b_Re^^a2As(lhr!QkWF z^sX2d4&%C7!S1=8nTCbdpo2A!(Tdo zyIdJdM0lERRUo9>T4Cn~Fdo*`kHnNrIXC`-Ug@HN^X=L%#)msI3fTlIhmAr~p2V<5 zr^i3uc47AR_89r)-XJ!tiszW`lo(~NJ!lD(>5)nh|KJ$AQBFTkRTbqeb6u@h4QI9H zcz};;i}5J4dc2pjdef?8{zI?KNy67hHh5w(8SJ+dp@#io$GJBz+X5^G-xI$@P}1`E3dGbwVAg$Qaitfuf%YYB8NaqBpjp7NWc8~}!1^Lc zVt?90Lu(tdTd_~U{nCdVasle0G@TQWerWjPY(5mS<{vkPpGxFEwWdf-c*_bJ$I0p< za>@c6`(mpC|EoZcNcEMPee20uWG_Y-K}cG~59rzr+@|_^QzLrNbz%7Z-RSDUQoCmV z1P(ZI+J;r}8~a`Q?*#MN2k7(sY4h9*ZHEu75YC+juEdG_PZi(o6WSLB4@nV=tC&FY z+mUhWnsuq?8c$=YZ_IdnBjlVOZUxk5x4FYS?zM&dro;Sve)G+ilF9Su&v}RV^5Wy- z`a9`DPnDvN%s$ui9FmZ&G&_l6p)o^LFsj z&4Zvgn07M1k?;C%)~?(!LqI7XQgYJk*G86UNpr^2o#|VzNQwUL*;H)4m=1x9kw0KK zt9y@tzoM3ZUa{XJ!FG@OP42TNBZYc5{2%mCSv(z&5qP1<4N@z1_$#!R-z3;7;LSn{ zU8<3z96*(sm!7Ap_-fiG<6g|hu~bpm2X*c}PUnW^)90g4lDO{vJmVS2DYGcg8~<}x zf{=gHB;};<*R8SMpf1cS?Ler0^Qa6t{M3c9Ff&czZgE+fiE8xahStO(w1avN$`c(Ju)Mdf+idOWW}tAe%ut9-n+sy?)VD|Hk0 z<-bpslaD``7WI#?sGSh0w6f?0*GvNg6Gf+oTm%rT%`36uc^j9fTUCBsCr(ML8tCzp z2*^K1d5(V9f|>FenGGF2?tje{42aO_q!kntq+AI8(ON$F&?$WdooW&7`93++r60}H zZMCM@G{~&VI3KiycVaU4=s73u zvL3nGpD1ZjHn#IsM}Y5O!~p8~(Z2Q687Ck5?-ZfTBm2`?tzQG-(J|-`kh*LrW+aBU zFpP8}9$b_y8K~4a_r%S>Ek@|3RW=ZB@!;{_)SK4^#Vr7DLrynK#MLfO5DLFn(oBp; zNS!fe4AXp~ftFXH@!A;=U^%pEK3}(`Iw_VpHYW*^Dn0=2Ip_ke@U+oRvV}kxU%RNbnfY`|pW>5-epNqeEhI*~K`;)qg4bNMQWp23-e)nfC z8%SQVKwv+uj{eL7B15RRmFQ)!UpMlRH05s;jZJo5NgI8M>+Z@86#S&l;MXGf`qVL= zzZpoLtx5TsPRlQ6Qr%p7>9rjgs90C}j%5SzJc5U);KSI>;pt5|s%bK8@Av9K{K(}1 zXptrVDLB7RJIo4RAz^YO_(s=qA8a%#Ok-whH=g~>ZFvx*4sv52eX9{%Yx=@Yi-CGsVbF% zGYP~pU9bCVeXuWlG@5EcCTO4t|B%R&iOPS1H-P-Xy>8urGb4-{Kr@LV(~$#kLkxaN zMpYQW{W{azsA*Vn$TE9vxK<@!T*0O3B3%3lt|!M`t|XirH$uUs2xt?Z_P6fN zrOe1^M{0%pU?;V$VAuO~6Xjxu8;5a;(W+!!%sRKecGRR8CgLf%a= zOMm&)_~tC#rT6x!fzr0@#{sG3XVVe)KfI$uA{XUK!M$|S*9|UGuv3J-vO@lzvQAcuY|1sjAvm?(Rs^ z**u7sbfPUo(CdDiC~VR1E8Xb}`qHHN+RQP(qlHVfvtTcpMPk0uw_xwRVFl*oAI8Pe zsXZS@(zMWj4=cr;bK6o=xJK0Ui0DhwgpbQ#%%hN%FxvrVb{EBcZFI4;f(_tqdt)0{ zQP1ZihC^#M33q0^gNL{-61jF@4a{0`C3~Z5{P|vjQsr_go4W0+Ol$YE%G|=Y?%>CS zu#}un2qf~f){AvT(h#17;Y{1otCZPiG_TSkg?0ei+(LC zz2l=&AMu%Rv6P~_p@XIS5MUvG1V4DVypWz|mN)QgrBOuOrTL+FWlF`sf#?A)5ak=* zDAbJFddi`vPEz=!7dJ{{=2LRUE|AEPzmZ?&=d?w(#GGI569h;#k4$WG>Y}*>l1*d* zOB&K^WEHIw(tm2crs$45CEgvi)B@e^bF86<$}VV|0PYu*@JPGTABGup&A`I z)3Kc<1UJ!KV|^7lNrjy;Exp@Hrl!d(8Dof6(N!NyJ*6>tDocIp%7u|gki*@+#>Q_^ zIU*zy5b5&ox-~U5KM|-A^&zvYjdf*)Zb!upawMYwBJW^HwwVfRP%-99>(cS65QUfZIthb$8R zOg1oZgp-45!d1QHh`k3d~Eg3l7f|VOo;5cbg#{>`~+OxZ2Q$dQYl<%@b@{uzabAx7g@bUfw^)CO>V) z%%RE`2?WE;I*CdhmI}IoWR%p<$cq#1W9KJU)mp&SwiDK4M@b9{2wGJ;Aq#Lez@W_4 z`qO=ZUfq!MNER7ZODB+(3kuRN?5oU-Yu;l|!%Ai?0x+l*&?-aV6&r1gLr2%eBv5D3 zNR@>nC8QvP&aw-8^}!-Eyo&CnB_IGRRQPwX`*TaIQiQ|mZc zDwu?+E_woYWziibk^UaypygfB47iP$(E3>fd5e2{;>>oLV8_w-Ccg!Ah{?tXj97i37HzAh4LXVU=a$U&jv>e#hGdW zi+bq|;Bo(#jmihI!6fn_ghWt-+ym!Fk9g#4#A-Mmh{bB#Wq_q3Lq>!ZhPH`K&reGDgTeA_$0n&cJ-uS5G5=(CtB4QSHce z|N4?`C^JELBcb4qxGE!oOOcU=1J-1RTs&uD8I`8ao4?XLV*$Z4Va2nY0rog`(Lcpp zGJwQt+VNz?cxI$cNYZD(uiu1~$~=)LvZ`8vG5OsUmCma-U{e%HVf#$q z4eZV4nOSNP>kfguPn3S{-R8$T+FngLG8Sq9MmetsE4D>(et_W%R$g((IV`djM>ESj zp?lH@bosK9f|az7is{>6VDZKearpeIxQ8yi+LE}oxPu9bg*sAyrb#Mrj2-Y%SzA`{ zU}4bd5PrY`vmPR|rGi?JT(cu%I0gIXqyev*S=*W8WFh?-dyJOv_*Cx>P!zPN0R>i< z)I)a?w}d|rV9BMv3Wiz_`$+WX?kTh+>?%s;UOxiejziLp5q-Ijx??tC=j7BbgKj2G z!MRG**fSZS1rkYvjh?cMak4X7ipq`+B6y^7@wx?Y_2`5>50e~)rFQSP-J7utLc`k6 zvR(weQ^S2?%)J)_{k2N27v`s^79*~`BsLfw^93<+&5_Z*dm$d=vfYMK!(Q_Ns6{Qq zpLTwIFUPMpwDn#ZjxObsrVi^Q6_)AZgbK*XfH&&Em!U1Zz;X{W$F8y&;Pg@7BZiJg zU~a6?;TKomXD7=~c*;OlPiI$ZYtAi4v+X2TMWvhZQ^nP_*DCaPP*)n&J`FbnJoGI% zZx2=GCdq^&c*Xm6vRyJOMIluol?1tjroM*$YxdXdf6f0FcnSEA*Cg-%^#9)j1n>M0 z>Hp^Re|GV|3n+?->eA`bnNpZWqQglGEDHYr0v%+$SjrL;^(BeFDy|1J)~dYY82MlF C&AxyD diff --git a/app/assets/images/koding-logo.svg b/app/assets/images/koding-logo.svg new file mode 100644 index 0000000000..ad89d684d9 --- /dev/null +++ b/app/assets/images/koding-logo.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/assets/images/move.png b/app/assets/images/move.png deleted file mode 100644 index 6a0567f8f2534837e7280dd41e4bf4b98725a3bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UJ)SO(Ar*{Qr*7nRR^)NH*)UP! zt6S2NBdz`#n-(SPRlC1_QH6RVW54`ThAGFi1uh6P+6rC}-dZZOQD}AC_S1~(_VZsT zZP+*WPp-qu4(aPRXRW%&UC{E?X{y$yd;A8A7-#1u_W!KpdL3~8_`?@VdKXUa7O~oS x>YDf2<@V`f40fR()_y*C$X!}~UB#aLjFpDJWF2;E4_MN-;?mu|=h>_{(v*#~f zzIy%UEfed9kDoq&`TFhq4_4;ifByda&%n$jWAUKjU^9oXR?LYF3lB4MD0$8C*tqCu zw}i2h!hwy8kM}D$cgc88YG|CS5xgqqV%tMx{|eo?#5xyEP!9bgEu zgWMpm*z6M5kvh~XQ3Rw|R|JZHs-OvI54x}wzpCW3OT9)~;@ZGOn(Ba_U^>_c4uex- z*`F@?I#O@K{c7Tz$N|cMj$kf04LraXKmv*HA^AC=11KwRp`B7(3uFToK_9RkxBxn8 z9YlK`yVJHi4z%H#6PI4nBuo?7_8<+r%q~ZpkBl4o`$@mn|^Op z;ru0AKiYiDp2eB-@>z?qE{hw3+F%g~+i&Vk2Ol}nP2ZPv)%!)7aNU7Nj;NrTm&Nme zZs07S1;_5tal0`5sHg;*4H!>lTKA!fT}KexMt#R5%OAH5rG>}ul8B!MU09dJ3xHnW zGN2jzuFx@vC#6!y!BlJL9I7{FDY324en7JPQHamnf0ac1l1#4rDW4ogS7@)9FCDZB zOrXQmRm8###;+u{Z6~itmfvgYLo*LtRXn-kn=d+fpVr^Bqdlg+39#R7;Z7E2`@4Dc zDZhD&(GtGxo)gVEa+`KM_DVOi58tBg_gxgDMKR9LxqHIH`g>*I{&ps?1Q8wdDjFW*xjv6Ly@V`KKPy ziYwN%`i4ERWuN1m=Q{PZMSWFt1GELJ;Iw_0Y1rC>)PLD7w(N79MH%O`Rz*f9#d6cOsQNR8QWbm<+3ypeyJpwxz_2 zNu8eB9;$|>3{xYJQ)Y4jvFsa3UNa-Rf9CoBi{r`yG=MhH1BSpzte(U*q%I>@f~e7q z9j6B@J#pv6s`F1=u-klP%Ra|BpKy~52iW>wvt|cAl{~Z5xn*qXodpi~G1=bQG69C^mE7mDia$TA=R* z_lu6=G6H2Xd$gFo_wqONmlhqxWemzq+;-|sW{wsUww`>2{<5s2`s72F?Xb_x(SrNb zpIp9q>!DNDXXa?pa?r$8>fc;Oi?*&_{Xt82gk&vd?kOi*TNdEM8ogQ(m>Uh;#wn#kP`oDXA0TjIHO!@>In@ z8Bk7aF^L;zbUo)QFk_qI4H=%Le3NA&A1pgl_%;P@lenLx}3q&)z4*}Q$iB}^Pp6) diff --git a/app/assets/images/trans_bg.gif b/app/assets/images/trans_bg.gif deleted file mode 100644 index 1a1c9c15ec71a58db869578399068cf313c51599..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49 zcmZ?wbh9u| - # Defaults - { - @togglePriorityButton = $('.js-toggle-priority') - @prioritizedLabels = $('.js-prioritized-labels') - @otherLabels = $('.js-other-labels') - } = opts - - @prioritizedLabels.sortable( - items: 'li' - placeholder: 'list-placeholder' - axis: 'y' - update: @onPrioritySortUpdate.bind(@) - ) - - @bindEvents() - - bindEvents: -> - @togglePriorityButton.on 'click', @, @onTogglePriorityClick - - onTogglePriorityClick: (e) -> - e.preventDefault() - _this = e.data - $btn = $(e.currentTarget) - $label = $("##{$btn.data('domId')}") - action = if $btn.parents('.js-prioritized-labels').length then 'remove' else 'add' - - # Make sure tooltip will hide - $tooltip = $ "##{$btn.find('.has-tooltip:visible').attr('aria-describedby')}" - $tooltip.tooltip 'destroy' - - _this.toggleLabelPriority($label, action) - - toggleLabelPriority: ($label, action, persistState = true) -> - _this = @ - url = $label.find('.js-toggle-priority').data 'url' - - $target = @prioritizedLabels - $from = @otherLabels - - # Optimistic update - if action is 'remove' - $target = @otherLabels - $from = @prioritizedLabels - - if $from.find('li').length is 1 - $from.find('.empty-message').removeClass('hidden') - - if not $target.find('li').length - $target.find('.empty-message').addClass('hidden') - - $label.detach().appendTo($target) - - # Return if we are not persisting state - return unless persistState - - if action is 'remove' - xhr = $.ajax url: url, type: 'DELETE' - - # Restore empty message - $from.find('.empty-message').removeClass('hidden') unless $from.find('li').length - else - xhr = @savePrioritySort($label, action) - - xhr.fail @rollbackLabelPosition.bind(@, $label, action) - - onPrioritySortUpdate: -> - xhr = @savePrioritySort() - - xhr.fail -> - new Flash(@errorMessage, 'alert') - - savePrioritySort: () -> - $.post - url: @prioritizedLabels.data('url') - data: - label_ids: @getSortedLabelsIds() - - rollbackLabelPosition: ($label, originalAction)-> - action = if originalAction is 'remove' then 'add' else 'remove' - @toggleLabelPriority($label, action, false) - - new Flash(@errorMessage, 'alert') - - getSortedLabelsIds: -> - sortedIds = [] - @prioritizedLabels.find('li').each -> - sortedIds.push $(@).data 'id' - sortedIds diff --git a/app/assets/javascripts/activities.js b/app/assets/javascripts/activities.js new file mode 100644 index 0000000000..1ab3c2197d --- /dev/null +++ b/app/assets/javascripts/activities.js @@ -0,0 +1,40 @@ +(function() { + this.Activities = (function() { + function Activities() { + Pager.init(20, true, false, this.updateTooltips); + $(".event-filter-link").on("click", (function(_this) { + return function(event) { + event.preventDefault(); + _this.toggleFilter($(event.currentTarget)); + return _this.reloadActivities(); + }; + })(this)); + } + + Activities.prototype.updateTooltips = function() { + return gl.utils.localTimeAgo($('.js-timeago', '#activity')); + }; + + Activities.prototype.reloadActivities = function() { + $(".content_list").html(''); + return Pager.init(20, true); + }; + + Activities.prototype.toggleFilter = function(sender) { + var event_filters, filter; + $('.event-filter .active').removeClass("active"); + event_filters = $.cookie("event_filter"); + filter = sender.attr("id").split("_")[0]; + $.cookie("event_filter", (event_filters !== filter ? filter : ""), { + path: '/' + }); + if (event_filters !== filter) { + return sender.closest('li').toggleClass("active"); + } + }; + + return Activities; + + })(); + +}).call(this); diff --git a/app/assets/javascripts/activities.js.coffee b/app/assets/javascripts/activities.js.coffee deleted file mode 100644 index ed5a5d0260..0000000000 --- a/app/assets/javascripts/activities.js.coffee +++ /dev/null @@ -1,24 +0,0 @@ -class @Activities - constructor: -> - Pager.init 20, true, false, @updateTooltips - $(".event-filter-link").on "click", (event) => - event.preventDefault() - @toggleFilter($(event.currentTarget)) - @reloadActivities() - - updateTooltips: -> - gl.utils.localTimeAgo($('.js-timeago', '#activity')) - - reloadActivities: -> - $(".content_list").html '' - Pager.init 20, true - - - toggleFilter: (sender) -> - $('.event-filter .active').removeClass "active" - event_filters = $.cookie("event_filter") - filter = sender.attr("id").split("_")[0] - $.cookie "event_filter", (if event_filters isnt filter then filter else ""), { path: '/' } - - if event_filters isnt filter - sender.closest('li').toggleClass "active" diff --git a/app/assets/javascripts/admin.js b/app/assets/javascripts/admin.js new file mode 100644 index 0000000000..f8460beb5d --- /dev/null +++ b/app/assets/javascripts/admin.js @@ -0,0 +1,64 @@ +(function() { + this.Admin = (function() { + function Admin() { + var modal, showBlacklistType; + $('input#user_force_random_password').on('change', function(elem) { + var elems; + elems = $('#user_password, #user_password_confirmation'); + if ($(this).attr('checked')) { + return elems.val('').attr('disabled', true); + } else { + return elems.removeAttr('disabled'); + } + }); + $('body').on('click', '.js-toggle-colors-link', function(e) { + e.preventDefault(); + return $('.js-toggle-colors-container').toggle(); + }); + $('.log-tabs a').click(function(e) { + e.preventDefault(); + return $(this).tab('show'); + }); + $('.log-bottom').click(function(e) { + var visible_log; + e.preventDefault(); + visible_log = $(".file-content:visible"); + return visible_log.animate({ + scrollTop: visible_log.find('ol').height() + }, "fast"); + }); + modal = $('.change-owner-holder'); + $('.change-owner-link').bind("click", function(e) { + e.preventDefault(); + $(this).hide(); + return modal.show(); + }); + $('.change-owner-cancel-link').bind("click", function(e) { + e.preventDefault(); + modal.hide(); + return $('.change-owner-link').show(); + }); + $('li.project_member').bind('ajax:success', function() { + return Turbolinks.visit(location.href); + }); + $('li.group_member').bind('ajax:success', function() { + return Turbolinks.visit(location.href); + }); + showBlacklistType = function() { + if ($("input[name='blacklist_type']:checked").val() === 'file') { + $('.blacklist-file').show(); + return $('.blacklist-raw').hide(); + } else { + $('.blacklist-file').hide(); + return $('.blacklist-raw').show(); + } + }; + $("input[name='blacklist_type']").click(showBlacklistType); + showBlacklistType(); + } + + return Admin; + + })(); + +}).call(this); diff --git a/app/assets/javascripts/admin.js.coffee b/app/assets/javascripts/admin.js.coffee deleted file mode 100644 index 90c09619f8..0000000000 --- a/app/assets/javascripts/admin.js.coffee +++ /dev/null @@ -1,51 +0,0 @@ -class @Admin - constructor: -> - $('input#user_force_random_password').on 'change', (elem) -> - elems = $('#user_password, #user_password_confirmation') - - if $(@).attr 'checked' - elems.val('').attr 'disabled', true - else - elems.removeAttr 'disabled' - - $('body').on 'click', '.js-toggle-colors-link', (e) -> - e.preventDefault() - $('.js-toggle-colors-container').toggle() - - $('.log-tabs a').click (e) -> - e.preventDefault() - $(this).tab('show') - - $('.log-bottom').click (e) -> - e.preventDefault() - visible_log = $(".file-content:visible") - visible_log.animate({ scrollTop: visible_log.find('ol').height() }, "fast") - - modal = $('.change-owner-holder') - - $('.change-owner-link').bind "click", (e) -> - e.preventDefault() - $(this).hide() - modal.show() - - $('.change-owner-cancel-link').bind "click", (e) -> - e.preventDefault() - modal.hide() - $('.change-owner-link').show() - - $('li.project_member').bind 'ajax:success', -> - Turbolinks.visit(location.href) - - $('li.group_member').bind 'ajax:success', -> - Turbolinks.visit(location.href) - - showBlacklistType = -> - if $("input[name='blacklist_type']:checked").val() == 'file' - $('.blacklist-file').show() - $('.blacklist-raw').hide() - else - $('.blacklist-file').hide() - $('.blacklist-raw').show() - - $("input[name='blacklist_type']").click showBlacklistType - showBlacklistType() diff --git a/app/assets/javascripts/api.js b/app/assets/javascripts/api.js new file mode 100644 index 0000000000..84b292e59c --- /dev/null +++ b/app/assets/javascripts/api.js @@ -0,0 +1,145 @@ +(function() { + this.Api = { + groupsPath: "/api/:version/groups.json", + groupPath: "/api/:version/groups/:id.json", + namespacesPath: "/api/:version/namespaces.json", + groupProjectsPath: "/api/:version/groups/:id/projects.json", + projectsPath: "/api/:version/projects.json?simple=true", + labelsPath: "/api/:version/projects/:id/labels", + licensePath: "/api/:version/licenses/:key", + gitignorePath: "/api/:version/gitignores/:key", + gitlabCiYmlPath: "/api/:version/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); + return $.ajax({ + url: url, + data: { + private_token: gon.api_token + }, + dataType: "json" + }).done(function(group) { + return callback(group); + }); + }, + groups: function(query, skip_ldap, callback) { + var url = Api.buildUrl(Api.groupsPath); + return $.ajax({ + url: url, + data: { + private_token: gon.api_token, + search: query, + per_page: 20 + }, + dataType: "json" + }).done(function(groups) { + return callback(groups); + }); + }, + namespaces: function(query, callback) { + var url = Api.buildUrl(Api.namespacesPath); + return $.ajax({ + url: url, + data: { + private_token: gon.api_token, + search: query, + per_page: 20 + }, + dataType: "json" + }).done(function(namespaces) { + return callback(namespaces); + }); + }, + projects: function(query, order, callback) { + var url = Api.buildUrl(Api.projectsPath); + return $.ajax({ + url: url, + data: { + private_token: gon.api_token, + search: query, + order_by: order, + per_page: 20 + }, + dataType: "json" + }).done(function(projects) { + return callback(projects); + }); + }, + newLabel: function(project_id, data, callback) { + var url = Api.buildUrl(Api.labelsPath) + .replace(':id', project_id); + data.private_token = gon.api_token; + return $.ajax({ + url: url, + type: "POST", + data: data, + dataType: "json" + }).done(function(label) { + return callback(label); + }).error(function(message) { + return callback(message.responseJSON); + }); + }, + groupProjects: function(group_id, query, callback) { + var url = Api.buildUrl(Api.groupProjectsPath) + .replace(':id', group_id); + return $.ajax({ + url: url, + data: { + private_token: gon.api_token, + search: query, + per_page: 20 + }, + dataType: "json" + }).done(function(projects) { + return callback(projects); + }); + }, + licenseText: function(key, data, callback) { + var url = Api.buildUrl(Api.licensePath) + .replace(':key', key); + return $.ajax({ + url: url, + data: data + }).done(function(license) { + return callback(license); + }); + }, + gitignoreText: function(key, callback) { + var url = Api.buildUrl(Api.gitignorePath) + .replace(':key', key); + return $.get(url, function(gitignore) { + return callback(gitignore); + }); + }, + gitlabCiYml: function(key, callback) { + var url = Api.buildUrl(Api.gitlabCiYmlPath) + .replace(':key', key); + return $.get(url, function(file) { + return callback(file); + }); + }, + issueTemplate: function(namespacePath, projectPath, key, type, callback) { + var url = Api.buildUrl(Api.issuableTemplatePath) + .replace(':key', key) + .replace(':type', type) + .replace(':project_path', projectPath) + .replace(':namespace_path', namespacePath); + $.ajax({ + url: url, + dataType: 'json' + }).done(function(file) { + callback(null, file); + }).error(callback); + }, + buildUrl: function(url) { + if (gon.relative_url_root != null) { + url = gon.relative_url_root + url; + } + return url.replace(':version', gon.api_version); + } + }; + +}).call(this); diff --git a/app/assets/javascripts/api.js.coffee b/app/assets/javascripts/api.js.coffee deleted file mode 100644 index 89b0ac697e..0000000000 --- a/app/assets/javascripts/api.js.coffee +++ /dev/null @@ -1,122 +0,0 @@ -@Api = - groupsPath: "/api/:version/groups.json" - groupPath: "/api/:version/groups/:id.json" - namespacesPath: "/api/:version/namespaces.json" - groupProjectsPath: "/api/:version/groups/:id/projects.json" - projectsPath: "/api/:version/projects.json?simple=true" - labelsPath: "/api/:version/projects/:id/labels" - licensePath: "/api/:version/licenses/:key" - gitignorePath: "/api/:version/gitignores/:key" - gitlabCiYmlPath: "/api/:version/gitlab_ci_ymls/:key" - - group: (group_id, callback) -> - url = Api.buildUrl(Api.groupPath) - url = url.replace(':id', group_id) - - $.ajax( - url: url - data: - private_token: gon.api_token - dataType: "json" - ).done (group) -> - callback(group) - - # Return groups list. Filtered by query - # Only active groups retrieved - groups: (query, skip_ldap, callback) -> - url = Api.buildUrl(Api.groupsPath) - - $.ajax( - url: url - data: - private_token: gon.api_token - search: query - per_page: 20 - dataType: "json" - ).done (groups) -> - callback(groups) - - # Return namespaces list. Filtered by query - namespaces: (query, callback) -> - url = Api.buildUrl(Api.namespacesPath) - - $.ajax( - url: url - data: - private_token: gon.api_token - search: query - per_page: 20 - dataType: "json" - ).done (namespaces) -> - callback(namespaces) - - # Return projects list. Filtered by query - projects: (query, order, callback) -> - url = Api.buildUrl(Api.projectsPath) - - $.ajax( - url: url - data: - private_token: gon.api_token - search: query - order_by: order - per_page: 20 - dataType: "json" - ).done (projects) -> - callback(projects) - - newLabel: (project_id, data, callback) -> - url = Api.buildUrl(Api.labelsPath) - url = url.replace(':id', project_id) - - data.private_token = gon.api_token - $.ajax( - url: url - type: "POST" - data: data - dataType: "json" - ).done (label) -> - callback(label) - .error (message) -> - callback(message.responseJSON) - - # Return group projects list. Filtered by query - groupProjects: (group_id, query, callback) -> - url = Api.buildUrl(Api.groupProjectsPath) - url = url.replace(':id', group_id) - - $.ajax( - url: url - data: - private_token: gon.api_token - search: query - per_page: 20 - dataType: "json" - ).done (projects) -> - callback(projects) - - # Return text for a specific license - licenseText: (key, data, callback) -> - url = Api.buildUrl(Api.licensePath).replace(':key', key) - - $.ajax( - url: url - data: data - ).done (license) -> - callback(license) - - gitignoreText: (key, callback) -> - url = Api.buildUrl(Api.gitignorePath).replace(':key', key) - - $.get url, (gitignore) -> - callback(gitignore) - - gitlabCiYml: (key, callback) -> - url = Api.buildUrl(Api.gitlabCiYmlPath).replace(':key', key) - - $.get url, (file) -> - callback(file) - - buildUrl: (url) -> - url = gon.relative_url_root + url if gon.relative_url_root? - return url.replace(':version', gon.api_version) diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js new file mode 100644 index 0000000000..ce9cbb63b6 --- /dev/null +++ b/app/assets/javascripts/application.js @@ -0,0 +1,327 @@ +/*= require jquery2 */ +/*= require jquery-ui/autocomplete */ +/*= require jquery-ui/datepicker */ +/*= require jquery-ui/draggable */ +/*= require jquery-ui/effect-highlight */ +/*= require jquery-ui/sortable */ +/*= require jquery_ujs */ +/*= require jquery.cookie */ +/*= require jquery.endless-scroll */ +/*= require jquery.highlight */ +/*= require jquery.waitforimages */ +/*= require jquery.atwho */ +/*= require jquery.scrollTo */ +/*= require jquery.turbolinks */ +/*= require turbolinks */ +/*= require autosave */ +/*= require bootstrap/affix */ +/*= require bootstrap/alert */ +/*= require bootstrap/button */ +/*= require bootstrap/collapse */ +/*= require bootstrap/dropdown */ +/*= require bootstrap/modal */ +/*= require bootstrap/scrollspy */ +/*= require bootstrap/tab */ +/*= require bootstrap/transition */ +/*= require bootstrap/tooltip */ +/*= require bootstrap/popover */ +/*= require select2 */ +/*= require underscore */ +/*= require dropzone */ +/*= require mousetrap */ +/*= require mousetrap/pause */ +/*= require shortcuts */ +/*= require shortcuts_navigation */ +/*= require shortcuts_dashboard_navigation */ +/*= require shortcuts_issuable */ +/*= require shortcuts_network */ +/*= require jquery.nicescroll */ +/*= require date.format */ +/*= require_directory ./behaviors */ +/*= require_directory ./blob */ +/*= require_directory ./templates */ +/*= require_directory ./commit */ +/*= require_directory ./extensions */ +/*= require_directory ./lib/utils */ +/*= require_directory ./u2f */ +/*= require_directory . */ +/*= require fuzzaldrin-plus */ + +(function() { + window.slugify = function(text) { + return text.replace(/[^-a-zA-Z0-9]+/g, '_').toLowerCase(); + }; + + window.ajaxGet = function(url) { + return $.ajax({ + type: "GET", + url: url, + dataType: "script" + }); + }; + + window.split = function(val) { + return val.split(/,\s*/); + }; + + window.extractLast = function(term) { + return split(term).pop(); + }; + + window.rstrip = function(val) { + if (val) { + return val.replace(/\s+$/, ''); + } else { + return val; + } + }; + + window.disableButtonIfEmptyField = function(field_selector, button_selector) { + var closest_submit, field; + field = $(field_selector); + closest_submit = field.closest('form').find(button_selector); + if (rstrip(field.val()) === "") { + closest_submit.disable(); + } + return field.on('input', function() { + if (rstrip($(this).val()) === "") { + return closest_submit.disable(); + } else { + return closest_submit.enable(); + } + }); + }; + + window.disableButtonIfAnyEmptyField = function(form, form_selector, button_selector) { + var closest_submit, updateButtons; + closest_submit = form.find(button_selector); + updateButtons = function() { + var filled; + filled = true; + form.find('input').filter(form_selector).each(function() { + return filled = rstrip($(this).val()) !== "" || !$(this).attr('required'); + }); + if (filled) { + return closest_submit.enable(); + } else { + return closest_submit.disable(); + } + }; + updateButtons(); + return form.keyup(updateButtons); + }; + + window.sanitize = function(str) { + return str.replace(/<(?:.|\n)*?>/gm, ''); + }; + + window.unbindEvents = function() { + return $(document).off('scroll'); + }; + + window.shiftWindow = function() { + return scrollBy(0, -100); + }; + + document.addEventListener("page:fetch", unbindEvents); + + window.addEventListener("hashchange", shiftWindow); + + window.onload = function() { + if (location.hash) { + return setTimeout(shiftWindow, 100); + } + }; + + $(function() { + var $body, $document, $sidebarGutterToggle, $window, bootstrapBreakpoint, checkInitialSidebarSize, fitSidebarForSize, flash; + $document = $(document); + $window = $(window); + $body = $('body'); + gl.utils.preventDisabledButtons(); + bootstrapBreakpoint = bp.getBreakpointSize(); + $(".nav-sidebar").niceScroll({ + cursoropacitymax: '0.4', + cursorcolor: '#FFF', + cursorborder: "1px solid #FFF" + }); + $(".js-select-on-focus").on("focusin", function() { + return $(this).select().one('mouseup', function(e) { + return e.preventDefault(); + }); + }); + $('.remove-row').bind('ajax:success', function() { + return $(this).closest('li').fadeOut(); + }); + $('.js-remove-tr').bind('ajax:before', function() { + return $(this).hide(); + }); + $('.js-remove-tr').bind('ajax:success', function() { + return $(this).closest('tr').fadeOut(); + }); + $('select.select2').select2({ + width: 'resolve', + dropdownAutoWidth: true + }); + $('.js-select2').bind('select2-close', function() { + return setTimeout((function() { + $('.select2-container-active').removeClass('select2-container-active'); + return $(':focus').blur(); + }), 1); + }); + $body.tooltip({ + selector: '.has-tooltip, [data-toggle="tooltip"]', + placement: function(_, el) { + var $el; + $el = $(el); + return $el.data('placement') || 'bottom'; + } + }); + $('.trigger-submit').on('change', function() { + return $(this).parents('form').submit(); + }); + gl.utils.localTimeAgo($('abbr.timeago, .js-timeago'), true); + if ((flash = $(".flash-container")).length > 0) { + flash.click(function() { + return $(this).fadeOut(); + }); + flash.show(); + } + $body.on('ajax:complete, ajax:beforeSend, submit', 'form', function(e) { + var buttons; + buttons = $('[type="submit"]', this); + switch (e.type) { + case 'ajax:beforeSend': + case 'submit': + return buttons.disable(); + default: + return buttons.enable(); + } + }); + $(document).ajaxError(function(e, xhrObj, xhrSetting, xhrErrorText) { + var ref; + if (xhrObj.status === 401) { + return new Flash('You need to be logged in.', 'alert'); + } else if ((ref = xhrObj.status) === 404 || ref === 500) { + return new Flash('Something went wrong on our end.', 'alert'); + } + }); + $('.account-box').hover(function() { + return $(this).toggleClass('hover'); + }); + $document.on('click', '.diff-content .js-show-suppressed-diff', function() { + var $container; + $container = $(this).parent(); + $container.next('table').show(); + return $container.remove(); + }); + $('.navbar-toggle').on('click', function() { + $('.header-content .title').toggle(); + $('.header-content .header-logo').toggle(); + $('.header-content .navbar-collapse').toggle(); + return $('.navbar-toggle').toggleClass('active'); + }); + $body.on("click", ".js-toggle-diff-comments", function(e) { + var $this = $(this); + $this.toggleClass('active'); + var notesHolders = $this.closest('.diff-file').find('.notes_holder'); + if ($this.hasClass('active')) { + notesHolders.show(); + } else { + notesHolders.hide(); + } + return e.preventDefault(); + }); + $document.off("click", '.js-confirm-danger'); + $document.on("click", '.js-confirm-danger', function(e) { + var btn, form, text; + e.preventDefault(); + btn = $(e.target); + text = btn.data("confirm-danger-message"); + form = btn.closest("form"); + return new ConfirmDangerModal(form, text); + }); + $document.on('click', 'button', function() { + return $(this).blur(); + }); + $('input[type="search"]').each(function() { + var $this; + $this = $(this); + $this.attr('value', $this.val()); + }); + $document.off('keyup', 'input[type="search"]').on('keyup', 'input[type="search"]', function(e) { + var $this; + $this = $(this); + return $this.attr('value', $this.val()); + }); + $sidebarGutterToggle = $('.js-sidebar-toggle'); + $document.off('breakpoint:change').on('breakpoint:change', function(e, breakpoint) { + var $gutterIcon; + if (breakpoint === 'sm' || breakpoint === 'xs') { + $gutterIcon = $sidebarGutterToggle.find('i'); + if ($gutterIcon.hasClass('fa-angle-double-right')) { + return $sidebarGutterToggle.trigger('click'); + } + } + }); + fitSidebarForSize = function() { + var oldBootstrapBreakpoint; + oldBootstrapBreakpoint = bootstrapBreakpoint; + bootstrapBreakpoint = bp.getBreakpointSize(); + if (bootstrapBreakpoint !== oldBootstrapBreakpoint) { + return $document.trigger('breakpoint:change', [bootstrapBreakpoint]); + } + }; + checkInitialSidebarSize = function() { + bootstrapBreakpoint = bp.getBreakpointSize(); + if (bootstrapBreakpoint === "xs" || "sm") { + return $document.trigger('breakpoint:change', [bootstrapBreakpoint]); + } + }; + $window.off("resize.app").on("resize.app", function(e) { + return fitSidebarForSize(); + }); + gl.awardsHandler = new AwardsHandler(); + checkInitialSidebarSize(); + new Aside(); + if ($window.width() < 1024 && $.cookie('pin_nav') === 'true') { + $.cookie('pin_nav', 'false', { + path: '/', + expires: 365 * 10 + }); + $('.page-with-sidebar').toggleClass('page-sidebar-collapsed page-sidebar-expanded').removeClass('page-sidebar-pinned'); + $('.navbar-fixed-top').removeClass('header-pinned-nav'); + } + $document.off('click', '.js-nav-pin').on('click', '.js-nav-pin', function(e) { + var $page, $pinBtn, $tooltip, $topNav, doPinNav, tooltipText; + e.preventDefault(); + $pinBtn = $(e.currentTarget); + $page = $('.page-with-sidebar'); + $topNav = $('.navbar-fixed-top'); + $tooltip = $("#" + ($pinBtn.attr('aria-describedby'))); + doPinNav = !$page.is('.page-sidebar-pinned'); + tooltipText = 'Pin navigation'; + $(this).toggleClass('is-active'); + if (doPinNav) { + $page.addClass('page-sidebar-pinned'); + $topNav.addClass('header-pinned-nav'); + } else { + $tooltip.remove(); + $page.removeClass('page-sidebar-pinned').toggleClass('page-sidebar-collapsed page-sidebar-expanded'); + $topNav.removeClass('header-pinned-nav').toggleClass('header-collapsed header-expanded'); + } + $.cookie('pin_nav', doPinNav, { + path: '/', + expires: 365 * 10 + }); + if ($.cookie('pin_nav') === 'true' || doPinNav) { + tooltipText = 'Unpin navigation'; + } + $tooltip.find('.tooltip-inner').text(tooltipText); + return $pinBtn.attr('title', tooltipText).tooltip('fixTitle'); + }); + + // Custom time ago + gl.utils.shortTimeAgo($('.js-short-timeago')); + }); +}).call(this); diff --git a/app/assets/javascripts/application.js.coffee b/app/assets/javascripts/application.js.coffee deleted file mode 100644 index eceff6d91d..0000000000 --- a/app/assets/javascripts/application.js.coffee +++ /dev/null @@ -1,310 +0,0 @@ -# This is a manifest file that'll be compiled into including all the files listed below. -# Add new JavaScript/Coffee code in separate files in this directory and they'll automatically -# be included in the compiled file accessible from http://example.com/assets/application.js -# It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the -# the compiled file. -# -#= require jquery2 -#= require jquery-ui/autocomplete -#= require jquery-ui/datepicker -#= require jquery-ui/draggable -#= require jquery-ui/effect-highlight -#= require jquery-ui/sortable -#= require jquery_ujs -#= require jquery.cookie -#= require jquery.endless-scroll -#= require jquery.highlight -#= require jquery.waitforimages -#= require jquery.atwho -#= require jquery.scrollTo -#= require jquery.turbolinks -#= require turbolinks -#= require autosave -#= require bootstrap/affix -#= require bootstrap/alert -#= require bootstrap/button -#= require bootstrap/collapse -#= require bootstrap/dropdown -#= require bootstrap/modal -#= require bootstrap/scrollspy -#= require bootstrap/tab -#= require bootstrap/transition -#= require bootstrap/tooltip -#= require bootstrap/popover -#= require select2 -#= require ace/ace -#= require ace/ext-searchbox -#= require underscore -#= require dropzone -#= require mousetrap -#= require mousetrap/pause -#= require shortcuts -#= require shortcuts_navigation -#= require shortcuts_dashboard_navigation -#= require shortcuts_issuable -#= require shortcuts_network -#= require jquery.nicescroll -#= require date.format -#= require_directory ./behaviors -#= require_directory ./blob -#= require_directory ./commit -#= require_directory ./extensions -#= require_directory ./lib/utils -#= require_directory ./u2f -#= require_directory . -#= require fuzzaldrin-plus - -window.slugify = (text) -> - text.replace(/[^-a-zA-Z0-9]+/g, '_').toLowerCase() - -window.ajaxGet = (url) -> - $.ajax({type: "GET", url: url, dataType: "script"}) - -window.split = (val) -> - return val.split( /,\s*/ ) - -window.extractLast = (term) -> - return split( term ).pop() - -window.rstrip = (val) -> - return if val then val.replace(/\s+$/, '') else val - -# Disable button if text field is empty -window.disableButtonIfEmptyField = (field_selector, button_selector) -> - field = $(field_selector) - closest_submit = field.closest('form').find(button_selector) - - closest_submit.disable() if rstrip(field.val()) is "" - - field.on 'input', -> - if rstrip($(@).val()) is "" - closest_submit.disable() - else - closest_submit.enable() - -# Disable button if any input field with given selector is empty -window.disableButtonIfAnyEmptyField = (form, form_selector, button_selector) -> - closest_submit = form.find(button_selector) - updateButtons = -> - filled = true - form.find('input').filter(form_selector).each -> - filled = rstrip($(this).val()) != "" || !$(this).attr('required') - - if filled - closest_submit.enable() - else - closest_submit.disable() - - updateButtons() - form.keyup(updateButtons) - -window.sanitize = (str) -> - return str.replace(/<(?:.|\n)*?>/gm, '') - -window.unbindEvents = -> - $(document).off('scroll') - -window.shiftWindow = -> - scrollBy 0, -100 - -document.addEventListener("page:fetch", unbindEvents) - -window.addEventListener "hashchange", shiftWindow - -window.onload = -> - # Scroll the window to avoid the topnav bar - # https://github.com/twitter/bootstrap/issues/1768 - if location.hash - setTimeout shiftWindow, 100 - -$ -> - - $document = $(document) - $window = $(window) - $body = $('body') - - gl.utils.preventDisabledButtons() - bootstrapBreakpoint = bp.getBreakpointSize() - - $(".nav-sidebar").niceScroll(cursoropacitymax: '0.4', cursorcolor: '#FFF', cursorborder: "1px solid #FFF") - - # Click a .js-select-on-focus field, select the contents - $(".js-select-on-focus").on "focusin", -> - # Prevent a mouseup event from deselecting the input - $(this).select().one 'mouseup', (e) -> - e.preventDefault() - - $('.remove-row').bind 'ajax:success', -> - $(this).closest('li').fadeOut() - - $('.js-remove-tr').bind 'ajax:before', -> - $(this).hide() - - $('.js-remove-tr').bind 'ajax:success', -> - $(this).closest('tr').fadeOut() - - # Initialize select2 selects - $('select.select2').select2(width: 'resolve', dropdownAutoWidth: true) - - # Close select2 on escape - $('.js-select2').bind 'select2-close', -> - setTimeout ( -> - $('.select2-container-active').removeClass('select2-container-active') - $(':focus').blur() - ), 1 - - # Initialize tooltips - $body.tooltip( - selector: '.has-tooltip, [data-toggle="tooltip"]' - placement: (_, el) -> - $el = $(el) - $el.data('placement') || 'bottom' - ) - - # Form submitter - $('.trigger-submit').on 'change', -> - $(@).parents('form').submit() - - gl.utils.localTimeAgo($('abbr.timeago, .js-timeago'), true) - - # Flash - if (flash = $(".flash-container")).length > 0 - flash.click -> $(@).fadeOut() - flash.show() - - # Disable form buttons while a form is submitting - $body.on 'ajax:complete, ajax:beforeSend, submit', 'form', (e) -> - buttons = $('[type="submit"]', @) - - switch e.type - when 'ajax:beforeSend', 'submit' - buttons.disable() - else - buttons.enable() - - $(document).ajaxError (e, xhrObj, xhrSetting, xhrErrorText) -> - - if xhrObj.status is 401 - new Flash 'You need to be logged in.', 'alert' - - else if xhrObj.status in [ 404, 500 ] - new Flash 'Something went wrong on our end.', 'alert' - - - # Show/Hide the profile menu when hovering the account box - $('.account-box').hover -> $(@).toggleClass('hover') - - # Commit show suppressed diff - $document.on 'click', '.diff-content .js-show-suppressed-diff', -> - $container = $(@).parent() - $container.next('table').show() - $container.remove() - - $('.navbar-toggle').on 'click', -> - $('.header-content .title').toggle() - $('.header-content .header-logo').toggle() - $('.header-content .navbar-collapse').toggle() - $('.navbar-toggle').toggleClass('active') - - # Show/hide comments on diff - $body.on "click", ".js-toggle-diff-comments", (e) -> - $(@).toggleClass('active') - $(@).closest(".diff-file").find(".notes_holder").toggle() - e.preventDefault() - - $document.off "click", '.js-confirm-danger' - $document.on "click", '.js-confirm-danger', (e) -> - e.preventDefault() - btn = $(e.target) - text = btn.data("confirm-danger-message") - form = btn.closest("form") - new ConfirmDangerModal(form, text) - - - $document.on 'click', 'button', -> - $(this).blur() - - $('input[type="search"]').each -> - $this = $(this) - $this.attr 'value', $this.val() - return - - $document - .off 'keyup', 'input[type="search"]' - .on 'keyup', 'input[type="search"]' , (e) -> - $this = $(this) - $this.attr 'value', $this.val() - - $sidebarGutterToggle = $('.js-sidebar-toggle') - - $document - .off 'breakpoint:change' - .on 'breakpoint:change', (e, breakpoint) -> - if breakpoint is 'sm' or breakpoint is 'xs' - $gutterIcon = $sidebarGutterToggle.find('i') - if $gutterIcon.hasClass('fa-angle-double-right') - $sidebarGutterToggle.trigger('click') - - fitSidebarForSize = -> - oldBootstrapBreakpoint = bootstrapBreakpoint - bootstrapBreakpoint = bp.getBreakpointSize() - if bootstrapBreakpoint != oldBootstrapBreakpoint - $document.trigger('breakpoint:change', [bootstrapBreakpoint]) - - checkInitialSidebarSize = -> - bootstrapBreakpoint = bp.getBreakpointSize() - if bootstrapBreakpoint is "xs" or "sm" - $document.trigger('breakpoint:change', [bootstrapBreakpoint]) - - $window - .off "resize.app" - .on "resize.app", (e) -> - fitSidebarForSize() - - gl.awardsHandler = new AwardsHandler() - checkInitialSidebarSize() - new Aside() - - # Sidenav pinning - if $window.width() < 1024 and $.cookie('pin_nav') is 'true' - $.cookie('pin_nav', 'false', { path: '/', expires: 365 * 10 }) - $('.page-with-sidebar') - .toggleClass('page-sidebar-collapsed page-sidebar-expanded') - .removeClass('page-sidebar-pinned') - $('.navbar-fixed-top').removeClass('header-pinned-nav') - - $document - .off 'click', '.js-nav-pin' - .on 'click', '.js-nav-pin', (e) -> - e.preventDefault() - - $pinBtn = $(e.currentTarget) - $page = $ '.page-with-sidebar' - $topNav = $ '.navbar-fixed-top' - $tooltip = $ "##{$pinBtn.attr('aria-describedby')}" - doPinNav = not $page.is('.page-sidebar-pinned') - tooltipText = 'Pin navigation' - - $(this).toggleClass 'is-active' - - if doPinNav - $page.addClass('page-sidebar-pinned') - $topNav.addClass('header-pinned-nav') - else - $tooltip.remove() # Remove it immediately when collapsing the sidebar - $page.removeClass('page-sidebar-pinned') - .toggleClass('page-sidebar-collapsed page-sidebar-expanded') - $topNav.removeClass('header-pinned-nav') - .toggleClass('header-collapsed header-expanded') - - # Save settings - $.cookie 'pin_nav', doPinNav, { path: '/', expires: 365 * 10 } - - if $.cookie('pin_nav') is 'true' or doPinNav - tooltipText = 'Unpin navigation' - - # Update tooltip text immediately - $tooltip.find('.tooltip-inner').text(tooltipText) - - # Persist tooltip title - $pinBtn.attr('title', tooltipText).tooltip('fixTitle') diff --git a/app/assets/javascripts/aside.js b/app/assets/javascripts/aside.js new file mode 100644 index 0000000000..7b546e79ee --- /dev/null +++ b/app/assets/javascripts/aside.js @@ -0,0 +1,26 @@ +(function() { + this.Aside = (function() { + function Aside() { + $(document).off("click", "a.show-aside"); + $(document).on("click", 'a.show-aside', function(e) { + var btn, icon; + e.preventDefault(); + btn = $(e.currentTarget); + icon = btn.find('i'); + if (icon.hasClass('fa-angle-left')) { + btn.parent().find('section').hide(); + btn.parent().find('aside').fadeIn(); + return icon.removeClass('fa-angle-left').addClass('fa-angle-right'); + } else { + btn.parent().find('aside').hide(); + btn.parent().find('section').fadeIn(); + return icon.removeClass('fa-angle-right').addClass('fa-angle-left'); + } + }); + } + + return Aside; + + })(); + +}).call(this); diff --git a/app/assets/javascripts/aside.js.coffee b/app/assets/javascripts/aside.js.coffee deleted file mode 100644 index 66ab505432..0000000000 --- a/app/assets/javascripts/aside.js.coffee +++ /dev/null @@ -1,16 +0,0 @@ -class @Aside - constructor: -> - $(document).off "click", "a.show-aside" - $(document).on "click", 'a.show-aside', (e) -> - e.preventDefault() - btn = $(e.currentTarget) - icon = btn.find('i') - - if icon.hasClass('fa-angle-left') - btn.parent().find('section').hide() - btn.parent().find('aside').fadeIn() - icon.removeClass('fa-angle-left').addClass('fa-angle-right') - else - btn.parent().find('aside').hide() - btn.parent().find('section').fadeIn() - icon.removeClass('fa-angle-right').addClass('fa-angle-left') diff --git a/app/assets/javascripts/autosave.js b/app/assets/javascripts/autosave.js new file mode 100644 index 0000000000..7116512d6b --- /dev/null +++ b/app/assets/javascripts/autosave.js @@ -0,0 +1,63 @@ +(function() { + this.Autosave = (function() { + function Autosave(field, key) { + this.field = field; + if (key.join != null) { + key = key.join("/"); + } + this.key = "autosave/" + key; + this.field.data("autosave", this); + this.restore(); + this.field.on("input", (function(_this) { + return function() { + return _this.save(); + }; + })(this)); + } + + Autosave.prototype.restore = function() { + var e, error, text; + if (window.localStorage == null) { + return; + } + try { + text = window.localStorage.getItem(this.key); + } catch (error) { + e = error; + return; + } + if ((text != null ? text.length : void 0) > 0) { + this.field.val(text); + } + return this.field.trigger("input"); + }; + + Autosave.prototype.save = function() { + var text; + if (window.localStorage == null) { + return; + } + text = this.field.val(); + if ((text != null ? text.length : void 0) > 0) { + try { + return window.localStorage.setItem(this.key, text); + } catch (undefined) {} + } else { + return this.reset(); + } + }; + + Autosave.prototype.reset = function() { + if (window.localStorage == null) { + return; + } + try { + return window.localStorage.removeItem(this.key); + } catch (undefined) {} + }; + + return Autosave; + + })(); + +}).call(this); diff --git a/app/assets/javascripts/autosave.js.coffee b/app/assets/javascripts/autosave.js.coffee deleted file mode 100644 index 28f8e10366..0000000000 --- a/app/assets/javascripts/autosave.js.coffee +++ /dev/null @@ -1,39 +0,0 @@ -class @Autosave - constructor: (field, key) -> - @field = field - - key = key.join("/") if key.join? - @key = "autosave/#{key}" - - @field.data "autosave", this - - @restore() - - @field.on "input", => @save() - - restore: -> - return unless window.localStorage? - - try - text = window.localStorage.getItem @key - catch e - return - - @field.val text if text?.length > 0 - @field.trigger "input" - - save: -> - return unless window.localStorage? - - text = @field.val() - if text?.length > 0 - try - window.localStorage.setItem @key, text - else - @reset() - - reset: -> - return unless window.localStorage? - - try - window.localStorage.removeItem @key diff --git a/app/assets/javascripts/awards_handler.coffee b/app/assets/javascripts/awards_handler.coffee deleted file mode 100644 index 37d0adaa62..0000000000 --- a/app/assets/javascripts/awards_handler.coffee +++ /dev/null @@ -1,372 +0,0 @@ -class @AwardsHandler - - constructor: -> - - @aliases = gl.emojiAliases() - - $(document) - .off 'click', '.js-add-award' - .on 'click', '.js-add-award', (e) => - e.stopPropagation() - e.preventDefault() - - @showEmojiMenu $(e.currentTarget) - - $('html').on 'click', (e) -> - $target = $ e.target - - unless $target.closest('.emoji-menu-content').length - $('.js-awards-block.current').removeClass 'current' - - unless $target.closest('.emoji-menu').length - if $('.emoji-menu').is(':visible') - $('.js-add-award.is-active').removeClass 'is-active' - $('.emoji-menu').removeClass 'is-visible' - - $(document) - .off 'click', '.js-emoji-btn' - .on 'click', '.js-emoji-btn', (e) => - e.preventDefault() - - $target = $ e.currentTarget - emoji = $target.find('.icon').data 'emoji' - - $target.closest('.js-awards-block').addClass 'current' - @addAward @getVotesBlock(), @getAwardUrl(), emoji - - - showEmojiMenu: ($addBtn) -> - - $menu = $ '.emoji-menu' - - if $addBtn.hasClass 'js-note-emoji' - $addBtn.closest('.note').find('.js-awards-block').addClass 'current' - else - $addBtn.closest('.js-awards-block').addClass 'current' - - if $menu.length - $holder = $addBtn.closest('.js-award-holder') - - if $menu.is '.is-visible' - $addBtn.removeClass 'is-active' - $menu.removeClass 'is-visible' - $('#emoji_search').blur() - else - $addBtn.addClass 'is-active' - @positionMenu($menu, $addBtn) - - $menu.addClass 'is-visible' - $('#emoji_search').focus() - else - $addBtn.addClass 'is-loading is-active' - url = @getAwardMenuUrl() - - @createEmojiMenu url, => - $addBtn.removeClass 'is-loading' - $menu = $('.emoji-menu') - @positionMenu($menu, $addBtn) - @renderFrequentlyUsedBlock() unless @frequentEmojiBlockRendered - - setTimeout => - $menu.addClass 'is-visible' - $('#emoji_search').focus() - @setupSearch() - , 200 - - - createEmojiMenu: (awardMenuUrl, callback) -> - - $.get awardMenuUrl, (response) -> - $('body').append response - callback() - - - positionMenu: ($menu, $addBtn) -> - - position = $addBtn.data('position') - - # The menu could potentially be off-screen or in a hidden overflow element - # So we position the element absolute in the body - css = - top: "#{$addBtn.offset().top + $addBtn.outerHeight()}px" - - if position? and position is 'right' - css.left = "#{($addBtn.offset().left - $menu.outerWidth()) + 20}px" - $menu.addClass 'is-aligned-right' - else - css.left = "#{$addBtn.offset().left}px" - $menu.removeClass 'is-aligned-right' - - $menu.css(css) - - - addAward: (votesBlock, awardUrl, emoji, checkMutuality = true, callback) -> - - emoji = @normilizeEmojiName emoji - - @postEmoji awardUrl, emoji, => - @addAwardToEmojiBar votesBlock, emoji, checkMutuality - callback?() - - $('.emoji-menu').removeClass 'is-visible' - - - addAwardToEmojiBar: (votesBlock, emoji, checkForMutuality = true) -> - - @checkMutuality votesBlock, emoji if checkForMutuality - @addEmojiToFrequentlyUsedList emoji - - emoji = @normilizeEmojiName emoji - $emojiButton = @findEmojiIcon(votesBlock, emoji).parent() - - if $emojiButton.length > 0 - if @isActive $emojiButton - @decrementCounter $emojiButton, emoji - else - counter = $emojiButton.find '.js-counter' - counter.text parseInt(counter.text()) + 1 - $emojiButton.addClass 'active' - @addMeToUserList votesBlock, emoji - @animateEmoji $emojiButton - else - votesBlock.removeClass 'hidden' - @createEmoji votesBlock, emoji - - - getVotesBlock: -> - - currentBlock = $ '.js-awards-block.current' - return if currentBlock.length then currentBlock else $('.js-awards-block').eq 0 - - - getAwardUrl: -> return @getVotesBlock().data 'award-url' - - - checkMutuality: (votesBlock, emoji) -> - - awardUrl = @getAwardUrl() - - if emoji in [ 'thumbsup', 'thumbsdown' ] - mutualVote = if emoji is 'thumbsup' then 'thumbsdown' else 'thumbsup' - $emojiButton = votesBlock.find("[data-emoji=#{mutualVote}]").parent() - isAlreadyVoted = $emojiButton.hasClass 'active' - - if isAlreadyVoted - @showEmojiLoader $emojiButton - @addAward votesBlock, awardUrl, mutualVote, false, -> - $emojiButton.removeClass 'is-loading' - - - showEmojiLoader: ($emojiButton) -> - - $loader = $emojiButton.find '.fa-spinner' - - unless $loader.length - $emojiButton.append '' - - $emojiButton.addClass 'is-loading' - - - isActive: ($emojiButton) -> $emojiButton.hasClass 'active' - - - decrementCounter: ($emojiButton, emoji) -> - - counter = $ '.js-counter', $emojiButton - counterNumber = parseInt counter.text(), 10 - - if counterNumber > 1 - counter.text counterNumber - 1 - @removeMeFromUserList $emojiButton, emoji - else if emoji is 'thumbsup' or emoji is 'thumbsdown' - $emojiButton.tooltip 'destroy' - counter.text '0' - @removeMeFromUserList $emojiButton, emoji - @removeEmoji $emojiButton if $emojiButton.parents('.note').length - else - @removeEmoji $emojiButton - - $emojiButton.removeClass 'active' - - - removeEmoji: ($emojiButton) -> - - $emojiButton.tooltip('destroy') - $emojiButton.remove() - - $votesBlock = @getVotesBlock() - - if $votesBlock.find('.js-emoji-btn').length is 0 - $votesBlock.addClass 'hidden' - - - getAwardTooltip: ($awardBlock) -> - - return $awardBlock.attr('data-original-title') or $awardBlock.attr('data-title') or '' - - - removeMeFromUserList: ($emojiButton, emoji) -> - - awardBlock = $emojiButton - originalTitle = @getAwardTooltip awardBlock - - authors = originalTitle.split ', ' - authors.splice authors.indexOf('me'), 1 - - newAuthors = authors.join ', ' - - awardBlock - .closest '.js-emoji-btn' - .removeData 'original-title' - .attr 'data-original-title', newAuthors - - @resetTooltip awardBlock - - - addMeToUserList: (votesBlock, emoji) -> - - awardBlock = @findEmojiIcon(votesBlock, emoji).parent() - origTitle = @getAwardTooltip awardBlock - users = [] - - if origTitle - users = origTitle.trim().split ', ' - - users.push 'me' - awardBlock.attr 'title', users.join ', ' - - @resetTooltip awardBlock - - - resetTooltip: (award) -> - - award.tooltip 'destroy' - - # 'destroy' call is asynchronous and there is no appropriate callback on it, this is why we need to set timeout. - cb = -> award.tooltip() - setTimeout cb, 200 - - - createEmoji_: (votesBlock, emoji) -> - - emojiCssClass = @resolveNameToCssClass emoji - buttonHtml = "" - - $emojiButton = $ buttonHtml - $emojiButton - .insertBefore votesBlock.find '.js-award-holder' - .find '.emoji-icon' - .data 'emoji', emoji - - @animateEmoji $emojiButton - $('.award-control').tooltip() - votesBlock.removeClass 'current' - - - animateEmoji: ($emoji) -> - - className = 'pulse animated' - - $emoji.addClass className - setTimeout (-> $emoji.removeClass className), 321 - - - createEmoji: (votesBlock, emoji) -> - - if $('.emoji-menu').length - return @createEmoji_ votesBlock, emoji - - @createEmojiMenu @getAwardMenuUrl(), => @createEmoji_ votesBlock, emoji - - - getAwardMenuUrl: -> return gon.award_menu_url - - - resolveNameToCssClass: (emoji) -> - - emojiIcon = $ ".emoji-menu-content [data-emoji='#{emoji}']" - - if emojiIcon.length > 0 - unicodeName = emojiIcon.data 'unicode-name' - else - # Find by alias - unicodeName = $(".emoji-menu-content [data-aliases*=':#{emoji}:']").data 'unicode-name' - - return "emoji-#{unicodeName}" - - - postEmoji: (awardUrl, emoji, callback) -> - - $.post awardUrl, { name: emoji }, (data) -> - callback() if data.ok - - - findEmojiIcon: (votesBlock, emoji) -> - - return votesBlock.find ".js-emoji-btn [data-emoji='#{emoji}']" - - - scrollToAwards: -> - - options = scrollTop: $('.awards').offset().top - 110 - $('body, html').animate options, 200 - - - normilizeEmojiName: (emoji) -> return @aliases[emoji] or emoji - - - addEmojiToFrequentlyUsedList: (emoji) -> - - frequentlyUsedEmojis = @getFrequentlyUsedEmojis() - frequentlyUsedEmojis.push emoji - $.cookie 'frequently_used_emojis', frequentlyUsedEmojis.join(','), { expires: 365 } - - - getFrequentlyUsedEmojis: -> - - frequentlyUsedEmojis = ($.cookie('frequently_used_emojis') or '').split(',') - return _.compact _.uniq frequentlyUsedEmojis - - - renderFrequentlyUsedBlock: -> - - if $.cookie 'frequently_used_emojis' - frequentlyUsedEmojis = @getFrequentlyUsedEmojis() - - ul = $("