From bd9461e28514123307ced280e410b554796b2cb5 Mon Sep 17 00:00:00 2001 From: Praveen Arimbrathodiyil Date: Thu, 26 Nov 2015 14:37:03 +0530 Subject: [PATCH] Imported Upstream version 8.2.1 --- .flayignore | 1 + .gitignore | 2 + .gitlab-ci.yml | 15 + CHANGELOG | 95 ++- CONTRIBUTING.md | 9 +- GITLAB_GIT_HTTP_SERVER_VERSION | 1 - GITLAB_SHELL_VERSION | 2 +- GITLAB_WORKHORSE_VERSION | 1 + Gemfile | 27 +- Gemfile.lock | 79 +- PROCESS.md | 7 + VERSION | 2 +- app/assets/fonts/SourceSansPro-Black.ttf | Bin 148368 -> 289364 bytes app/assets/fonts/SourceSansPro-BlackIt.ttf | Bin 0 -> 103404 bytes app/assets/fonts/SourceSansPro-Bold.ttf | Bin app/assets/fonts/SourceSansPro-BoldIt.ttf | Bin 0 -> 103608 bytes app/assets/fonts/SourceSansPro-ExtraLight.ttf | Bin 150528 -> 291652 bytes .../fonts/SourceSansPro-ExtraLightIt.ttf | Bin 0 -> 104768 bytes app/assets/fonts/SourceSansPro-It.ttf | Bin 0 -> 104236 bytes app/assets/fonts/SourceSansPro-Light.ttf | Bin app/assets/fonts/SourceSansPro-LightIt.ttf | Bin 0 -> 104616 bytes app/assets/fonts/SourceSansPro-Regular.ttf | Bin app/assets/fonts/SourceSansPro-Semibold.ttf | Bin app/assets/fonts/SourceSansPro-SemiboldIt.ttf | Bin 0 -> 104020 bytes .../images/auth_buttons/facebook_64.png | Bin 0 -> 2970 bytes app/assets/javascripts/awards_handler.coffee | 91 +++ .../blob/blob_file_dropzone.js.coffee | 17 +- .../javascripts/blob/edit_blob.js.coffee | 8 +- .../javascripts/blob/new_blob.js.coffee | 8 +- app/assets/javascripts/calendar.js.coffee | 2 +- app/assets/javascripts/ci/build.coffee | 2 +- .../javascripts/copy_to_clipboard.js.coffee | 32 + app/assets/javascripts/dispatcher.js.coffee | 8 + .../javascripts/new_commit_form.js.coffee | 21 + app/assets/javascripts/notes.js.coffee | 9 +- .../stat_graph_contributors_util.js.coffee | 5 +- app/assets/stylesheets/framework/blocks.scss | 54 ++ app/assets/stylesheets/framework/buttons.scss | 15 + app/assets/stylesheets/framework/callout.scss | 6 +- app/assets/stylesheets/framework/common.scss | 35 + app/assets/stylesheets/framework/files.scss | 5 +- app/assets/stylesheets/framework/header.scss | 4 + app/assets/stylesheets/framework/layout.scss | 1 - app/assets/stylesheets/framework/lists.scss | 4 +- .../stylesheets/framework/markdown_area.scss | 1 + app/assets/stylesheets/framework/mixins.scss | 10 +- app/assets/stylesheets/framework/sidebar.scss | 3 + app/assets/stylesheets/framework/tables.scss | 10 +- .../stylesheets/framework/timeline.scss | 2 +- .../stylesheets/framework/tw_bootstrap.scss | 6 +- .../stylesheets/framework/typography.scss | 1 - app/assets/stylesheets/pages/ci_projects.scss | 5 - app/assets/stylesheets/pages/commit.scss | 1 + app/assets/stylesheets/pages/commits.scss | 9 + app/assets/stylesheets/pages/diff.scss | 1 - app/assets/stylesheets/pages/editor.scss | 2 +- app/assets/stylesheets/pages/events.scss | 16 +- app/assets/stylesheets/pages/issuable.scss | 89 ++ .../stylesheets/pages/merge_requests.scss | 23 + app/assets/stylesheets/pages/note_form.scss | 6 +- app/assets/stylesheets/pages/profile.scss | 28 + app/assets/stylesheets/pages/projects.scss | 72 +- app/assets/stylesheets/pages/runners.scss | 62 +- app/assets/stylesheets/pages/sherlock.scss | 33 + app/assets/stylesheets/pages/snippets.scss | 60 +- app/assets/stylesheets/pages/tree.scss | 16 +- .../admin/application_controller.rb | 6 + .../admin/application_settings_controller.rb | 2 + .../admin/impersonation_controller.rb | 32 + app/controllers/admin/users_controller.rb | 6 - app/controllers/application_controller.rb | 23 +- .../ci/admin/runners_controller.rb | 1 + app/controllers/ci/application_controller.rb | 8 - app/controllers/ci/events_controller.rb | 21 - app/controllers/ci/lints_controller.rb | 4 +- app/controllers/ci/projects_controller.rb | 4 - .../ci/runner_projects_controller.rb | 2 - .../creates_merge_request_for_commit.rb | 28 + app/controllers/concerns/global_milestones.rb | 19 + .../dashboard/milestones_controller.rb | 29 +- app/controllers/dashboard_controller.rb | 5 + .../groups/application_controller.rb | 11 +- app/controllers/groups/avatars_controller.rb | 4 +- .../groups/group_members_controller.rb | 35 +- .../groups/milestones_controller.rb | 73 +- app/controllers/groups_controller.rb | 6 +- .../projects/application_controller.rb | 2 +- app/controllers/projects/blob_controller.rb | 89 +- app/controllers/projects/builds_controller.rb | 52 +- .../projects/ci_services_controller.rb | 8 +- app/controllers/projects/commit_controller.rb | 47 +- .../projects/commits_controller.rb | 2 +- .../projects/compare_controller.rb | 7 +- .../projects/imports_controller.rb | 4 +- app/controllers/projects/issues_controller.rb | 6 +- .../projects/merge_requests_controller.rb | 7 +- .../projects/milestones_controller.rb | 6 +- app/controllers/projects/notes_controller.rb | 29 +- .../projects/project_members_controller.rb | 34 +- .../projects/releases_controller.rb | 31 + .../projects/runners_controller.rb | 9 +- .../projects/snippets_controller.rb | 1 + app/controllers/projects/tags_controller.rb | 20 +- app/controllers/projects/tree_controller.rb | 13 +- app/controllers/projects_controller.rb | 38 +- app/controllers/search_controller.rb | 4 +- .../sherlock/application_controller.rb | 12 + .../sherlock/file_samples_controller.rb | 7 + .../sherlock/queries_controller.rb | 7 + .../sherlock/transactions_controller.rb | 19 + app/controllers/snippets_controller.rb | 9 +- app/controllers/users_controller.rb | 29 +- app/finders/contributed_projects_finder.rb | 37 + app/finders/groups_finder.rb | 68 +- app/finders/joined_groups_finder.rb | 49 ++ app/finders/milestones_finder.rb | 12 + app/finders/notes_finder.rb | 4 +- app/finders/personal_projects_finder.rb | 41 + app/finders/projects_finder.rb | 121 ++- app/helpers/auth_helper.rb | 2 +- app/helpers/builds_helper.rb | 13 - app/helpers/ci/gitlab_helper.rb | 19 - app/helpers/ci_status_helper.rb | 11 +- app/helpers/clipboard_helper.rb | 8 + app/helpers/diff_helper.rb | 10 +- app/helpers/events_helper.rb | 28 +- app/helpers/issues_helper.rb | 29 +- app/helpers/labels_helper.rb | 2 +- app/helpers/merge_requests_helper.rb | 8 - app/helpers/milestones_helper.rb | 2 +- app/helpers/notifications_helper.rb | 38 +- app/helpers/preferences_helper.rb | 8 +- app/helpers/projects_helper.rb | 14 +- app/helpers/search_helper.rb | 2 +- app/helpers/tab_helper.rb | 18 - app/models/ability.rb | 145 +++- app/models/application_setting.rb | 16 +- app/models/ci/application_setting.rb | 12 +- app/models/ci/build.rb | 43 +- app/models/ci/commit.rb | 35 +- app/models/ci/event.rb | 2 +- app/models/ci/project.rb | 29 +- app/models/ci/project_status.rb | 4 - app/models/ci/runner.rb | 3 +- app/models/ci/runner_project.rb | 2 +- app/models/ci/service.rb | 2 +- app/models/ci/trigger.rb | 2 +- app/models/ci/trigger_request.rb | 2 +- app/models/ci/variable.rb | 2 +- app/models/ci/web_hook.rb | 2 +- app/models/commit_status.rb | 42 +- app/models/concerns/issuable.rb | 49 +- app/models/concerns/sortable.rb | 11 +- app/models/event.rb | 12 +- app/models/generic_commit_status.rb | 33 + app/models/global_label.rb | 17 + ...group_milestone.rb => global_milestone.rb} | 22 +- app/models/group.rb | 18 +- app/models/group_label.rb | 9 - app/models/hooks/project_hook.rb | 25 +- app/models/hooks/service_hook.rb | 25 +- app/models/hooks/system_hook.rb | 25 +- app/models/hooks/web_hook.rb | 25 +- app/models/label.rb | 1 + app/models/lfs_object.rb | 8 + app/models/lfs_objects_project.rb | 8 + app/models/member.rb | 38 +- app/models/merge_request.rb | 15 +- app/models/merge_request_diff.rb | 16 +- app/models/milestone.rb | 32 + app/models/namespace.rb | 1 + app/models/note.rb | 58 +- app/models/project.rb | 78 +- .../project_services/ci/hip_chat_message.rb | 2 +- .../project_services/ci/hip_chat_service.rb | 2 +- .../project_services/ci/mail_service.rb | 2 +- .../project_services/ci/slack_message.rb | 2 +- .../project_services/ci/slack_service.rb | 2 +- .../project_services/drone_ci_service.rb | 3 +- .../project_services/gitlab_ci_service.rb | 3 +- app/models/project_wiki.rb | 10 + app/models/release.rb | 17 + app/models/repository.rb | 105 ++- app/models/user.rb | 118 +-- app/services/ci/image_for_build_service.rb | 16 +- app/services/compare_service.rb | 4 +- app/services/create_release_service.rb | 31 + app/services/create_tag_service.rb | 8 +- app/services/delete_tag_service.rb | 4 +- app/services/files/create_dir_service.rb | 11 + app/services/files/create_service.rb | 13 +- app/services/git_push_service.rb | 12 - app/services/issues/update_service.rb | 31 +- app/services/labels/group_service.rb | 26 - .../merge_requests/refresh_service.rb | 8 +- app/services/merge_requests/update_service.rb | 53 +- app/services/milestones/group_service.rb | 26 - app/services/notes/create_service.rb | 17 +- app/services/notes/update_service.rb | 2 +- app/services/notification_service.rb | 13 +- app/services/projects/create_service.rb | 10 +- app/services/projects/fork_service.rb | 2 +- app/services/system_hooks_service.rb | 72 +- app/services/update_release_service.rb | 29 + app/uploaders/artifact_uploader.rb | 50 ++ app/uploaders/attachment_uploader.rb | 19 +- app/uploaders/avatar_uploader.rb | 19 +- app/uploaders/file_uploader.rb | 19 +- app/uploaders/lfs_object_uploader.rb | 29 + app/uploaders/uploader_helper.rb | 19 + app/views/admin/abuse_reports/index.html.haml | 21 +- .../application_settings/_form.html.haml | 14 + app/views/admin/applications/show.html.haml | 37 +- .../admin/background_jobs/show.html.haml | 37 +- app/views/admin/deploy_keys/index.html.haml | 37 +- app/views/admin/identities/index.html.haml | 15 +- app/views/admin/labels/_form.html.haml | 4 +- app/views/admin/services/index.html.haml | 39 +- app/views/admin/users/_head.html.haml | 2 +- .../{ => admin}/users/_profile.html.haml | 4 +- app/views/admin/users/show.html.haml | 2 +- app/views/ci/admin/events/index.html.haml | 33 +- app/views/ci/admin/projects/index.html.haml | 23 +- .../ci/admin/runner_projects/index.html.haml | 2 +- app/views/ci/admin/runners/index.html.haml | 31 +- app/views/ci/admin/runners/show.html.haml | 34 +- app/views/ci/events/index.html.haml | 19 - app/views/ci/lints/_create.html.haml | 50 +- app/views/ci/lints/show.html.haml | 16 +- .../ci/notify/build_fail_email.html.haml | 8 +- app/views/ci/notify/build_fail_email.text.erb | 2 + .../ci/notify/build_success_email.html.haml | 8 +- .../ci/notify/build_success_email.text.erb | 2 + app/views/ci/user_sessions/new.html.haml | 3 +- app/views/dashboard/groups/index.html.haml | 2 +- .../dashboard/milestones/index.html.haml | 6 +- app/views/dashboard/milestones/show.html.haml | 76 +- .../dashboard/projects/index.atom.builder | 2 +- app/views/dashboard/snippets/index.html.haml | 26 +- .../doorkeeper/applications/index.html.haml | 30 +- .../doorkeeper/applications/show.html.haml | 38 +- .../authorized_applications/index.html.haml | 25 +- app/views/explore/snippets/index.html.haml | 3 +- app/views/groups/edit.html.haml | 9 + .../group_members/_group_member.html.haml | 6 +- .../groups/group_members/index.html.haml | 15 +- .../groups/milestones/_milestone.html.haml | 2 +- app/views/groups/milestones/index.html.haml | 19 +- app/views/groups/milestones/new.html.haml | 48 ++ app/views/groups/milestones/show.html.haml | 84 +- app/views/groups/show.atom.builder | 2 +- app/views/help/_shortcuts.html.haml | 8 +- app/views/import/bitbucket/status.html.haml | 81 +- .../import/fogbugz/new_user_map.html.haml | 37 +- app/views/import/fogbugz/status.html.haml | 67 +- app/views/import/github/status.html.haml | 67 +- app/views/import/gitlab/status.html.haml | 67 +- app/views/import/gitorious/status.html.haml | 67 +- app/views/import/google_code/status.html.haml | 81 +- app/views/layouts/_piwik.html.haml | 18 +- app/views/layouts/_search.html.haml | 6 +- app/views/layouts/ci/_nav_admin.html.haml | 18 +- app/views/layouts/ci/project.html.haml | 11 - app/views/layouts/header/_default.html.haml | 9 + app/views/layouts/nav/_group.html.haml | 4 +- .../layouts/nav/_group_settings.html.haml | 4 +- app/views/layouts/nav/_profile.html.haml | 4 +- app/views/layouts/nav/_project.html.haml | 10 +- .../layouts/nav/_project_settings.html.haml | 11 +- app/views/layouts/notify.html.haml | 7 +- .../notify/project_was_moved_email.text.erb | 2 +- app/views/profiles/_event_table.html.haml | 29 +- .../notifications/_settings.html.haml | 2 +- app/views/profiles/preferences/show.html.haml | 4 +- app/views/projects/_activity.html.haml | 5 +- app/views/projects/_files.html.haml | 6 + app/views/projects/_home_panel.html.haml | 17 +- app/views/projects/_last_commit.html.haml | 12 + app/views/projects/_readme.html.haml | 13 +- app/views/projects/_zen.html.haml | 9 +- app/views/projects/activity.html.haml | 2 + app/views/projects/blob/_actions.html.haml | 2 +- app/views/projects/blob/_blob.html.haml | 31 +- app/views/projects/blob/_new_dir.html.haml | 16 +- app/views/projects/blob/_remove.html.haml | 16 +- app/views/projects/blob/_upload.html.haml | 20 +- app/views/projects/blob/edit.html.haml | 11 +- app/views/projects/blob/new.html.haml | 16 +- app/views/projects/blob/show.html.haml | 7 +- app/views/projects/branches/_commit.html.haml | 4 +- app/views/projects/builds/_build.html.haml | 53 -- .../projects/builds/_header_title.html.haml | 1 + app/views/projects/builds/index.html.haml | 37 +- app/views/projects/builds/show.html.haml | 44 +- .../projects/buttons/_download.html.haml | 4 + .../projects/buttons/_dropdown.html.haml | 8 +- app/views/projects/buttons/_fork.html.haml | 25 +- .../projects/buttons/_notifications.html.haml | 4 +- app/views/projects/buttons/_star.html.haml | 14 +- app/views/projects/ci_services/edit.html.haml | 1 + .../projects/ci_services/index.html.haml | 1 + .../projects/ci_settings/_form.html.haml | 7 +- .../ci_settings/_no_runners.html.haml | 2 +- app/views/projects/ci_settings/edit.html.haml | 20 +- .../projects/ci_web_hooks/index.html.haml | 24 +- app/views/projects/commit/_ci_menu.html.haml | 6 +- .../projects/commit/_commit_box.html.haml | 8 +- app/views/projects/commit/builds.html.haml | 72 ++ app/views/projects/commit/ci.html.haml | 67 -- app/views/projects/commit/show.html.haml | 2 +- .../commit_statuses/_commit_status.html.haml | 34 +- app/views/projects/commits/_commit.html.haml | 6 +- app/views/projects/commits/_head.html.haml | 2 +- app/views/projects/commits/show.atom.builder | 2 +- app/views/projects/diffs/_diffs.html.haml | 4 +- app/views/projects/diffs/_file.html.haml | 3 +- app/views/projects/edit.html.haml | 29 +- app/views/projects/graphs/_head.html.haml | 4 +- app/views/projects/graphs/ci.html.haml | 13 +- .../projects/graphs/ci/_build_times.haml | 17 +- app/views/projects/graphs/ci/_builds.haml | 50 +- app/views/projects/graphs/ci/_overall.haml | 16 +- app/views/projects/graphs/commits.html.haml | 60 +- app/views/projects/graphs/show.html.haml | 29 +- app/views/projects/hooks/index.html.haml | 2 +- app/views/projects/imports/new.html.haml | 25 +- app/views/projects/imports/show.html.haml | 2 +- .../projects/issues/_discussion.html.haml | 8 +- app/views/projects/issues/_issue.html.haml | 2 - app/views/projects/issues/_issues.html.haml | 7 +- app/views/projects/labels/destroy.js.haml | 2 +- app/views/projects/labels/index.html.haml | 6 +- .../merge_requests/_discussion.html.haml | 8 +- .../merge_requests/_merge_request.html.haml | 10 +- .../merge_requests/_merge_requests.html.haml | 6 +- .../merge_requests/_new_compare.html.haml | 17 +- .../merge_requests/show/_commits.html.haml | 4 + .../merge_requests/show/_diffs.html.haml | 2 +- .../show/_how_to_merge.html.haml | 7 +- .../merge_requests/widget/_heading.html.haml | 9 +- .../merge_requests/widget/_merged.html.haml | 27 +- .../widget/open/_accept.html.haml | 15 +- .../widget/open/_check.html.haml | 8 +- app/views/projects/milestones/_form.html.haml | 6 +- app/views/projects/new.html.haml | 29 +- app/views/projects/notes/_form.html.haml | 2 +- app/views/projects/notes/_note.html.haml | 25 +- .../projects/notes/_notes_with_form.html.haml | 4 +- .../project_members/_project_member.html.haml | 11 +- .../projects/project_members/_team.html.haml | 4 +- .../projects/project_members/index.html.haml | 9 +- .../projects/project_members/update.js.haml | 3 +- .../_branches_list.html.haml | 59 +- app/views/projects/releases/edit.html.haml | 19 + app/views/projects/remove_fork.js.haml | 2 + app/views/projects/runners/edit.html.haml | 2 + app/views/projects/runners/index.html.haml | 1 + app/views/projects/runners/show.html.haml | 122 +-- app/views/projects/services/index.html.haml | 39 +- app/views/projects/show.atom.builder | 2 +- app/views/projects/show.html.haml | 17 +- .../projects/snippets/_actions.html.haml | 11 + app/views/projects/snippets/index.html.haml | 20 +- app/views/projects/snippets/show.html.haml | 46 +- app/views/projects/tags/_download.html.haml | 17 + app/views/projects/tags/_tag.html.haml | 18 +- app/views/projects/tags/destroy.js.haml | 3 - app/views/projects/tags/new.html.haml | 20 +- app/views/projects/tags/show.html.haml | 39 + app/views/projects/tree/_blob_item.html.haml | 2 +- app/views/projects/tree/_readme.html.haml | 6 +- app/views/projects/tree/_tree.html.haml | 73 -- .../projects/tree/_tree_content.html.haml | 40 + .../projects/tree/_tree_header.html.haml | 32 + app/views/projects/tree/_tree_item.html.haml | 2 +- app/views/projects/tree/show.html.haml | 8 +- app/views/projects/triggers/index.html.haml | 14 +- app/views/projects/variables/show.html.haml | 1 + app/views/projects/wikis/_form.html.haml | 4 +- app/views/projects/wikis/history.html.haml | 49 +- app/views/search/_category.html.haml | 7 + app/views/search/results/_commit.html.haml | 2 + app/views/shared/_clone_panel.html.haml | 5 +- .../_commit_message_container.html.haml | 8 +- app/views/shared/_import_form.html.haml | 16 + app/views/shared/_new_commit_form.html.haml | 18 + app/views/shared/issuable/_context.html.haml | 6 +- app/views/shared/issuable/_filter.html.haml | 12 +- app/views/shared/issuable/_form.html.haml | 9 +- app/views/shared/projects/_list.html.haml | 4 +- app/views/shared/projects/_project.html.haml | 4 +- app/views/shared/snippets/_header.html.haml | 24 + app/views/shared/snippets/_snippet.html.haml | 1 - .../sherlock/file_samples/show.html.haml | 55 ++ .../sherlock/queries/_backtrace.html.haml | 27 + app/views/sherlock/queries/_general.html.haml | 50 ++ app/views/sherlock/queries/show.html.haml | 26 + .../transactions/_file_samples.html.haml | 24 + .../sherlock/transactions/_general.html.haml | 33 + .../sherlock/transactions/_queries.html.haml | 24 + .../sherlock/transactions/index.html.haml | 42 + .../sherlock/transactions/show.html.haml | 36 + app/views/snippets/_actions.html.haml | 11 + app/views/snippets/show.html.haml | 49 +- app/views/users/_projects.html.haml | 13 - app/views/users/calendar.html.haml | 6 +- app/views/users/show.atom.builder | 2 +- app/views/users/show.html.haml | 151 ++-- app/views/votes/_votes_block.html.haml | 42 +- app/views/votes/_votes_inline.html.haml | 9 - app/workers/repository_fork_worker.rb | 14 +- app/workers/repository_import_worker.rb | 62 +- app/workers/stuck_ci_builds_worker.rb | 21 + config/environments/test.rb | 2 + config/gitlab.yml.example | 54 +- config/initializers/1_settings.rb | 39 +- config/initializers/2_app.rb | 6 +- config/initializers/inflections.rb | 21 - config/initializers/rack_profiler.rb | 10 - config/initializers/session_store.rb | 25 +- config/initializers/sherlock.rb | 5 + config/initializers/state_machine_patch.rb | 9 - config/locales/sherlock.en.yml | 37 + config/routes.rb | 44 +- ...1013092124_add_artifacts_file_to_builds.rb | 5 + db/migrate/20151019111551_fix_build_tags.rb | 6 +- ...20151019111703_fail_build_without_names.rb | 5 +- ...51020145526_add_services_template_index.rb | 5 + ...151023112551_fail_build_with_empty_name.rb | 8 + .../20151023144219_remove_satellites.rb | 17 + .../20151026182941_add_project_path_index.rb | 9 + .../20151103001141_add_public_to_group.rb | 5 + ...151103133339_add_shared_runners_setting.rb | 5 + .../20151103134857_create_lfs_objects.rb | 10 + ...51103134958_create_lfs_objects_projects.rb | 12 + .../20151104105513_add_file_to_lfs_objects.rb | 5 + db/migrate/20151105094515_create_releases.rb | 14 + .../20151106000015_add_is_award_to_notes.rb | 6 + ..._artifacts_size_to_application_settings.rb | 5 + ...51110125604_add_import_error_to_project.rb | 5 + ...14113410_add_index_for_lfs_oid_and_size.rb | 6 + ...1116144118_add_unique_for_lfs_oid_index.rb | 7 + ...0151118162244_add_projects_public_index.rb | 5 + db/schema.rb | 52 +- doc/README.md | 30 +- doc/api/README.md | 1 + doc/api/commits.md | 10 +- doc/api/merge_requests.md | 20 +- doc/api/notes.md | 5 +- doc/api/projects.md | 6 + doc/api/repositories.md | 74 -- doc/api/repository_files.md | 3 +- doc/api/tags.md | 131 +++ doc/ci/api/README.md | 2 +- doc/ci/api/projects.md | 22 +- doc/ci/api/runners.md | 4 +- doc/ci/docker/using_docker_build.md | 4 +- doc/ci/docker/using_docker_images.md | 2 +- doc/ci/examples/README.md | 6 +- ...and-deploy-python-application-to-heroku.md | 2 +- ...t-and-deploy-ruby-application-to-heroku.md | 4 +- doc/ci/examples/test-clojure-application.md | 4 +- doc/ci/quick_start/README.md | 6 +- doc/ci/yaml/README.md | 110 ++- doc/customization/libravatar.md | 6 +- doc/development/architecture.md | 2 +- doc/development/profiling.md | 45 +- doc/development/rake_tasks.md | 2 +- doc/development/shared_files.md | 33 + doc/development/shell_commands.md | 20 +- doc/hooks/custom_hooks.md | 2 +- doc/install/database_mysql.md | 2 +- doc/install/installation.md | 43 +- doc/install/requirements.md | 6 +- doc/integration/facebook.md | 97 +++ doc/integration/facebook_api_keys.png | Bin 0 -> 125921 bytes doc/integration/facebook_app_settings.png | Bin 0 -> 134387 bytes doc/integration/facebook_website_url.png | Bin 0 -> 42292 bytes doc/integration/ldap.md | 4 +- doc/integration/omniauth.md | 5 +- ...corporate_contributor_license_agreement.md | 2 +- ...ndividual_contributor_license_agreement.md | 2 +- doc/markdown/markdown.md | 12 +- doc/operations/unicorn.md | 6 +- doc/permissions/permissions.md | 4 +- doc/raketasks/backup_restore.md | 3 +- doc/release/monthly.md | 90 ++- doc/release/security.md | 4 +- doc/ssh/README.md | 9 +- doc/update/6.x-or-7.x-to-7.14.md | 2 +- doc/update/8.1-to-8.2.md | 189 +++++ doc/update/mysql_to_postgresql.md | 4 + doc/update/patch_versions.md | 4 +- doc/web_hooks/web_hooks.md | 5 +- doc/workflow/README.md | 3 + doc/workflow/award_emoji.png | Bin 0 -> 6620 bytes doc/workflow/gitlab_flow.md | 23 +- .../import_projects_from_gitlab_com.md | 4 +- doc/workflow/importing/migrating_from_svn.md | 4 +- doc/workflow/lfs/lfs_administration.md | 41 + .../lfs/manage_large_binaries_with_git_lfs.md | 126 +++ doc/workflow/merge_requests.md | 12 + .../merge_requests/commit_compare.png | Bin 0 -> 89631 bytes .../merge_requests/merge_request_diff.png | Bin 0 -> 120422 bytes .../merge_request_diff_without_whitespace.png | Bin 0 -> 98887 bytes doc/workflow/milestones.md | 13 + doc/workflow/milestones/form.png | Bin 0 -> 88591 bytes doc/workflow/milestones/group_form.png | Bin 0 -> 77087 bytes doc/workflow/releases.md | 20 + doc/workflow/releases/new_tag.png | Bin 0 -> 154755 bytes doc/workflow/releases/tags.png | Bin 0 -> 165449 bytes doc/workflow/voting_slider.png | Bin 5329 -> 0 bytes doc_styleguide.md | 2 + features/groups.feature | 17 +- features/profile/profile.feature | 1 + features/project/commits/tags.feature | 20 +- features/project/issues/award_emoji.feature | 14 + features/project/merge_requests.feature | 15 + features/project/project.feature | 6 + features/project/snippets.feature | 2 +- features/project/source/browse_files.feature | 24 +- features/snippets/snippets.feature | 2 +- features/steps/abuse_reports.rb | 2 +- features/steps/dashboard/new_project.rb | 1 - features/steps/groups.rb | 42 +- features/steps/profile/profile.rb | 15 +- features/steps/project/commits/tags.rb | 36 +- features/steps/project/graph.rb | 6 +- features/steps/project/issues/award_emoji.rb | 41 + features/steps/project/merge_requests.rb | 33 + features/steps/project/project.rb | 8 +- features/steps/project/snippets.rb | 8 +- features/steps/project/source/browse_files.rb | 39 +- features/steps/shared/paths.rb | 4 + features/steps/shared/project.rb | 7 + features/steps/shared/project_tab.rb | 2 +- features/steps/snippets/snippets.rb | 6 +- features/steps/snippets/user.rb | 6 +- lib/api/api.rb | 3 +- lib/api/entities.rb | 58 +- lib/api/files.rb | 4 +- lib/api/helpers.rb | 50 +- lib/api/projects.rb | 10 +- lib/api/repositories.rb | 35 - lib/api/tags.rb | 86 ++ lib/award_emoji.rb | 12 + lib/backup/artifacts.rb | 13 + lib/backup/builds.rb | 33 +- lib/backup/database.rb | 54 +- lib/backup/files.rb | 40 + lib/backup/lfs.rb | 13 + lib/backup/manager.rb | 14 +- lib/backup/repository.rb | 6 +- lib/backup/uploads.rb | 32 +- lib/ci/api/api.rb | 3 +- lib/ci/api/builds.rb | 102 +++ lib/ci/api/entities.rb | 7 + lib/ci/api/helpers.rb | 15 +- lib/ci/charts.rb | 3 +- lib/ci/gitlab_ci_yaml_processor.rb | 147 ++-- lib/file_streamer.rb | 16 + lib/gitlab/backend/grack_auth.rb | 16 +- lib/gitlab/backend/shell.rb | 7 +- lib/gitlab/compare_result.rb | 4 +- lib/gitlab/current_settings.rb | 4 +- lib/gitlab/database.rb | 2 +- lib/gitlab/force_push_check.rb | 2 +- lib/gitlab/git_access.rb | 6 +- lib/gitlab/git_ref_validator.rb | 2 +- lib/gitlab/google_code_import/importer.rb | 93 +-- lib/gitlab/inline_diff.rb | 93 ++- lib/gitlab/lfs/response.rb | 327 ++++++++ lib/gitlab/lfs/router.rb | 97 +++ lib/gitlab/markdown/reference_filter.rb | 8 +- lib/gitlab/markdown/relative_link_filter.rb | 2 +- lib/gitlab/markdown/sanitization_filter.rb | 19 + lib/gitlab/o_auth/provider.rb | 9 +- lib/gitlab/project_search_results.rb | 18 +- lib/gitlab/push_data_builder.rb | 33 +- lib/gitlab/regex.rb | 17 + lib/gitlab/sherlock.rb | 19 + lib/gitlab/sherlock/collection.rb | 49 ++ lib/gitlab/sherlock/file_sample.rb | 31 + lib/gitlab/sherlock/line_profiler.rb | 98 +++ lib/gitlab/sherlock/line_sample.rb | 36 + lib/gitlab/sherlock/location.rb | 26 + lib/gitlab/sherlock/middleware.rb | 41 + lib/gitlab/sherlock/query.rb | 114 +++ lib/gitlab/sherlock/transaction.rb | 131 +++ lib/gitlab/sql/union.rb | 34 + lib/gitlab/upgrader.rb | 8 +- lib/support/init.d/gitlab | 68 +- lib/support/init.d/gitlab.default.example | 11 +- lib/support/nginx/gitlab | 47 +- lib/support/nginx/gitlab-ssl | 47 +- lib/tasks/flay.rake | 9 + lib/tasks/flog.rake | 25 + lib/tasks/gitlab/backup.rake | 42 + lib/tasks/gitlab/check.rake | 4 +- lib/tasks/gitlab/shell.rake | 10 +- lib/tasks/grape.rake | 8 + lib/tasks/spinach.rake | 6 +- lib/uploaded_file.rb | 37 + shared/.gitkeep | 0 shared/artifacts/.gitkeep | 0 shared/artifacts/tmp/cache/.gitkeep | 0 shared/artifacts/tmp/uploads/.gitkeep | 0 .../gitlab/markdown/reference_filter_spec.rb | 41 + spec/benchmarks/models/milestone_spec.rb | 17 + spec/benchmarks/models/user_spec.rb | 36 + .../services/projects/create_service_spec.rb | 28 + .../admin/users_controller_spec.rb | 15 - .../projects/compare_controller_spec.rb | 16 + .../merge_requests_controller_spec.rb | 28 + spec/controllers/projects_controller_spec.rb | 111 ++- spec/controllers/snippets_controller_spec.rb | 118 +++ spec/controllers/users_controller_spec.rb | 23 +- spec/factories.rb | 12 + spec/factories/ci/projects.rb | 12 +- spec/factories/labels.rb | 1 + spec/factories/lfs_objects.rb | 12 + spec/factories/lfs_objects_projects.rb | 8 + spec/factories/merge_requests.rb | 1 + spec/factories/releases.rb | 21 + spec/features/admin/admin_users_spec.rb | 50 +- spec/features/builds_spec.rb | 35 +- spec/features/ci/events_spec.rb | 22 - spec/features/commits_spec.rb | 18 +- spec/features/projects_spec.rb | 29 +- spec/features/runners_spec.rb | 12 +- .../contributed_projects_finder_spec.rb | 35 + spec/finders/groups_finder_spec.rb | 48 ++ spec/finders/joined_groups_finder_spec.rb | 49 ++ spec/finders/personal_projects_finder_spec.rb | 34 + spec/finders/projects_finder_spec.rb | 75 +- spec/helpers/issues_helper_spec.rb | 26 + spec/helpers/search_helper_spec.rb | 5 + spec/lib/ci/gitlab_ci_yaml_processor_spec.rb | 472 ++++++++--- spec/lib/gitlab/backend/grack_auth_spec.rb | 16 + .../lib/gitlab/{diff => }/inline_diff_spec.rb | 0 spec/lib/gitlab/lfs/lfs_router_spec.rb | 765 ++++++++++++++++++ .../markdown/sanitization_filter_spec.rb | 101 ++- .../lib/gitlab/project_search_results_spec.rb | 4 +- spec/lib/gitlab/push_data_builder_spec.rb | 6 + spec/lib/gitlab/sherlock/collection_spec.rb | 82 ++ spec/lib/gitlab/sherlock/file_sample_spec.rb | 54 ++ .../lib/gitlab/sherlock/line_profiler_spec.rb | 73 ++ spec/lib/gitlab/sherlock/line_sample_spec.rb | 33 + spec/lib/gitlab/sherlock/location_spec.rb | 40 + spec/lib/gitlab/sherlock/middleware_spec.rb | 79 ++ spec/lib/gitlab/sherlock/query_spec.rb | 113 +++ spec/lib/gitlab/sherlock/transaction_spec.rb | 222 +++++ spec/lib/gitlab/sql/union_spec.rb | 16 + spec/lib/votes_spec.rb | 188 ----- spec/mailers/notify_spec.rb | 2 +- spec/models/application_setting_spec.rb | 32 +- spec/models/build_spec.rb | 15 + spec/models/ci/commit_spec.rb | 25 +- spec/models/ci/project_spec.rb | 20 +- spec/models/ci/runner_project_spec.rb | 2 +- spec/models/ci/runner_spec.rb | 2 +- spec/models/ci/service_spec.rb | 2 +- spec/models/ci/trigger_spec.rb | 12 + spec/models/ci/variable_spec.rb | 2 +- spec/models/ci/web_hook_spec.rb | 2 +- spec/models/commit_status_spec.rb | 33 + spec/models/event_spec.rb | 38 + spec/models/generic_commit_status_spec.rb | 33 + spec/models/global_milestone_spec.rb | 65 ++ spec/models/group_spec.rb | 47 ++ spec/models/label_spec.rb | 1 + spec/models/merge_request_spec.rb | 32 + spec/models/milestone_spec.rb | 28 + spec/models/namespace_spec.rb | 1 + spec/models/note_spec.rb | 87 +- .../gitlab_ci_service_spec.rb | 2 +- spec/models/project_spec.rb | 39 +- spec/models/project_wiki_spec.rb | 20 +- spec/models/release_spec.rb | 28 + spec/models/repository_spec.rb | 9 + spec/models/user_spec.rb | 48 +- spec/requests/api/api_helpers_spec.rb | 26 +- spec/requests/api/commit_status_spec.rb | 4 +- spec/requests/api/files_spec.rb | 1 + spec/requests/api/projects_spec.rb | 57 +- spec/requests/api/repositories_spec.rb | 75 -- spec/requests/api/services_spec.rb | 1 + spec/requests/api/tags_spec.rb | 196 +++++ spec/requests/api/users_spec.rb | 15 +- spec/requests/ci/api/builds_spec.rb | 196 ++++- spec/requests/ci/api/commits_spec.rb | 2 +- spec/requests/ci/api/projects_spec.rb | 116 +-- spec/requests/ci/api/triggers_spec.rb | 2 +- .../services/ci/create_commit_service_spec.rb | 24 +- .../ci/create_trigger_request_service_spec.rb | 2 +- .../ci/image_for_build_service_spec.rb | 5 +- .../ci/register_build_service_spec.rb | 4 + spec/services/issues/update_service_spec.rb | 12 +- .../merge_requests/refresh_service_spec.rb | 19 + .../merge_requests/update_service_spec.rb | 11 +- .../services/milestones/close_service_spec.rb | 28 + .../milestones/create_service_spec.rb | 24 + .../services/milestones/group_service_spec.rb | 70 -- spec/services/notes/create_service_spec.rb | 34 + spec/services/projects/create_service_spec.rb | 22 + spec/services/projects/fork_service_spec.rb | 19 +- spec/support/test_env.rb | 8 +- spec/tasks/gitlab/backup_rake_spec.rb | 32 +- spec/workers/repository_fork_worker_spec.rb | 1 - spec/workers/stuck_ci_builds_worker_spec.rb | 44 + vendor/assets/javascripts/clipboard.js | 621 ++++++++++++++ 711 files changed, 13412 insertions(+), 4706 deletions(-) create mode 100644 .flayignore delete mode 100644 GITLAB_GIT_HTTP_SERVER_VERSION create mode 100644 GITLAB_WORKHORSE_VERSION mode change 100755 => 100644 app/assets/fonts/SourceSansPro-Black.ttf create mode 100644 app/assets/fonts/SourceSansPro-BlackIt.ttf mode change 100755 => 100644 app/assets/fonts/SourceSansPro-Bold.ttf create mode 100644 app/assets/fonts/SourceSansPro-BoldIt.ttf mode change 100755 => 100644 app/assets/fonts/SourceSansPro-ExtraLight.ttf create mode 100644 app/assets/fonts/SourceSansPro-ExtraLightIt.ttf create mode 100644 app/assets/fonts/SourceSansPro-It.ttf mode change 100755 => 100644 app/assets/fonts/SourceSansPro-Light.ttf create mode 100644 app/assets/fonts/SourceSansPro-LightIt.ttf mode change 100755 => 100644 app/assets/fonts/SourceSansPro-Regular.ttf mode change 100755 => 100644 app/assets/fonts/SourceSansPro-Semibold.ttf create mode 100644 app/assets/fonts/SourceSansPro-SemiboldIt.ttf create mode 100644 app/assets/images/auth_buttons/facebook_64.png create mode 100644 app/assets/javascripts/awards_handler.coffee create mode 100644 app/assets/javascripts/copy_to_clipboard.js.coffee create mode 100644 app/assets/javascripts/new_commit_form.js.coffee create mode 100644 app/assets/stylesheets/pages/sherlock.scss create mode 100644 app/controllers/admin/impersonation_controller.rb delete mode 100644 app/controllers/ci/events_controller.rb create mode 100644 app/controllers/concerns/creates_merge_request_for_commit.rb create mode 100644 app/controllers/concerns/global_milestones.rb create mode 100644 app/controllers/projects/releases_controller.rb create mode 100644 app/controllers/sherlock/application_controller.rb create mode 100644 app/controllers/sherlock/file_samples_controller.rb create mode 100644 app/controllers/sherlock/queries_controller.rb create mode 100644 app/controllers/sherlock/transactions_controller.rb create mode 100644 app/finders/contributed_projects_finder.rb create mode 100644 app/finders/joined_groups_finder.rb create mode 100644 app/finders/milestones_finder.rb create mode 100644 app/finders/personal_projects_finder.rb delete mode 100644 app/helpers/builds_helper.rb create mode 100644 app/helpers/clipboard_helper.rb create mode 100644 app/models/global_label.rb rename app/models/{group_milestone.rb => global_milestone.rb} (76%) delete mode 100644 app/models/group_label.rb create mode 100644 app/models/lfs_object.rb create mode 100644 app/models/lfs_objects_project.rb create mode 100644 app/models/release.rb create mode 100644 app/services/create_release_service.rb delete mode 100644 app/services/labels/group_service.rb delete mode 100644 app/services/milestones/group_service.rb create mode 100644 app/services/update_release_service.rb create mode 100644 app/uploaders/artifact_uploader.rb create mode 100644 app/uploaders/lfs_object_uploader.rb create mode 100644 app/uploaders/uploader_helper.rb rename app/views/{ => admin}/users/_profile.html.haml (83%) delete mode 100644 app/views/ci/events/index.html.haml create mode 100644 app/views/groups/milestones/new.html.haml delete mode 100644 app/views/layouts/ci/project.html.haml create mode 100644 app/views/projects/_files.html.haml create mode 100644 app/views/projects/_last_commit.html.haml delete mode 100644 app/views/projects/builds/_build.html.haml create mode 100644 app/views/projects/builds/_header_title.html.haml create mode 100644 app/views/projects/buttons/_download.html.haml create mode 100644 app/views/projects/commit/builds.html.haml delete mode 100644 app/views/projects/commit/ci.html.haml create mode 100644 app/views/projects/releases/edit.html.haml create mode 100644 app/views/projects/remove_fork.js.haml create mode 100644 app/views/projects/snippets/_actions.html.haml create mode 100644 app/views/projects/tags/_download.html.haml delete mode 100644 app/views/projects/tags/destroy.js.haml create mode 100644 app/views/projects/tags/show.html.haml delete mode 100644 app/views/projects/tree/_tree.html.haml create mode 100644 app/views/projects/tree/_tree_content.html.haml create mode 100644 app/views/projects/tree/_tree_header.html.haml create mode 100644 app/views/search/results/_commit.html.haml create mode 100644 app/views/shared/_import_form.html.haml create mode 100644 app/views/shared/_new_commit_form.html.haml create mode 100644 app/views/shared/snippets/_header.html.haml create mode 100644 app/views/sherlock/file_samples/show.html.haml create mode 100644 app/views/sherlock/queries/_backtrace.html.haml create mode 100644 app/views/sherlock/queries/_general.html.haml create mode 100644 app/views/sherlock/queries/show.html.haml create mode 100644 app/views/sherlock/transactions/_file_samples.html.haml create mode 100644 app/views/sherlock/transactions/_general.html.haml create mode 100644 app/views/sherlock/transactions/_queries.html.haml create mode 100644 app/views/sherlock/transactions/index.html.haml create mode 100644 app/views/sherlock/transactions/show.html.haml create mode 100644 app/views/snippets/_actions.html.haml delete mode 100644 app/views/users/_projects.html.haml delete mode 100644 app/views/votes/_votes_inline.html.haml create mode 100644 app/workers/stuck_ci_builds_worker.rb delete mode 100644 config/initializers/rack_profiler.rb create mode 100644 config/initializers/sherlock.rb delete mode 100644 config/initializers/state_machine_patch.rb create mode 100644 config/locales/sherlock.en.yml create mode 100644 db/migrate/20151013092124_add_artifacts_file_to_builds.rb create mode 100644 db/migrate/20151020145526_add_services_template_index.rb create mode 100644 db/migrate/20151023112551_fail_build_with_empty_name.rb create mode 100644 db/migrate/20151023144219_remove_satellites.rb create mode 100644 db/migrate/20151026182941_add_project_path_index.rb create mode 100644 db/migrate/20151103001141_add_public_to_group.rb create mode 100644 db/migrate/20151103133339_add_shared_runners_setting.rb create mode 100644 db/migrate/20151103134857_create_lfs_objects.rb create mode 100644 db/migrate/20151103134958_create_lfs_objects_projects.rb create mode 100644 db/migrate/20151104105513_add_file_to_lfs_objects.rb create mode 100644 db/migrate/20151105094515_create_releases.rb create mode 100644 db/migrate/20151106000015_add_is_award_to_notes.rb create mode 100644 db/migrate/20151109100728_add_max_artifacts_size_to_application_settings.rb create mode 100644 db/migrate/20151110125604_add_import_error_to_project.rb create mode 100644 db/migrate/20151114113410_add_index_for_lfs_oid_and_size.rb create mode 100644 db/migrate/20151116144118_add_unique_for_lfs_oid_index.rb create mode 100644 db/migrate/20151118162244_add_projects_public_index.rb create mode 100644 doc/api/tags.md create mode 100644 doc/development/shared_files.md create mode 100644 doc/integration/facebook.md create mode 100644 doc/integration/facebook_api_keys.png create mode 100644 doc/integration/facebook_app_settings.png create mode 100644 doc/integration/facebook_website_url.png create mode 100644 doc/update/8.1-to-8.2.md create mode 100644 doc/workflow/award_emoji.png create mode 100644 doc/workflow/lfs/lfs_administration.md create mode 100644 doc/workflow/lfs/manage_large_binaries_with_git_lfs.md create mode 100644 doc/workflow/merge_requests/commit_compare.png create mode 100644 doc/workflow/merge_requests/merge_request_diff.png create mode 100644 doc/workflow/merge_requests/merge_request_diff_without_whitespace.png create mode 100644 doc/workflow/milestones.md create mode 100644 doc/workflow/milestones/form.png create mode 100644 doc/workflow/milestones/group_form.png create mode 100644 doc/workflow/releases.md create mode 100644 doc/workflow/releases/new_tag.png create mode 100644 doc/workflow/releases/tags.png delete mode 100644 doc/workflow/voting_slider.png create mode 100644 features/project/issues/award_emoji.feature create mode 100644 features/steps/project/issues/award_emoji.rb create mode 100644 lib/api/tags.rb create mode 100644 lib/award_emoji.rb create mode 100644 lib/backup/artifacts.rb create mode 100644 lib/backup/files.rb create mode 100644 lib/backup/lfs.rb create mode 100644 lib/file_streamer.rb create mode 100644 lib/gitlab/lfs/response.rb create mode 100644 lib/gitlab/lfs/router.rb create mode 100644 lib/gitlab/sherlock.rb create mode 100644 lib/gitlab/sherlock/collection.rb create mode 100644 lib/gitlab/sherlock/file_sample.rb create mode 100644 lib/gitlab/sherlock/line_profiler.rb create mode 100644 lib/gitlab/sherlock/line_sample.rb create mode 100644 lib/gitlab/sherlock/location.rb create mode 100644 lib/gitlab/sherlock/middleware.rb create mode 100644 lib/gitlab/sherlock/query.rb create mode 100644 lib/gitlab/sherlock/transaction.rb create mode 100644 lib/gitlab/sql/union.rb create mode 100644 lib/tasks/flay.rake create mode 100644 lib/tasks/flog.rake create mode 100644 lib/tasks/grape.rake create mode 100644 lib/uploaded_file.rb create mode 100644 shared/.gitkeep create mode 100644 shared/artifacts/.gitkeep create mode 100644 shared/artifacts/tmp/cache/.gitkeep create mode 100644 shared/artifacts/tmp/uploads/.gitkeep create mode 100644 spec/benchmarks/lib/gitlab/markdown/reference_filter_spec.rb create mode 100644 spec/benchmarks/models/milestone_spec.rb create mode 100644 spec/benchmarks/services/projects/create_service_spec.rb create mode 100644 spec/controllers/snippets_controller_spec.rb create mode 100644 spec/factories/lfs_objects.rb create mode 100644 spec/factories/lfs_objects_projects.rb create mode 100644 spec/factories/releases.rb delete mode 100644 spec/features/ci/events_spec.rb create mode 100644 spec/finders/contributed_projects_finder_spec.rb create mode 100644 spec/finders/groups_finder_spec.rb create mode 100644 spec/finders/joined_groups_finder_spec.rb create mode 100644 spec/finders/personal_projects_finder_spec.rb rename spec/lib/gitlab/{diff => }/inline_diff_spec.rb (100%) create mode 100644 spec/lib/gitlab/lfs/lfs_router_spec.rb create mode 100644 spec/lib/gitlab/sherlock/collection_spec.rb create mode 100644 spec/lib/gitlab/sherlock/file_sample_spec.rb create mode 100644 spec/lib/gitlab/sherlock/line_profiler_spec.rb create mode 100644 spec/lib/gitlab/sherlock/line_sample_spec.rb create mode 100644 spec/lib/gitlab/sherlock/location_spec.rb create mode 100644 spec/lib/gitlab/sherlock/middleware_spec.rb create mode 100644 spec/lib/gitlab/sherlock/query_spec.rb create mode 100644 spec/lib/gitlab/sherlock/transaction_spec.rb create mode 100644 spec/lib/gitlab/sql/union_spec.rb delete mode 100644 spec/lib/votes_spec.rb create mode 100644 spec/models/global_milestone_spec.rb create mode 100644 spec/models/release_spec.rb create mode 100644 spec/requests/api/tags_spec.rb create mode 100644 spec/services/milestones/close_service_spec.rb create mode 100644 spec/services/milestones/create_service_spec.rb delete mode 100644 spec/services/milestones/group_service_spec.rb create mode 100644 spec/workers/stuck_ci_builds_worker_spec.rb create mode 100644 vendor/assets/javascripts/clipboard.js diff --git a/.flayignore b/.flayignore new file mode 100644 index 0000000000..9c9875d4f9 --- /dev/null +++ b/.flayignore @@ -0,0 +1 @@ +*.erb diff --git a/.gitignore b/.gitignore index 73bde4cc76..f5b6427ca0 100644 --- a/.gitignore +++ b/.gitignore @@ -37,8 +37,10 @@ nohup.out public/assets/ public/uploads.* public/uploads/ +shared/artifacts/ rails_best_practices_output.html /tags tmp/ vendor/bundle/* builds/* +shared/* diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cf6d28b01a..141e7ba41d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -73,3 +73,18 @@ brakeman: tags: - ruby - mysql + +flog: + script: + - bundle exec rake flog + tags: + - ruby + - mysql + +flay: + script: + - bundle exec rake flay + tags: + - ruby + - mysql + allow_failure: true diff --git a/CHANGELOG b/CHANGELOG index 42fb5639f8..49fa3d9435 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,16 +1,107 @@ Please view this file on the master branch, on stable branches it's out of date. +v 8.2.1 + - Forcefully update builds that didn't want to update with state machine + - Fix: saving GitLabCiService as Admin Template + +v 8.2.0 + - Improved performance of finding projects and groups in various places + - Improved performance of rendering user profile pages and Atom feeds + - Expose build artifacts path as config option + - Fix grouping of contributors by email in graph. + - Remove CSS property preventing hard tabs from rendering in Chromium 45 (Stan Hu) + - Fix Drone CI service template not saving properly (Stan Hu) + - Fix avatars not showing in Atom feeds and project issues when Gravatar disabled (Stan Hu) + - Added a GitLab specific profiling tool called "Sherlock" (see GitLab CE merge request #1749) + - Upgrade gitlab_git to 7.2.20 and rugged to 0.23.3 (Stan Hu) + - Improved performance of finding users by one of their Email addresses + - Add allow_failure field to commit status API (Stan Hu) + - Commits without .gitlab-ci.yml are marked as skipped + - Save detailed error when YAML syntax is invalid + - Since GitLab CI is enabled by default, remove enabling it by pushing .gitlab-ci.yml + - Added build artifacts + - Improved performance of replacing references in comments + - Show last project commit to default branch on project home page + - Highlight comment based on anchor in URL + - Adds ability to remove the forked relationship from project settings screen. (Han Loong Liauw) + - Improved performance of sorting milestone issues + - Allow users to select the Files view as default project view (Cristian Bica) + - Show "Empty Repository Page" for repository without branches (Artem V. Navrotskiy) + - Fix: Inability to reply to code comments in the MR view, if the MR comes from a fork + - Use git follow flag for commits page when retrieve history for file or directory + - Show merge request CI status on merge requests index page + - Send build name and stage in CI notification e-mail + - Extend yml syntax for only and except to support specifying repository path + - Enable shared runners to all new projects + - Bump GitLab-Workhorse to 0.4.1 + - Allow to define cache in `.gitlab-ci.yml` + - Fix: 500 error returned if destroy request without HTTP referer (Kazuki Shimizu) + - Remove deprecated CI events from project settings page + - Improve personal snippet access workflow (Douglas Alexandre) + - [API] Add ability to fetch the commit ID of the last commit that actually touched a file + - Fix omniauth documentation setting for omnibus configuration (Jon Cairns) + - Add "New file" link to dropdown on project page + - Include commit logs in project search + - Add "added", "modified" and "removed" properties to commit object in webhook + - Rename "Back to" links to "Go to" because its not always a case it point to place user come from + - Allow groups to appear in the search results if the group owner allows it + - Add email notification to former assignee upon unassignment (Adam Lieskovský) + - New design for project graphs page + - Remove deprecated dumped yaml file generated from previous job definitions + - Fix incoming email config defaults + - Show specific runners from projects where user is master or owner + - MR target branch is now visible on a list view when it is different from project's default one + - Improve Continuous Integration graphs page + - Make color of "Accept Merge Request" button consistent with current build status + - Add ignore white space option in merge request diff and commit and compare view + - Ability to add release notes (markdown text and attachments) to git tags (aka Releases) + - Relative links from a repositories README.md now link to the default branch + - Fix trailing whitespace issue in merge request/issue title + - Fix bug when milestone/label filter was empty for dashboard issues page + - Add ability to create milestone in group projects from single form + - Add option to create merge request when editing/creating a file (Dirceu Tiegs) + - Prevent the last owner of a group from being able to delete themselves by 'adding' themselves as a master (James Lopez) + - Add Award Emoji to issue and merge request pages + +v 8.1.4 + - Fix bug where manually merged branches in a MR would end up with an empty diff (Stan Hu) + - Prevent redirect loop when home_page_url is set to the root URL + - Fix incoming email config defaults + - Remove CSS property preventing hard tabs from rendering in Chromium 45 (Stan Hu) + +v 8.1.3 + - Force update refs/merge-requests/X/head upon a push to the source branch of a merge request (Stan Hu) + - Spread out runner contacted_at updates + - Use issue editor as cross reference comment author when issue is edited with a new mention + - Add Facebook authentication + +v 8.1.2 + - Fix cloning Wiki repositories via HTTP (Stan Hu) + - Add migration to remove satellites directory + - Fix specific runners visibility + - Fix 500 when editing CI service + - Require CI jobs to be named + - Fix CSS for runner status + - Fix CI badge + - Allow developer to manage builds + +v 8.1.1 + - Removed, see 8.1.2 + v 8.1.0 - Ensure MySQL CI limits DB migrations occur after the fields have been created (Stan Hu) + - Fix duplicate repositories in GitHub import page (Stan Hu) - Redirect to a default path if HTTP_REFERER is not set (Stan Hu) + - Adds ability to create directories using the web editor (Ben Ford) + - Cleanup stuck CI builds - Send an email to admin email when a user is reported for spam (Jonathan Rochkind) - Show notifications button when user is member of group rather than project (Grzegorz Bizon) - Fix bug preventing mentioned issued from being closed when MR is merged using fast-forward merge. - - Fix duplicate repositories in GitHub import page (Stan Hu) - Fix nonatomic database update potentially causing project star counts to go negative (Stan Hu) - Don't show "Add README" link in an empty repository if user doesn't have access to push (Stan Hu) - Fix error preventing displaying of commit data for a directory with a leading dot (Stan Hu) - Speed up load times of issue detail pages by roughly 1.5x + - Fix CI rendering regressions - If a merge request is to close an issue, show this on the issue page (Zeger-Jan van de Weg) - Add a system note and update relevant merge requests when a branch is deleted or re-added (Stan Hu) - Make diff file view easier to use on mobile screens (Stan Hu) @@ -40,6 +131,7 @@ v 8.1.0 - Show CI status on Your projects page and Starred projects page - Remove "Continuous Integration" page from dashboard - Add notes and SSL verification entries to hook APIs (Ben Boeckel) + - Added build artifacts - Fix grammar in admin area "labels" .nothing-here-block when no labels exist. - Move CI runners page to project settings area - Move CI variables page to project settings area @@ -66,6 +158,7 @@ v 8.1.0 - Fix position of hamburger in header for smaller screens (Han Loong Liauw) - Fix bug where Emojis in Markdown would truncate remaining text (Sakata Sinji) - Persist filters when sorting on admin user page (Jerry Lukins) + - Update style of snippets pages (Han Loong Liauw) - Allow dashboard and group issues/MRs to be filtered by label - Add spellcheck=false to certain input fields - Invalidate stored service password if the endpoint URL is changed diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 69abadb151..5d85c9f3fc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,7 +10,7 @@ By submitting code as an individual you agree to the [individual contributor lic ## Security vulnerability disclosure -Please report suspected security vulnerabilities in private to support@gitlab.com, also see the [disclosure section on the GitLab.com website](http://about.gitlab.com/disclosure/). Please do NOT create publicly viewable issues for suspected security vulnerabilities. +Please report suspected security vulnerabilities in private to support@gitlab.com, also see the [disclosure section on the GitLab.com website](https://about.gitlab.com/disclosure/). Please do NOT create publicly viewable issues for suspected security vulnerabilities. ## Closing policy for issues and merge requests @@ -35,7 +35,7 @@ The [GitLab CE issue tracker on GitLab.com](https://gitlab.com/gitlab-org/gitlab Do not use the issue tracker for feature requests. We have a specific [feature request forum](http://feedback.gitlab.com) for this purpose. Please keep feature requests as small and simple as possible, complex ones might be edited to make them small and simple. -Please send a merge request with a tested solution or a merge request with a failing test instead of opening an issue if you can. If you're unsure where to post, post to the [mailing list](https://groups.google.com/forum/#!forum/gitlabhq) or [Stack Overflow](http://stackoverflow.com/questions/tagged/gitlab) first. There are a lot of helpful GitLab users there who may be able to help you quickly. If your particular issue turns out to be a bug, it will find its way from there. +Please send a merge request with a tested solution or a merge request with a failing test instead of opening an issue if you can. If you're unsure where to post, post to the [mailing list](https://groups.google.com/forum/#!forum/gitlabhq) or [Stack Overflow](https://stackoverflow.com/questions/tagged/gitlab) first. There are a lot of helpful GitLab users there who may be able to help you quickly. If your particular issue turns out to be a bug, it will find its way from there. ### Issue tracker guidelines @@ -72,7 +72,7 @@ If you can, please submit a merge request with the fix or improvements including 1. Write [tests](https://gitlab.com/gitlab-org/gitlab-development-kit#running-the-tests) and code 1. Add your changes to the [CHANGELOG](CHANGELOG) 1. If you are changing the README, some documentation or other things which have no effect on the tests, add `[ci skip]` somewhere in the commit message -1. If you have multiple commits please combine them into one commit by [squashing them](http://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits) +1. If you have multiple commits please combine them into one commit by [squashing them](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits) 1. Push the commit to your fork 1. Submit a merge request (MR) to the master branch 1. The MR title should describe the change you want to make @@ -83,6 +83,7 @@ If you can, please submit a merge request with the fix or improvements including 1. Be prepared to answer questions and incorporate feedback even if requests for this arrive weeks or months after your MR submission 1. If your MR touches code that executes shell commands, make sure it adheres to the [shell command guidelines]( doc/development/shell_commands.md). 1. Also have a look at the [shell command guidelines](doc/development/shell_commands.md) if your code reads or opens files, or handles paths to files on disk. +1. If your code creates new files on disk please read the [shared files guidelines](doc/development/shared_files.md). The **official merge window** is in the beginning of the month from the 1st to the 7th day of the month. The best time to submit a MR and get feedback fast. Before this time the GitLab B.V. team is still dealing with work that is created by the monthly release such as regressions requiring patch releases. @@ -180,4 +181,4 @@ This code of conduct applies both within project spaces and in public spaces whe Instances of abusive, harassing, or otherwise unacceptable behavior can be reported by emailing contact@gitlab.com -This Code of Conduct is adapted from the [Contributor Covenant](http:contributor-covenant.org), version 1.1.0, available at [http://contributor-covenant.org/version/1/1/0/](http://contributor-covenant.org/version/1/1/0/) +This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.1.0, available at [http://contributor-covenant.org/version/1/1/0/](http://contributor-covenant.org/version/1/1/0/) diff --git a/GITLAB_GIT_HTTP_SERVER_VERSION b/GITLAB_GIT_HTTP_SERVER_VERSION deleted file mode 100644 index 0d91a54c7d..0000000000 --- a/GITLAB_GIT_HTTP_SERVER_VERSION +++ /dev/null @@ -1 +0,0 @@ -0.3.0 diff --git a/GITLAB_SHELL_VERSION b/GITLAB_SHELL_VERSION index 57cf282ebb..743af5e125 100644 --- a/GITLAB_SHELL_VERSION +++ b/GITLAB_SHELL_VERSION @@ -1 +1 @@ -2.6.5 +2.6.8 diff --git a/GITLAB_WORKHORSE_VERSION b/GITLAB_WORKHORSE_VERSION new file mode 100644 index 0000000000..2b7c5ae018 --- /dev/null +++ b/GITLAB_WORKHORSE_VERSION @@ -0,0 +1 @@ +0.4.2 diff --git a/Gemfile b/Gemfile index 9254ce2ccf..8a19885bcb 100644 --- a/Gemfile +++ b/Gemfile @@ -19,6 +19,7 @@ gem 'devise-async', '~> 0.9.0' gem 'doorkeeper', '~> 2.1.3' gem 'omniauth', '~> 1.2.2' gem 'omniauth-bitbucket', '~> 0.0.2' +gem 'omniauth-facebook', '~> 3.0.0' gem 'omniauth-github', '~> 1.1.1' gem 'omniauth-gitlab', '~> 1.0.0' gem 'omniauth-google-oauth2', '~> 0.2.0' @@ -39,7 +40,7 @@ gem "browser", '~> 1.0.0' # Extracting information from a git repository # Provide access to Gitlab::Git library -gem "gitlab_git", '~> 7.2.19' +gem "gitlab_git", '~> 7.2.20' # LDAP Auth # GitLab fork with several improvements to original library. For full list of changes @@ -50,20 +51,16 @@ gem 'gitlab_omniauth-ldap', '~> 1.2.1', require: "omniauth-ldap" gem 'gollum-lib', '~> 4.0.2' # Language detection -# GitLab fork of linguist does not require pygments/python dependency. -# New version of original gem also dropped pygments support but it has strict -# dependency to unstable rugged version. We have internal issue for replacing -# fork with original gem when we meet on same rugged version - https://dev.gitlab.org/gitlab/gitlabhq/issues/2052. -gem "gitlab-linguist", "~> 3.0.1", require: "linguist" +gem "github-linguist", "~> 4.7.0", require: "linguist" # API -gem 'grape', '~> 0.6.1' +gem 'grape', '~> 0.13.0' gem 'grape-entity', '~> 0.4.2' gem 'rack-cors', '~> 0.4.0', require: 'rack/cors' # Format dates and times # based on human-friendly examples -gem "stamp", '~> 0.5.0' +gem "stamp", '~> 0.6.0' # Enumeration fields gem 'enumerize', '~> 0.7.0' @@ -112,7 +109,7 @@ group :unicorn do end # State machine -gem "state_machine", '~> 1.2.0' +gem "state_machines-activerecord", '~> 0.3.0' # Run events after state machine commits gem 'after_commit_queue' @@ -184,7 +181,7 @@ gem 'ace-rails-ap', '~> 2.0.1' gem 'mousetrap-rails', '~> 1.4.6' # Detect and convert string character encoding -gem 'charlock_holmes', '~> 0.6.9.4' +gem 'charlock_holmes', '~> 0.7.3' gem "sass-rails", '~> 4.0.5' gem "coffee-rails", '~> 4.1.0' @@ -197,11 +194,11 @@ gem 'bootstrap-sass', '~> 3.0' gem 'font-awesome-rails', '~> 4.2' gem 'gitlab_emoji', '~> 0.1' gem 'gon', '~> 5.0.0' -gem 'jquery-atwho-rails', '~> 1.0.0' +gem 'jquery-atwho-rails', '~> 1.3.2' gem 'jquery-rails', '~> 3.1.3' gem 'jquery-scrollto-rails', '~> 1.4.3' gem 'jquery-ui-rails', '~> 4.2.1' -gem 'nprogress-rails', '~> 0.1.2.3' +gem 'nprogress-rails', '~> 0.1.6.7' gem 'raphael-rails', '~> 2.1.2' gem 'request_store', '~> 1.2.0' gem 'select2-rails', '~> 3.5.9' @@ -214,11 +211,9 @@ group :development do gem "annotate", "~> 2.6.0" gem "letter_opener", '~> 1.1.2' gem 'quiet_assets', '~> 1.0.2' - gem 'rack-mini-profiler', '~> 0.9.0', require: false gem 'rerun', '~> 0.10.0' gem 'bullet', require: false - gem 'active_record_query_trace', require: false - gem 'rack-lineprof', platform: :mri + gem 'rblineprof', platform: :mri, require: false # Better errors handler gem 'better_errors', '~> 1.0.1' @@ -264,6 +259,8 @@ group :development, :test do gem 'rubocop', '~> 0.28.0', require: false gem 'coveralls', '~> 0.8.2', require: false gem 'simplecov', '~> 0.10.0', require: false + gem 'flog', require: false + gem 'flay', require: false gem 'benchmark-ips', require: false end diff --git a/Gemfile.lock b/Gemfile.lock index 53122898b0..99cdc2a50a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -17,7 +17,6 @@ GEM activesupport (= 4.1.12) builder (~> 3.1) erubis (~> 2.7.0) - active_record_query_trace (1.5) activemodel (4.1.12) activesupport (= 4.1.12) builder (~> 3.1) @@ -108,7 +107,7 @@ GEM json (>= 1.7) celluloid (0.16.0) timers (~> 4.0.0) - charlock_holmes (0.6.9.4) + charlock_holmes (0.7.3) chunky_png (1.3.4) cliver (0.3.2) coderay (1.1.0) @@ -176,7 +175,7 @@ GEM activesupport (>= 3.2) equalizer (0.0.11) erubis (2.7.0) - escape_utils (0.2.4) + escape_utils (1.1.0) eventmachine (1.0.8) excon (0.45.4) execjs (2.6.0) @@ -195,6 +194,12 @@ GEM ffi (1.9.10) fission (0.5.0) CFPropertyList (~> 2.2) + flay (2.6.1) + ruby_parser (~> 3.0) + sexp_processor (~> 4.0) + flog (4.3.2) + ruby_parser (~> 3.1, > 3.1.0) + sexp_processor (~> 4.4) flowdock (0.7.0) httparty (~> 0.7) multi_json @@ -267,6 +272,11 @@ GEM json get_process_mem (0.2.0) gherkin-ruby (0.3.2) + github-linguist (4.7.0) + charlock_holmes (~> 0.7.3) + escape_utils (~> 1.1.0) + mime-types (>= 1.19) + rugged (>= 0.23.0b) github-markup (1.3.3) gitlab-flowdock-git-hook (1.0.1) flowdock (~> 0.7) @@ -277,17 +287,13 @@ GEM diff-lcs (~> 1.1) mime-types (~> 1.15) posix-spawn (~> 0.3) - gitlab-linguist (3.0.1) - charlock_holmes (~> 0.6.6) - escape_utils (~> 0.2.4) - mime-types (~> 1.19) gitlab_emoji (0.1.1) gemojione (~> 2.0) - gitlab_git (7.2.19) + gitlab_git (7.2.20) activesupport (~> 4.0) - charlock_holmes (~> 0.6) - gitlab-linguist (~> 3.0) - rugged (~> 0.22.2) + charlock_holmes (~> 0.7.3) + github-linguist (~> 4.7.0) + rugged (~> 0.23.3) gitlab_meta (7.0) gitlab_omniauth-ldap (1.2.1) net-ldap (~> 0.9) @@ -306,10 +312,10 @@ GEM gon (5.0.4) actionpack (>= 2.3.0) json - grape (0.6.1) + grape (0.13.0) activesupport builder - hashie (>= 1.2.0) + hashie (>= 2.1.0) multi_json (>= 1.3.2) multi_xml (>= 0.5.2) rack (>= 1.3.0) @@ -354,7 +360,7 @@ GEM ice_nine (0.11.1) inflecto (0.0.2) ipaddress (0.8.0) - jquery-atwho-rails (1.0.1) + jquery-atwho-rails (1.3.2) jquery-rails (3.1.3) railties (>= 3.0, < 5.0) thor (>= 0.14, < 2.0) @@ -406,7 +412,7 @@ GEM newrelic_rpm (3.9.4.245) nokogiri (1.6.6.2) mini_portile (~> 0.6.0) - nprogress-rails (0.1.2.3) + nprogress-rails (0.1.6.7) oauth (0.4.7) oauth2 (1.0.0) faraday (>= 0.8, < 0.10) @@ -423,6 +429,8 @@ GEM multi_json (~> 1.7) omniauth (~> 1.1) omniauth-oauth (~> 1.0) + omniauth-facebook (3.0.0) + omniauth-oauth2 (~> 1.2) omniauth-github (1.1.2) omniauth (~> 1.0) omniauth-oauth2 (~> 1.1) @@ -489,12 +497,6 @@ GEM rack-attack (4.3.0) rack rack-cors (0.4.0) - rack-lineprof (0.0.3) - rack (~> 1.5) - rblineprof (~> 0.3.6) - term-ansicolor (~> 1.3) - rack-mini-profiler (0.9.7) - rack (>= 1.1.3) rack-mount (0.8.3) rack (>= 1.0.0) rack-oauth2 (1.0.10) @@ -615,7 +617,7 @@ GEM sexp_processor (~> 4.1) rubyntlm (0.5.2) rubypants (0.2.0) - rugged (0.22.2) + rugged (0.23.3) safe_yaml (1.0.4) sanitize (2.1.0) nokogiri (>= 1.4.4) @@ -689,8 +691,14 @@ GEM actionpack (>= 3.0) activesupport (>= 3.0) sprockets (>= 2.8, < 4.0) - stamp (0.5.0) - state_machine (1.2.0) + stamp (0.6.0) + state_machines (0.4.0) + state_machines-activemodel (0.3.0) + activemodel (~> 4.1) + state_machines (>= 0.4.0) + state_machines-activerecord (0.3.0) + activerecord (~> 4.1) + state_machines-activemodel (>= 0.3.0) stringex (2.5.2) systemu (2.6.5) task_list (1.0.2) @@ -777,7 +785,6 @@ PLATFORMS DEPENDENCIES RedCloth (~> 4.2.9) ace-rails-ap (~> 2.0.1) - active_record_query_trace activerecord-deprecated_finders (~> 1.0.3) activerecord-session_store (~> 0.1.0) acts-as-taggable-on (~> 3.4) @@ -800,7 +807,7 @@ DEPENDENCIES capybara (~> 2.4.0) capybara-screenshot (~> 1.0.0) carrierwave (~> 0.9.0) - charlock_holmes (~> 0.6.9.4) + charlock_holmes (~> 0.7.3) coffee-rails (~> 4.1.0) colored (~> 1.2) colorize (~> 0.5.8) @@ -820,27 +827,29 @@ DEPENDENCIES enumerize (~> 0.7.0) factory_girl_rails (~> 4.3.0) ffaker (~> 2.0.0) + flay + flog fog (~> 1.25.0) font-awesome-rails (~> 4.2) foreman fuubar (~> 2.0.0) gemnasium-gitlab-service (~> 0.2) + github-linguist (~> 4.7.0) github-markup (~> 1.3.1) gitlab-flowdock-git-hook (~> 1.0.1) - gitlab-linguist (~> 3.0.1) gitlab_emoji (~> 0.1) - gitlab_git (~> 7.2.19) + gitlab_git (~> 7.2.20) gitlab_meta (= 7.0) gitlab_omniauth-ldap (~> 1.2.1) gollum-lib (~> 4.0.2) gon (~> 5.0.0) - grape (~> 0.6.1) + grape (~> 0.13.0) grape-entity (~> 0.4.2) haml-rails (~> 0.9.0) hipchat (~> 1.5.0) html-pipeline (~> 1.11.0) httparty (~> 0.13.3) - jquery-atwho-rails (~> 1.0.0) + jquery-atwho-rails (~> 1.3.2) jquery-rails (~> 3.1.3) jquery-scrollto-rails (~> 1.4.3) jquery-turbolinks (~> 2.0.1) @@ -854,11 +863,12 @@ DEPENDENCIES nested_form (~> 0.3.2) newrelic-grape newrelic_rpm (~> 3.9.4.245) - nprogress-rails (~> 0.1.2.3) + nprogress-rails (~> 0.1.6.7) oauth2 (~> 1.0.0) octokit (~> 3.7.0) omniauth (~> 1.2.2) omniauth-bitbucket (~> 0.0.2) + omniauth-facebook (~> 3.0.0) omniauth-github (~> 1.1.1) omniauth-gitlab (~> 1.0.0) omniauth-google-oauth2 (~> 0.2.0) @@ -875,11 +885,10 @@ DEPENDENCIES quiet_assets (~> 1.0.2) rack-attack (~> 4.3.0) rack-cors (~> 0.4.0) - rack-lineprof - rack-mini-profiler (~> 0.9.0) rack-oauth2 (~> 1.0.5) rails (= 4.1.12) raphael-rails (~> 2.1.2) + rblineprof rdoc (~> 3.6) redcarpet (~> 3.3.3) redis-rails (~> 4.0.0) @@ -909,8 +918,8 @@ DEPENDENCIES spring-commands-spinach (~> 1.0.0) spring-commands-teaspoon (~> 0.0.2) sprockets (~> 2.12.3) - stamp (~> 0.5.0) - state_machine (~> 1.2.0) + stamp (~> 0.6.0) + state_machines-activerecord (~> 0.3.0) task_list (~> 1.0.2) teaspoon (~> 1.0.0) teaspoon-jasmine (~> 2.2.0) diff --git a/PROCESS.md b/PROCESS.md index 9f4b708d2b..a4b0c83644 100644 --- a/PROCESS.md +++ b/PROCESS.md @@ -115,3 +115,10 @@ We can only accept a merge request if all the tests are green. I've just restarted the build. When the tests are still not passing after this restart and you're sure that is does not have anything to do with your code changes, please rebase with master to see if that solves the issue. + +### Closing down the issue tracker on GitHub + +We are currently in the process of closing down the issue tracker on GitHub, to +prevent duplication with the GitLab.com issue tracker. +Since this is an older issue I'll be closing this for now. If you think this is +still an issue I encourage you to open it on the \[GitLab.com issue tracker\](https://gitlab.com/gitlab-org/gitlab-ce/issues). diff --git a/VERSION b/VERSION index da15618101..797ed2e270 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.1.0 \ No newline at end of file +8.2.1 \ No newline at end of file diff --git a/app/assets/fonts/SourceSansPro-Black.ttf b/app/assets/fonts/SourceSansPro-Black.ttf old mode 100755 new mode 100644 index cb89a2d171e4db582ffaae8b5fe465680921996b..9c9b5cb7f03d4240a9ee0323aa2c4c4ec7689fda GIT binary patch literal 289364 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%0DNaPN-24sqMQfw*W>cwx5y@^;8uvUfaNnh;`zF%s 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 NrUb<~kHa9y{{zE0D)9gS literal 148368 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

%@p18YD)=wQ{1J~Sj-S}sZox=S{CZaND(_! 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

F+#hw9N)PA=S#kFOR8fDW=~}~dbW>%l;*4(m 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

3PcFjP6|Hnj> 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 Zb-1#s=G{fHulI=mF60-tW9S6={{U@`BJBVG literal 150528 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

*0fSY=GawYBfnK(*Pfl zk0A63tVxqtdGjjZo9a!#{kmLetZ1nOT%)T2PuEc)v2x@xz%T1B13sW}vkTT`yaKpK z@4>w;SV@6W;Qm0Q$4zTkLsJe&SR`Y?f;+G%7wg|H6{@bjv0W7Q1)>93Bjgb8z)5;$ zAjT-V8LWDf-y`PM;)qG%Yi~W-gEdzs4&CdRhr2Y*8{LtUj}=|!O=Cq;0oG-iHwSCS z3TgG&HXP|F&SiK3!%G-m&hQF43tn8!@Mea0Gkl2QGyU88w~1dee1+j2hHo<5AL%_e zC=L>of}z6@(~|a1~amx_@%zi!1j7 zOFmW$EUAqtwr+8+&?m6=lm0)Cb)GNF*RhIo zpL_>KAX6Mt`M^{v>(y8_3Aj6vR|PO!iZz!rc5I?5)jj@*QmkX@<|s}Xl%<>AFxW%y~VD7+TW8?kEeMywRP8><2z#0tPC@&8%% z0@Cy$-i`P@s2)VE;ub7|SY0Twpo(A-!&MB68BSq1jo}7{D+!7yyIUE08J@wghG8AU zxeW6eDu&AmiZ|JPKD+lae35-7Fm#xzuzC^nejPcuAEZ3nhYc0Wf@wy^tQhPxTQKoF}`?*TOQtYr!Z$shGfFk6yN zyw2{i1hJ-)xyL@aimY(1x)1)pRJhYm<}jSD>fs*4?hJ-m3>Pt+K@eP}_;VRfV4ri@ zUBPe~!?6tW34)UZceBqFc0a@Jwe0>b!~F!8?OsOrhULQslb+M1%`;#}r@&s!!`gTs zEXFF>3c^NzQj%2x{~5C7kh$c>noNREus>aSCdFQY%dT5?JKXtLcT4u_*~9*yiM6zk ziKoSLSi`wnyoyx2#oOY5(K^&B>z#NA8ko>M);z3^Zxy?fG_Mo7Hx1fI`q#-CxLJM{ z>&CCKI+zQ0C&D*Fx2Ca1K7i*mtCRK6$Z7H=!?_Gw87^d4Oi)DG-NJAs`@G5SI))yGn;9-AD7LeEKEr(W*~jjS z*u970OYAd+-EXtIh+!^6rb@gMn*!P)2;&Y#!p=Oi;YQJ`XW` zj^V=$zaA?@==0>3HSF^$yE9@l;D0r{zs?v2IrNw8GmT+3!x;=K7#0!)Z3K5Se1`qk zvim-UhX^iteaRb$laKbDWUmM?CG?q^I!#_2-#3gGf$pT|n9@m`BovK_7F+1O9A3A<3j*vWD}{8x&LvAX+W&K;S_ z$B<6S3kY%>D`g$~ENA#xhUatWMeJV6kggh*kZXeHv5$dW>}E|tzYn36moBM69NVID z3eq4-`Hy~59{;R-_M-Pg^$6KSp~*&aI|KLvyU|;&s^LCJ1#03Ztj*ttR&hS|tTbZR zNe}jkTngQN7&{~m;4a9e*gtS8R{0O2g}WPV*_&ARU4gaNXJ8$5AJ#@+j`htCW9_d8 z>uyiQ8rx21s}psua&C9-aUOJ@cJ^gtW)y+vlktCQY_BMf9T1hVH{@I~K^})Y8|UFa z_6n&^6m6VX6d@k;$z%awdE)sN;aQSWH6b1j4Dq!0RB*UWDvJ$V!A1!Jba#{K@zAxUc4T z#bO5HeC-a^d@iDn=YFcgOb2mtzOyt9Z+mzrx$@*vsJYj)=+!^6dwRpka_t1mDBH)@1jHo#~Ze6 zR4$W#?+93NA8zbTwDgl>zhnv4aJ>Q78<2W%Ncb1AQ+HvFMK`~JyS;wSP zg>n!?`vCZkP)@)rA) zgI-4u#$MN9&_-CwkwTSSN>TI_CoAh{C^>KC+e*QG3dtme~Ujz+`sHE zb^zSN?YsXn0@7w2doA{KY<~>4F>Ua_z!MVuZ}IofApt7}>F}maW-{9}xh7KC<{*(Vu`)TZ0%u+%c9D9zff6+fi zn<0O1AP*~puwO=ViqO*7wgys)(4-jqW7iW3G_-iW<)G&wh= zGr52Y%JCqu1B=PS&7a;_cPPfo_)i=f+0Nzi2$SZlAD9HEX2T`3(FonK?S`7sISLyYt{76JJvIq@PmGqaWp(Ib^w0e?c3E-0puF@P6b1#us>=m2l zd43vR?Kuo3c}&9Bry_80EdHZ@?O(zLkKr}rMtaZBT$Z5pbi8L|rnKN=vfSi?8*EYG z4|%YB8D>XdKSutelCxb;^Txhk-X$c$CNrb0lSg+ zohak;)Zc(bc>$xBmtzmdu7m4oX#8Gi@}AfuvGWnS$5-C>cCf0{hf`K2ZWKjQj=*tudf z)h?{CZH-Orba-OVrDC#gq|>A?tTSn2jNqA|BVB}4X-3?Yh*d;A$=Czw;vdZ~6<>1f zL{*6BmcRh1xT1_>qd?`qHRuZ zeU8L)S29?-(f2~Da4pp>egf?!*;9=Ct?XaR{4w_MMbwH9?{}ml6J;P=$+m+y3*CXH z(7X@JaSU^;BhR;h4*o-`qmJiXog7XJ@W z$-2OYL&$z4EM;mk`<6u|c^c^?styY}%wwbyg6eo{mPnM2M{cO4GM?v= zW!R*OJ>;f7@-vRhIdVJ-b?IPQSvu3Dq0m%`f{!O%%w)e|cNfV%$x=P@2&^ zw!imhyN-+-Z5e6i-H0`o=UeVY$$v`i)bMn6RI?l5pG*#8S*G@k=5wr;Sm}7owLoa$ zo}^Lf$bVEXz+^^Qg`&{K%w1|bj`%mM4hlK4TleVwru@Mc!5;b0 zw>MZ9CPHH`x^9;Odgr;;4e&V|XXDXV=+wUnNw0*PW;130E;L&1((XPHN^KR!n+%Bt zv?wF}xg&iOP8I;QWO7_HQksOn+s{w23G4c$IWX=A5f7HT_J$7`Ezk|mVyC`kn z^J#a!o4-J$>G`I^4I3Cu=YMQ|tS{UfOvI1vCeBjru!ihUqLpSZH&9GhRuZX3a4j@; zfqD>xGg0RzzLnE>dpiP_6z^kgUxw$!NJfwkH?I3k$#8=EX82*=Oia*kEN?uH8~5;M zTwW1`79`aI+w_(n+-o@;LwcXs?)3h{ebbh0c%;MMP475uUk?}!KOOrdUZ8b3wm;|! z)?AFJvD6AB+2+HkkIy{1Hr;Z~TGy4-!XzwhdYTT$YT^y|H}%34?H`UQ(POZ+m#Vod zsRbQY+rv?e_@2nuL~(n%!|6*!K(X8y<_SK`KU#l16^G65KssMwKdj#cKbp6s@1|*G zB|V;0U$PHGFVk!!iy|aksnOHE0mFN;CTWqxxt9`pG&=IpA0#VB^T{GUp4%UL4D+aF zT*>tk3sVUbQj?O$F}xUiOcoVb_Z=-k>=y73Gls}9O`RPr^^wB4M|q?O!@`cSZ5);= z^)(5{(P|?#VdBlqo|d?C^ofA?;F?SvMSSY>&V3K*lB53P=r{)bGg`)amP`}7In2yw zq}PMPQl#@pk2_sV!=8znen!FI3353 z`0pAe-g~F9*!%wD+I%-9`S7u1QeaYFFUj}c!3k^kD$Vy{#2c@n_e)otvy33ok2oBk z>02S!=iM+nuMG){-N5~Hnk9T1|6h%5b>qChCu6}EdElZsw>?M35KyBG}pJqn6bwImM^@zD5YNat_a3{51M=J-_ z!N@t%xB)m1(42_-O*wu2x~)B8Kb$_s(S3>j!()w19cZ%c2Bku3>OC4;Y`)L&92opf z2#wqE9sckf4)ZZ%km25>gQ@M*(JlSaV+_wFrDbF~+%)bpHJ$7GuYJ-Q>VFIcBl9I)jQyw86X@AF@c9ZVC%8s5)e%{%#P zc_)88@8Lg@_wYCHzWpZNx8KbB_Sf;g{Z`(w-_ASs*Yl434ZJ^pBk#{Yhxg})d4GO{ z_vc4>fBq2f&&RG-q3EUyJae$NiSAVK&`n3UZvr<;z&FF*hJjl!P`Ys_-8htPJjys4 z<+%~}Aw7j(1(&4~cMO$?D%=3nCYIoqo)3wop!_Pa414Xa5zCqW6L5RZSHvo&e>LvI zc?hMZ69=k6^Hx!VJy}uF%5rjZ_L3hIT^U|W)|+ZvA43|UXHD}dm|jb2O{Yf2ym?g6nen5*|=G1I?p!F z!h9{=WFN)-GTX$rq!M4n?&4XvQwSWy9Z$HY2@-*G9dOgrGVI=-Onk&$NLS+=hwV7U z;c@J8dlJ8!aqrKoxR>Z1{BDtdQ+e`M+|)Bk-iy0EhMb>n7? z64iq{G0Igh-HM^Mf+G)tBM#~;1HS^)Y$oPGvhW*^n#{(XS~>WwME^AxCpqNdw;FNt z#Tvvdz`jd-@kDKp!fza;a127n;x`^|<8TKTtq2&;zlo6N30So^5x=RBj!EGDWc*I% z-GwvZHx+t14Zm3knJ(r)erBMKX5zOPHAXv}XXCd3A#+e;bMae*@Z)eF7|j`DM<3ox z@hn07Qv53MT#PTGUi`{&UsxIB4BtoLUyk2Kyj4JRD)BoNdrPZe50>D!49`dC6M3=VgYU^n=TgN zHnLfwlaeWwqkItTAwp z#XVUquo;tZ2NX0@G?QimLNfuOnIaE5xf^(Xt$r;wKr@$%0^A$4Laf2vK`X_0+#hs; zSWLPKSfgtYTB~c}uG4j5EN&CRU4_`yS}#`MR-qHc0^BUL7O5I^1L8odMLV?mbg>-! zUe6GPuxTHGxZ6m_^?s7n+<^Lr6zD{S*x+%vQd z?mpcoCZToc7gKQO(14f*+Zqxl!Tt@3M%+Jij_}|PqOfSfJwy>P8+Q>!#a!G+bQyBT zJwwR-lllteex<$&*kDbN?}Pe5ga#8#IQk4~+|Hv`qG85?d3pBJ?8*GL|ifVhe)(j`(@mf;enJd~887*n*5>3o;&- zV>Z%|)tJCmBNLWn9?~6;Ulv=9m9QGch*N^!O12#n*>u@NVXS6Y$GPY3fzKHkhYIyZCB9tXHkCAbBFajgY|qI z>pAU1KL~CA8#H+$YjP$|RVWsdS(8`d?2%IJRrN}*SP4yD16YIeh9*@^LXE#mM(&;LI9_0ZfU7by>sF;qs?T*9EbH&(MJrnoZm0;&L>2MY6 za4zexWbG}&-CwK3WY*q^te+EEKZ{sDC$fH4;GVBdh(lVsl(n>)wX_6UdNz7Tq@N{v zi{1h^X=xs`vM;KbPVb zuulLd>1PS_^FQGJoW2E+w6p}bdwm^l($zfZ>f><#NIwhsQ|M<2>t{9VXDRDvKJ*hZ z&H7ou`dP^OISO}XEfCeLne%XCmRHQdomoDyfHiX#`biT1bEPi}r!gd*3snbs#UIXv znt+En7pe$4H3OQp2wGDqmZQ}(Hx{>{v?$&f~MA?zDK^v!ljC zpJzfhi=lT_XfM~GEjg8uV8haYyI|+zEO%?(^J=mfoas z&#Iz63-ucp!a7u-r?3k5+pR@!p%t2bh6vz9if!l_oD&H2Mb#|~?__u{!v`5Y*5QkE zsAm|yz;HLi*BQP^mjI{(3=a|14#QlAqdPkK2lWJoa~b*=u3^|jN6zar7;a(M!*GCM zl+Fv*=Q6yQ;U^hh&G5#)-tK_Do#EFR-plX-h7b3JI{Nez44+~6JRKshUt;(&!`B(U z!EhhlexTnW=m>^52M_LihGTK|{D3ow;S7dz87^e#rMo4ZDuyc=)-YVluqguGI_(V4 zX4uDYC&P;)y#rm&rx{+w@LGm9GQ1_y-!bUi!SEi24={X$;nR_bx6FB-;Y$o(X81b8 zHvoOkK8EiQ%n%GS8Ri3)XN+YyiQx=}a~UoKtjO>(tYWy5VGYBzfR!0d4BHuQVt6*g zuE@}qNJbySFvFb;&u4fs9iNwR8N;g>-pKF{hWF87$Qh3?e3Id_3}0aQOXw}SSghYi zf99Y?ruavG;=BUJm>y=pW@Mm+&w>V$&3J!r61@VVIz80rxfi0xE}-Yf=8~{kgl{Bh zc#{nCIsQnH?4e|n4Xi*Fq2?*AK=97E{10_+{Cb*;1Nn?O6%~LbS%bU#5Ee99=ltjk4aoh z2WO#eYeb852HKVZoIrE|#(JN|t*JMlhj*vA7h~!taYoil7^m&U4Xg)oCSATP!iiOL zF{@O8Tb=77?ei55k$kcl{MFqC zhtp!8Tg@|*_>Az(+4e~%;y^<(muEI+Znl2JVTyB|eO_yy_t+<$$wcAL+vjt`-uXNr zguiJ0U$W1)%`a35889{U;2&9t#@N6Z^Iorhgy zORCU|$-vXhY|Yj4Fc#gf=K>zk3jq&mP>F2j17@OZw8IFc(4`!&nB(DOP{i{Ni!qyH z%-|T)01s&oVn7E9y}&UKy{YApwkG7i1wE+kkhLptJMYbqv-@x#vP52|AU^4jgT9gL z!kMOuwAH~Jh3j`q-1TJK^{(rZI4+HH#ThQ>>j9sFl;qR-rs|-?S*LmehvB4Clb1wk zZ2Z&Wew4q#5zkfP98;v#LKa+t|94Y8;6KV(5EVa0ANwDDpYHp)OZUCpr28QH-+%90 zbpJ5o4Z8o}`*SfX@IBn&`w83(d<#YrDu1~sJkp)Ih*2t@`9E8W?rq2q@NLLci;rNo zDG4K-Y#VB?XW%2 zV?1T|=V?AP^m2~fH7Aogu#9yPTRn4#)>~VWN-C_^C^{~}4w}pB~FiZ+Ah1@E6cs|+wwm79eKa}E>4&Io_tV#Uv0yQi1?_&`R3po%nxu{-Vbs5 z^P}=H`MCNx!W@L11WSCqyg`0J-YCB)Z<1fa*M=|SE5ogrsgb!WL0z`B*Em^P%#qgt zmLc7I8NzJBd%1o5?`JLl|FVl8Pje^xk?&(qcmH~-z4_nXwf?WNFN@NBiA(3_wBy`k zNVxjAx?KH5{Z+lI{-$DDYOOPLmd??6xT~)NpRa{B-2zR$ z8(R4g^v#^}{EFNo-<131LCj@lV`j2QO~HKQJj^ZnaDwG3RR_D#qBg*qZc#n3XHj*o zxZ@}B_8)6;iP$`JDpm9f<@f=+9kO#h z&WV7%&RW2&P6OaJ=On;B=VZWsrx9?#p`K>QX#yN{ngP$jSVQ4k>pH-Q(+U`M+UQJr z)sHXBN}r){BDp?Op*N~Gt3klC)H#4>t1w~(R0Q9gL7|G`ZIkX$LwM^{+W~`W2mHF! zPJE9BjcONQk2)8ySA76*t2z&GoBAMNpQ7Gozxoj1fVu!Mq%H&;R2KoBqdp86Ru=Jq@anJK%QtRlptc4#1uAYk<4toq*@cy8u5RzYchw{086$<=uei%WndHNZtc@0Z#l^ z`a*dx;6?J=fFG744H3&7OcUy`QPEaM4hRcRk^B`yCu%ebV}7`Xhwyq z!I%5r<9)F@ORZCtsupLb@5Q@Uovm7N4tkyZjr;@N%Tz$MsU^xUUy*O%-3N_or&D6( zZ{;8HUamUSdbLcQh%XOs;=Mw3LhqKVwemIj7TzmWP;FEzR0B>~e;X@7dT^ThD%A*A zFZwL26{HpO*y{n8I2!<$IvWwzh2G3cbrM|N>NIr%^#SlTms(I7`xK+h82dP| zhv$%%;`{LwSe}*QG5&`6BmR2%B!9Pjiob|F4cybze%P#c)Ir!SWCYulsk33f@^v9B z*d*An8QKFohVd|L*+N|md*;lGxRvY7@VF0 zE4^3*WSLweI`H+XPekyo>MC&^e>r{>-&t3KI{LQyBmS!TB!91Yioeu6&EIGst;pwR zln;N4%EcGmX~+k>!M7pISwUih+y_NGjs7D>vrX!BP<6ff0%i(Lj9$bbSCiUk;_9V( z8GN*%72ndcKr4OC#`qk#4F^eDVkjMz40tUSzk?*^QY^gFT0+Sozru66TKvD^CTej3 z(3Q!hpme9&iMd#;egcIwb4jZJBu-Y|Dkh?j-H$mdqMp`B2>x;?RYXO&kEp;Mn!BX6 z3nYaS-%S+0XDr3K8-eeXzs1*+gEB*W5fV57D`94!p6=&*`VoI+e2VMoXH-u}{2YD@ zU=7}u3uO$yRVd?Pxtb`EYlsqAO*zXNqFC0V{QG4cBtr*_M;A*$H_PHVEcp?Zk0{IKc5u4{ z^1298c_wV-S+Iuz*t`zdwIGecV8MFdr;JoV=P*V=9n(xFB)hjW7z&5_L4VSByF#A% zW2r<;=t*n?r$Qn;=|@lDsl$_Ii}B}K>AlFaG&5)6C2KGFOM%Q%H(cad0I%belx2C| zoXm_xg<4I?5Z*v$?xIXgbzZbYN#}+(?>cXBlFzgoXIwB1!bQJkOl3vzd94qh*`oNr zihkZ%Nywa{Dzu?(ZQ|NHf7Z&Kmcjdv3UB>L~9;3KYpNsnLV?y)u3DFBVkX zv-F7%=qK;{p0^-QrNsIW?^#TqUhia%Q|sHxCVIzb;w5)n;Rf7r-PYSZQ0!?K=qN2) z;;p2Bym6(qxamCNDfhGtZRzXn@U(<+mu`5Mr#2Xl_ICAl;CA`YfTwyWirb%hqr1E_ zCKfEK!o7RTy!^LmVu5cd?mxxl?3K$Zmu>pT6L8`6$z_Jt>I*+1ycd2Upe9`~1px720awpY*G`JwBs z{Ps2CwmBbs{`QaD*x`RPeEgI98Xp-t=hbN%HnZ6E)KQ8%8`*%&Onu*d&pr6EqqSQQrz)=L7>bf5z7mt(N&Js-U}a0BVr{X@dZ^AT)6P9YGI`zN%%HWKzQ-CJ!uaZ z1ymLz`FUbYjA4z#f_l$5>{pG0)eT~3oXfJw0+nAJjzd7uE)>+SqY()h6Eel0OrdKs z5Tdp)oWjy=ctDIDV?;Y5C5S{IQo+y|Rm?^lusfOM8w6`yEP|H_T<2hp1^JN+r4{D( z7RM#{IeO$mQ)C>K$o*I48%(G^bvMw8#0?3y%JteyC>6Kna0FC zV>NNJ@`~wdpH^2hy$;hh6Mm{lYyzoL`EG_(DMeh~DnR-IcHpxO;EQKUrp;AYLd*)) z54DYCjLantIT{+=PVL|PFT^`fM8u4imd z2_GJpNM$$mo8I$kdjvH4iF8<&%E?dOSX{2V;-k`qtn*^^Nw0RKGnKV*SzWx3J%iq* z6!v8(Ow!TvEOF&nsFAx|x?fY1w)ehO=p^Iufya)9lELP`Dhac?oYC=?;m@}b-4}To zibWj(7XN9{;>FqZLfq1OwW|wk(l#`whkQ5V|2}F1BZfddbl@qL+y)jjwHZbnbLU$t z{!7QT2p60J!VHgwv8M!5X_zfUP;ijqgIx#dz^{o@0INt?gTX=2S`6dK1>Xm(dIOn) z!7sS9Fro)0kV?dm{d_|~)n}81SFF$Ig866e5k?HHpCZP&)oApZFs&Rnu96W8y)FF_ z*Y(XLs+FJ4tzrJ;h|c#oAfzz;uB;h*$XRAospQNr70Dl~wq3b!#iC*^Ig-us^;?s^ z-R?s8b~o;Vo+lrl*1Mw(>;+z#-`Qb*Kz>*`S^U(i>AaLW4f7rog14>3gXB?v8>@~( zr0^#H4;B6Vw7zg>3y041n?k{P=ci7~y+0?B>bY`wiWT+tNEP^+?ZCQAqVvqxru5%D zO?ai9@OrAd^!f zoCQJx>w~cH1!gZ- z4hno^f`B-Nt%G`o60k@rfScgpV6|^#68x#lU@WSWSX4Lgx_S~~|J_7)miZhgED!Br z2tsh7@Q`bsbFLG#19F7639|$8DMMi7;L4VI+2G#mm2wgg(uXam$-xhQ~+n#Lyz~40&dMF$#v3AIpNO9K$2yR>xn4@14A|a(?}_{LvoJp9 zp0IwsS;v}|vE&V_bWhn3EtA&WP&D?J1elZ$FezaXlX%*vbeiXGYWbmhyibUWZT)V> z(0|*nFYpRb$@D8E!S$qd8Ia`uEh7DdSHOx!r!mSu;}tLqCsJUf(EKS5p&VLphyVEaQTPpPE?6 z9D7rzY;x;Vk5^@qk@cGcI#nwgW#4;jpA^E8w>ajNA1q+*R+4J9cs4+IC~^qrblxRn z=h>5rTX{s@r1#eRV(Sd_Gd@L1Nh<>>9KlZ6 zL0n5n!3=)jAPl$UV0ZmDZk#O|qB6_{kPc6X2q`hzzm)#bfmlJYmb0i6B2 z%mcR!sW#ju<@0P7lzM2{YfBI@bXj|y`z0g|PeT^95)zL7F(X?RKElie=CdJsl_^S0 zmXpcukakG^eg!u2%8O6r`g6O|kR@?jFD<;B{28CSXI=9G#&LF0wF z#~$vN^`1O4ECpJ=5r>3tk6j$RI5vQ}9l+aqjMjg7*OMA;X_JtbA(vVeQJDOacNPr? z*QD@7cdYm_uq(*V+J(n#gRvj?`Ei}h3+sB>1Ngp3gjPm}my)Lb$iB=ato$y@iQOQ} zX-N2vK+GN{H68A=Ym!x-U7Xrkj5sHht)gx&-X~LCKNpf_Qy+IB_Mr2mL8VPzsD`py zcvU}!T_E6(4Usy(XZ=6V?~f?Z|}iB{SusUMa4wEnt84=NCfWdYO) z6|x9ZG&#F6wio9*giz;BSeZ|FeGgMHmEYpTf6iR=AYJgf0CU0FgVNhn40$)5nc!)3 z|Mx>@Me)aD0L{TdST&G%pyQ9+pQwuo*#pEk0CnJi3I}1KrKk$hU50+Zv4JK7{bD-5 zU6uf}0+x>!;4s1al6Heq&?G!|1>Jdr2oPekG@htcKc9&BA{b_H0*l1&4ATwnUXw7G`ugy+;oY3sbZ{11PYl- z-c7^Ufj_}`3K8P~CgQP>p9sP+21fqfz(2*?D|IXEoE1;wJ5gN$H}rMa@2r)QxHd7A zR^Ozv@760-AKuMZ;}zybgjnu88Mnv_PW9li{_wu@1M7{9V-*Ck+ZW58o#FH!d8B1q zw<wnG*?G?fZH~j?fvqhZO3?@^6nbbK7+Q{l``LzdQIqsd!jdW zVC!#Z9db6iP;Lsej@5RiW+hhna8xN+U$x0{5hh7?zVUphIP-!l`Bg;E&gKxG>7a3( z$solrlR`SoWdDHub58GA-P2-|u2kCQD-DR`=a5C&1*7ebZjX}p{hsiuw&tOUHF1R@ zMM%V@tamH#0Z0?YQBNGFQ$0Z=u9 zZ%LzcA&^MQ)yT!hsV|}Qgz_%4t`LIDia28d6D2>&Kw(qr_3n18Su81nyWH309I18sXo@p!oW zltoKYa`z;Q{M+XbicSLSVP9C|FJMw2zC`f>2lh30D83Ngf)x7vcK}1jGRVA zgh$thm1&4@)dD8k+CG=mjI590B2_mBbSz)0?4RAD)XSIgaO&`}7>x-J-mFcgGMcVz zgn&M;dmT3OI)lBVJQcUb<<6lixK7@Ij^5#l9MFsIkv+}vP*|>?tG90ehrE;}J=2anK-}=N0$Hk4+ilq_iWOMd@-z&;(Q9bJY_x64uNe!k+wloG64$WvP2X#)Vtrr{` z_cne%I1$C8-v6fj1B)+*k9MU#AFndphRvnThaeOT+m*BuxGMWMW+?kWdLwMwEB2T5r~+WFbx(N8m; zz0tOEZPOEc6W4WrT0!f&9H&lEBH^S+KDzL?^PgM2-D52uuId$k{Oh#TdRdv6VVV!1B9DVsD>TcEFR%(Q+meYo*OTEL@i;7D11vyuL#Jo#d- zqCL?`N94lWZyHLxQcs^9{x$gaC5MY)diIc=_@KMyyi~{3&ZCM4hAl<5L^}OZa5N)o zu=Q<0;M=!CA2yDB6s7d2X^NexEV7KOskY`aaC`?nI^a=Ub44uKgthQR1tKw93mNE1n z`i13=8r-O}S=F~ADnKma zwSV!2N$VH9Tz0cUE_1XK=Bp3H$V;RMZai;ENUYA&?7D3>%6&kdio9Q(=&`3iAoZmg zi<{668{IG41%2ka3MN8*&|Jop5p5Y(_8YQehNhWPWB8NzE*#nQ#o)o=(q9aSYr859 zj1-fz_}XRV?^$5(9+7rVwA8$#-!rWJh+K%N(R?NUxSV^WF>@xba#e~3Ic{`&wOj;^ zXZu{BIKi+D8wQzoSE-Wk;T_@#oU+^K=IfYj}{dXST-bx z&cMkeB)W9o$Bx8uEn^TUNMc!w6Uzg_<*)og2;|zowz%N4n>@Z~9yt4jhj}_2?P4I= zufkDSki@U533kY^>KQ68MQuq6t{yECEc~?G*MhSUR4jtYW2dEUmGJgsdfVSuD7Bp* z|0K_<>vy)J7P=o6h7aA}{Lv=4x1*%3Gm-b@{_GZx&G!Br*P-yn-(BY}KHxiTA3uJp z;j!AZS?Y@XV0{5@Nf~N>JaS!aw>g(8R91X9-6OG9Aihkp?lMc#GpB^E?&fg*{Z9=2 z_K%fRNcpd6Miv-ek$ms0VC$+Ujjan)S0G>0e|hkhQC!+D;(xTId+0t?V3H~BpRlqu z9Hks{tX!uuF{)#{)}S46d@QhWE0YV!K|@m*J-<D#`Szcs1)s9&Q#E6 z8(eet{aYV)J#D63Gwy5ka!VLAE@ZVa66;v^2Om{i#bW29eR;9WoZyI-?d$HbVq*~> z0dP;jDoXipr?Qy&{*+5wrb^Dx%C8ecVmX%@;D^)_OAU4wEH5A$8jvOqoUCC1zu5UF zbr72L_P0tuGE-q=$ZT0V2TDAj4ETXMY@E*#WYT&R=yNW2=)|FMS2LSvgw6v+Q$#@*3HjYSGnvp^saA6`qIF| zzy6nx4~!ma7y_3lc!z7tZW+s!F$-HGIFO$j3;(uCCRW$owP@yA->rYa_&3f1?d@4K zd)D3ye|UxQ-4%?LxMuat?5(b>{3FI^h8g4QW)03?bYSjZFJip+LB^`zpS5Ulcg^kp zR>=64t&B|`oxiBIVQKNh^O5&3%3FE+U8^=f`kk6@GnT)TvAkWkZ`?eZ#!8Rl z`>J)D@3_mnXle#rr(?KIe|n`_}#FKCjAH@EOLg9A3Y6)f)4! z|Hl#JZO8Y`>j7l{XRaHc@qQLwf7jOSYwq~^4#pH0>a%9_?%P+5Ui#yA@xDupnP0qX z)%ML<_bPWH|6|DS-?ZwkwTbV4?+(UGS0ex5=DY9Ry7rLoCB`cbG3MF0dCS_(fBHMI zzsK{Nk$;#G?RZhb_uYTK=eGRzPgt({0T6Z~uVkLQe(f((b;+NZ{OYqzVYx{1AD&ZB zC4UB@_v8D6`2GX-s`j0@s7t79{N2g2*>;vC-UO1NC7=sYgsJ=}JC1LdvQHUF{TG`< zSJuNB#1$)8Lq7gA=b2`}_B{$2W>pHUvc#m`if zRmF(1XHzGXW>x_Twkhqbg1?7!6rbDhd6-qOckuZ+rYL#19s>Rp(g@NT)}dImD}DC? zv+)nv8f76{$X{hc%G+#|zmhu5pJv1SGM=}vILe5jte9eDaek7;*kx9yn3ec&4_Ly4X|cGKceBUkOb|C{x?hL6Y3X{wy|dFpI;zlv3F8$8~c&^ z^5!X(O!qPM^UV_V{r~r*sKKA}Jot(D?ZzZ{jQH#(Nm+{afd7!%krwLr#E-vn8bKL1 zOW<+hb3F-OCw~8;gmFM)K~D513LjZsIUh1Zt581g(_3(2e`)4 zvV-KuO_FkuZ6UexDT91wi~SvM>y_Fy1Aucy=MrL%rThz0XaokDI~! zX2@!D>L@;k#dSsMC3X_+SizQx>o&HZ@5MX!qCUr%o1bQLl}8{Ck@$Ajt#q?Nr4_b- ziN!IdNBQf_!-v^AKEz(+BWx+sFki|xXxA;cK90}pkXEucU|YSxI@!Z)5UGI=r#``R zGx$jA-;sXGm!>|GSH|&NB|d+G^fNp&iM^5fJN9tuUyy!`_u25=O5`ykDJa{aU46Lr z;9qCD=PLTpwe7(3jnKZ?|}M1&iSMPS}v$puZp2 z0eoJFzUv1a2YC*7)eYV;qdh2Bq*m0G-rdUF?0b051KJ*ER-_Un;ydbZ7ZP|Zbqv>T zB*JMd#E|HFx;7)xcLPX1HaAtLC*=z3G4(^%oMhXT_t;Y91JO5psk77-| zr)+^7c#HXz4H$pRnML)3-xjiBB)@)DA7WidHApSm{Ty5=5l%_}OnGXQ%aE^ENXBB^ zzKS}YX8jl!yLd0#g{v4}=(Ba~8PN3#yUMR{H?GH!PO~Alnq6RX!3#SCPYk7A0sa!w zdr0pf{XNn(Jfk2r;C?C6Hb`B})kNySbvV@L;aPiZ9*=6v+5DE|wt zDf9|`pE`{6pGf*=x)$KGR^JKN>-c^Wk_V|<%wdk>ZnsRZsT^bvE3i+=-XObzL)Yu& zD>T=^JOrtNYzbkf!|oCJ$tEy^=gg3;W{e**Y-Tg~LnbN9B=5zAOov>j{>7Umjj1>A zkH3L3PJv%B`I1SoYx6UYnArg-_^^Ar64@{{}@_}ly+`6>QS{2l%|zoz`D^1O0LVM;YqPzMvND>LSe zIjBJ%sA&ObSXn;kUdU{$h}l^&=;&lFRsva2s+1^Yid%V6aVTd&cQ3|t8DvU;1z8BZ zSI#0V3i($F-BJyj*MKgyXn#HIvjljlNhwu)ibr_~&1+-R*gSR%+sD4kUSU6F@3HsU z2khV2f3VMa7B_J-&*1^?=RqFkZM=(j@^0S4XYjlDDBr|4D?#O3%6F6pm9SE*l=HPp zg%VLJm2=8@<0b=A1XgkUQoWR{75;X{8)Kad0F`jWu1bNfe|-f;XI`rR$fu| zD}S#1rD9Pg^XqB@=2251eSeP+Dg{cRVpg&hlai%8r~DJ&$4)7~t30ISVa9!nI--OW zyON{iD!<2C*$8XF=ox1BvaJ}2TiAZ~TX@TN*pI-KW4u~xZpDF*Te571Z z{!95+X3E)st~Q~wv(XE+kkBi^L4V2qp8X5^FJ8}Q^R;{z-_5_nALhT$5AoCd-}rxk zel5xjWr4CpS%qHwA=-2VwSPnTiSn=T0$9|1wMZ>h!)k>ZSL@ZI-WlH6-g(|Z??Ug0 zcbWHq_n`MjzHDE<&*=;J%6-+oslM61MZVj8cl*BS`;PCszVG>-@O|db_80rzexE<+ zkNE5S34fcv$A6FiKL0oT-||1?f5iX${-^xk_dn-!fk+@87z(Ti zd^e~B&B6SjEm$0M2YtcnU|(=$aBZlp{9ySH%m2LmFUo&heysfUNMU3{v?#hTUjDg~ zOu_%dz)5wii>+b@*-_YCXW2#G$mjC)8Wj%mKjnYR-{4+|nkc-sHR{vUt}FOQ?bqQJ7ievJx+ph8KS3Tr|h zP~nC0m&%Wn9|aZuI#QrfA^17dr~pDt{KsET4Kb34>3^ve?BmqTR7a{MbyR=>(2r!H z_?P-Tbv5-d>=2gvAoYIov!6n$|1^kHjud+D@7{a!z5nymR@{@6*Z#eCQNLsC-IMP^ zCjV>t+jIX2?3r_a|L!e}oqGl8$hnu#{nxpV&RsYMnSJi3=l=EF*>i`^6`adEmwoQ> zbB~@IJlB7&>Fn6qm(Tu?v9rH{bl~j6XYW3{`0Tv1RX?fxN$F2Yep39CqMtxwp8nsb zH~sT#|GeWLD#ZIaMnw>#eK#NDS0HT~m0{(il2l2K;-5OKj;Kr3?dlG7r$ppmb(^|9 zeYacPqdusAtL{(V0fUAXDUI#L=Lgk?)cxwi>OtH;r@o@TroO4ZMLE{X(m&HandB#d+@HC>*_~+}oLIUxq?ALFex%eY>y^pMLFMQp2g*1vE zI)yaKccD`{p;fw}QF@f;_zMETU;a(@kNjKg6#EJP4*M7WTkH(q&kphh>~HwjF%$Wa-Nz&BQ9g_P z75@r*jc;TBn|~G7>2~&i__s+{ zeaw2hMeGkSAA5=~W`Bse*>S#u{Wbp@ zdxP&{f6KqY-sHR4-|=5#Z}I!tKk(mxo&O;FXZ~$=nm?r2ge_7eERh^xljOqs2`Ra+s&S zd6@NhUxv-6-nOFVFyk@5f99P%hxkf-P+|b80=QFS{@z1sdGErJ&=UVX|GwF4_W67L z>sPHgWGWX|e6e=ll3M>EwrJ!|{2dwz9O_(Bn!a7TWJw#!F;O{q1ljj3K?xhQ5^xnz z?R8|zip}vKQX_*S3q}s@?kPRg*|VfH5b)1DbaZg!(9xdKz>+1%Wlq-=HU9dYF0Ibl zsI$2W-{;6u7L6S0EIq`Q?Au3WE*c314(;BzuXG>Up?yBgj@|%pb|cWK0iXoR03~J~ z=DP<`7%rheDFLBCD1dq{>A|~mV{;ab%tTECOKR957{D)ZMXBa5sPy;G)#tvqZE=+4 zRR6i@-W3bl=nmuO*kjvS2sZ0T`)D9_M6_$ znw#~c*=lYx-)|nv_GfR;elh!e&WfD3bN#uG<*~fsyi=1}CvBc|#FA&}vAjMxIC*sP z2iBF=XYyV7qxr`QOa&VXUMqAJ4iqjeTvxcIa982J!bc0AEPTFjtngUjiNZ65=L;{} z6r0WFvsKxeZQZtowpWV6MRi5(MSVp>MJtO&i?$c-DSEKzv7)Dn4iz0KI$m_L=xou4 zMOW-5dx70!udp}TJMDw^7wt#wZ`e=S-?M*YzgC=6Y%lf~$BG{;eysSZ;zPwpijNnc zEIwQOVeu7*$HVb-l|EkjbmUxV_v^E=56)%z%F0zUGLrM-R*tQ`ny1>Opr4tx-}6x<%%6Wkv>5PT;1V(@72jo_)^d%=%_*FrfVd&nP( zh1x@}hTaUl6M8>%F_aAFg&pBwI38{bKO252{A&2k@H^r6!xzKJ^1O0K`KIzie<6Wt#@5Pc^4 zV)SVAjp(W9d(n@g*D5R(`zw1Y4^8ns>{_%wYAz^9jR`v?yerFURu4b zdQ0`L>V4IZ#w;;cEF7zgwa5BmL$Q^y(b)Fbp4k4_f!Hh^|bZ^TZ;-iv({yH=A^ zW3Sm)bD`#H+#I*XeetSzbG$n~5MLT!7vB=!72g+sH2!4#`S@7;So}o%O#FQ9w%Utz zk-B)@V|54XtLk59wY}noc);&~&NU-t2FV zHMchRG!HhfY#wcXsrl8Goh@&-7PKyJJuxLR<$*SHTYK9(QUf~zg^sc54b$7Eub=+n^dr+>oBqc1lbx(Hr?a55 zp>sv&hR$uB4|KlN`CeB;*Ve9mU5|E+b)D%t-*vg0bz8e5-5uTi-NW4*y0>&c(EWJ# z^W86XAMHNdeQAb!M(2zbGj`56)6?0ryk}F--kv9WUhlayvwh}EGtc*K>Af;*bk>V~ z&3(sb@9H=A7xcUP!~OC8*8cAPx&6caEBiO}Z|&dJzqkM4{sa9__aEvX>wm5P&HhvU z@AiM#e|Zj@lQ+jc$2Vtm&fYo4<_6~u&3$^FXRw zf#(KZ8aO)e`oPJ7GXozCTpYMI-#p(s-!b1efA##Q=bs&n3~m`bvcSHecfsg_rx(0~ zrM9=hwMW=L#u}l4P9PbwRmXpGmEbd4-P+d%fKzGZ+T+GGO}~z z{Ut+7PAwf+dSuy(W$!M3{8sa=+gG?(>|2q%ZOd)%-j-ZxUTIzFUzM}Uy(+eZ7aA-|oM?^Y$ILKY#n!?QgBATJ!vx z57sVU`^?(c*O}Lit~=p^al3U)%WR#&HOW1yI0=5(Q^+zta1a?O%EJE2pZ|Qv9sKH+^nV|I^~!eB_6N2QufjgbhZm}teT7Vz znIo`EYD-^+f2^=$i3TtN7|ZHdGKMEHYbvx&LAHXISvKRBkO_BrxEq64OMW{>K1Gpl z3}x$gMd>@cc2`%QC<;vCiRnDxR0Fj;cC_W{NVljOntkOr(0j)9qkpSg?o-I z|6tSW$|KiD`RMZJo=c7#TEBiTw{YwA_Z4>%lWHY(0xx<2ZOVmTZAfp;B&z%*Lu(2N zD5TbC&9f3gtQK6VW)2hO9i7CyGMRK=vDb9~D5an|$rb z_xUE@kk6Y;-OnG~v!``Sd&gbLDOBGJ7eHmqx?xp50y_KPxw}QL-Ivn3g1nTXG8MIB zXhQ{a;?v9U6%y5n{ywH?^e@95Q8UrtD7IUb>|&ov*N~cMXl`nZRCC;PDB`YS&w=Hu zy){ivS53G$GIRCRk!@SH3@zWfV_)m7-Q}y6Jg7V}w>#2SN5UT9snE4v=8BfS z@9mu58ZHRc&e{5#oej5imIwXz5S%ZHpmz}Tw!o*_q}T9Es7)L|v?Qv!(zNuULLg#P z(k>1YvtrNso^>+YR!kZC?xyMPY3ujSNi6ONf=1Nm z3hFQkb8C%8Us414ZWG=;22Zix^EqHcb9$5^>Phr+AUmMSRI!H-o0G?zd5$@G74BQ` z7)FCTdEAX5W~f6hW?{c-9mHtW-mJa1RlK*GUi!W}IVRspyioz(D9^O}m*kBx_`35n z-VcHTeo&yU{)_o#IuErZRPc;{>hKg#?3Ue&G@hBWb)eEwH?O6x&lP*Ze55%vWQokY zt#$TeUmHmCP5p3Jq|AB7oxJJ`r)fsAaS~>zKc8k}B>S|w=Ao`8ZFFL`^%kBkzip%FwwPt) zmYMu~(!OYw##fDahXpHKKc7Zgj$D!uxl+=qX`*qEDC;efvso+`0*(kO?_|>wJds@# zQu8tPeEkZ4FmmlN|NdthK(~kZmXDIl`ThflK$Laj+fk>iOuN5iyuA$iYBCdJ31#o% zF^rz;4`AfTvHLj6Dq*+&LhYkQWNZDMhsK!DoIKGOE1Hun?lPLNSZlm!V39LHBo7sJ z@Rm?EJnE!ivcV+{-EPys>4rVN<+=7;)4;pIK9?!SnzI}&-}30A{2}nn8Taz`!pW+z4#@>N%~or0+S#G ztZ5xxtaF*v%+SP8(o!c^?0II{+DPBJ&fRUDTfhE|WlMG`kMs>RFK8}JzQa3LtmtV& ze-iyR2>KO6*Ur&y{%s|ipOA8=yWfHl?3~PO~z=Gl9xEU5LC$YhI4#xkYEWJ zJLKS!wf?rj+FuKP2qCdu4NRBe@<7Ah- zJ8ONw(p za5h?e;g~zn9xrVS+XA(&XkAHNo4uiQc5|#ZQHpl0K}Uqq2iaIp)+Dz|?NV>rE;#Pc z4rm>4mRV@JP)i^?q`tW8O*0=ezqw1J?o$sIV2a8wId}{ zKFTfSq?U^9P*EL<&{1kA7-?#3UOMO-Fq;Mk{T)q}mLcD;wYHL9YlM8#6Pbpcm+>T{B>c1hhvjFv(jCGKoufxX34%2#$q~#=PtC}eCac4rv zM*eVzCv2XSWh!m+p714~f;imVyt%dc-X^{uikUMgXVrrD1%5&M|Hk(nX2sxVvM5}T z)CHJJxP)HuqBS&W5%noFJF;bc3^fa>jgcmyRW`wDR}_=G!F42PRaM30tZ_Z#Prer^ zP)zwD+i6kh(Pnr~_NSdK)57($n3HL>hzs&Cxm`2c2NWTdlQ{!}4*T4|!UMR^*^l2z?nG zM>9{7s5D2C8oESaIlw%)6B10H)Foh)hg!gQ(T3*fT%X}N#-`7U&AzoE)?qiSV1R@$*tTj(I zzDzVU5h_aLbBr}@&JAf44HaP$o2{k=c#mtpCuUco%M;Y*74_8SE5&v7b&h7ewaST8 ztNjgnllgx2(3Z#btNKLRAZ8BYaoomVw8uOT3oa9#AQB{^D^FdIgVXd*NNyd^avIMa zLLYeGIa{FfToyGCER^OsP5q1J!J{N}x*Sua>x)F?t+?}vJ7TYhXhw_hf{<-%&JLK< zE)cY-CD6f}8il2+#HweG#3RkYg6yp1vy%#{rbhyurB-iWbkV8`-lnRS(i(rTtGV)U z&piubB{kE^U6uLm!>w+Q-BDb2`=8}|3QOvvPH$r$c&ZMJwLv)p(hlpbF;i>IEHi?% zA(d&Ki*mR~enZux@{>g~NPgSVg9;ES42q!|i>51LWayq9j1(9Jp`y8_PFMbnDwp4C zwYcp?K3Ad1HEJGR>RHNPbC|Zz>YAME$jP($DjeJ0$#(u4Xm3tA5LuIvet;`_?xEl;*70l&8g*~XS2eOWO!!MdK33nlJM|~9*cMjY| zac8j0Ajqt6Rl)F(%tkWK%Ezt{G2tf~$7bGPx4aXe~F)=Sy$&L`R&5T)T5%FOp z6vTaOzo*q=svC-RG^$x0o{lWFsxGi}N}qBfc|Km5=t|g1ieV==INkZRwGFMw$7%dP za-UKTz=q7v%mK9)Oz1KonXR!&?$!{bMj@AA9{5mw7tL+TP}b^`W8 z+HaIi43lk;37M+MS(T>m1$E5!V!P(N9nLRSlm|QyC{{Hq$CNY4VzXsU&QT6tUy+kb z!^I`0dy=n}*D0hf`l z9NzS(7j_ugo5xV!d`RZBUuS|4GIC6TpgGAKm#7as z4w@XL`K&4&Niuo`~rdJN&FKm(-_YT#`ziw%j$iHM8vQ!XJ zyyt~&xJ&0K&FaW-ls28kxYq`hW~d0klLu1XXpxMeK;2pyZ=2j`AChe%?ZcLQ4hu0& zZ>%FgmfT<;4mpCJ2SNDgQr$r8D!#!!?Ai39a-`SaFfv3&aZQLU#E?CCsjfn|5UJg9 zw3}>yvd7Zxo=gL0vcWznCZL#Q+O5eRVX$x*EaW;Nqkl5X5==B1v?zKD3F45HLuTno zYI>RqNSkaj?xanYMHc@J8ZtC~2EdoPl*p|aa}0{{LC=n=J2G>CsvXfL-5l$=-t*yj zgG`Q<5wzEqS!0+mRx+Gt94k^@NDmB+AnR%A!JySC;|P(43#q%6t^$*9c5QC4#bPe7 zMn?jj{LIp-b~VeRX7zU`5vU6ZjIpp9^=ZoZg1kg*uYvlR`j8i#mKKZfy{w5B z5$F7j@*jOG@)?Wxg_-uRd7hbK8r(1*PToa7~dj9PsA* z8^g4pq8IIJRo0`v={1oFqbk!rx!xzOFd9xYvy`%V!kh$}BQ#yXFoAWbxp&0!-?PnC ziqbRJG~jo6_L%qdD2lhz=CkBk%Pq}etKGu;9HxEy+{u@6ZIePFi`kKb#b;U1ll+WP zhH6$&X7p=}A_jXtYR9zNaa?IqNH)riGL-a$l%d=(-_VQ#;grHXKlw#MG#MO>HVH8b z7vh_mVTABe{KHx*{=9@bPiCFE#F}6keUa%RMy~EC0{f10NbMc)G???uCR@b*tS@;5 zR?_iMUm(;Q;;qS`e0L9o$K!bSM4wcKUYUNK=mYyQpA=b_H&iL(lY-k-I(4$u%`uM$ zA*-f*PyVA7E`(s>uJCcsdsPk!X3h5(?nlj!1g87_(*wN6a2MpQq5eRiKa@NU5~dJK z&JUt3hBccBQueoNJ$CvPGRcuD!d<87{U*i+6o+c`xGQoYgLbxAW9< zklWPvrHG2vbdk0)GJ*cWN<~*gZopBd$&CW=CBS`TVvkdsVnfj=?I-csH_!K?Al4Kp%{yp8^0Y#^)Pg|<*YPY8iM88u|a99Z)`^Bvyu0(a1+P=rsA zVtt}b#f6rlNqOG?lMVuU-RCcgmis4PxIk<1zL_Dr!)$gGD8pJn5XoF6brzMR^%WCl zT4{fV=6%Vu%V?Ux2cj8diqKE`Cvw8%2gstm0+@2)P7bJ~d2z+sGY{YKw{uNND?iVdnv-ugUo~IpCr(-;#tczHREF;*H{ui^Nkpj`kzwD2*rCkZixGKgk&RUOK~r`h(hK7cx?o^O*tf7P3d?4;XMo$R3G@ z40ySaJrXZB;5IS#B_7prs;B5b!b$d^K4R>nzR$Kts3@MwijXIp84%D$D(o#P~oglxSy;XrGbaD@4Ca{JMePD+IqwT<7<;R2{`sq5lM~ z7V_^##7BW z{2K6&p|5E?K}euKoa|0rW=~i>Hcq!y^aMrDWMLkr&=sHa#8sbePQoV}P?|-M@79h; z2D!dLpNgcjIRObKXAu-)6)JLKxoptfhfM)|4gU0-XWuTut$equd`)Tc0RPCP?885I zvVbD5_(yy8XybvsC&oYG&v3%d$KANdal-q=_?P%62E13$P2!&#@U4Q*693GAw+h=s z;3_xZ?V`VA{?9Ww`#|u6#8VlZ4`tq~<{EIW(m0pps~Vn_nnE#U8V((w`lD;-VAs8! zY8J6(?u-X#LabQEuA@a-sbNWrT0nWtgVO>}hng8bR_-V*FDUU^6@;bbdtFvJWGn$v zkTfz#JzD*ta3PHsTP{u*0F4p1rpa_VaUfgyl+Iow+JpB=Mn}l%g{&{celgU+ny=dQB;>ySot<^th(>h>=j8QMHgSTmDhv8b?6q&>qhKFF?7 zu&R-j{)R@28Q;(~2Ul9fpqQV!`j#jKNwhfgNy!)GwP`%od!g?C0}Yf`#|Nx=iLzrSnfQ=0|-t$oiyi8;4(Io3GK{b`fVL#%_VA=f|3C zlQ_*AB(B>c5~uo0T$jxfr}|4=myr@D-7RpH8_O5`AoJ_8mhvxDSETc28}kdg$#Qg= z-2qvPI5|B(+Phuwn|v>gX_;R&l(R|bXo&|5c%RVG5)T>h1wuzlyxf5I2^}r*Xc|X- z()EOnCS33Z>P1=>C%oLRJPj+m8c`Kr*Lhm=w`45Y%$%EiD>$%H@HEMNGkDoXy)F=v z@x|a_Gp+$#>2na*eDHL6T7Q#oj27f6qK!Ovhgs8UVZ%qWqb+2}BYMr@Y;k6bASsh- zcgn~EQ<03RiXwW7+omjZFLvA-kilzhL+;^%rG@$QY4N|g_;($%n`O}8VG4VjWJzvv z&a%WRR@m0gSS^Fs;#Dhbw+9#0$xqy|xSb!as1YHA$)8Zk=F-5|jr+6Tm_q!m819~)l#-=ZajjsjO z^SOH1I)BofJlp({`9deJGAH*n?^sP??B4ce=@51qKkimmreoP<4CfZrg?^Zti9!65 z7*1I)>P=c}sY9QQVeQ<)>O@%KJN(_?Cg<=7@ob{2c8%j~A|d;4VH-6Z}~lOiN|ooD4wqwWY@6g=rkIrD}PV@pbXId`eu7OYu3!cDIznJ?U7qn~#Pr$DNnn}EfC;=KTg#Bp53)!2(?pp(W zYrsLv2BB};;VUrWS6Qp@6^Qs%G4{#N1m6J8QIO>$u2t}^#6KB_lYJraPsiaT6D0oG zIGpSYfy2HqlrMN!=KtJ?i#epkuaCpYFDc8(8i$iTBJu2Tc)Fgj;|%W=_Jzz}G7cxd zpu|hZ;Rn*VcN|XsLYcoTjdxKzu#SWNs|Ecfok^C;{3_)Kk1vF5r1;_5jIVqGk7w4$ zX*Z%>NJd&4H-nEUuBTGy%>a;E=uD0|%Y&{s{Y>&8Zh)I_1x}?0SR$xB!#c{|X z8q6VzfuOa+Ok6Z(#ISyDh>aenNzp{%&A1^>y1A2-XK|>;wcrZ_rjM3yOrBk9^5~upe{3#uW9z|??8c(uT=o#tX!CV|O5rZu|!M~FU zJR4(vT2B>LpC98-Mn00C$B!{ckyd2g+XP3`8mk9)6g-HN;N@N)?72kXwPu~rHrDJ= zvw7Ck^e)WDdxDvLn9a|c|A;SiDZD~AX5rg8uA8y2Ye5sS#{?(%(f&ARCZbkbalP5B z^ zJxz9AfW0qhXPEXW0lVgHNpXVP9Nvh}1z-JA&=HD^aD zo=NUyC5yU+LQJ`-uD`*ZmBoLesJ5yZ^|iwRTWEDt)4T>(Vq{xa z+<8mFTkR?g*`}=MF0b(012q+WYo{%F^sWwf)toyzy6^0Z(%2XA=QyD#f?lMta}npu zW$^dX_@#09*))FHfG2U5pkB@u1AYb`3Jq7;IDChWD_0HpMdhtDe$9ZNQBLbPPD9Pq z^Q>|vjpwBCE{d(uaptGx?Qt{!2|!m*Q2c)6Z4lTrI61fY+t*sxQD}2HatIe_Znk$FXjg zp=%T;$Qs^{@e#+m9mOI=;SK(#ZjEZ8N14@PPn1eoq4cp0{W91~)N58H$%L?#*LKsUrF)p^V9fmjLX zpN>@Ov@6)L&@@e(0)5*Uv4q)Aadk8}xmOQdiidlX!Sov7sVRwT4Heoh2Al@~d;J~I zs0Dj87qcJgRGJVluZe^V*%D+3BxEq8i0Q2%poReQ3))yh$cQWiY*8p0t$9-LT8*|> z$gkZ&{vt;Wa?m_{3^R27Ns`j7f|4X%y2KrYe)WpG1nvfK2mc}hpj*;G!9v71MBwDj z!q}rk_qbASh-S~&U2)#QD{6;#%*j$?&7uB~B`{RkJVOnwOlZOGhw~@M5<8a0UlC(d;+GBhNg-QgIXMRWN##JgoTP?BwkYeBkI*}1;=Ofr=DU!w zU9|54`2~(K->1oB7Rz-5`p@yyIndfjM+Mf#d@;GxUx z60&PL+ls3bG>g@Bz+R(!ApB0Xr72uKd@_`7H#sin5yvu5Zi>R z`)Id@&1APfZT>^2$2rH`zYWona=%brDeV`UUQYXkrrom`k@G88yEkukn64j|yN2Fx zsA?Fzy?)*t(T|t-A)%Z6L{I3ZSJM4;Nc5w`FB$NcL_bRWvH^cX^rOJl90Ptx=q8D? zaX9HFSZp^l5#5wSPukfAPqkpRcJ`J^c4AxJ9#%nG}F7k3oej_PWFSv|iq1q&uk!&)E`UxV*xX`N_ zgwj}n%V)KeJ(;!Nb;d0>4;Dp3KKx41?W-p4y=h*oxxRe-a7NUCC&j)N z!DFQVvO%l21WywFk>Cx9Uo+s?LxDb(cyb(0_JF|EdINq&@P@>54EQOWD5;lo)qr0U zJR{4$qTw;jHOAC?kUxZanw3unuwPk>sV>@+qTytJ^a@!NOVy0SuL1uU^LHxeCCH)> zyGNHqT9C`lB@wM@nIMU{=v@;&<-COmOhtO9&MA=nuSMAo_< zWt!QtcjLB}t$n6`hsXIN^O!%qy`|05rfqNOQ4n#ud9(XqdW*{$?$fupJTK@0>U=;l zhF1$ZUF^Vx=!ACHk&MysO9s4|`d`B@Yq$^jH&8!l_!UF`7|9rktF*A7mmjD8)bd|7 z;B%?}wfs2-JlB9LowA&)R2S`;L4T4@8U2YhVvO0;Nvsjm-W?};u1oK^3DLjCRbm^S zCwoq=64QEy>>1yUE5>p^Hv)dm#*H-&3bpbVC@VcHBX!z{`=++JMqfduEkA*7ZDgrI z!yX$^-)9i3=$x>ooslqKT-&scl55(T8s4l{H?0l2kNO8CqqrIU7#6eyBTLpUvx{h@r#-Wa2o*lTGrNeWjtz(v zzeU}NIz~m^KUvTq>P~oruxSX#y1X`@A>0SKAoFMQ&u|`Y95gtFU$Ve{B)uH9uv^+d zs^C){CqDhYkUPNnuvl-U@}rmsuEQC{>F-lNNZny5FI%~q`V(50CmqTz;{Be?y1cdw ze>1s66q=;bj$+zr)t#<+kVO;^Ade5Dm3rD)K-U6XX~m1Y>Kb>!yNK0Fu|A)z-neh7 zt1EB8bkEc|dCO*w-#^7?MjiEhYVz&4qb2$M%uXsPi)kMfXoaW

JQ8vKU?Xy0C8` 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 OxMkm*Fl_)fLH-MfLoMI{ literal 0 HcmV?d00001 diff --git a/app/assets/fonts/SourceSansPro-It.ttf b/app/assets/fonts/SourceSansPro-It.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f7af53775951654ea308d497aadd200237d87e56 GIT binary patch literal 104236 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 literal 0 HcmV?d00001 diff --git a/app/assets/fonts/SourceSansPro-Light.ttf b/app/assets/fonts/SourceSansPro-Light.ttf old mode 100755 new mode 100644 diff --git a/app/assets/fonts/SourceSansPro-LightIt.ttf b/app/assets/fonts/SourceSansPro-LightIt.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f18827985ef836a047e5f292a5c5edb52189f2b5 GIT binary patch literal 104616 zcmdSCd0<<`)i*qIuWZYkY*~_JOV+;HTD-_x9B*-)*m3s6S)7FI`$pK4K!LKAQVJ)pqZw-e7>*8?axR_Mj&v+>!# ze#_b0&s}%ke#Vq4)MxeP(^su9Y@42s_Z?;||K2Stwr|TjOF0esQGe#%x?;-6k#fVoJaA5DOV{AQy;LYbY=Z~DQn_xpv5{>)v1Mw4j&3oDAiT` zo6z4k6QA74l=5B*v`}ByVR@v z9yX7Eg725HsA6DYemARA%2|~Ek=3Ef^-3Yr@uR5AtCUh#@?YZmHfvBRZxZP!zE_eu zLEq2G<59}4zz$;k;dpq@Oq?DF^${=?c-9h@}6iL~`&LF+=A0(!>;QOC^ zMxwGwS9PVHkXNSQiUb`+`s*{2QiAV5w;|OcxwQLyx{|*8kCPE)oGL+wk{(Sbp-V}h zepVtqo0F70)<8O%^taH{&oh_M>&IC=KY4cVk!VW;syoPbB7JBF@7DIBPypNGS#l0Ta6Sy`bZA0=RRr1%7ubXY*ze2u; zQXc{{Dkn~_|9?qE}l)q z_r8W}8&U#!CTZ6hxSog46OlUcy+ue4)G>}!4r~#h%sTjd)+6p$;_5+Kh1AV@*dDZD zG2~+*?r)+5+b4nRx7cLp^d3HfMBiNwnx6*zDclz@7p~J#-b|D=1Uk;*<*a~v(8tA~ zJIWQQgSF$`U3@&NMtMEl51K#4N|CHc#COEcbPpa&{T9~=NQ4`Z!bm>tO8igHrXhLQ zj8uI(foJ-33!sNyX4{p2uq8-M%ExSpTEyCv_t;`pVU0*l%0Jm+e78YMeRO3n3*IIy zuHorx1KPAm!y0j=)Bu}xJjUi~MS)Ddhko;>{-)^h?&{QEl=D-^_zTceXF~qgvtrc^ zd=9f9xzbnlDmDQrhSaLv58+CQa7yXVlqaSfMIRhPGNumkCs+h>KLv8J6LjB+tB@~t zBU{6Mh<6@mNBD7W#r097=OLNP*+*ezEUPJmL($h$vAf3SXVz@3u zqIr-@OTD zT@CoG)pyL5o>SR&q;X;n^Azq-3reu5EMyOpeMP`onorQI(kT73CJbUr`jRQl)s5AMs;~fq$Yn z_%r-j{s;aXf1ba<|HxnDFY%Z8r~J6`Q{`@Dx5AVNrkEDwv6xLB&dDWmV7wHfC3<6_;XD?o}$41FQzx$_cJ>L$bZh$NVe+o(X~0wHR9> zpmmJJ(fS6~$eLIJbCedvt~iw%sywJXr2LoisPcgF3uUdc9`8QJXDXbhl)cKs$}Z)8<(Eo{Qp!)L zP2l@+>^k-xK1(TAj7q*zpy-r5*PcbWcrBL|}YiA2t z8?^U)b{6FDTy`eg#lD8OT+1G053zkbqP(vBO?g-OyYf%vAIkg6d&&pO8%(E%Y@nSa ze>za97qWOE`z3pZ{h58h8~GHzhF{1p=GXG;_;>kk{wn_~e;4#?Qzk02l@VnHdhusy z(?h8JlggizH{b;*QOi`5YFGVgSdFWV>LZScjwz1mj#-X5j)jiJj+-5~Iv#WuILn+? zr^gv^Mx5iFQ=D_1tDL7hFLz$+yx#c@=Pk}p+y!on+vawXP_F9QD+cs%e#&=}kpGKJ>E1D`6%6fAcJPHJEipu28mk6%}sBkO)DgQnH3x5Zko=b&2=)niklaDJeDhE}j=7S0qpn^{gW~eX#D$E2G z=4Yso?<{dvI^9mcv(DM<>~qd>E^=;mUhKTad7Yrbt)N1MyUJbTc7qD_?k4v*P+^<< zZ1)%37rVczQQ>y?kKOlx3J;8;!d%Z{&n}G$Mo^(TLxt788c<i!ez53Z!NHpj-gt1n-5%f;PeCY4op8#_ov!F+5c4iC(EBqf6_7b>aSki`pRRk?0h~f-p?TwUP$}J zd>=mwZPTpGSDsUnYJ;quI$vF=E>gFvJJk!a^@VypSKY4VI9I(`y-dA2{Z!qRxdWzN zBU1*u5}&VDuTgiY*QvMS{x0=l^)dA+bwA}$F{bD))Lo{#Qit#A@Ll?+yGkbcNgx;j zKkuJzExv(t>VLXfSzI@$n}$#Szt-<+6SOO7=c}N9-O$nRKs&F6mffqAK~ujA-TgDA zL1~1(eozTOlfJLiE9;d~)7>}uinD;32pl@dx5>q*I+bx3**UOF`~T7j$uU6VN9VB#f>qAMwII@ru1S|>BET9 zuiV9FVpQ2e;|jl$-vC`d9{z()_73c@PcUyd&Sqk+G@GSh^CaO@f~~|=*rkPR2`^%& z!FFED&9D^;*g9@u>oH&4z^(9mRUj2b*yR|V*bia%{|Gkz z9hgJ>1is+A`7*YfuV6pr%h`Q=9s4<7%YMO6XTRiUut)fr?7!emew3fhp5Pa-Kk&<8 zM}C>T$o|ByWq;;hgJrpk-O6XP-|;W7ZuWP!g9q7-e1QEoKZiZW&t<>j=ds86cJ^z& z0~SyE>;dHhm|ABQRSF&9P$fi zGsdWVRj(SMpUuifWwWwHIZHW5*{)omd;xPf&W5?dHgg+0ojWiebgI4T1a>LrHJ9;b zb~$fhU*c`-YODf$6@HX!Fju(~bD$r?uD%O%oIRKu{fw_>d-(?T0N==-;g_;!F~5C| zU%_7DUttIMb(jbJ10(Hw7-jwmJNA7xk$u4W*&#NGeaI%W!?0^VVuS1m?Ddb?5If42 zV$QmZm$K!s`&RHW%)QGouQamNnB%VDCfM{Lc0LbdzB$Og$)~XY!-v>Sd@B1EpT=(H z)7iKA4E9|_I*B&{Q&c_-|(I6xBPteB<9k;=NGZ3_{Fg6zsUCUOW5=L zOYCKSHG74BmA%TZQ7VKjViJ~!Uf3jsuzq}sMV+U7M~N$EDDBEPOH8+lxh;se4)BtcCY*e$B{Up1OQ5>vuc=n@?S~G`5%VsM|ehL;r5R z93PY@fI1KE)Tn#%ZZ$A@&O+aa`zrTUQ&wN)p6p(~V)braKwR-)%~d1y?%ize!VUO4 zywJ0|cf_8#T{AM$fpTAjamt~3aI`BGUY|5x_7I=Sqo<`+9>1EMvyB%Q&ZIV3mdAmIv1eM`E_`%m!-^IxVzWBn~hv`6_q)6 zq0h7X;;XK*UxjvPpZBsyP69YP8R*pjPy%Iu5|j4wi)W!QTznoo0X~nbwz<}~`4VQ2ecS9jsQB$Z$#{4cBo9>Ef&8|gx%T}Z!yB~Sl0 z;=jGndfWIOen^ReL!MIJQ{C!DjCSwoT6Ndxp3CdcyD2|EzbSub{+B7?ehC#!wGNo)`*`BiZ%jcKxHtLKW z#>vJx#-+xM#&eCA7_TwjWW3$D$M~@E3F8aK*NyKPlNCi3l@;EKctv-`9j0o3@#@n=Ui$GTm&t!*s9d5z~{V7fo-P-ZvdL>&<4f+Z;7_nr}7VW!`Ik z%)HFxI%J)1U1{BF-D$nTdY$za>z&s7tdClsvc7Eni}jE- zS!JlYwOXm(UVT~huIihs@2I}l7PocSCfnxNmfE)3cG|A6U1z(+cBkz=+oQIp?7jAB z_J#J<_HFhH>{r@vu-|IG%f8qCn0>$fRr}la!!@j?q^7FIU(-<2S#!HX=O}m7IKqx* zN3UZVEc4ZlZH@~ZS2}KheSVi?uj4Vte#fhhw;hL_%(>F}eV4&ya|K;Zu5Qk8L(u3KDpy6$s5>U!4on(H0c5w`-1^>)v>o=ZH}cy99C?%Csc*z<(v1@9v7 zTJM?O3%yr)Z}i^gz1zFb`?&X6?`z(7yhnVB&){?VZu8yk+vj`S_pI+V-#fk|e#LL_ z+x%DgZ}i{hzuUjh|G58I|7-qt{6_*a0=ojcVZHt)Xb9SZ!C+IcJ2(_v6kHp8Jos$z zwctC!BOxVZ2-!lxP*bQoG!&X2S{d3J+8MecbY19{(4C?CLXU=?3cVb9C%moJUwcjM zO|`ez?x`EDTVD56-OF`5dFV=0{dWwnqLEITT4oi=vfLZ!{k5 zh)#~qi7t(9jGi04BzjHsrs(a_J<*4wPefmcz8-xqwmP;y_G;|y*x@*fm&B{${&+*Y zGd>s}jxUdIj&F}&7T*=WIetg{-uNT&C+ip1KiiPsU})IhaB*XPrQlmIx-A65WZR#Qem{#MZ>l#1)C_61ODoOx%}vH1Sm8wZuD# zBh5;)q1oBIr{&z1OIogJxvAy$mOU*Gw>;7EPRo&2rPa`CYYn!xw)VAN-TKY8Ic;~e zz1|*ezoq@qxH;pV>doY6VI^VZInyMkTUb-mu* z-95Sc%-;#Hxv{ z6R(;0mwu(++#l~B?BCXZbN^o^Et+)AGA1TPrrNm{^^HiIA?@sG|lLoF?q(U8H;ADp0Rbt_8FJV zxO&EoGj5%6=Zrlw_RV;7X8z2fnU~FcVwQ8(+F1|JdT+LQ_Kew=%)WE>kvYLRE9cxh z=h$5D+>LV|n)}{x$?&4#TZf+;PR?62@80?P`Ag;>Ur@ea+Jc7`HZ8n)q-5mkkt2(i zF4ir+a!L1++fS=HZQs(mrB^IHx@_&TOO{==?7C&&Uw+~8UCVDc%%W6>VzY)VFEcrumzeZ#sL^1)DD0boHiNHr=sl&!&eq zJ-%uGrk6Lpx#_)4M>m&jc5iOpJh*w~<_k7Ix<$9exut2#(k)kQxns-YTaImwZ=JvO z!mST)J$$<1^zi9@r!P7E+|zfRe&6Y@Z_D3SzRk96aNEV(_HKLU4BHw0Gva5Qd&ZtK zj+_}k^MW%UK1(^PJI{XV9Cl9AIjhgP@toJr4WGN~+{5ST z&x>dNyW_lj&wFHh@Ahfi7jECR{Wsg6+kRmC-?ty#q1#cuqh?2VNB5559h-Mtw&Ug< z_wIOd$D2EccRqZ6)A=`_zx(`W&wo$+ckF_E_@gijROTT*L4|!%1}~Ha9#fbwlNQ1* zskc7>Kbf(6L<1NBjOBHY?4uY7#*G!@kgfaycvbjeWWrq$?)H%(L@38&0>Tm?~eK(;6cIMrw`L zJOcp+**tQ|6^rJT*Ao$_Q3V>-&}b@1gyKBpGw?#5F!@5hf@k~REXym+(>Xelf99L& zXGd(Gp3lE@(M4^ikMG=^>{YHmvE{9|Fu`RZRIn6vv%s5Ii+R?+L+dbkD@A3(_509< zFtg&*1Mn3R)rtO2rfBqc;f|=8XsWcB4N8HM~%7_)Y)1P z=RU7Nv6!9s*xF__a9-U$x4kAl|AHCqQ>|`uXRLqIP^dCCxgkE}x7IEw2~A$sKII!b zr?&;I-q_&jSM)Rvclo@|8ZVJr&^rWrm%yjmlCI(Ba5ixO(UPcIm7%2*6#@}Ml6G;J zn4wFz^snvr#z!ulfBLp5XU(j2j9bt#s9YbIxU^&b^_#o>9jh*z+B9dp8#JPd;i2qbiLFiJxM4x;*!4-Xqb@C29s*(&O zUk>EFzYsI9|MdMrQVTqIqes==*&^Nv9uFix3M3zeNNao%17C!)ZT^>hVG@)lE#eTZ z_k)Wh-}}*eFIwNwnB^6xauT!ja9>+O1;hBpFX(W@7hF8IratH_ahtnh1E)_5Tk3~e zViT=(-_-wCn{Po$aMJQ|Q*Yckt<2^zX^c}p-0gQ*{@_m@cKWFe)NjM0-=_QZ{YF6SJ-Tpn5sxOZ$ansvc89^_hr%k@0+ZeB`po#N=Il%Js=Vao>q8d}{LN zl7@Icdmiss;p_j`{U*ysnU|8bq5AXGVg6Hm-+<|n_WjT41L7~@DyugbYO5sSLp2Tj z#?C>b$G&LXWW(~vin668<6`D{b0_iFlhwnkH5zr{9VJ-({nvHWaukw=D3qF(!tP`z zbC4)+Kk3;#RtN=01eJHPX$hVvF!|In$X;YX;X4z@z7hM%tqq{tO?>T#$>sdA8{ZSW z2fFc#P^Y|XyFXXrRZW@_LXINm^8lph#C34qN*?$g%Bp6k{afv$MiglMU4+Ky(3~RC z7z3J9Anvjwp+#%FXrRfOAd>q`-Mr0Lp!!rAU<$w`-M!VisV{V0R=2RwQl!p&DKN>Z z(;M^)(DDnfyN+K1p1HSfS@_!I+5GBj>rSgnl1o#o`#jX$1dq$V(>EokH`Tuo_0B_& z%1$Udsg9@})iP7N_)p`gP0{SgWznBB==9}9vr(_;6%8vJ_%~6rXTQ?8ygs>#ba5BP ziW$%eR`g3o7ncw(l$>(3kQ#U|D}hGviaye$UzcbS8d(<-V_95D4;kFjI=j_w3balh zZp_@pdsg@R&5?=mo>g@1D+y0o(-~jBcvhD$dlwkk^2LtUkzQZ=s*N3X!P}O9OLNlL zoMz@?XaGZIe72-HOpeMJg)u-?> z(K6y>BU+yA0qf`s1>bdBH(H2pqi#s{lA#Y6Dky8T@-TRb$+9IP?cG)=DSTx@sPrZ>Br{pM!h z-1>G;$E=cZZPxlkWvJa(H{RM*;tWLX-tKr!bHL_~Tm5lstlivDGuRd#NYtQRE5S0g z=z{{RA8YMWsa@(R+XY7*+Q9`k<%^Nc*XAkksk<+DLeGDxf8qjVb0~D;2IQCxxu1h_ z?b&k2^lT-)s8Vt+SvOJ>m7!car(wuq#*oylh%rg^d4ny@t&3(vrswOXO?QoN3YE-_ z%ri7}4TTo3(eYA#Me;&xxMJ3Vs^&T4`FE2ela`LRtyyL!a-%+T(M|{IQ;KyDt({}) zlkLBKWOwBZQN`3&HDPjcYeMKk{$OsM4KstjvK${Ddq`cgf*{Mz`3=f|cL8VeOm*mxsfz&n3q4OhkE|DAj|`O{~r znrybV>fed}MQjb?HAt6a`uB6{N(M)6)k*{}YZdC|s1aAMZru`XD>4@8s_LtD#gqSR zB_7-FpA_&7`t~PxCO;JK1(zr$ytfekVvVnKL;+n6jk2bX)C=Hq^sNq(gfJ0sy^y3f z?tv(A{GZRCNj|9O+w+o*e4XB=3EuHA8wqzu64>FXsWO<+IdiU8ny8w=0~Hd)|;kGJ2k3i8=gD4CjxUc54I#T z3c<0Usbt*1)In3^G&&D=vUwKV*)olHh=wM7rbHQsd};G)XrPeK!Z&z)d zMF}oy?45=tH%7Y5>U-hkwavB;G_}j$p*;P}3RgqAz5I%%P>NAo*S8K*TRE#kTW?37 zI9TW2=e|t!kSw$7yz&{gTfRfAp{DUqOslk;8b}JVUsO7@m*`3^qqk z=+G1S7_KV>Lhb-b|9sq43r3^HNcvacPST&mP_mcM{nA&Uj^Z@F+f-NkHNjy`X{Iy1 zo6BqbJIkIq(FiV+eNg91?ikH(XfO4_z377)cxPs(`7Mu{2lmPEn>O5w=D}km#&9W5 zG`5>WpBQlG6nDg0n1@4N+Ju*bY}fn(PkzS5fi|^yU=B({wk|q(Q9RVIX}Krw|Xv&sJUmcg#<>CZAf9&$7~^iBq zBBVl2#`7U0umOCgDfzvXWs@4JePtEJc9TC|Sh-QZabfL3{*YU@b#PK?p{t;%E4tO6 z?B@@Woa<86{Li4f3#)DCrE99yBU>>|pB0dOD}9cJSIO!&Xd|Kx%w!OZRf)>hpt3d4 zanuuTQQ>0T`NSRdlV99b;x2@{92*P@%m6nOj10+Wq}vR9G`sz3D<+hp(X)=nGmZ~tr9=B)NDnZ7ODuwZ!NISWbKo%ncU z4KHer{R0|c=IZ8w$>=NiV)>(xH9MkJHBG14CE30jqY$!Vto9Wce9$;UE8hGh2!qw)&b?|KD)H6=@_3LQ*IXXCH5gY}Q(9hVu5bp5&#pbwFz%OlztLc}y;TSSE@+J_T_=9i zH&q>%t(WY_-=ZH&vi&$lgN*6e>`<-sW7bmG2Z~AybhLAXi$P5GW5zjxj@zK}nx==& zj;z15T6y}!Ke_k6lW%b4@-L7+XhyF@1Fo$Wa3%F4f3xa)=2w|+0rHvm2p^w8G2)V0D5G! zO}ND3slD1;qzf)=l15=&uVs`?IAQbM$^-pw%_@v~_?Mc($rG`lW))H&goK?xs=cKo zFr_&XWFf%9vhCIMjWAF+3>0#Wkbz&y@&xmgf(A6HG(iQ@fRJ5Ek~T1z{n7?2#htXl z^2oYBX;k!$w)Xj4n-W-(F~7*>|4QBI;T2hXKe8j(oHl{`P7Hi7+5nR>vJ(AUkzF?! zBO_Uk%aswSC*%x=^n~G6>7k(2rd-L;3>6Gv{Y!qh$L%b2l;5_0;I-WRFjIhA_p9D z_TWB_VOLrj8JitSO0L{}$JS8iEpnJA$E%}W1nBr{dRwaM+MKl$tL^55-x_ur%c|TJ zp?aI%7V9c0v$>3w?r3?9-(sk)sxI@53p$(pCb!LIc9hw?CZpYIDzf<9u5wRHfRnr>~t`5~Kpln?=h7rPEhMFJ$CCmsMf(DTk7&5~{>OEyLYORmytB;9iwpoC0-gZEcmBr|8OR%62tXDypJ0 z)EKV|zusD*rNS{iP+z|iW+DM|%RID=wE6+^6zQgLbm_wEw?|yWNHC|a6sk)5nyeAb9eQ!s!t2P#W zmTU8JQ#hromcO0+gKw(GH|XcF6K^>?V&p~SsU!IFZP0eC?`TA*(;WOCIpv?o z!5>uDr1PtJIr!hyDH*&ljil!9!^r^~usLgdLxtGw7XLulLj+XTDdP{vLSYJ#}{mkBq{z z`D0mJ(W$p&^4F(vygy6VkRs@sem}+Oq?$#Xjvd~S#cAo#qHwZNN1CxC6d`uWFg3E5 zk@-TalulT~a@EI)^){@&feUFYB5C*G8A&_E3u{-)brpo;M8ly5-3-m#o4xoZ{ z%JuNCRA&7cn$4VTQ+9+R4W!pbBXUwInNMUz%auDCyG&@20nbcm5qX+u&6HY8R)vhG zp@DCe z!E1%g$Z`sEaIfmgC1YxR8C+7d#(IHH(-i&%YH{K^Aqj zkbL5Dir1jgT>3;{+d&%ggfx)-DP@LM%fw2ZiG%?EA-2PSP&nxe&)23gZDYcwtPzh{ zlY56VY_xmI(-NW7gd!DE;GqU;gRbHQ|XRmBC}!Urcf) zaMj2|OfTf`uo4q;Ao0RXe!_{LWI3Pa-~*z+CH{$qi&!R6Puh)Mfd0T9P)(i?!9CE@Fs3Z>+CVB#JSUL6+J-_F?pDeDRjl>B5_Sm zJB#tD0w}FXk>A#gCkieXA=J?2cIeE zCh?DR@CyW;CH_ecK2g{n0#|ts-Y@z~=KnN{vqM7vNj#Os`4Z9ZvYf&kyjUeUm$<6o zN~)D&#WWmaeCn>_ufwkUW2#xiklC^xoG~$AS-Wl@))VCjOQR^QglZm~Hh4PJto#_b z%@H(KJ4^ErZdUHBGFXho7%EExG(wVS(D+#D_WH_6V5*9W1&tAprql{r;xq9ecWXQt zQxHRjy3;%4SZ_qfZ*jA#eHRPBYQnl z&Xrl5e}Y|!b&~gU^J6TTr15?izew~Il^;|-#e2zW!c(ojt4DqB7@K+mb~~MQKsai( z>N6!no978@rW6*7D#mlNXBgyzt_oH(@-k0ITJrIPu6kT)1%oskM)?pqWZSG|G|Za{ zOV)sD=C`v)MREvUGHqeLSv#CYjIDSylQ<*2| zTqf|3ctM)Zz-f#VxLP<0C%aqb|0IpWRzSR28b?3Meka{CPw=?RpUUKK$<2@YY?bv% zEg6L$V`m@7c5N9yCS;eQ$}x6px=qBDiTX?Yqft1GtrAb`W|^PrFY&aFlsJvu0$2H{ za!A+8{ApcF`Io6H(zseMDnHRpmXp@mT^PF&|CYwl-kpNq?yuOM5?#2FQj=| z^S5NJ+3cK~d@DHLMDR4}{e19p1#yW$NXJ{i!}+*+aHY>)T+6`Iv_1+Mz@7BsTkxz2 zdtHOp46@=QzkVj-%rM1n9xHLGGb*kB_MH`r8>{JL*Qryx$$3D+?nn%W_bqw1U zSe6*e#HT-5_@$P~2?_@MDMhpu7AG&XOe%>4Ppe$hw?c-e#llM~S9@mH%TL@oeH{Nm zunwVY$>%7ZEjXbjxyT;|Thq=!i~`p~Z+fzEYhyHQmO?TDzC>6s<)p&}WoVOuj8!8F z$T(>7yO4ja3R>8cj*ur)hMZ}hf&h$sEl{4%=wC;n=$Fms-`6Mq()6zWolfr8C%@cu z&Z40+MQA#OrO&%zbGM8M_bXE~;px-{@bUSo4Sg^!8(a7}ahbAS)RVN%(tw`ZhxPIj z)*#wKEeMKvNH$s%3ock#L|8E`185!hd9j<_^@&a;FH~sqM5=;*(QTg-#aW|E)WJzu zZnxA#+?G8583VH4#>8}LI^=wzD{d9M{t@;YlWvqWAfJT9KOBXVYzkaeN8zMHWd2XE ze_58(MYPP|N!U$)6EtoX@td{an2eXzOm2H~PIQnqQ52(tAN8ZTE=B9mnikCmrEHjS z*DNTU9-U8$*wiMtw0olMr1;Kb&QN)^qqJ#S!j_HOboVUo=o@b-H=9cg?(&nuJjJBf zYuBrF11odFX1g!kGS_4s#1y!sMql_=I?OYD72^#Aq(aadb3^Erk8n;v7AO5EaLk=F z9ODOKKr^_JVLK0vPZ+myaOlmY+BgARjMG$3Ncoh?5&A3re95Tq9b>D-I3nUVMZL({ zp?bY2-Xn1uFC_l)D4gmmaMU-QKR|Jy8Qg^P>!`lv@cHH9#te?QQ85n6@>7{|T5|KF zeci_oiaF9@r9-(DE49ngy4Ot{mLPbJ4uW25z#! z*WgE93d51wRjhz(3lcqCMgd?&6#Ip+D@O*N@^iI={oF?>QE0~Cvz!A&^bhwwS6*eKk{_6r+tCC1jA{Gee%jIHC~ z7s$nrv2nsLAYxL5EkQmdvL*6F`4T5TfW$uds=yf`fzQ;$jC7(Nl)xa-}y9OA1$fnuHI1Surg;}u`fQ}?~FJ~HDzaThDxnYxj5BF=1-+@jG-n`ABiVfJH{C4 z&w+mwGmjkmb&NkJ8)UW*qYKtgg{4QMii~h1zm6MxOi@*2%~!y_m8cqg3-b62 zih|v__4UJUt8aB%D>m&mFFdcealt^MBsr_FJknp{?_JpJjM~av#H( zbdB7&wJQ)BST(+9)uaINn20gQnLZ$5J1J`HpE{ds1=f_wzRp=tw-nY^? zPDIVrM`;#zrmUwsi}Sazu$_LdH;XG~RiDBAS)Bh}HD>T&21k7|^$#h6ZlHHgy_6cY zIrF_R&dJjH0rC#cSdaPg-Le}JJdo}DmxpGG{eLM7q9id1RY*Z`wp91qKT4pb+ z#vMiQ$sjD6ZDv;Vu;Vu~;**&w<8;$b{*$*N@Fr)-?1@+lb3&AQO$xRpv~(1(gM%16~51+HlI% z9QLy`rN#uuYic1&x&-NogbaWb8)sq!#H8hu2W^@VdLj=LqVO|X=cItOm==rS*6yH# zkt2p2H2>a*nR)t~q^a8l4N1fFiaQGXnk4QLxSNhU8K2%JjE;<&sT9GIrwUmQ5$)qj zARD=!HpE)nf~~>&c{_%5Y9!&E;w$sbt81N*=R2)Q3v2&nVX?Q}@9D8sAgsM*PI+Q| zYgN=^;+uGlh;O&IHwK$~)=vpHhXN}T`O3Pcfw)zzs5UgU*l<9Rvu#{+rxyBNKXaU0 zguZvin%c^0BEQN6z&9$UU|S#>ZEOj33VEr+ybSv*ATLhRXKDrey@ns=kKi0N4Ob4c zUuW>gg23)O> zO|m=mg3ri?ib&HErEPi(%Y1scTue#SPS!PBq}$fz?_e6Qep zmfFgpf+^=@_5;PMJG^x>{Bc#JyQu;bL5pxIc^Ym&CXr@n8n;;#s=UxCA2#pXQcB z{3y#gmV>7RzexP3hQndaA63spejn6c4%8zCMuKcx=ov0H)OW4 zyvA$N+gSDxy+J4T0qGYG`hZS{dU26BA4mE{!w=`+J=8xMeni7D)56)=uzNN9XiokX z(k~KMSq|Q;pg*$9 z4(apZOir!m#>CF&t_IUd6=cWB)nHn?kUir(d1YAc&n79%-8@r`m|mN^tYAg$@=yZ= zj@-+;wCy}FuFSOoS24xTx_dRzQe8RwXhePY@B^rCX7|DWptdKiU1w`}s#=}0Ht0UV z3si@(XRu_=H*LBMpN^PCBCx!6IW-GBLwl5Xhv>VngO>Tqk@2#RNVc#?2z?Z!K2nW1 zOP5ajAsPKG-dBQM>RJzdZoF=KXONVqJV*_BcqulH;$zassGv|tmaJWNr_hSpj_gh$ zRQR==okGO#*ek@Bi}ggzuxb5$UPAB};S+>CLpbai&A&}}1N1_WX5_4Ze}WTmYe9ow zr()ncYO5$mHBQn~Irv9>n#PGwe?)qRaKt{W)bfY$>kjL&lAnG4)70uw-#eE2DXqU_ zo!~G_;{EpQ`n$$2r_xJu8>-Yev?5u6^(?v;3SER>77)6KR^Up-N*Bf?T*)?)QFg-m zX)|F_QY^z4DdLo;0t1QrK&C zqW*{2A2axV(JqM}&cR<0?UMMBERNp@pms_8XckBL(5DiIy_PNiNz$iU{$p7j_Vv4I zT+PqoIPaeP2%>z@GhI#>$3Cbu4mt!yzsPoxy(aT3nf!+l*UK`vJB#xtgfuut2tEDylIy|FNBJgNiz3F9p zahM5~?Zp~!2&?u%TEDi6^~n&gd}>Ct$I@R#Tf)M_Qr zbezD6HW6XP&d82_8Bwo(R=6u8Ky2*US+yBwTCRH6OX z`@pYy7Ru0!EWaG8zzxyXO1q{+2!UiG8SpWBKVc%+FiutUfjrgXt+T{Vy}7U|zcFU6 zEH~Io9Z{D#uSx7U9Mw9~uQYGB2zzg~kgvm7Ys}(gA4>etD4gsufx~}@{E`Pz&f^%D zI&jYU>1iJH6U+H?ST4KXwU_xp9f}AuA*DxkvYJT-X=fYld8Is2NNO|uvwlIhnhan0 zaW_#=ki$nKy*YxbqbsV;&vYpoKqXqbh^~!}N2ngJLQSLvu)Z4UKGG zXsfL$)8>~YIXhd)$P6QrLbq&@+~Io0&7oo!tuKmsIsbF*dvMYg7AFRI0#*%<^Pr#7es!HUm`y&|E`?;WJld4#xKGz5aT1|Cp!!Ig`Fjy zWAD=HQQte3+CyvS_;;9pMbs;<)$2M@FT%ej-Y@YZ_;nwuFX2DP;;2^|576F9v_s^F zKkg@5{@5to2pqA{qMVJwPLbs&Gv##U=EwM44&Hz*jrYEYvoCtGvzWJ&wMA^!T4BP4Vbh9-_mKsXbfn?O+#6pe;+OOXr;@AeHkthP3fwboTp z<*W5oS=>RlB@nG?2-Osk8>w}2O>zPevn<)puz(={bk$qdlQcMJ2UbA+XO{c#560wac5kG|ic_`Z9K7t+ot9?l@FhwDqtuS@|O791GIp>lj}_cAhTd zqV^$okrshni}uL~De`g9xZuJlOVOtx+=tM{fVR|>+Z?*@R>>}rk&SSD^JQcA2kT8f zdj(F(4HQ=Sf@O=nMW@^>%*(0+Rc33s!{&;+O=@!74B5A67x|oUd;@`d!>N3UA0CBM`4T@e3a9b~4jqtN4*9@j z{$wsLWGIbaLU9?|dr5|5IZ96c$As>Y`HyP&5is4ig$`@c`sG$pf5Lwzbc4V#)@AW; zi?K`QPo{C`+HZ^cr13Ig*T9#8-@TNX zB8*MoWE(xj)qyL`N@UD6$+(OwrGqc(HLE*&A~$w%!^eTYu)Q;3*WxUXwm9OE=qwMX z@|?djTIK1Q-x8i!t@vGEFZya_v(w@oUwvKCRlcydXHjF_hF(6q~0u76SV zEzNatZqO;tge%h`ZebgW!{O8iM;!`R*HfujJok(9;F{#&a4)HMWY2|*dN$wvfjs=9 zDU>`OgL9CJbB@RdS(ZJs=d+Fr5PQhs`J>vMbgI$GCmD@C!HDbx@@G(7M81gkP?!s! ze+1jQ2KZmGnm)q7Pzh+Mi#>@TX_*s%lv{5@}3~i*f5ph16vJEz3gk6%BvN6n~ zIZm?drJd>s=7At#cpx^(6T>8Jh^NI0c?29yF=!!!oQUZ#2ogjeFdqn1h5In>X(^&S-a`kkt;QK_+AW>I22v0$pmR*1MH7BmQ`0zF zOS8SL5hqKFFj>@LEp`EIVQ3c#i(Kp>%E+yJwCrQXbD{^ew*l8`q%d;OQBB&?&PgrR zw)|yxY|EGfI*iJv)>HFkbB*a!=I$ADo`{vs8qrPo>4;m`>`)^JuVu47RCQ*_(wVT87krwHT>fo{1%EM)bLMo@HMnA zQQ|6oemPVATJlwD`9ICUhbdNF!&5o8r~1i*2`P$!tTsB(h*ql1xvNt-wD;xA;QO#N zRqZq^$?1;y87Dc%pUKK%Q_?-0+9&toEeTqGQ>Y#fhE zcxiIucwlFu#v};Uh{(4iVn@q^)=95~3wJUSip~;>3sIqSB%u_v!}>%xAPi7i2bE_u zAu1=`)?odD^QY_7h8FLjuN-kWy;JhkalQh@w-VUZ<6FEC)Y8^EwSbo`Zis`(DHaX3N>1gX=SR z7xihToFt2id9Q3Q+0?Q=>9`Dv_i_o@k+?fk&SAcr{QO#eZw{WK`JsmUbMQZspI^g+ z8N7>U=|+Bj)L;1dRAxhxq}D3)Jws&%mQO_$xW@k7w{MSf**ZQe0rp z`-Kd&2pMR@uRCV;f@@C9?1+(TAJk%oN>WT-%=940uvS?H8$;R+Wf(rliz(+~6ieJL z^eJi9Ucvi;G>g-W^OQm`dbALpJX2a6cwb(c^-m=jA`%cgnaf<*8GvBHiD~I5Y!-6h zIJJ;uV*+K!ATP?u3sa%%s`hIRgL*^< z&qT{<)uEovga)BFn)FkO9c~j(jkrqhc{Ql(fJSkEmJ~hNBPd9F$ecjP@*fbClxK8- zh%Myjlz+7YPYZm~(eCpi$`3A1tNf^KvD7^7WT(-#KFke>yiVm7*Z6uzRUm3M8WU!_ zqj|8-SXKJ1f-Pl6M`EzfS!t+_j+;Li=$c*bZmYF6*16lm)&@gxLPJgOputsEQR}I! z^w<9tPI+f_#A`27ihLEZI-Rl29i7(h&d>K5>n+h~ZSLY?pV?89U)0nP8Xq?E@7Bb} zyBo&W#5>&$9m$I;+;vrczh22x^;J$^MU~e|J^~s`sUL*gKP=?vh~{sUIPtl}kB`DJ zht%-oDE##_jyRn?rz#(FKk3hu<&)l$0x|duG{m+QBro@o^Y{lFYxTTJ>g>AUgDW``(LHk?PWQtaiU(d^F(^x zUgpP`{zKA7n45L+#k6iOaPlXw)7I_f^Pi;G?X~Y6OZ`Ny+oP7WZePqYzpRh(I>$7u#7b9=<%{Pemhd?39b zKQ8$NzFCZA@SyU8u!Vy#PN8%8;~W?CNI7)A55N5o!@i}d>>FuW*3KJ0m2F6-{XW(R zUz0q1ydM$%wL*%EfcA?!JJtXj#ho{k&q*^Bfl(9^oqxIybKVGZ;!d8+K2FFr$#b`8 z`vk1MMevkX&En!0wZwjDEWFCS0@%ezt33&v4TQUbAVgb*Xm{i1KEzT64mhTHzEG8S zcp#gO#%_<%79Hn;3>AA?Ci=|%b+LYD*gdnso~Sl8ch@Z|D#&+rMC~?Lb;M=#*3S0V z4OBW3A?w5vOR&uw?rW>JbhbqXn(XvDOQD|D`pTZ|_3_htCtaAZg^RqFPW&X<`_{&4 zQ#hJ%*+TGwCo974hMf~k;aIb)wU2DA7;LQvm9Jn@RXZjUs4R2DXI3I;Pc8W@$)DlI zU6vkcN?;Wg?t7YZO83RX_?-k}sQ_4r=*;XI4mz7{4CpM$qU1AHD_&TQ5 z&bsZA+5Yj0jM0mj!U7h&x@GjGtQOsB4C zdYXhW5fO55kD=Z)JrZZv2-}r<3=;>Z{@TrF~?^mofc^1QoA0WVsr#{A? zdqJO??CuxM63xCdySA7<*psHJ>1cAAqYxY9&cekytEZq)xAB`RVg_f-<(ulSip*`8 zJ}bK9>gBvO-@f?r4T~D9VMO};jzI0a-nJDRzA!gHa>7%eqR;lCPKj(BleU1Kty6A~ zrDNLhb-~{jjBD~x((Iag6jlNK@`dbA_@grWhL-k}R<(6{X4ofHF}s2lR{Y+Tu`1Hxt!ea|eU4~r zRa1}4=5%Bb2qgd(0pM30OR202OdoIGB7_$F~IMjuea} zlLzbb%Je#OZN)Ea{Ep;GzyEL5-EMm$Xb8Q0m_Leo2FL77%GPphUzjrcljx9Gidc{b z!qSOj>9u)rj;YoQlK41o$yXpI@x(uO``V)JVrP-f*WmF_Ot=O+eNE2FS=^+5uiMn% z99$ag87?t7114*^$7Xc248;Z~RTz!j=YPG(Fg)Cj?Ma|gGwS~=c*zav&+LTOy!)qW zfs}mOMGGjZD<|NkxojR1BS*0~+#@~VkzD#p+f-efBd+NntSDiIF zZ9`W>r`c7};H{h96D{&B^iP@XY8ePR+v}=3J4^j_aSP58@zj^N+o#7?+`h9v;fN*_4X3C-Q;N- zir}{`%oXn1N?Svqvcl8Q>Kq@dsfl&ET#10CD%4zJsqL-{b~gnKI{UbAxI1F42(JX!J*#-JXQcNVHQ} zC203^(9WF8pHZS*G>3B9hAE*3{CGn9plEHGESP;_-=K`)@ML;1iaY7ypyQ|IFRqXU zE+#$c!K+eD`+4yoXE&52=s!w>k*HZPpVQeMsqV7ZcbVNrFzO7AQRjeBYeU4v(>L&t z-r@%XmWC$O+rg2(3Dc6lAI+avZ9y=iBm!)(ni%L3p>OgYfQ` zgbl9A6+XW#c&!$7y+;{j&VctXurw zvGB}nz=+_Ax z@8}GrgMon)2burtY~J0`cCdM&(onKCn3@MRuYS1MsIhq?0e5_5&Ekd2hMIaKUCYMu zY@SzT^PGasYwS_L=EX+9<~ekh!IqkZVDq4J{QLA**sZ)%@Oh)s1t8e99&JC?^dlG_ zxz=HHdFD=K?1`z9pDi$V#M+Z1td+u}qAa$;Ja1=A<(a#`#j-Ex*hPs|Yl>D!U;R^q z-cqDdUkfl>m#^4daVeoUId}OAdnjplSrnf&&^%PLV2HT7MB?QVldF1eCHT7N zX=u$B!1>o0hY5%~o8Q4WX0kRovgTNuBhID*YcmPfW^m(OH(k}22rPKt&9@V8b244Q zo@E4{egb$(`}Ih!C2hYJ5W`jr93@Qs_cm%c(EfYd^G~onXIz|vHw-DA8Go-+)eb{@4K{P!%3@sedCsRjMv{1vUSDn7Hin=f=mS45Bf@d`!r5uDM$+Y*_GfO-Vm^)_Gah5Dax;d z4gMhdkz{WSz|Iu$H*dli;UC0b!c*M2CjFYvuuWa)Ls6VAIe+ z;Xx`5^$O$GIr@{-b|#&f%^1}Cxl-Gl2{mP+bKPFwlA4|cp-f9%ls9Tq{H3b?_J+o` zSba;x=MSU@=2Y~yHMaJoADuaF$Y0uUd*+`+-^!&Eq)!2?Db9&Nn>jjI;^_;K5@wG4 z(w;%ISR3VuLQgy%-;x0h7Ek7zlxKH^Z&ab@_0av$g>ei{ z;+K0cbrJUL)e9C}O*n)E+lcQ0Tq84=&YKO_3(5bF~ z+pM1My7G!DoyF;7FZn#}E4^O#+_2SZ^-y2VVlPXtz&EK-k4`|tjs?&>V*wa0DzB_W z9WJZY-OXOkRYCO$TtYxlK#Bb6zfK>Lc1w%lx1^uG zWa|B5olxFiAd5+9dH9>8r@x_}X?Uspl6?kIya{GdeF~Vhrg|W-bzi^Tc$@vk)eG)U zf7tP{yG3~?%0HDaPkka7BQ|Ubt~P1=jcdHyix!};`EE%0(NEOR_Mv=|lTyTp@9RZA z>S60deyPYWrF`@!F8xlLV&&)w!5>TwatVttiN?6`xuV}Cz{;UstsG){o3!`-z&_2& zPV-&_@3D)E{}9C*qWb^9fAO~E_~(lX<=8!MTaH~)Lghq1M1AN74(Is2l!c@_*x8)C z5j$C>=v$?9tMn&!1m_5XF{F4Z%xDb?^%qI5E=|^(0~Nk_gE^SKwYkz&9dkD0j2y)} zntpluI`+ls&z>?iBcv_CBKB?LA$4r?rJR4IjHWHNN{9=6G zU8u!c7Vw2o=VxulSX8Z}c3qxpXHpl5rS>p7>uA>VkA3`&d=l z=CtX}0hiGibCt=(=28^E5m_IqNtNQFmXe6#GFhEgUp!zu9 zLWwFAqE(O(sDY$Ne$i-zl0kG{j&&Q*uaaU@adA{}Q@_0NpfOsl4#Mv)QU_rwEy5uD z#{-Sju}rh*m=9g|27`fk+CQ>vk*C;h)&{YwFK@aQPt zAgARIeF$GuccBiKR<9FYR%*St!xU?Xe7Fsw1v37l+lR`~0!fifNYjnW)H2D1ono_kJC@#B~?;&q;7 zpXL7ry0%cPFx>Zv{f>GCt0Am9!dN>n(oL2_Buyn}eIgxnvpRC15+enmMg>)KL!lpo z9L}KnZEmgT?DbS-QtdsS>c+)YBe++rKkiJyp0}Z+A<|P{RP0RD2df5s0ar)V7V%pm z_3ibMwkC@^)yg);YvWP3wYD~1pNhGyt=WM@1THLQZ`>KKj06)6iPnXVvVb*QAGK8k z{JvP3C*lmGqmgt|qO-^8Q-X~N7sj~=u>U1u)D(zT*ldk)VTNpuXxVpUeJ8BAhFCe&FUY4KS@-DT;8 z6LSXNySG0*w7q-qz5DuubGKjA)4riEo_p?IxTtkacO>9;*`1-Lp{hCE0ULOK>=3iy z(FFbX#vJTVfk*{OpDIo@Z2>ob0%kA_3W3uD2Fh{(tLt5XD20%M!tJ683nv$@?;T-N zx!_1ckFUBzS?X05w$H1n9C>G$9As$N&u8Yw0nh(yRxf>c1H5Sj~OI~sihMyi_I+cngjjSNtz(du)h)ZN5D7m>vZ zBmJe)Ug-@r4OWOJv`vw&YTrOtw6ogR&nnx4O3)b$dy^KI*Bi9i18kwYsw+X4etW9A zU+yhQhCsG$$vbDjzXJkg@13m0y4J1rDXnM+H+(O$;y2A|-EHhU(OE5~15 zVh}{Z$Ul{+8qrXCQZ&;Ne8_rBwd0}~=6+lZCb$ZFW0*CH`@G>VWW<=v?6Q_g<7>tp zt;grod&+g0#SL>}icfcOph9O>*jdaLiDdu88ZTbC^5X1MckcYz&vxEP{i|aW{2ZLW zD5mxz^bdCL8n~hL6dc6~0GPvqjKJ+e&#KU?D$rd@*CSnzbTvKEQ?jD^vebc|=BXk@ zfUIR1=%VPDt=V5=M#2a&50Z#8<0&J#Db`@}l_$Kx8mqa=U@kA|s_~?4UMm(~+*w*> z^LFh$-54iAZl~Q7^;sRoeqE{6X{u^;**sQD)Mob@e5Hyv-BETD0JxNy-p~KQk7Dd= zLETS)M&-s&=+-IFtsW_dNDU+97pVkNV@RD!g>Vo`iI93KsiZ+8rk>H@$nOz(lL^(2 zn4NV0=V;Hak*dM7kB`pVIf%e;^W*UwwYt$NTt8is*s9JJp!M1xZ7_1uJHFsdo!c=7xuC|eS zrE07%?e|pu&|4X{Mdxnl>=>V)>^*erx_OgBN#MHM{^w}yzOXCa)~~eG3tXO@{u}=* z|0FEmR!SG-)~Y6*F4!ubk!}%C36<3CR0Zk+4XEV2E{Q+@#&e9Q??}(-I}YD*f3yGkADPs;;!^akxqvMSn88*gtnk{ zigu&gmJ)wO4hLirPTU>cr9e-zv!;A<#vuDJieuE+3c4gdh+YR|2aOURm{Nn-w#F*v zEiGQwG*+^rJJx+IK1)mRt9a$S=)CLZja=V!{g2|Gj(-FH;qjv%{pih4qa!$XZe`c7 zD-iG4$QMe>*v%sEbL?i;B?pkVD4(|qc}GOK;e6g0-aR1l7U%OOQ0^@8?npk5%3Ue) zmgMvHA@3UT?r1*m7QB00lv|q5qyC*Q$}P+1tw-KDB5y38cODyN5yTlc^5yxwZZ<6a zTI8+B=Z&!Ir4M4}jeKQ3uZ~qo9};=1a(U3DEMiXS_XL;eUrnzPaOuVKd(tlmF1ftv z|CwIJ^rGBwKJR6`D~Y_t`MiIi924)31GF>ixjztMBxjdZF%ca92Z$&=uh3O?yV*0}bmweu%*;gT( zr@U2a9@dQ&vcyJqqu?ji;NtERVFefCvEVX+Xe65nO+ zbW6Bu<4B`B-5jpQGh8#UG}bs+GcX!&gmo}1KqTo8knI);xeuM2=zKFn1AcDrI(;(Z z3M^&|yatOodmdg8t5aezjKc>qsBuIyM*)Q_3^a4R9}bqFh|qee7KmD4W7UonaG@;!Agj`Q8Dh9!p3|fTF!H0 zGutMU8e&>bP&iBsE7uFK4KNgnAjhO?MP&Nf+?DMZiQVdZJC8$<&CxsMiR%|?7=nK;7pP& z2xU^`Ype|Et?iM9Hdi9!v?)GwMa{uG;nM z)@d<{Xzf>E>=9vAeA;zGnglvls;ggh0#XI}aJtVQ*@elbCLn`IO4T!fUo~pH1Wx?; zg=w<-<2GjX+9TE8>JGCzQ0@#mAqtBnQ{h-$jRWrLR^tduV2&&#f$A~H7=@QTaYd(EIel22GOJDTn$z}Hnpl5h zWl(SJP{hP~XwH?E`Crs#O`XC=X=ZB&YMf$b6Aqg2-YxwQOB1lCAC#V9-^E%anV1oI zLMA3e#6s%;nlzfW0wY}Wdra1a%XZbTTE48xvh2=P6`P!sCZqhj9 zFGFJDbuZPlP`tb`Zbn_J$FOp#j(_oe-M1{Jj_F0uU_zArEt;|tY0GOAi6eF8;G0x{Bga$%<49qZOyxVrlj9u za@f7js$Sx8<}r>F*zMTI7D^2aYXNyTFcS;#4GciycPMp3^Pba&_m*Ja^tl~cS+}pyjA(Uwd{I!IsZ9y5R(EX9r)cT zeqT97FzUhYb>jC?%nz5e@;Il(gxrn@vP~=tlFgIY0B2HFH9?1ioReSDO?QB2m?kDz z8>;V#dMZr1GXI=lvCi8Wt!$bI_V|O=gu~aE@+3H~8SRL=eHGcq8vROVFde=r>rG8MqCgpuNv&Th0;IU1HDp;PyNYNI7e!z925P8*v;~-9qtxDU zpNV^0Bb7~RpUQQ&1-tx;HLi99?C4J}>2vxz+tm(b!@fJHC%rN12^0P3gYQK!FU3@a zD8&8K79dXOr${M58(L^(KG@vn&CE>&Dl9Hj*cEJuJDZZOq{U>ZW7p5?Of2k7IBaf< zInvM_Xl$^Sc*|fCr;hzfc``qCk|2=k_5@}kr=4IzXhGK3LSd-7N*QNO0_!dDM%M?5 zb-vER=sz5s>ks4x&+nOgQMQIAK#bnyn?CJ43}gI0SZwF_LO;os{F1Owq20hEI!6c+ zMGArWKsU))G>0lARx}u6h8$SXh?a%%e}XwN?%=G+!*uuO+~hHci3PW(l2aByWs$z zS66Qe=#8=9{808Kn!}`&Ws`uLg8e1}UWzyd+H;kim0|gC zd#TxG!e@U^bdDS_m6`1H$)3l$vyTbdF#Ua;yr?cPgJM zmje&epkOCxQDTM(>nUQA5%^C2nQ?*hVB&>y0W>mVGH9-G>Hu$Dm~|w3dIEZ#ufMFH`F`Zf|+PqmK&VyA;N*~TDOw$1R|9QtM_}~@|xPB%C7}7;3>u_@D2U) zh;h;kl98Jjr`8XUj6%a&yMfklr6S8Sv5i`)Oq5wnd1OQVDh8?nMZ+3leSMB1Kkop}8z~;ZMQT-O}##pIX z_q1>2>7~Zu2*N{W2la$QTN-VxBnBeeA3-lMWazuqnV?dXD#Ek|e;A$Bv3TkycsmTfA&B}?Cs79CV>Iq1PZ@~w&7W5a5_REUYM=Q@9y^XORlW?x zm}1f}*7LMn3vPEHcal71U(y_D1bWb1kUk%)Gruo!tW(lwQ2Y*@D72XKP~&UlfVK`2 zlDDi%HRv1MLEBpW+7#nyleNeQ<5-8^V&v?fj|BMo^`S?NW_`veW3MW8cuhq(_%rBM zt_Sb@yhi&8QpOw(?rc-JY7 z=3qF>mSBc6Qo%`A6YC0~QgcLJRDmn0gXp3kGl4VLd`@{%%b)@}phRs(U20>}TCA(s z5dBcCP0uUVP`92~v*roR8o1f9!i)_ZWtnKo3D>@BlmBP_*bwO(gQ$((51q^sE(|5~Xx zoQB~5_CmeI7qPin@7LF@`+D{+M`hF{=F*KZH;cK<%LissxZHNE(lv4{B(xP#XJE$T zmVa}r{weu)4;t9b4ptg+Wd9L@ew+CHVfk95LWuB`r<_{Q62WQamauvRNQ(KSfF$5R z(E?(Exn*%MIWxD(O2>kWUV2BCQ!d->JeYms9r#YQ-^=AI|MPy^>DKgj(eG#Xx)0s? z&fSh}^{t;eW3Qou1gr-@BWLmS+IkU?jsme&W))IVaqJ?7fmnV4X|XK{g45dA0tr`6 zR%!&-3YiYcMc6>7t}_@&c}w;B7mb-}Pss1L$R`w`9~6*kaNzPe^%OVA#!aG8>( zo;hYP_11ZZi`*qjtyRI<3wJ@IpL5VpMXDA&G;ZSpcF;aWhYs~bM2C)uisb+zF)TAW zq_GexGu>)JTnKRj>5g=a*6IRrSDmNK+YzX#mw7U1)VVtSk=h@^E7uot`iBN-n+{8=&D#Qj%tY~Vx`hB_6e+qb7Yj$Ah8wcY(+0s%2|ordEWRM4$}loR zRVP8+-|VW$O4Z>d*EnKz0k3(7p|{BBh}H+}=3=uaJ*U=R(;l)V6o=XEFE1*wT1}RU zKy{7cg?mk+uEe^~5%ZaY0VjR)CBep|t0-8Ch}B3KjE+*f#ZVlMc$2t0hizb1kanZ`I3cvi|!xA8Dk@e z4Xm;VA0`p$zlY!ZAMxCxlP-S)7nEEcwh-DPq1jkX$pUBan;2d%-lO{rGD zF~4*t;|1(zJODhahc%NnnVKFEwiQ~2X5&-H(EL?}^#!e{u$W{D6;&yw7G|-;eYB8y ztjc+-5$R!EVT5!P;ZD?m^g@P=DUCW88jMP?&R^^6Qj`YULg%nKQ>%%Q+mjZ(=1!45!j<_@4Z4WuRlY!cpLuC8w`_uM) z+lrck0j1HIXbM+!X42KI$#_?lcgsXkP0$;zvW08>vHHqXeNRnlUPEvT#tP{vyald> zhiLvzlT+do6oi_ps*AWGH9mn?jE~}bMKC@io-sVhrV6wPtCgIln!8vEyz@znr8rd3 zGA2ogGh#IA7cF3$idJyFzoEafzQ?9m8=^{6%4y(t7>_qLF{{CoIyS5?GlX?2kO2y$?S>CGhh#_D{@Nt+Y3XpIXSw z0)Eb%vz*pLb@QY1jC!|$I(rnSC5#T!U=%#b9x{$64JLtSVK(&;Q(-1s=u5o@A&0NV zh%sWI0p&$n%rLe^H^V<0tBUou)tH#gnEg|+{Cnfe@b~PgxN1&k?JMb}erRrYeGak0gEmFp0K6f0j=FgMEvC1ShkE zv^)m^ZH9&Jf=-fg3{!QjpkodKE@3$2?I**mh%TzuAsxq)xZe`w5eIBT+6F^YI}`|r zN@dp!E{WAw*JetF5FQ(fnVsL%v{>nFQWm*-7gqEwt8hl0$!2@NkqRwN_IRzq`He1? zp0~V+9h2joOS88gDB85Vd+T6I-nCmFcl$j7IeR`2+7(-r?*qC{e|!2i_9lERDhpn3 znx7!%bfzJAf$KA4l%-;9bm>Pq`d*H4P&$eBf=~Z zKAIkA43-y1ic0-8ZNcGK_O})D>S1L99-tRA^!K2l2Ap5p5SLe@qjB2u<1;+(gOm}R zk)cqAG9#l94OXk8g-W!jQ7sja8h{Tv;$mbeLiALkrM@h+;ICxG_Yjze7O7VJwMP3Z zIOLd&X-+bSI@igRF*aku2}&AGPNo1eA-{$-BU@AQ8F%!HuIyi9AFo)@s?1kno>VXs zR4NA6H--aYZVQ#i0x7${M6ozN%PRZ)?(mWpLzwTJdd^+M=ay$LTHneorM=rO&2FA3 zvR-s!cyssa5AGi*-nPYP*ngo3%C3lg>S=-RTWD~38r@KcW~jvqKmB^A0|$A~oS^*& zl2=0iB+!9SJ%(q_@|mLL5(}$R?h5>s>~E^@q%~icr{J{Sv18#o=Y^5OAMC;!D+W9w z2LK}E^9S{NjXN0U%Z-cVlc+i8_ZaWw{QbsjbPaVx(-TMMd-ax>%_m2KvxvG`v4(7M zbEt2kQl;y9V3Ne10bSQ&vJ=>0YNY3Lcy$Un*KCvu0MhJWK_4_UiVzw_2#w$|B%n+X zBaMQpW~bY7$S+%s`9Nwo+TZAOO0di=H!4M206o1pwfew^+kt56LZrKMsWe4=qqm99 z=5|S1s44uWzgOZ(zpLm7ZfvZ@joi?b8cDVRsM{OqUw+RZOH-%Ej;?y#D&@%szzwfO1&BU@#Gn?Gi}9g21A!IXIsZL1*SZQ?Lbt;$KMeRg5Bh zqwSEkO^Ou=BLP5@a4i>bHcA_%xIGY7!vRJ+iAlx<X;?)eK0rTR#9U$ry)8sBux+|!(WW?%uv6T`+~ zg1u}2oK9^)ZlZY>=XVWNBuYXjvO!VRBD9mJ!MVv~jReIs;Z8D7#b9d0GMQl#4lyB2 z(;%}v{cWq{i1ctvXS`!kGFD->mK-x4vnDMg#*wuVBM;0EMCK-9<|=Qft2UH6$H@AO zyBD-KuIh=0-J2T1OPBg}+1`3jEUGA<4+g`{3o2^ct_zci4ORus*=v|HALwTiXT&e( zX6+R2M>~oYcysNvTgcE{B?}p+pJ?LaJpw-DMTx^FCYH=$$jq2RztSYru1eGIz>}^j zP)QEu5PLx-Xc$gjWdpE}BPk5gDZ=LS@CiXs$Zos2E+}0IHh6D3@v;W|m z#%hw;r)wJnricrcA{a~)_N_l)-%3dnZwo!mMYTX%3WouWw!pZPE_xPdMIcg-Iy87S z_;gYOgL)Pqb!mae&{W3QaReqo$Y^E{I0i>Diziy0F-Kj8HDax=tY1G^H8d~XZB3t5 zbW6Q&VKaFD(hIk&JARBnSjA~C;bLF@AO1(dJ9Xwp zcnWRQwrTYLA@rC$gRpy`&#*Pa1P3uit?$Gl#f-Z;TF$N+o10wW7+6f5w?`e7O%}zR z3ZI?s@wvl`8y&x0zPpSsmOHn-+w0Wp9#alKXTiCtFxW~H3xHnZ1f5iBxt;c-B?M@10r>kRV2Y_8#mtK61L>biWG! zG3rh6g;G82TvGfaj9!J^3%i@Z3hoJIbQzQ(e~?zlq!z(~a=&y@4#qS4A>>jEX!R~o z8BCEeOc}%Ka)y1EG*=*28&c{igLGKxDT5d%)tx8<^ceyg(cyR{o^&L-&(qwVv52tCIS2Fl z5izfeBt@H7Voi*Egk3<>3R|7^DD!|;CZLt65oLy9*`}6hK$-hRnZv;ThTC8u?;)W~*foOM#y_sU9-lG4f^k{?wz)Q(AxO zv_5ap$_RYLxTw!+nI-u?pInC8dPvl>R0?VJ>;)u>vpz}xxG2!tbR)PjC3>dvpAVJVGp6k z2GDF1L7VI9Yglu_X=ctaV-IByvuj^G|NIwkzB7Jja&3dIel4mH^K~=(YQ7F5@>H7& zV34SzwYi5i*Rp24vyNV8*WR33Td!+ao4hlQvhX=VC2Ak&t`BV%3VSehTCMl3VND`|Z?W1WSrF+vQrdl=_6x2mfX4f40PVAfCjD6=2wZ>q-r{FH2 z+b}Pcxt26;P4z~FM31CGIvm}Eo=yN7qILu=B+cjA_eXDt57+V9VbpU`_OkC@e))GX z23lKVz{_6jDXlZs*6F-pNH|ERMPhV`Ev8jx#i|2$*NjshJ~%5lAr8c6cZMPioj(G{9~3zLpoZguo`4qU1ue);5^mpWju0Y! zF#8d94JgN72tJ*lPf7Mm$YS#{^i%fP0xxrd_+stENE;;K z53^dRc}VCW3}bs3crwyx<;Hw{4W0b0XSg*X9)oM%tK zu{1XUB$HFUW;@VXI>l5XgeD@zoQ{e-N+A!%X@)ekCY~VsX_EgN z$QEATkkj3T7&nKTGF47pxsq-O2cTner^tjH5GBXQq4-FCFyiU(pGOx%;~D^h{rmrJsDd#?W*r? zZ}e7#tcHQcmIVWCJs2S3({`|*U>sk}&Ry*+0{* zm(w-M@|MAh&9PEl~F44?0?K%0Xyt=$dA&mYmU( zm;>l1Lh`+lwhDKob9rO?XrQFj9IlH5+Ff>kU!rnOg*~%$Uss~9J!ADPXsaBk^D}r) zl)2LFvCR4fHEort(PV0F#_P91{ugXnlv(*-S1pex=dP%$>`HWxq!F%!!aYv^etHW# zBs+j-w5CZ?udZoADL+P}3UF2XU2x_?e4CTLk@JE{HU~;d4CYdI#A7QeF_o8>7P}+0 z(Lia5-dgI6c-rked3d;y?9s%02DYJgRR8j$ z?7Rwnxj`3f_we(luJEv{vbV7_5hx5qVaJN13qu}T0j(S5o>~VvDILa3ML+Z zLd)PIuw?0mK{qHgmEr+Mb((j6!}^GP1OA>&?4v7W)D0C z1U*NPVPSM>;$~*ZZ)BxVJE;Z@k3iyHT#VR!)>3zstD`iM&Uh+o5Q(-`#`PW%XSC5{ z_RUqAYZiAzf*yZQnY*U9vJ57;k+L8{ShtSUySwXZCnvX8S!?H}tU-(48RdcO>#5ai zS0*b{i_t$$=SJDUKOiX}?)iJOHGb-JIQ$THJByH&5H9&JDvGr%NhN|Fk^Dqebk98c z1z98-WDus%5^tgS{|wgetObiLc`aTEmyiN~#;0YxJdt zFVb`X51i9~<=u#qrP`no?NROA^sE`0Xu>Au$xboZ{Q`S6>v#b(VPHn@i}4pxGCciT z-hg;g#TfH!998*!m~=tWs2OnSt;Q5+hB0Mj?ianxXkZ4LM$OmEz=Lk=gTtq9g5~nG=Fv=3bN;UJK+HBR>C#_ z5lG0~h@2c$)`9(W?D*mS{=>(|#*QEA?>}^WY{6BNbLUQ8wP5h7U32H|x@xd>+u}@S z@wV2MiQ!CUcw$l8p4%q2espg~$KH=_ow#jJTcTn7{hK!4Fy7EGe#6F1?;mg2ks6xp z>zy1*r-vqc`zD7{G**%ysxYCuJZA4$GXARC$|8JB#A-}LtdZVU{zhgh#J@My)Ft!G zR8d=)KP6zc5cTW?%;>~O@#i$yHUmwZ3)yu#c3l^j``&sOhK^F9tm^Ta+a)m79N`zJkAkcIaG2gfn-hB0F`OO*F`QMO%$>D0@hkJ*18^ z_Z~&$JoQbLrm42>bW&4OMOrFXZ)>qub(}vtRhO&3lP!mg3O1m?o1MTf6$aEQ;SIVI zW6knT(G~t0f9qjf8Haia4!QCw90>O)o>A@{eT3y+dwFU#u6EO2juY8N*&4v&tUN3z zM}-BTB4EL+XqcghX!4b}ekFj4SJ8IiT@@ZDzfJH^>nR+hhy={8+gO~dK0Z~)pXIqW zIjeEH+I{)uI@YX z$6Zrj<8?d#e%WF4JKX9EdYXb$cQu2*`P=lX`~t+vunXRd;0yUYFuoYX!@V*K{5C5mS-%? zJ(wcm@8K|Gm&x&3oZj8P``E{7KlU-7u5W0lPuDv%R6;9{a4mN2$M3%Gy1PFv#(y5- zSpJ$nfbBtzv8F{rYlQ~yym={i3w!AYL+^#`2j$?~_yFQF{tWLK@qMK@FKclyA*03y zgK}CtOZ?W0`X{(w`Z50&W{fCiPFAI2mAd2FNts0s?Jaaw;DkPz_Job;R2TPqcq-@$ zd3a^0s-4!{cGUG#QCFTfEW}__9a>c0&;az*PG<(F?ORl9bywqq>2!CCK3U-j^B}JZ zR)LGA7O3C<pQdD1s{7yA+7!x~XGm-j>74ZRui zK+{DY`ns79NO$wU=J!w4juE;P=N+DImZpGlMx6a}@Csv`pTjt3^AWfi%YF0F z#9rQUhyPOopThiM=^lCIY0BMnSlPoLz94W+l$*=@r8fY_Q|nvdyv@)1y*ETfxpDp^ zE0sr2Q|_SkMh}0|a{!_=!2K28B~23y1nuE~yNbP5M8SfIX3Tkg)jIEL9q)3!|3>>I zcm?nLFMo^`%Y&!9gHefhO!h0PH@G+G_+$37&a!S1@BEz4!~8#i^KVm*x6}?3u*S}* zQ1v*Zk&3PePckY{m3b~4+bCj}Dg+av6;&W4Kkie!ey2ZD95q;dF}FYL^Ev&|BJqpQ z3&+E)Y3`|sJ41<3TavqL;=;Cn`q%tv)*|;|<(}LZoOD!Md$fO2U+4gtM}Zf{6D=MX$V8aGO$*OyO!UPBR( zJ}Z`$;ZJ(LQH^g}!e5ZG!1Gh&_9#|j{G*Y-Aj(bu3%DKwt~aQSj z6m-sTj>+MJFT9s8x8vJpv3t=a^l3B3d9NHf_+3LwXsU0)=I3<%d z_CIZ>=Hzysx0q}mi)crE5-e8m9_f4hH;^KejEDFLZ6_jWY705ul5A<6E?6P!D^f+? zs-Q{MVR7)DK#|ww_V6exwg(-KfYT&kyBIX-ae31_)HkNpSM03}p*~kA&L8#{d7W-I zS6H#lZ+8S7R3De3JSn{ZT0>f&{7$E7{Dn^jb(#DIRaL&a1_Tn&sYryWK|C&1SO6=v zvt#vUf6^UmFb9&3Kn2*XiV#nxlde?ArhfbCBA!rP#2ZxSy9M#0eni5Gz#Aos){7rES;*hKvJz?2I}AAJrXLzhj&|UbKimw;FAH(9+Ai2_MQ2jgCP$-{7LgQ?#u82 zEzY7Hd!ByNzL}fzRtWXn#x?%QEpwu3)6_u5k zOKm09y~HC;KLmckFntU>O?G4Q_YG4gIeJSdW6OAhP zqs^`xWKtuEYTe}YZPX4CLaaxvkS#UjS{L#;T`Ur7k5$GXhFL|8d7Vyq%|Nl=RYSpd z{=aYUqku82WwB@FaiB21uVC1;&kE%-wnRwkgj{FTrTNh|vjzAeSud zEKxWGYaxMqC;QT6eN@l|Z2mU5dX zgiTL<+$4+_Wy#8)XHNNu)*p(th449OgD5Tql~UU!hL0?8NvBFWRC^(~&Pgq2f-Y0J z#dRw_=)mK|@jM^2daWkJ%Q0EKVXONXS{87S{sCQw3|!}shg2=GT8oBfZ?h5!bM)@l5*e4jRc;xKaKS2>J#9(65*nzKi} z&VH8f)(Al-p+TU+mq2a}Aa+@|E`8yuZus(N2~|ZGzD9%XE|{4TMn@6T&r+z z>-1-NxAb>epMU?<_MwB!w|{s%x;oeXKKDVq{}SRpzb>DhfB)3>X$ErbuU;7#)!H{K zbFb3I-v_#Agjq95YskrlA~2jD62vQOta1({TaE6p3`1mB!e1uKHcwFNpUYe1v{uPM zR%G?rtX^9g&94ftQTZ6!Q>{9P&s0O{o!WDXPNwqa*g)mn7&hzO5m^^W7;D;%veg&V z#$)m79ags;LY{EU>ajv*DdyHEThUeoRt>7=K{a#FL0Mg2s)rc)gOLfh1=g};i$Ok( z0dkJgPVS_GP>n|@e;VYEqK`4rM~c9q_Av*K6F3p5Q8`qfwOk)5ZgdEJ44t-* zGerS8$Sw9EM83`8HU{KUN66ugh+joPx!gfe99v{hpphggxt3v#2a{|*+y`gg(uCVv}YL9zzc3f6E2 zd}v9z@T|axT$pl8%a0`%M_#pHy-osVfga3QYwTb=1M!Z+N?dU-Y>OQFu)&jT=>$ap zbs&mRW8**7<2@>gKwR?j9MKT8vxt9-)ycQv z{8w|zc!V87G5Sj5A@Ph2&jdbX+E30}lpZO+|e} zdnrbeYVOu(2#v%Ubof*nVpM6!w``$=O&_YQ4e4!(knOSp2`Qw2oqpKpZimeMH2MdB zI#!(K@uwSZMY(p!bAQf%1$sj}6UDAl`D4<&X(xHrfnE)H;Jz7$xIrAVA`#wi4Ebwn zIi2X74#?qw0}>CzKF16Fef=r^T?PJMLl0r>6&GU7dH{?AcodhPoGZzA^2<^!Kv{#k zc*(ivA?%obsYX~mkZ3j{4o2=HGfOz=z+bvM_27VdU?z0p6I$2SNQHW-u1)_1U7!$s61eikbIRKC1JKARj!&($OyggPW@k=%* zPp++>J6tump}wlyA^#!0xuVY35v>~OjCJqebqG z?Z~#~dGiQfQ3tR<( zLA4E-$vyPI?nRT%mst*_);U+}jG;E9827=S{Hue&K2KgjBr2H|FPvyHsd1Ce` z|J;1}Z;SFtEx%7Kk3kva`%sU8^5x~y%c9*%!264G6Y>?2KPEjQ@>RU0@&a$=<%GA| z{CrQ87xN>J2@MnU|CrAaem_uN;;8;Z*YXbprbbaVHvNqB4D89&dTG{)Egs+`J6r!q7~du)+i^@i|Bjm5vUfG<3A=%;3BH!xa;fWe#1-~{hnC)A^p*%DDs&= zcAqG}8$akCG_`!8@8Xsd`KBf4`$`nKF_5J|zTmfUm)L#G^)~%CuT=2HarT+)KCS<_ zXHEJ-zWmAk@6w+$8eMrjz-|=P1I9I&zZ2pfcCseU+a+o;hJqVmfs#A~30oy(rgX~9 zITVr9K@sG@4L)Y3^$$dexE_kQ@tk!KG!S_)_`?X=U`_RJXn~sDn(W`u9BQjg`pspy ztvs{1T`BXW7dqV~Hcz?JSz>jU#X5#7=(hHF=i>B9x3!O+cVl0yw?6pyfW6%7C=a;G zJ>Yd_jxP-F+IMpolj==Kj#BF79IAyJjg>}7SNp0~b7Xrkd#oULM!Radi|Bi;!tgl6 zPab1ave)<7AjVd4MY7+2e=v$so-#6ixV0vGTlWp~;(hg@sr%bAY-`U4`)PpMn4ZC$ znQ;#3EX3flJMlSVaT263NPi2rlOjC59X zByF&4Y)`AtR;9fm9Wa*%tHVlrJ*5KGtaRp-WPcy;T$H9sOmq#WPMX9-&$9KK5w8!U zBsmb_CXLe$TbTcU=I+Up#@CP@2s|8$VtiLu%nv>sj$wRdCl81pZp&nE&(B>)EgR3x z9V0u9cedvM{S$gsA^Uq9OIQ#GOdV-f=?n+$>Let3q+#6xF&@B&I-qA2ay!!95LGQu z1G00V*GSvCha_>(xULt{H=@yyaAVK-Ib^{R)MJ$5L^LTM^D#3&MfvzI&3-HBDy1Q) z(b5#g?|_!(*fp-u(lY9Oua?%qW8!mKS`Vj%r?j*|ax&rag4&GIW=3&%>Axb$2M;?n zT`ZNco3(VQ2mgdMq{P_Op;Gtq@^vAS)S0+R;f%rtfo=0Ouj@*BT^aS+KG1= zY>8#9eg-QA`3@}~HmUNxz)q%vR9pI`Otv1BW>Tf@gIbzPWx7YSv@8wlzN@8mQk&kb zrS;Nb{Sqy0kSg_$X=$VMsQ!;yx=3m=+^40BC6D1HEnO-#7~as*<+5U|($XfWsbrCs zM%4C_i?y^>@|1j3O=EDL60Oe+ek~Ww!3$TU$}B9GyJ8Q&~1~XyV}6C^mopzQfAM_}&TS2V?t>9Naqb!;Jb=#>V#@ zQbrH%SB9zWp~K^QCb!mS>ROvSd;9yAbgHGO5X#hOW$>pZeFLYhKv8R0IdSmNoVG!&smVji zxN`X5__m3?;|F&u`?sG7GL!q1!#gLG75gR$PGg4wF1)^PTkZaX%6|Oipt5!Uk$r~` zPEH)kygh(N$B*n$`ZLM`6g@4d51)HrV);(=On`W7|MtU2#}7^@$N(TG_8mgoNA_() zYt)&spe%v&NIRv& z61fZ1;ZR+NV`DDeFeBZB++H}=?U%M7$b^ExYv&@U!C|EL;;A5T>OLIE_oK!G;(J{D zZ5#fQ7WE%Seg`&?TIs0xmyyQvwPnPcd-1ml(c)3`>M-6?q-Ci85IzT`v++%}%}4F~ zM1Mz6!(QYniU+;fFC9UttJ%qZ(r9Jq)6{F8! z{H-wICFZFg?!iltnpsz_CbgcLlj>35T7vfmX1#Uh9uVvbeOM_*dkFoZaVoR=G>Tej zZm5^^uM;rZk9P^~`v9R_=?olHTkzMt7};*rM`gC-EgIz(@qROYwLo#$gj!l=_4Ujn zoCymBwb9Iv<8v5rrTHXm7)N?H^7f<6{}g8?#n=f42-jBN7h!~o0b@w1*rm3<5AD{X zwS%Hf^&LtRRF2?H>f0pVJ%lm;Cm1}6){X#n3NRvr?*&?|v})cRRv*S%Ie;E4$9Pnj z6|k5fx*hc#6>y``swGs6oIw8x{|WPHECgX1TMjZ~z@1_IULxuzd@0mSIF9w8)j+HI zbht%0ugvJ#>~?d#83%TaqrN@(-hyxHXJM5R2FwR+m*Pn?(}Cw~=o~^%Xci9OuQU&Y z-+S<+S=)ixTY~q8PwGiwByR_!ZK#E45Y@Z|@X29_x^igE6K&`ft7b?V17%RKHt9Eh z2}-jHspXi_CBU)e`0FbC71!6{dj!9S#5yMEF2mpE;W+{vpf`p@npPwAoUnWZ!UqKo zS3{xd`x4e&#>Inb{O6N4*pT%OXloYaqA3&7`tp0uqPNqPn)u z6XVzqtWYUg;jKNG+dart$EngC!t&GQ?!fz0j^M4LKeWEbwbD9iy|h8PPx`j>E$K7T7TjAT<5o!>(=&L;u_9K? zN^qw@8T|Fh1H{6t())pwQ_P0Q$aXmNIU#;>OW(!No@5^BJIsq1KzxnredQP77zAIFo|V2YeOB7R2H1Qy$QIzj`Gsr|?vY%~Mx-00 z``HpU%9gTaYz&?fE7(f5imhgA*jl!Zt!EpgU$c#D6Wh$j*%mmJZetT{JKG`sNcsVy zV(gT5vPrg!?Phz}Ubc_zX9sXS@IiKn9cD+^+3YAghn>sLW9PFA*oEvOcCqvdyF@y{ zE@hXoW9)Kvh4fo?CA&)cz4S+RwX_RUzZ;8X4|@;0M%u^T%dTbDA^!FIaPqu?-N=W#h z>{IN&*r(Y&(i?EgyN`Vau@3HMpJShAUtnJpr0;C@fOM2S$iBqB%)Ww%8YiS5BL>FT z*u(4*_9**0qAowizR4b!US?0QZ?Pw(bJ(}pci4B?_t;a?d04pTOBW(S^3&`Y_AL88 zdyYNNe!zane#Cw(-GO^4f5Lvse#U;z{+s=Ry}({%zl2xGuh`4%*X%bqJ5BnYa zJt7ahhrPmHWq)LUVt;0TkuFBOqD$CcrAyi0*x%V}>>uo(>~;1p_6B>C{V#iqO|dMS zhO->woXcFt_3%D1@*?R~UMxMtOL!@6Mk(he>3_JHTckfof8thd<96=gPWUjmxrckX zkNcq^3i1#%LkcM~d5p(-f+u;3r+EdhLcR!IU3PdpI$_V{hJ}R}vNXRG;KO_|AK^>* zC|}B#@iD%fuiz{BD!!Vp;cNLizMgO38~G-_8NS_H_*TA+Pw?%02j9sjq5U&M?jDlv zf&T0+XtVBwc1JHgD1Ax#qVxc63VU3781nM}l0FUFlwH#2Vdc4-?~xvpuEGXZ3SaX% z&>e1+Hp32Tlhh;q4pN-Uq;J5p=W6M_e6MtkbS>W}#rS^ciw^L!_(6V%ALd8++59N( zw?3Dj$Ipj9)`k2celfpIs9 ze1LzD-^_2}$N7i&hY{uIR*ncI{A0NJ><)e>zl-0^Kh8e^AFq${Pf54&|KgwK_wal9 zef%^0vxsH%IrztYfqxN^j~?V-;$KGOqK6Q5=&Sr|{9*nGf0Tcne}g~9zsVoxPw;Q? zC#7T3*C5}yLb{oMTe_TohkqAwjGp38L;vtB|2}^XdYm6fU*$jKKZ4}v3F#lwYw!d5 zG5-nfSNj?6LHlpWcm6E>Mfx)T1-78D6hSQ44@x(IXul7n`;*e$hz)Whd<~9Ew@M%9 zFY;eXACf-IU*f;wFY{mX-|*k^|KY#mzsFtJukcs-ANim7pZQ;K+w^8bau%{=Kk=_k@le2QoJG!&Ig`l)oi^fT$_(l4YJrT>;*fHa89vaFN! zvOzY=MRKuRBA3c#a=DCH2(m@C%Fsc{4%sQYWVh^*y|PdC%K4T+oeaPuN!;!j&D7!)Y^KyRJ)Y|x%f z+OtJ_w*8;xz63s|>+S#EJCn&OB8eojiJc(sOm-AmCf2I8YX40Z5+aE#2wF=urIgZE zZ6!(-Ek#uo)mBl}(pFW~R#Z`2Eg`6O{@>?0cP0~}+Wvp<`*~+R_c_Zw%X6ReJkL4z zo^zg~xe1z^q`79{CTjT;wfu=%{=^vPgxsOIIT^#ooB|t@R=O!c-yzkKZ|GQ< zm7Sj9+)+FOr2*YjMA{?`^P~jljv6MNDwl^z*%(6?OBz0<7`oW8Ky0GE3-A=hL~6|x zsTCKg5hBWD=qj>yb;ueOEpkO^h(>9-qvD*O5J*;gBC{xGs3pH>M7E`f>rjo!Mh#_+ zxJepulQrTdYs5{~N=?>EO^$PVA~QE%YvN=Lvt+H5WUUmlR*IQRQNfXh9s=_o4wy%4 zWkzeIL~Er)n+-iVwR_L|sTa)^s3xOEni#F37!BQcv!Rzm4I&!JwHjiy8e+_b-l83Q zYrNQ-dC{qNK0Xsw>sHf#8p zHGIq(-BMITpP~7dQ5l9lf&hIg2;kZ$Ju3qr%(4m$eL0PL--?@}@;F;D8WJfQfm7lP z{kS~0ewBp5XpYw!C@#g>qEW))s8F;56Eto~U@D+FHJ(dgDj>{MfU8j(&K6Bj(kdRtEzORlA>H1ZMzgAws-_q+L^QtVvJ%V?nk2)XPtYS#Ln~23 zD^V*T(I&4pA<)oD($GqZbKfB{(okJOiZxTiJA*hIvw=bC$rwRdXZK-G@~!8QLS(WBAbgjEo$74^7WXGh_={ z%Vy;C*+5&A9;vZgq}FVaS}l*f&il{2;e%}u55~hvMH{(NsntZLuIg=q9Ku@ zu|-O}VJw&DHnx(yK-p-766~j%qM4p>8Bx^~W7G{9JOo#vu49D7r6X5N9xg7zQmtbJ z4iwEqjj*_PwBZ_Ian<_e2#ZHYd+ms3;YvyoKBGA)&hAT~OoDh37M%sg3<1awELp%zF502-tJ4Z`;zTG`?Dn4 z%S*JEmuN39k;>C_ES?YeRC7>iKzFEyu1AG-6LpY&qx;P1wrWkNtQrwh6tlW^*)O)+jAqLDm?Kax1{7I7fIhXi7#T#4M1Ond>OD)xjRBgFIRts18mi>R_*^gA;Nc?BhCeZFR7R>L8C+2YE#u!bf#*I;w-yi8|OT>fnT22l-g_ zs0qn#L$ZbzL<83C!3lFyn-b8TlM&MnOl+C~U)w{2FHD6_|k&^0_tH zLzt0A!;HKFGvOo5I2~ce=>%r%6_{~C#*BOpm{HIXGYZ=(k;TPW z45En*soc_rG~oyqFbM843=xq-g_9|qEa40j&T!#m3ulCIa)cvT*pMeeBZZSM9L#fr zEe(Pl4Mid}N;sp1BRJboEJ9=1anBH)0cCd25d8u9JxB+l;}U84(JThW+hSncEP8WM zelAO=G2T=yEjK$iX9Toap(VdqpPiL&5mK5EW5~l=i$aS&JvV2lh!cZllPcc6;R;Ds z#b_2`9tD_8#%MR8HHTohLyeCa?fi6CG(LL@ToJ{snd!kwQ}_$qNoF*^2RFPH;M%pp zj%usbr1BU9`a^S#k**m9g&4GAF#zW<#zV8@=jV_9AgyW zSR)TKOffNnQfefRKTT?+HUJUt1FA`US%Ay0IdHWBpLmZ~O#)B2V%%lIXq?+UiN{~~ zULd|5z=dMvr$?N43xMkoXW}=5NY&&J7pcWXI>be3aZwI&F&!K1{o=6u11PcFi0+F9Vxz_Ak1wF zSHs=pfV)Y<-Q<9~Nwi61q>Y|&plwujqJN~ye!@Y+hr&jOdrW(Wdr1!W_<0=esSfwJ z9kqL47kioPcc_oTwtVcr?_RuCCf#G&JCqseaF5$wyBFh7ANw83q_C|%_TP8URv+DS ztdGLB`q)qTcrYBPYJ)Or84Om5uBs-dsv7H7kY`EDh#<}4k&{{x5d0q{+SX_ia$t-S zZDovOImEz`-!$;%XyX^6LyW_7+j$u;^~@J=wbzG8?b}79_F7@o?u&7Z(F~mdT;Vbf zrbr{>0GI28%ecU0SvHwXLiWvq9}(vA;YJ&{Pgk9VQ=qwdE+U*)Af7eRCPPtp1{;sD zpJ+*GOsa|NN-?L<&JgU@xAH1^tX|~F#=QvD#sxcUJVOX;T=>hFr5b_Q@%YQqV$4R# z(hB@#X)k8@WUS%;8SoDNn3j?;hl%+=tbCROF!QHi)(^YzFuT_T5Hoy;S23%nU>>eJ z{C(s;fJ5XVh{3EG{FwCuoG&jx%tCn~{Fu=K#OxH{4tWRScgwpaS-GxjA?ffn+X#rS z*R;|QdyK?NO`t)j{DX^9KluA+Wl;XVF2@aXu^S{MIi*W4$urwhNXsx_Q;k=~l1rBV z*^H+aLpvB~udvH-tkIH84C82Npwxz8w-Lif43|@J_~@aWBSJ#!N9`E6bOJi~Z0X z)@>55(_+p2M!1GR$pFI0h5^6q$+bJxo{G9XFgHc(w!ivcybhzT z1DHq8#KMF^%x_M_+}I5G=iomN{JtDBYwIxIwhgmpd!+rC3qB&9l+H?*r0YmGQM!%) zI?T`N0T1GzgSl}p{QZzu#u>J^0h1V}6U59l#e4_rdL#=JbBg^<*dL>uK}03_o4W}_PY{#%G!vuoTHHP;X?omjZV)(8X!xtIqY9asc4n4 zXqRTs`x+SJ!~Z# z9|t+6EkQYr{U0&(vo=J`;{>IZ95avMHS4d4d58S6iDQ;99B74MKAUX)zqqt??%e_KAzrCmbpr;zFrYNygJ zR;u|l;e!~F)>hhS#9T%0>$u8r-9igMMyzKr4uxMXM_5ER?FlYHgl$ng^{Du-z0idc8VHbxu!BL7XavoF?p`O4Q3e*98ku*m}vj(|XH#Sn{>5gY^81pY{CT$fT{fgsv28Fn{_R zd62}qgVF(4{#n0={{k>Z&jgJB_75%h=wFI;t@S9%hd#BQ!iAcxN9oxZ=Q3*3MxMjWgZ)tyD)s=!)a38Kk zl_LKO0qgtLQtKJ)!=4J7fD1vlPvMgPl=Y_d4*1#?E_e#9bOv|-0R}`nZd^j8wxpPU`{So3`-uyk#5))e*Y{{vavTMhj5=ob?9XfA|kP_vv5U1$`ZBM~Lft zcn)y~{0v~s-zQwZSPWlHauHn8n@>Wen$}C|`wu%2Dggvc@ zar~Lc;sk!(tXHs}^GUKnz;%N|tmW{POD(MjKqKZHx>xm2&=9zwg^)|*FSvv!@ftS# zSTO>yg7*+}8a}#1+F~7K8GTAcxmFroIsB|2SPvqdpvFawI(TL-;Rc<0grAQ?hDUm> zTOXN(6A144n`vLSo+mu3{t2wBzW1nD>tgF6q0wzA(G%H!Hg2&;5OtY@DqG=D4b~xoGFzBF`hB*CX!#``e*HYdu(iBfp8e=+7^L zUr+trKIOp@9<1fx##Ho$wi2qY4IBsk09ge}m-D-5kb0f-NF{W+XhX-u z>_-|($MOr!1f7fUMYO)qP8GEg&sWEaaP4P3hm?=d(6+RW?gLL)iK`yu=!)mHm4X)J z(G5|9el}Nx{(qo#HG1vE)=kzyOz#u0_`4c3!3f&=lXZ#p0FQnSp~gkld63n4)+wSk zXl{%SE43!QA^w}6@4w0P5AwME14-Fo{S2INprZ7OC&Zf*|H!R~g};n@EBjMav|iiO;CL>d3Qd;LC_DyQ5s&M#=svmiao)V?* zxWC-W)DXq|cc}45l&VO8krIuK_h@)*Cs&N%pe+ik$ndwLtUogKwU)K!bIF?>c^)y| z6~)nL3crfcmwl8A3JSUCgwb3n@H>b0qc-HS`R$FKq5QtK|B+KUaEJ9e*PsDPZO?(e zn@glo-C<}YhY@3?beva=%>P;j9c!}tAF11j4}gi|=*8ZT*h`@l6bstf@pruW7k;AN zU;S*YL;AX^pS6nd%KiK;@;!(dr;F3>QtMr?wIFkWUGpJ@gP*B?gj$DkTHin`;k{4e z+DmYO5%*&%zCBDpcpd(WtQ(+#sb|4R8U0czc$wc8ac2jLso*+y*6L!+Uz2J;-J*7a zV&t!B!%9!2a@vOjkB8slJEHGyjlG@rpJVw|(HT#2>%P9A5^p%>r$VjEY(?AdkP8Y` z%Ec*3dM@Fs^WWj87|DyjV`y?M>frAgc!xv@4)SKJAFi{_PwhyOW(!kDTzCTtMK5sy zZ#(pUf64ki-@)4?T93l`ib6k6uk>rHO}H48^t|X zgFU7Na3+3aYM`_-s-3_092O%_fsGb_04XloWK7(t3UX;Nf=j7Pdgp!!j#_qc*Lu5h zX%FV%F-c3j@8ZY!oq-EV+JE+EMm&#xna;xZcj)Z>Fy5dV>{R3G977uZsDaz*qR_vf z74_eTK?!<0eiM54FvgQRzz-jCJ!^4yo%IKdFF)h*Z(5JDOW$uCG&onMwUO{^G4w<+ z+E*0nQ?$2o$29l*kw)Vdt^&?~Zeh>iUFDvFGm@~MP>;QYF4#v%y9fiYUoaSZ1;emUus-$(Hpc$IX4o5O)V0Qp zqC4t}MrpL3Bal~e1j)2+BbZlggz}1wI=oh+F0a+7kNw7PNey{@Mk8LC(FC&{f!O_c z6Z;4CiZB$(Hogz&nPP+oUZhu59d<#i|Zd5uT|tPxp(-X1F)Xm2E3T0=p*a6@@tyev6s zJ14PY5;auAMek5Pcv3H{XDP*=`7iO0;xePL551`rgI(g?rC99bep-sdlfELwb6qX@ zd0Szx^meH=Kks9xPu9^aoR~`s2ZvD%*1$kl1>85i5Kkvx)9FeEJT2zl zXpIY+=oYmUVx2Gtgb@_>Pt!Vp-{d>^N`6niC;4HY?M#e$QKo$-v@aPyN1iy!hv&gM z5#T^}?F}e76xwW>COhe$&7`uN%u&*@{Po0e3A{LeaI>S1^{O^jkORjW7q0sX$kM5U60xK zo6>tyxhzQ^VCLOJ`V=$5Ua$b*E!W1LexmGA-s69a*8!ctj{XkPPqarLs}~-ZdrCL3 zD}O9@{g0O?$YIz!KSQpMUGZ~}8f^d@0Iy*Wd<@!PJ*)s=KRfpMZ^9n-_VQMF7xwvs zc9>1OgWckNuut3v^ZWjaznp`;-?iji?EVgt^OR%Cad{;6zQ*8Oa_oMU3$gpPl{^Z& zUlZif*!gOf$5HEm%73B-tTNU}(IKsp9(&KhN!U^Di}ngpLbw(C;TEjAgYJ6Fhq~bJ zhZdmIt-Pppp>MnaX(Uh`{8$t1jdfO^95_rayxK}FLR17bBZrGr4M3;$irc|FB@C~yMC~`5J(mm0H2jh zF#GhpJOdImQ=SR7xoCx1P2wZThwUQx5Ff$6RsINYJFFiluy63SR1=m4 zU}qJ!24MeCIgVZ8)rfZ>$8k74!;g4J@&(r<0VeB`5o6Yw;m6Ksw3-6xApW40SM(&B3F4@f=@5Yc*p|ZN{8xWKNA{PK{sXtL+RvKP#!3v=%ZLazt7=gyjcMjeiKZt^s73B&QDeEgUgT@vp=36TKX`oR&CW%H_BtH#Vej2j;G-UZ{$nxXDlHTmH!n_{Lx;cdT zJA`#}2=jCu*3iy!gd8E&0Z+F9B%Tgoo(^Gc9m3i=ggLklb8sW(T@U8nYOJ}dG1pdO zuJvNB^+fLJ-@&ZEgPDVCv;HDJ$<3J@4 zFj&E=Djp{^fW4X8=t=4*bufNttTdJaU~Q&}REzoEjrm^mCoatEA>5yYFi*QMPls@S zVjv}hK4ZM{LZvmt?ZD;uVKp~>X%K6O>EtsHaI_bA-50za08YkR1bDYDv^hzJEr)H5 zu`A@G8qY4^v~Ng4EpTKATSTb`{%#~Swpg+YrRxmu()K)AVd#>UHX={<3QIk#iUp(w<6rEW?Qfs8=pwIHw>h zXNbI*;qrn491Opj;W|K*youp9z({!q!##je@_vQ~0i)$33{Msmr54C%8D64oQu1|% zcWFtzqA;W{Y+w$ixy_~1$SH=P6Zhw|nwq{yR1V>MSWZU}XOW>T+$;HHvdE4;ul^;5D*`zkb#ODVg0vK? zMAzZGy-zSU{01vTPr~NVRp~Z*NEh^r#KE$jY#+mQTCGu-MvkZjnk7v0HI`d5kIHhg z=5FFUvVuO2@+u{oTdKKR_`Xir3>!elv^cy&QCeNF=3?B&;clAS^}cWqE!<0UpVVAB zF@Va^>e6i#IO+BZ*XbK^-{}a}xSPnV1 z9gsvecyP%yex%U-G3a;=&2Us~jx-3rn@YjDa8B2l(?xK)X7{BC{Onn-2uwS}{)X1<;cKGM=M_SGWMZ}x@7D^AuJJxbJ4Uos$ay} zYo#40$g2a_LUQOe8+jyXQ^hG9Bbur#c#-ukSn)y%7o>nyum|jak?k+o07IGgKo2VW z9?B*e5M|q9gzQsoI+W(=q(@48Wwc|UVCUBlGU&(@<@;vV0 zBuo7~aDuR$xA=a0c}VaAu)}GO%rEod){z$gwm?2`tGv*GzBUVKe_K=eLhR8pKsq{szgpvK)-MS4g(S4V z89K-0vk3KrRH#ZDSP49bP=DodSlnw1i-G468lZHA^}Tkm9{4Ll17SHYQb~|c$`=qC z1S@(`N+PTZUPNdxEb2uoNw6@8)wIfgux2_&Nrtt-%LrLuX)jhW!}8!2e7#AB#l4nF z2lz4|eXW#^@TEcuSK#LY&SdSw}Q<0z&-Qn>P6S)pAUGDdQMth;1rHt`+t z9=Zw|M-V^L$V05}uPup@Un9Jqz)~o+5ymazYikVNa|7|-6({ZCx2!Mu{pu^&flHM3 z@hEgZN(}ys@5=2{Fs21O=@#gJ>Z$9)!i{1w#2~poKXn8lvhwvGZ z55A+QI|Q~KAO4;Ek(LdJ*!_7V#*-lJZV-Vi0o0`@|}e&Z0lS!BV2BYGd; zN$-l1_#OZ~or|^sp1{rxIr7oVQG3dGYm^~dZWwuoV(cA;a6Pm#*?Xn;OZqNTm9^J= zn9wbRZO>8CXc!MJ#tx`)DDjN+3-+m#ypRn4BeVf8sYYTj%aJ0Sp8l<>No1Qj{o;G`)pzIJlcP{AiZz)V8QQDKz2(9H{ zUle;I$hIiHNiYx5w<+*_m3=V!Ur2n$zr?_V(GYqpv=NQ5!Gl@p8M*nnBXT4?@7)Yc zE6&fB0%6K(xD?3yII+VKY0T9zEF0ZbSA$biPn{CzB&imITT=s?XmYF~>q~p8-PL9eF~M(yP7KCI z3;I8SK~@3G#gg4^vP9g5{%ReE!t}mp>zwqM`Q_$K)6O1lWo{8a@b}r}t4b&PtW_uL zuHfoZs>A!R;`PkS7k?kWyKCPIofnKgXt>u(t!776b^=n9rZbYd-g<+N(l5bSQ}r<* z;Ns)a2X+^*Uo|Yrl9yrhRlOpBt$+DJE9t}Y?oO_?mq()xGa>)5OFYr)=bhZ_{n zuG=R(_t@r!JCh2A@Ax>PTfg6ZcZ`~uBsWOfxb(ES?EDAgJ}dmH?hhL=fGU6d^2ZxL zNUlG8-(YjAZ6i0E-^mYZ`1r`$>y5{M?~cB1#p;_Kn>md!zu98i z{&Vxs{W;@wpSF+fo^!0z?QxN3irs#{S~N9bk#(1@`~1~EWG{I+>-mf(&px-~KfXKn ze9_AH$S0Go)~;4~Vou$+_m=-&IKI)@@=ie$-ui5D^R+KrSaEiBBfqCD15|Q?muKsnK*FRm~`{L|D-(A>r#KEbVO1{i(@ws~O)JQYC}h^5^I(|ALVPe?qjymaa4=J&wnY<$)YiwT zF=|w)sZ=eo9h;GspY4#hh2SVhhDw6TiTrHl=a2?^57o_vfzCzsq*AL>O?t?QL2XRo z8u~hF?d9NMV=dKRaE=!h$o$gWq(;RxH#)Kh0pVlsogN#~r_0KWfM1K-r8bzG^ZDno!=A0 z`EWnOpcQe$>UuBhUhCOsHmQ^K%OLU7HHr89x-4$bpC3o(=noH@7Zlj-K8*jzWk|@d z3hNAxGHi;s$#CjFlHn*Y603}+kCNe@SwnMh%nRf=>XCB%Mw)wk^5(7e-b(Jc)ziB4 zs>QA6%j@PHUDK?3r(HSLlGZ(YSFgEW-?r%=tLD!Aal571z5f?oN=E&1GO2UjSFh}7 zn)K+M<4a^xo-FqPrFyC!#QZFF3Z@|aDAa&N<1a+Ud7@fi6DJ7xP&Gphw}m0#p_+gf z7BpuW9}Rm*nucaUkF}>&N}5)rwPaZ$?n~ODu%MuMnx*+r*s{sUS6dTuwe`_t9HX>F zX>-Tiq!9ihH&nsjm2#7Va!c8rwal}VZ|L`3j`T?LZ#yVvTeY)lZ9=1-K0x)GShe=6 z+{>a9k)<)MHqH*0x?G)=s>Y64Hl>ksZoq~U4UUx_d_}jqq-%pE3)<;|kMIAv_{%z( zh9jFy8%KOx)~sP#W6q9we_vyL*s|5vI`5p?WVYwTZ)@B;K44VN6N5a>DG52%)?J8Ou)gIH*O6ZL zf{Qm!9QRIE*&mBGdH6NGHle@kV+;GA_S@?-X@nFJS8ZjJShY(*3iN^^>O#y!zP2?n{d!n?{WL@K~6u&&Z3zYW4s6{F`c@X45*h{qXAv zUwquAZf07~1s`PD(JHsBv$XEUmfhdT>~uZk;!$ zA6TD#_Dt(dE_HTxZa3Hey)TCzElK#X|DW?hlIyoTpS3iw{_yuY_}(by1C16ErXQpZQ2QD5@JebAwV|yzMfMBSilbxnNTGtusIV4kc?D2z+JH+@)ZoB} zrOeN>0AW_5&DExAlhQ_|4NB^1#gYbfM6yL*nkBON&}be<(a;^^C_mNLR*_Dz`*aVC zsKP0E4ShYe&T_D;F-Wb22ndq5O^_b%*12PIQ*)Cs%0b&MoB4IE#K(-M-mWuk%7`z2 zEPi9dhJKZ_?S$_#-r8~e($=f0>y4!NyUM$;1a_b5U~N0>M##3okDt)p>DV!3&10j2 z=WYo~I$KtvBo>YN++)WtukVa{!gJNHoi=VynDYFEvgbE;IqKE1RryafU)nO|_6O}R z_Rr{cV_Bz>UVh_(Pu)Cp`QvU+=H8zF-m31KQr7N%?c}+I9yQx+Z9LAnOu7*<{rL{w z(zE;%$I+pSjw`#3Vc1i z=@xy?uQhrc@t(i5-@0daZfierMWe^1u`#;V+b#3bzFgvTW#V&Jj=wsm{7ScjX~$+Q zuV4Hzv@HgOdfT9IaM$&l-|oM*!}_$k#f_G}S$H4G)c<1&h{ll7YBX5GHik6Ds?ln! zU0;?NebgETckO+;wIb_$6uc19xZNRA@pVbg$hOc)hqiac>OQ{E*rVvAyeIO9T5__+ zidR!FW?;ROkFzN@D$Zz%udI-%Hn6XYhg%ZVCJqM7$+8%0sMRUb*~0|~Plk2MEyyr} z-6_h=BkQ5am8|$|u$D1?Fu#720ssuIl3s9@lMtA+^oZjfM_c6gzeCz@rBjSQjqzT=`4( ztSuW4zjUL`kk8}J`&-3}9W|MpzZdS}{N+rPNtaNCW(>QBd~FFL1oe(bhLyOa?=JT&pd&-xAD-8@*V-un52q^(|^rkS$dFBxRkm1kak z%qPpHmtO^?X7kHGG*Bb8L1{gkqH@udVj$t+)4OML8)r1v8XR9&ps{@PGzK0*-Z1@O zb)eec;QpVI4sywDv+V3|P`jx1vY?OsNpTk7TvHepEgq4UYFEY$Y!yNo*Yc<`8EN9G z$J+NPQ;fA)_wu{8@y5{}Kh13x*5aCrVNaJ|vaZC2jZ&Kuy0!Iq$yUQkLra58Y}&s7 zc2DhiAwciLeQcXwb9FYp7FB%bX6NjT+AGbW z-?X}!dUxotXU^>$@rLWQ;{mVcG&}Oi<(40x9)EDt?n6)fVVLQ<&w9{o(s$XYZrc}g zdXVWI_mef2XJobPz3ub2{ck=0L&WB;wf%lRmwvcklVzWdsr^cy|8!rqc3k*e?^2h9 zulr33c=hMw))k}MG+OH4^Mhk4eWPDGHY#$#`j1na7JlL7cH!zGUFgh1*{v`5e^7F5 z&!R!^?pXH5!GsCt7OtzK%1uu9JwI*BZ~g-(*Lbf(pLn12HcLz|?VeC?wR=I^Meoj> z_*}r)vL(k(PMDFh;l>-0nH`Li^&dh_zpucG*rcWZ$JDUm^+2~#@j0_}(g}3ww$Glf zI-`ff$4tE%>=1G{dg2|k;^Svc$dEmw-iR+qhVq2LeUdv}Iqkk)9X+G%pcf{ctEWEW zkj2B8r{_DN>!b+IYgpULg}=@V%)Ddv#>or&(leJbW$aqiAN_aCLs-- z-jN z^#wnlRtFr4s^y%#asA%zZ%_C8VepIn#&&$6^McONJ3}+ZbSeAryY~~8?43R${<}sS z6X#{f0neX`$%x(OJ#P15!`ma)eDY%dZRWs>(#2IiZMSt>u-oJ6`a9XZ_nurjS#eh< zE6x?IXE08dZ$sOb5d-J{Pk&odydLTu!H9--s{YHUku#W<&QrLiwEx> zdb!iSMPGVte!c!XPp^6|X=-`l<==ZJBdm%U=1@J{cg zAwgR*3d(0*TkvPhgzbmt_kFRmZt9xEuZul4-}$9l|3-Zqo)|fG_}p*bI+p*c61d7E zuGhpCvpR-Hqz(Hn`-?WSKH9URN1O7Wil=5@ui0wU=*afN#=QQl`#WblY=~+7_4M4g z7sMUPJzLyxy@jx6u8Wo@>#SeqqVvb@Q=9dEInIEk|_&O-K$#90U-NmEEupcGP? za)DAV<+ik?KwBiPq}bp{Zouz(#2R= z>6C%Np=fpW_ZaWHkuko0%IsP5+6S+4Gd>yBYp$F!Z$W=-&0oxnZ@ZGQ!m(NN>Kd2+ z=T|?6x`$C=<(e(4w%_oT*q0eAx|p%NeQS2@^zuak9zkd5Q)J6MP%SHe>?YSNJ zyc3^;8@KG-^PA447c!=lqCIQJwyjxptSpLWJJCPmJzG}o*`9TwvIzCjALiYR6Mr;ZpuWTumWv|)!|&AR6MqNMZ@~9E@%@|Z5$!v1Q5Vy* z@$Yt)&33RX@g|TAJpo;aB249fRz~p+Qw}Jj$$zlvbY%m4Icwx0p!r5sHK@6Y!OQRr zv{Qe6-$4H?eDWre%CV%8TEfj<#;>FA`P<6%xOkbWT!DXohUb`*k12DRSE*y|$}(J4 z=H-9IbrhfX;ogk$V)A2U2-l;)e~Ypk<%_ICY1OX1xEfiGlFLSwU2H@#vDs=iTc{Ky zU*d1Dxk`5OjN)Yh#mDUYr_86gSb)FDe7u2GDdowNijCRX$0(#u0lNaN#$z%hWIa+4WZ1^?rQ`;5>Nhj%9Z&2ISTQ3W+7hx zv?AsK%>}&>zf4BEuV%ese$X8GpDrIVC(XIDi&BGkVIGR&(dHw~$^S+XbD8GzxeDeu z&2zno`A&0QmZGyh15dt(^1Lh=vO$v%BqR7|P>ji6p!{7cxAQ_)n35eNKh9CqLbgT7 z6_PFgcZI2y_-*kg6g*SNs?Et?YS(}8%}FZX6Y`5>*g1+a1@aBD4JC{c)b2T5N#6ap zOBByISAh&AIjR>SOG%!7Qh}T$S*sVt!a^jYNq!4C{W>cXJTLv0MC?+Kz^)^5@{0a5`0A4-8N^pH&)O(gK)9c|HK+&J~rhHcNucF>DwpgpjM7<4c zkpEu1cYM8P+00bEeCFW!$v<=Lsy@zU@HneMvG5<@y+24M@ZH7yNtArFH=k|6{RWgR z_}v-k)iYwA8Ce;>2Yt8)*B0rP^Pngz_xmq)v?2D2qna~CEvpDTKRhD z!L=wGl7AA{b(ojynG5(|Q2vD98Q8nYpRvQq7g3JjeTDel5`33H{RG~pi0e9L#qWAh z@=z4~E{xy3f!~}#c^SX!!SAldclBsrJ$~0DuItzkunSPSP@3?&#b{?K+DL6J;v3l< zJ`cKi6>AgsTUZ0^y*609?R+Y0W52=gHZl)CpEa;MsX)fe7x&$;uNwI#)TiH$fsZz^ zc6JP(?W~Nw%_ie_Juu~m`8#+=2Q%>gWRm+Zrg*L>gOEM*a6f}t=-GTaTMb^yMaf6u zC=Qeol$`E`^bl#5W{ zi;40TT(3l#jxrDBuPF51PrCjM-@#8yUXF4*ivC%@YVFnAEv{7mU6hk(hYiIN2xe+IS$+3IBTi29_r;nVOowh~u6WY*ts z9mVI*q-2?t`Bfy-gd(j5`2ivL&zEKr!Raq1(lm3|t2=4IN2rWRg{z&^K z!-E6<$^UVlP*f$Rd`bBRe_Bx#hf=Eel<)CV;EI!qoBxJC!+*=4<-g<4@!#|3`3w9- z{xLtT{7|_|IixV?e+6wYfNPBK8*|WtJeJQ2F#0A|gmE{s63l)psB32q$fYt?&YVh_ zQlXS9_b7Jd73N}Y=3y1^AAO)}fCX743qkr-v1%3p7uK*C=6oHihg520amcu4#i@7{ zmvS$<)xjpQ5w?gOVArt++3V~z_6B>C{RQ&rW1htg+{kmdk9)bF2YCnYoUQ>v7ZQmq_S-co+TW?;S?QGTraNV!}2vU0!jfby{N zh;pCuU&?xABi?e^!@~ZMzL{}w;QU*dm(*X~qWmC4E+WwEjfqxfU==>fFznUe?z_&f_>KM|e~I7bFZX-=QU6r`O8>e*MddA(Kd$^~<$qN^ zT=`h#6CrbGQ`i!oTU+_Dl1L){!@x=PtdFgNTzrTgfs9^LIc{<3b%j?CEil6%j*Rd>b#BKc2Hrvcc=Ff?|$!>H7eZZ{ekyKpu&CQ zs4&mB)OU?W1v98nmZHMifD2T(yYk-32Pz)|6@C#a)~MkBm}yi1AtwIE?@P{SiA+4X zoV}kMOm-(*lMe~p2l~168p)57r;_iJTu;84d?Ru4b;OEZhxB{B5+(53uU~uWwg3Hk z8}4iLUoiF>B%}V{tIxh_XY9|ZZ;$?-u~+Xn`kPk~MLYT+$^%F5JNl2K?;bsN6mt6L z>qq~5^p&HBjus!yJDPp;rlU6;oqcrL(dJi zFIT_pe7Wpp+sl@hp|M{2`Ab{>@aP}*{*ELiCIx1NAG3WwKf+Hy+B7K(m1mWNS})tC zE>uU=CF&k^uX?dWG<=u3Cv~@9yG>R8Gg*3`_&?&vpD*ezX1InFz7PQJ1(kuK*em!J;C;KaG zsJGxhoMbcM2hL(=*c_IG&69xt#$cnV@KiQ&1dVm6@FPZ>^mFV2>b1P?qHjE zDcj0ju<Ec~3d6e5jmIPAR7`e-Uhkjxwq_su}Xxs%%omlr74I%0wv+dlY_NsmCGWe;N^CtEM_>W(N{dG0(VqfNy*g@XSzR#Dk zAMj=DPJSM{o3CL%hHrHkKGA*fd49t$W6$u**|Yo#_5%MBdxc*Md-`wCwD3pR-&sHW zt;z7a2H1OS5Ps+oI}W@112&a?$cAB$O=Bn6a$dkzAeOX}o7gH|1V5;lt$|&+mY1+~ z+`{(qF#9a8Vqb&bbR!>T|IVkeo8T{f9lq1ee1!c6eB5vGx$N8Ur@jOK>{h;jeU~p} zkMq6k7yPsANxqN$ihqth#rLyc^Ut%V`K9c4{EO^Gel`08|1x`tA5=<&En*Rt2;!cw zNpfNR1QeUPK>4Opt6ZS8DecNG<*Tqx9#+1u{3mqbFJZC#JJ~7fLI!t|)l5Ika%YeJ zi1UMs5A);~4zmIGeX#k|70Y9X8L#nr2hSfk#8={jQUf63!<|~=9Xg~|4$U16EcPDo z9vEJGz&qsKxN7YoL#4Rli**MU*Le@Id86m!-}$4yL%oZgsoQmn7kA(}26_&Dg6anr z;|ZIzC*Ufex-+PhRWsdtNDa*%oilo9|A6yQ@4#ZG&*vRH^w8|lLk|r&eTx^PmNC^* zwD^+qOSLvO-y)0+qHJe|a(P*xgw<+0jExb`Qh0a_;CMPMtZ#N&8sY za<(3J<|Vi`7t zUo+GgE;c-xRhxB1);q>h;}YYw#t*Y+WM7f}Ku&$mZ8^tt$8w*^3+3IBZ_Mw`Kal@i zfvMoyf;S7B3hy)pO`A;56a|a+79B2j74Is3yf|UbGuzF6bFI0U-nBC8YU@_(Uh5UsYpvg~e&2ep^%3h+))#FZwjtYG z+j83`+b-Lswu82tY`59&wjH-Kdx5>w9<e#&8V zlsG(&h@-{P@0jUW;#lw4;n?Rm;JCr@ZO2`XBaSCZ=a$}8W-s%X)s}UX4VBF;d$jE7 zvX{!tMica0q5h+XI*WsD_z&SZgJh|I_!GX^|b3H*PE{6ZssmN(_j!1K80SC!{u8OLPri$K**%iww zHdgGc*k5stH|TxC`<^%9%k$Y`lh^t>d_%q`e9!q_^&Rt_f?Zw$TQuTt@%Q^@`j`0E z`*-;F`40xH0dJrt&=wd7%nmFIYz*uS>9aoiiPiMPcE;W^H}qq=0}>JYT4iNWUH}tM(e$8d2M5DZ?wDG@96M%?C7|q zO({Gr5?~KwJJ7?T5 z6G<-(PFR$jgG&Xw=2JiRJsRbe_;KK8w?vt zH`H!8xZ&;%k8gNmqq4DS6fsmTbFx+g;oKxZSk9bi051>h0g&{>KZ-FIaiOZ5O<{!?UA%$MPNfc6?*U^A{Fe zxa7h+E_`)o!Oo$b+jl;45xZ#RMMo}r>Y`Kn|GT#C+PmwDU5VX!yY0JY?!I*Q!QD6Q zzHRs2yC2;B#O~*Izq`)A})3r@)K0pCq;-t+1N#7!VHeWE~#_ghd7zJd$9&E0ucJ_UVKEvKe@T29o35O zLsW$yMH$#4Wyj9`E4+hZ?Wrfg;`-cJgfR zrTpln-!b$~e$ajOuY6^OzI`|J{eARC<@z&Y{OT2}Rwd5cx@Jw=bI&E_^E;ozvy|jx zc->pdLG;GV=IcGlr-tWe^u$bnnR=pi%|w7nc8$Vu`J!vZbwmK_P_~BEH(0Xc;aVOJ zn0PLaTLR%g_CFeK&sGt;Dvc%X=gapGZ7=-YQod!)n)vFLmeq-s%E2=`4&yb5d7^<0 zXqyF*gG%^V+PgoM&OwS)ipB)%j-U@gX2YlZV3`obiS{n0Xta0Zjwl&#wA-vErHFet zT?1;ov8A~w6y>QK@1+l{ywDMD^6=)K==60RRkPndA=#$2 zGY{=FXfqJr)YG7JG5n#Y#q3jkmbeC*F%q%?7o!ygK_dN|EAw9};C z(Xpg#z|!}D&?&0?*nrf!EdUd`U!@CODGW}hjGNZKC+5L~}wqLlb8uWXfS0zp- zcJZM-2o#FB#=nC$Wu^Q7DQ&tBbk^jfN^@vzJI})0IYTo?&fDMMSx$D|ztlhKM7B2W zdFYG*-N_T3DMoj)#htF*j$lnka*pVr#StgU2Q1xcYaknub5bVR;Fdj27DL}XyDwYc zmsMyoWvjFQv$4fy$STb3LErD&w~tQ&_jEX#Tbdl#Cw|4_*VkT9n}EX8+rJC#w;;Om z&w1%ED?r<+54mW27DiPLMA2F8?B=4SsTOY9A2JvV@;f(PcK+vZXUgwH%f9gC_^uXS zjkfLmO7o7E#Iq!WJD?-RAQvo<3@I7>DOy5GUa2ccqmcyAHG~JM!K8$xAeNfK&O@!E zlf3cK-2-%O9Npa$9clOV_t(s5^Ys;krmpXqbM3Z1{d!*0{4MRH>*c?om(&rHKra)< z=3kMNN3d3>&;CNp{^FGWb?98xDBBt3+0ejJ;d(E9v~E_rH#Tdmdue_D+(k?KyB8`4 zOR9Tfy~{dWAMoi@hT<{No{r=qL9ZgL;!W2_&`I;hnITCn1XyT7ks(Gp%Lyr(Bkn91 z&8nBEWrWkGO30(iaa5zZU(2Onm95Q|l7Mt>O$G)3w(Rqskp((=YevrRw$7|KyG=%O zcupoQPt95AxaxeJ)YGpTo01#y8w~S|kTuMUCbomdW~^o|*8B7+GxP|$rqkF0Yo`F8 zi-gD^>1ukKdX-6e(jH<)X_U`~)Ci~<#DBPMX1mu}-xnUcaK)e_?Esseck~9T)t`nl2`m8G-*nLp*EsKZ7hI3oGo2FZ5Zkpx3bk&w^*}R@FPh1-b z^h}<=hF_7`d+nuTTkK8f8rp#M8)XIBP>6Mle=h5ekS(Q+5Va$p`lrS%9`1+>`Nj`) zY`3dM81N0Hw_cR^Pl&YdH*acb-rUR=LeX-phcK0B>HQaN_Osu2m|4NQ#KR6q+alPQ z4xt}t{g50DsrH})WP2=D?S==`rj}Nr92ORDEixFh4E9>vSI;x521N1pZA_fH5^-vS zsiOGb(dI+V=eM+MYT~mKhc;~zH;~9{{c}R0kx=4h&@K6r#uH_1u1+_FctZIEo)BJO zG1VxRI-Dl8WOYRh=n-_Km=%aF1T1RYA!*tp6u9Ok74hIl=kKmD=I0p9KGT{D-`cUe zKBq88wfKv-@VUI}Mn|2?+32_-@nGVf@02yVTutS-faY`2R+vnnR%(ntrLAO4jBgrf z+M3xQo_(O<{B4yv1vv(Lm1FbH#NQe|CNANPmOlR8(!PXg zDe49=k8+W3X@#u#jQ%#wa?VY;rDr5gx&|= zhde|x?n*_=3UF5@FtWj2xD(Pzx3c4~ssqGqt&J@`kW-qT{bAqqnrSQI!7j66Tex~O zOARbgypugu=BT5hqozDuux!!LXO}irdfOAWfnd#ODE6q=RoT0su7xJ6!tAh7Pb-h0 zH9@vl@257BmQ+7As-`=h79oJYLyuRvvN>xFW?7>Z-F! zdE~C;uF9pOQ}$AS`T9WcY0=gCmN>c!p7o)x4`56yCiunaj-^Lb_lxz&35^Ynh;H>{ z_{BnALPft+J<#ZijcjO-^;)~k{xV-z%-PWBj#+A5BL&X*wEF%F7c>M*`>Z9wNpou3 zCOL`*tVltiaUgzc{-@(mLhN3`(#_Q@HWBh+_=Zeeusg9lM#KnHw?rW1;>&R`igBQ+ zKujpdp#*nw95~4a!Dd48OaEUT$8r27lYjF;!D$hV`Pzyf@b*`vc#hw@{H`y|w zPdbYG@{8tAbJg2|xy~X_D5u~&^YYo7=kOb5XSGjXValJ8l^2e5El6zQH-N{ICzByX z75rbzcIz$G+L3OUHUqNBhLv$c(@PZDG6{?62!_MXOky1DXsip3bzwZxqmYlL2Sn3p zj1V6~C&=;&<1W+Q>ft77UPvY*`DWtdS?&9EOT+c9{!rUsQCVP4P4}GW)bkpHoyDqc z(OTQSxO>oDX^uENtnDt#Xe`-NQW!v*kzED9)*?(gA!m*DHJeutIYJQ+3V%CcQ~KRbceUH; z0ZS{%{mDjNg7+0e8+Gc`(j?A=_X&QHQL#L{)eOEcgD)I-Yc@qRQa0td21LrLY<^3b z)19|z^QN5gaOvp^ z^P`*`)y9?CSy@8vfFG0u=5r1EoIX0)#HraC610YZ8p*oZ7#FgJIL4(0_dZy=Dr)=0 zY^HCEfE0kc$o|FmKk5y2rWe8=q6oAA84@pD)- zenPWJ&-=k6Z=$VcMCZ?ryG)o#g;^12zT8t1RYzhQSv zq^u_5ZpFU^uBK_VLl@1h-F)8A&Uv+q0+Z&}wRHu$@b4td^}i>(`DwI^?7)3GH%*x9 znv06Lt_ecTAQ8fbrv2HL#}PbGw@S{oL8x14TQF^dv=(t#gOZ=bLJ1jz<88q!id~xz zEP{rf8#}6iamhJyo#4CF zy2pe$l9o+03v^i_WrTDq2`zj{Mk6SWC1j%j3F!6$0`Kchce` zyIc#K!@5fa(b91oNG7@5cAKN2w#w97+UX0#Bee}}u7s zQwvO`0b7&TU+HxC%ALJ2Uwf6K%F}Lf2Fp#>lHy!umRi@;teUjc(HKHZ z<|4F=X)WWpl7mNf$JsKHbO0Hu^$k43Z;(qDSlx^_wptXnYLUTEIXBi#lAZ+oq=u=G z?+M$Guc5Eg?6dHe#Pek5%;2+#p4fK-S@bq0Rj)3ICRjPzLQ1;vX#%GMN?^}%fuwzt zH_!{ZC6vC!Zq=e(Y9QPcYK9~z;%nWTaya5f&f*=b3y}bB zDl6Ku_WAv}xO1A;q17h?L&4xsfM;ji+1?3E4TYu#-VyysK8M%6hklf$*Gne2AnATc z$Ai`!sO80Ic{c2TV$pINv=+^N5_s8Sb(``BAQVM!0+w(_SSi~PNQIRm&n?~(%r3|_ znB1m;3xB?1Yh_Mx4uWCk5pH~arM=2#jo4P6Ikwgwv)Q7Kb&v~BCtG+DZFXW5&=SgV zC?L6j)sK|I(b}A{Hi^c_?n7J9Ztx=IH;|1&mW$?XkmcEfwe@uLi<{JkOB;NxaKt03`*znCZS#S6Lxcg*JrtK-Qi<$&lob|X$d{nu1~x9Pa5>h&=v*Qt9_xDVOv zI(%T+0tm@M# zJeq;q)SspBSOy+c|0{*p={Vk>rfXOcbk*NaIWx&Bku&4OI`mR~W@s5P>FgiPcoC)v z=_NG^U5$A_D~KMrPH+3*-S-dyS3qtRG!WAl>tYz(vyGqFfE0bbs}t&*IHmw2DPLc z^y!ai;55W?jWCf?v4{zo32BXV1alxq(>{vOMfxZ5y7NQ?m9(e@y+vX%vxwfB(Axsh zTUwctIW81hA^RR0D;o(ylqZx<-SA<>mroh~w;t8shlT9J{GO6TGVnsl^AVm`lK4{K z@HT$Y4&K?cIx(uHb=-9q@gj0=9F%i|vBe%9maSU2N5hXR)5KgAxbgvqYc1*@SEh=& zD)Emp@Ofg+$mir{;H~Op{rO5#!@c0aeo>!%!fZ7cdj{zFUhouhY*1g|;N?9u$AB*! zho52>pW(nGc+Py(H?pJh_xM~UWRH=a3)ut3LcbR{$sUP+Fb*f#Bk_;M;UohDuI7%z zN%lybkHbm!$me{VftL%}Bk?mCc$uJ!#FILX{v*#P^_&D-Ec-9oPclZnSJmqSZxb?7 zKIdcxJ|<+3tnb5~i8LKZ_DDRCfo~PEN8*(kc(sr{5)bP*wNvl`;Us%Vfs^b(d!cc? z$tvmx?2&&Z?}1im%f!qlmxJ;tNR!Lh2CPiXhAc4~WG0{t0&6R7mh>brsi}Fdxh1V< zr8GIhu3~N0+d}nLx35r}4QiP$fZ!m__R2tMO~{=Ko}qlSDWZ>9Awl0h;+2AigwGRW zD)BQJ_!Kdw5>KY^3I(}Lpt-%x`8Wf=K#aA-Pii>v z_Qj%|xmr7markNW`P1)1PKEHCpJU7{u#C^w<@JQs-Avb6 zh2+Y98ZIMzD}}E3oF}fj3rUt`2~hGDDDG-SCIRA(uqNn}79@^m`w*s*!C@aljSehx z4d?gR#_U|RjoC)?7q1qnPGhSVa@C5J^|zbUvCW$|w2-5(^5(KM}q`X`=4xmYRO4EaNIhn|DHDjnx1u?H_t)Q@J?hddh5cpkVIBYJ*F`55md zX@zgK_AVUvyHjk=8KmeY->3FsP86~=pEx5lpH5gXg|Jdop~K0BVVDH3wH(c_2%mzM(Zt0o7JV5vlgp!t%`nW9_#)pRGhjS>h`-4-Pf)g^5?^P1$(g z(w9YF1B#>p`O4Ir@18y?X`}2CG=>}i{sDITX*32-I!)lvxtaJ(9am23IBWyte(5;I zP|82h9?v12E}x%F)emIWM|-{?+moC*4nM`NI(-uD6uDetzEU12rqGVoi3PL_CO20kWqvc$tF9PJTvk#Oi_ zdavLMw2P^TU%iY|AMQacC4d;#B|1NAzG_-#r2T8MUa><>@G~v(Wr2^2QhqDNT1qrN zcH&B(UAR)Dy&|Qr1^v@^;maR>#sgeOl!1T%#!4LL)_?Y>GQl=4c)ZiE*V?>$%Z-jsO-z znwzlpMXLs4Ts|pDa&kNt%bRB!YVH4|R7qD>Q^4+U2How$`O_|=0U4h(sqz2qLSEe> z`1J$q&(-I}?Lt0C{QYq_%`btg>NuR_fUJKKdw}J0q6+Ah!V~OL%m<=lmB@{(g#JuL zK()N2G#xdD5YpYtqz0u-nR1LV@dMFQ#&BwJm-a^WlsqjTGDE>y#^p|OW2nwt<|$mY zSx<}f^{$xIS`Rz5*luYwXJk)83)`y$&fJ2p?9x*s`}b~`RchBgRbHK$M5)XCc0pU( z9Rpo}z3^$Abb-L(-)J~wK5{ElxS1osNIE4M$iyM*F4AN>aG_V}IbpcPNcdW@1bmFYS$agfcHpzY6|}-12?PlbsX*0>pLj7GKE{PC!E@wgMMV< z<`j-xOm&K0UrDB(6UeNO{>?glRQNH+m9@$(Sc+Vs%gYLi?NwytZlxuJjGK{+gk%@9 ziz59pr?&!ka(4~ID$Bq{^fXT|sIKlW4-~sXcK>91-xZO_ zl0}J){73Ocy_L4uP{U>Ai`pYoo23pKg+S~TI*tO$@WH8UmyN>b$iP9z4xtlk;J;_$r&zb}-$mZ1nBx@tAsYZ!JV)YW14#UXaX8rk z68~r%PIF)4C&%Gr0|*>80IsR$lMNv2e>@JSSfRwvjKe8bD4&y+fnO(V28m~9;Clo; zC7wGD|61xfW#jNaq;Tgr{HYY~9*4h_!YfjEl=5hG9Q5BU=r8F>GE=rkrTXCS5y(Kw zyRAv*Ci;lKeHr|nnKe=XZAlTja`3PbJWOltHPCV#J3f#Aka8k)2b`p!SXI&2fh@|N zSp|WH-l~*@vxVx4%REI37G-Cp^L3GUy0?2tPj!){vrPBPt>K_2zhKh}dsA6v60g>e zA18imrE z-ZONroZ|c`PG=}>XdF(@7dT@2na?3#L)K5~IP?+ncvEw#=z-RIT`bIL1V~8cZ#jJz^fERp#^xk7lYO?ONHNP>A}h7 za(8BwV;_(-FtB3;F_lREls0XL;e$Qh`X0mZRRvcf9&F%FX=U=x*Q9~@XdCDt_gF-* zf43NMxzujV2{S6K`R+$OaTZl|8+Gr4=h$+MdTT+q&5F7Edj9u$t6b`Et8hHnulX` z)8fP~m|r44TMdCvC`&(Ec@HP}q;YQwKc0yzZ=~=KGjON!VhTTzf#>2ZHSPI0vM}TM z%FQ~C6FW2UqbdCKIQ*oJs|Mf{Zx`*ynLzsUb5ixAl$WC8&^rr+{E_|5)p4AtnSSqD zVK)josNM`bS9PcA`!n!GYGn!!X5hJMa|#coaI_~yx3D7UChXF5yUNwosoz!MtSEgP z%GI?gJTeYnm%?i@aF^PY!fR7FyUPnfl^FX)z~mbQ~#k(*h zPx=XYI}$c)o444UUtehEu2AgfUdncoY5tIePR#%3kaN?3?20Mu$2z4nFD*@}3F*Lf zWX05F-fRoI=fs=mS!H0Swg$H+P+1m{ zGRv2A(EbDPxQHjICG6K?u23%gTPn#c8D~1qewD)iF6N%ZKg_^S2-zW@laqlzpgfd% zPC~;;b{xX0a)`VsiV5Q^RyjwbwC4cz1rAv=Taz^l$Kj{ge8h0&9)N&@iMMC$;`rb6opA))A;{G&_wQ$ls5)Yg+bB;YGjT85tI3kt4LMh|}{FnM36xh>ZZ-?M9 z(r?+Il^8n>C;ch$)8lZG6%tR3!;k5>+JJKb!Q0w%$X*fk!K<0iCwoXf=Tru66+9#H z6A~wzlE1C)LVenUYg9g3+bDRjdHfuFPc-t8e4#Z! z(CEGCxM=uBk}n#5JOkfCW3S;KYB*MvaAG2CTMa*vQGYGT7m2F~ey5&4pX7^H|5OIP zi{zA6KPLlk!e3j`ab=EpPVzmBCHARcEQ0`Oo%Jxy*W~k?g0Z z%J_RJ#>?}`tFD>bTdD#vi>sp0ja@FaHMSx%*->B8w!4rC6$!d>DG$}r=9Y6xElF)N zft8N-ve)?A=U5j`+e@F^+D}{;K3A*G*%}O=h%!+dCZ0i(ZiD6q!y*%&qDs4Zs9Q8| zX%Ek4!5d%2SQwQLhqbXr+!1?dFhrEJxt&G9bh#>R1bh#vCv zHSzeFKwrnH%&kNuTM%!?ULy3niueKY_jgkMf*~6Hoh4v`6f>5w;o`;bg15n8H62{gU|c4E(gvqZ0oxjVo@^FNvQ>6tuT{XU=webid z(T>cuafiM%9=1AKvHjPiXe;B{_7|qb+k)LL+BP*3Z?Ej74OCxHUoDFUI-{jaf}K%^ z`bud*ZHK?7elqQ#s_*po*Y-`>IWP94t>jH#Rqvcz!o72Rt~3Hw~nTf^Jdzdw_iHfb_NVaYOrVk6_N2SU^Y!JFM3LC_$$MfcGiS zP2eOcss(k(wrvo1Y44i$>h=OlX(&46O^?}~wPBi^>G6x!X}|inb5_<)U*6C$#q2w; zF4`F~o3j$HszshinQ)^QHaE{O2i68%O;x2e5oc3%Sq=9;sVIS1)s%vmMd*oUoHVsf=RGemk~d=?MdtQ% zFDOJAR>df~1{c|g!1IC8hIFb!bIS`Vb_*)j;d$MX3xTx=DsnhU0lyvq)>6k)j?+J- zEZ5;(nnE zV;b*$gLp6bOXzIu8HA1@+^Cut3foEO>|Y37CF(=>%liL-O_i=sHq%dqO-16 zz9A>%?0rjO%~bCF3t`sCO`+s#dTEZ;iL95@HpW^5rIm_B6%#i6(1CQ6z(DINIE&LD zk{H&7rg>}abuM3x&0FcUg=@nV0SAs$H?AJrm>X)JQRnNdb%yFf){0<-)mhh9;3%C^ zY^(NKy)LIWR9@K_YYbL|?3HnM!lI~=X{}zfzd0D|h*g!FUFGgT%oFH}QD_cxg!Vc9 zNZ8(WG#;?MF`mG~h-+g1Bj_vf62zAY4}!j#xS9P>*nG|4hYTEaED|;i2OnhOrfai-njl#C87yR)a!_jsr9I}*2{CFlV_(tL%X5bEC+e!RH2F`?S zCvX@y8P6B|EbE`jz_UagPU5FCaHh~2kbI5-IIRIu`+J2gC~@Ps`V?!Ccupps?l1l_ zTt<7;<*EAR8Mr}RlEPgXIR4l{3iqV&kV4kDPPYVGcKWpxJ;~OT?NO*c_`VKnFQ^YY zFO}0{CBC<2=$Xuw7xFYI`j(3ta(#u?RGiQp@}MAT&rw|1gV{j&z8SNErb2p6W!whS zaaq?q9*9{zf#QifPB*V=?9e2pzJAg_aRX|`GK%cuab=70?~wngeX|oH7HR*R@)pU$ zsDyK$Df``PuTEV-B_mLmQTSa||(_EGK@l0II zRf&H%4*#iMAK?e_9JzN?JikdkpWQ{z*Km5i#E)m<;`tK)a2!t07dYm8#&d*Dko6NO zJV1L^_4<%yhbezTdoRry`5YxxAA4MdtdY+-q2cgW`7ea7Yu3g^>L|j0FLau~q0`d% zgQ7jMenQ6~Td_YC@73`#VaJ3ZYdp%I5Rq$Qsfekz>;7C?3TrapQL>xKDkKjq53z|t z@U`?X==@6Z$BJ=v<4PU}t;)!C(ulYti#vup@-uYn+U~&N+=yG?Us%}Wl*w#7@-YBv z`MfWMVB=JDEocdJSPbQk>ui^n)RZ>_d&~dL_IY2>-@m%0qA6TzC~oivnnRZQ0%zk; zB))p2-d7Qy7wBqkw)o9G)&_THb5p~vsY92oCx>EQeR-8P-tUX`!;g^XT_9d#N2^n( zr)ZI`G(9G`Y?_CbJ`f`F_&o#sFS%!$j@_g61^o~w^1@^$H|+wJ-l`RMbWRe^$2rH@ zXGJ`f-6{@2Gyi1V;b%DSLMe7#FU~#l%Y!c-Q7@7)?Uj^^0*6e@&(w4Vu9>+ z$m?QAY|X)(Aj{GnlxJK|IK5}Wi9KhX)B}AXaur~28AWb}!pg{AgAH8{TBpwXDkV)( znxQE&kJc!}H`;+3@Ni2(DUz!c1<>^cX%3lf&FKhr!C#bvLI-kBZZ93IVTZ!B*q^M+>D&RLU;%_@1`m{U^0!}?;2yTdwl*kYPuEj>SRWMIJIDDjmd zl8!m8ou7q%(V7O%`vD_847)Fy&ODgFFxsYoG)uXt->wYHP&>j9mLbLjI)Qja?$V=O z;}qwR`h)xlihWZy6Y&kv1t-b^p;e4(%8;k?RcUQP9Kn-5EUfjc&p14c56=DZoXvB4 zi+l5m7fyFKID+|3v$rZI@5cpnqF9|RkXK$*f#VpLnU~GwH_!=Uv$N`^uPDqPp)(~S@DNTzo(ITwn7N8>xgH01eF47PoWU>)0*O2O@ z?o(%DxKiS87&W|N3W+6|v$`p_!et(u5ugQQ7!hjKoSx!d*;BiIcG@@3K25_v*lBFM zNk2_Z@9wyxH3s7@&%4xr`rE5~AM!u*(>{R4(CNI%ba+SaBJs04r=0w4>KdKWg_UfJ zJl{2*ooyLjIo-m!W!lOS%ToUQ(xr*2rNoQ$KFSy5Ul;n~eYRinDDZDn9-fAOkb&Pq zds;O7qYV5>%IDMYlNtE8Xpf%6kw=(*{`C}J)arknf$yWeOd6idz<)sbyV`SdGw^-1 zM^D359Z!adjyet>@wL;h6MeBqkLc@V3v~XPume7GEr!y>$P1@j9eE}MMZM%9dz5t` zqC&XR9zJX4YElO6k-(G6!<`?(Wq|vGd(-pG#T7_UX7W#MQnxgYUt1)*#|dT>p-g=$apV`rQtcL`cWE79f!TwDSTJiUy8@c_9*NLy}!yVF<&I^ zO+Dv0e~RMqT77>S$9{g~NN9L4jq`UY9QZ))L6myq~H2 z!-&$*%%zCG54`Tf3}9GKEP|&fZGs{obgsJG1wuPRDEcU^1DUf?sWZ3OmrJ>_X|sTs zKgIGm+CnG=k>a6E1MGm+nSSDgpnSZ%;#{k>!6s7nqS~x5G>RGEKG)>1QeK`h3yFC$ zZSS}?O(3C??6TwM%G8}%&#+^ zL$X9X2R>Zp^GR08=bsvfQ{INePY@2Hh}KH!d`T77F{}j|FIpr@n-$vf|G~{)RvtOi zE#wdVMy#WA>;s^E;@Ubo;aEp!A%UmY(Fqsp=n_w@qd$&Vo>(uJ&r!|uL@YRY4E|;s zrbuoUJ59Y`&|BUvJMipxxP9I2}4&x28V3rkMRavaT*$I-qi~IJ%V=p-PEt?b9chd$MgUlW+6zjIy_1Gi9PVe zX!j`nb)h=eBkoEeDJiG+2s}o;o|7^(1xBmn72?j16+S2KWR6m+n8!4K<&5uww5-Or zsWraTT7%e!3a^`1W8yf}9(URB#!cLencS^PS*bRXhc0IKgL9Ub*R)sU=DFhop{_|4 zjlDiwr@yk*vD!1OzP!m6_4awAtFp4nYJ3)(J=hdz?+A7~D(f2x7EZ0|ZK^JDx0P2< z!Cw_`4o!;JSfjK3RZE+Dcehwdvlry}%e(>pCXU`Rd3<4q)!Cb9t_m%xEAI-0iN=aJ zQ}s{Em9TX(&db!itfF&9*X4PcZ&y8k@elmV)J# zA@Og)?hUKIwX>(9V_wthTQ2OGKWXiygFQpt>nZf?;Z2PQv5x;97r_^%h4~sA@lE?ASGoVFz zdMAm-YiUZP_n67EOCcv9+x5(B@-6fs*1Tkr+}PeyP_Xce%j#n>cZa7rwxoXH%JB59 zL&weCQ+KRbP!o=OoV}syrNfPjmtr@DXbbG4-=i%x={zA18L%FfZcCc))B8C+n&v8k zZj$>sDgV1v%-8fDPOOimS3#6OtG>}U)n;S1P3oXWy2pY8Wm6(u!{(~KhT_&?{N>A7 zOJ{RzS^d0~lczT|2YW{gx|-SowUZhhmCmA>R&T@>jKzk$?l}XKMjZyrlv=r~gwB^@ z{8@}?9xRL0Ia``(lJ1ojBog`W1>~uVIaq-HkkpacI&=&wW$lnxN7)FJ4~4(cpk+b% z;M}$1gcWQm3diA`ld+P`7p(CmJ}~jVOJ>e2p84K4D~#qGgQe2)-D&*GiA(0s|C)Ee z?`|t2+SB^iTWDu!!cLxaE6+uH$ac|IvY#j$fT%9d(3A&}rl_7?bPD5Gpg=Y`)^gqH z;hwd@K}UDJv$4|AQfG45%ZekjcwfnD(c*wDI4M>h8C+b@(cI>*wT4=J%}r`fey*Q4 zEx9=-#}?^{bS&!&U|NGxarEJ1@QTjuv#S6c7#qPEx0|Qrm`PvyoUlnU_$Ke-T37SB!q$#ZZfueK0?+7#p z_C^Y7cHqr)-UR*WuORCHb_6jid55SlzKsapA*$n4^$GSO8H&U(scCA_58Y2$hB&TO zsF&CLgROr2sYAERE>$eUaX} z)I1ghAhk_#(j-QdQi?S#qg*?-Lr$&Jf}tX1)$ZbGy(<=U=M5D}&dc|VxCckQ9W(2q zLk;D1b1&e1o=CnGOjTapR94@T__5A?lfZrc1#@Z__J@5Pa~hz)dNm#TK6v3=f9va9 zoS=JF6u+m;qO>=li-GY<^bghjb!GK4*SA#l*Ot}ITvzY!t#?PFfgb!@P|-0rPKwmq zF)uz*kz!25-;&`|F)wn`^Fli}J>5D@xr!($WlE}AE;pIH&}pPQ&)W#SIn_IRzmg@C z=H)_9;h)FR_y0FKbN*$E>#C|WojH41Xn51)w?08~Q~Kk#l% ze&F3N2pd?NH~38Xeqt{We@>ZkPM#_}r(Gt!^?#M8p04h#DGdy)>aOY&*CuakwWF%q zNBef6Df_JV9QIkdby{p*Hqp_5M7M)yIRyk!uA565KRdc6Q zhMFqMVWO4RbOj?bW-e%23OnJ=dZo-VeZ?h1;QzE|42Htw>aJ<#P;YHf%W%{Zi7OXYN4H(o%zUu(5tdGi__ddflnyJ^U%9SJ-B= z*~JjVb)}jP)z%r%C)!?S&{P;1WO7i+5L01@=>{2@-L&DeSgQ;1ma@mP(+1gJeTjEX zeA>mcXPRgFp8KvZ8}^trXqj=_F#nIlmU*|GyuD%|AS^QQTk@}<^&il_N@P}Q?b1^0 zCeZqm%`jcqYR2!`X4wBn+m`^gRh;?1nI~JeB}+wvt_w&nYdkN8Mp=RP1# z;v^=C9dZES4uwKfu2P^BD7|Po+ftTNN=i#x+U>!1=`QWkYfDSpExpSYN?9WRf8V?( z$xZ_89)E)To<{G@eDlpW-+b46(~@PspX%8a7E)M4%#oGCrbr5_3&n6+286K98#|iQ zK_P^tTXlM4QHXVIxwp(w(^uWTO~_zp;V+vOALBCmV1g8{^+A(Q(1)d>2-L)^D6-Ab zG?)`bb`B=W#y8%5;*!=agDY-)&+U^Ky3=_Hc!#w30LF401CWv?vn^?Bu)r231{6M` zOeMGYD%#@fLy005Uov(tUwpAi6icoqYMi#@ww$qt%fx@{>I>tb+Jv`8DX**3q`gXC z-+4}D!XIj{b_F}98pN8r_VAy4Rb>H7*KkEm+S}Bbc>+srS*zQ3;r>9tQQKFO+&oxC zOYW}wE*hXd!v{+I5&ZHOKmtQ7CfPN5&$7m$#~QN#jx}z})m3*_1~exNr=R2({z^G&8CqZ{Z(b-o9;ewG3apchFjiuHaf%@X>JYkx&G|4UcqLy246@KUot?jCEE6 zc7pXq_8&YB3tcBW7cvAqg1|MkxxD-hf#Y$+q|X4B82c*%L+}jUofP||w=S#J>RLC_W=RX=mIKj_z+>}BSM!m1?o^Q+ z_L>83oK-Dt1?-RW2cZjA!&axko?mDwkp{!Up@UO_oaYg>C*1|7xdlu*Gg}71d*nb> zeWj-|?5eZ1DpR%NTfB+J+MsT|fJPnm?^ks}c!<8<3w-Os)QQ6T@Q`Zvt@$$Ye zW)}O|2KKsu(J7q-1{mYY05H$$Ql>*8_ zfiG*kTW%Kao9wK)((0}hmBkca$dzbicjW6*E2n-Cyw3yP7>BTce(0zlD5rLQkl#au zokXI1@zmm8=>h2k*YkqKn@>F_<{8S^oOA-w%xW2alUCDjfVUD6@_%NqIKzrfr)H2R znsSo%z|!ixX^-iy@VnM@-?{qc*qt8`&%5#bFLKWlOzQK|v&y~MIsW2XKF2?`{2TRz9`Dx>-^ z4rrI^0~{6s*MyXje!yWseWVPQ#_*w;(n(c4SybS_S^S^guikfrT7)xiCNIMBJFwdcG&1;u8=qrLY|ZMgfE>xY9UGC#W`I65*wLM&VS0qWwY%PQ)ke$Y5O z<1OVRPQx-F+-R=u^LC?_k`+dKSutvTH1sYOP;2ojqpPQ@Hhkcg>#06S#e3Nv{tN_p z;wZ2b;f^>8?2zb};3(K07>1pZKm56p^KP9hy+hvGamv#HSiX;Udvfn)Y2qYkHv6t# zSfx{PymaqvbA~4$zN3Txvg6Hr@w*T2?#H`LqFvv7nd)&Dz~ zo}92Sb9N_vyqB4rUXv?PUF)fAR!kk0wTZR0EzQL`Q%Rit z5a4YV@aFsK2E0xIFZwD3N63zpFHj4+uZC4YU5&*cljV(|M?#RLka?XNXw9M@g=Jp5 z$rDCTii=CokGjAe9dQ9!OR=s<@wf$Oj*djaH!{*|E3uW8FtsQ3Q%&ecsS5Lxi`&`l z{A(D;oGh{|IuYC3aCitCVz;c!?EjFw`^`JWdsqt#r4RGp<2|BRn(2bZEGf&@6>rGD zdJ`(0w0?2BlzIEQoj5n=@$JJiTFtb^X6w~!HS0vpR@5wu+E=V#2#v^eo%$jBRt7Q# zlg?-FV2|-{K#sFzSLOV9c)|q-1_u_0|DF2yCle!E+`E14Mf;2Q#hTjKP4RP@nu7DX z^G&Vc-G1n^(w4<8n#c8<^dJ8?{+xojgJ3slZQ1j%Yu0JBg__c+2^(;; z)tMRU)E|qz$8xhP{$9&X-i>io?2f&+{ATy+dkZ%f-E&Wg+Cs@a_Y`d`yq9FIqQxiK zzw%FkhpiBliF1@lDaA~J{TlJmG?T2vUPz-6_EIdOdA|sDhajU3(JJlV6IN}CcEr9A zE!pgQlw_OB>krhY-JVdQ{+w9ay&|GiDfO-ON@u-=Yz1}GN}H`E;EChWq>^qldg}Yw zv^%N#hNnE{xRxM2a{RqmVLKeR|>ZZX%;yO7v9q%5Gg&WF}rV5**HsY+Wa>txXps%EA-Y6kt(@(exczz8B~ z1m$7G{s$O|=d}Bpyj|Gab09k%4}wW=&um z4PdkIJP4Z18ef)Efg`T25ruU0RXE@2S3_NOUVqD2ZK$)ZBG58c6>3Yk%7gVjx(=3A zt@K4aPEWnfZ?aqMPE(nkb-U|&V%4j=qaJbXidOoPy%Aqy#7@`t$&P;vcpc%Q@xH!Y zwlX8>Ju9&a{{z1ltG+jX@^JpdER`d2LEhwqq^+IA8HpRxm5wDZ!G{8rFLy{#N4vqL(_$|X`c0qD$X{K~j!!=#&9L2gw?}n~nS46iE zkLZeBZ2xQh{jagsz2oD1GhaV;^ow6SO8O?w#$em|1CYI|F$>pb$0td{k)&AglL&HA zg@}_FLIy)B@$)1gq)l_AOAvG^Ku0mabl^`rt{wQa;l7g~Ucw?{_1a>-ltDTII8&VT zR_L5(^y&6Uiz8_Y*_^&IQ@pIAJXquL*IKJh6=tW)YK+>v)?od0XY22FuP<(~+byN$ zB1du5=RgFLyS&C^aT-g@3vGso&mQ-e8&5|F>D}kZ5q=YLvaOdkXYrBeUMDF)i-;S{ z3a(5LE8UIY&MWSsxLbug)fGA-9Cei_i3$rD8QWWdG1^wRoQR<{#UaAylNvcGc~&8m zPBJ>?S)AZzg{LK}o9{omF}3p2k8E6dWOX9iy{0zYgmY;-6?b*esiq3Nf`j7AFO$=>oR0b;iQ(e}WEo5+;JvD)HeCQN-dGiZVcbpT5I8Il7(+=|ATSJ~ii5b~ zVrS-Cpio^!=yU1?jD3=DhBv8i%|zLhvlWHqnw#76e^&3xo&Z`JTj>x%P6qOpiC zGTd7^*%fO@e6hBnqIt5h8p-|BJFcE+UDx3+D{FIDUibKp*~`3@jgDv(xU*wc{TDw0 zj0B`(SsKhQm>SR2HVeTRbP~K)6}3)6^P*!=X_C_Z1UjXLuEbg>=88^%CKDIs@h3ry z&PJpw1@BWi_yU*`lcYf9R&x~F@`Uw8R<(X%mVWn3K-EloT%5Ify(A`%`qwKgS`zSlkw#j;w zjpfRQQFf_pMcMe0vZIJ$qq2!y*%+RCmw0zFS2m0`ZWd*$a%I~@yY%krT-kMa_g?Yb znq1j5o;xnun97xnq3kMAHk~Uwh^W*~c@yeen=7klwbFlyvURz#A=vdk1<${pug{gm zSdsJ@QMMslw)pGCF;*%48qcj<{P7~(SJ1oDxc*7{G0MiWWjH%#11pnWM%nn1vN2{6 zWfQrwpWr#4cy}^a_CvH05oN1#Wq%UwQhlqlWl{y+Z57Y0$(Akt2cENwHl}iAKS7y8 zluc*Lkn3KSo@4c>Z*8`0@hd31NtCV2mHl9Gl{Bz;63?yAl|7mHcWG3VZBWZF7buU< z7<;eqYvyc;`MGcsc0?x3b$J1a40p>}!*cid&Ax_^)stLN<4cBd9g4c5UXwQ<{u-TC zZQ+J)ufSh4wHb4h>>MS+c0;p`R2D0$yin z_c%+yh+0xwl)0FAB3sPhPm0|F4f3o#LHHFy7HH~{s7LGmS;NB$F%x-F+jNV^>no2~ zYW-dDw*HN4t}m^R_p~;;+!ZcM(idt^weRg2)Y=6Oo6v3oGML6ZmSPaWMre%~GSWh# zTUiKbg?|#ppHh+Lgs_@dc4B9DHmVExyHi897E`=JNhDeffht!?h07MQhm?+Rs<%23 zP@GlGMtH_tzJSjYP8qFkqs?7vZn0aMYGP@#sm|lC3sA0QST&)F6RyjkO{iRs@-Ls1 zaE2iM5uoHmECkmgE=CRkFeWmi5wnU@5=#9?tp8B-?78*r#y0ECb4IVOcc%J{-=}Bp z=svVoj0tcvj5b1N#|@ck9 zd5aOGIiM=4B&|gNB^^8$5h-6)cvS@|KQA=(bZN|0HYy)Rp!fNbAzQd@Wo2(wttsHB z?lqLvc^X??l}&b6Wrf=kw?vH2%C=DNOny1_;@+hcROYB*Aj+u8U;%2-RA570}!NZK8z+jq4Mm3e{|ZgDsw z4c=6Dt$&D>{P4j#_)z?<&%nV@`LKzpS}7+ES)7SNTbD`a>w} z#ME;Jz8tEk@R|H|ZUub+4Wkcj=!0?T*yT6jpF|jK)=UU&!DLJnMw=vTj|yXYGeKRc(VHy!cDh@#vX# zz_lg}kt(zBinlvOO>4!wTcaM-)x3G#I@ED$@pWmpvkC!1P0o(>c?=>eQvSTAQ=PYqCZw z%H8abb!$4qPDeCzvesSE#l005+seTX{2_HtHvsly@)YFsNFG*g6NIpQ(uzv)6433n zm7Ed`7HcWE?f8v03PLx=35EHTr6w4%parHwVuQJM*1Xj@67jEU0v<_^7-PTmTXr1yQxM;ri*C#Btye`hQcTqqkL)H-VjkF} zAZCIZ2LO=)b6UaNrmb-}dWX`l(3C)83g8dIocNlhfE3p6C9|3hboZOq_51pLL0i%j ztTmW)u9UB)(bv!u#%_Au<+d8D6VzafR9M{nYnjJ~R@$A-CPz&yWp#A6)J%3@^8DED zz*I-{b436fBM8S0=QL=#n;p4wt3 zBTVA~i`Q?*=Z3zCUVh4IvsKV1b2VF$IZ1usi{Fx76?K_F-Q<}hNlZ0i5mQx9G)dtX}_}Fpgj+u5~!lU zss=cC+A=sB`T(apt!R`j^RPzR1XxX_(QbV9%LcPvC2i2Qw)SJR0%u>9NE6PlN-mY5 zE(;}CuF*f%G6Z);C_NNt>i60sUb9#I%Z?58)K9ed)xX`C*Zy!!{Y!JqA-w^)>f6iL zrMz$AB&|Q1%t4l0(#Z2G6ec2&U`;vI!6Y3|@Tz62_vMAQ$*tW?=W5iJB}de7saU;T zSiSuaH9kJHn>`z~pMCiTjBS9C`06rQL)&F0m^x{EMS`0W7otNx)a_-oc9JutOp`Tm z48s{5G<}*O`S{jJyJzVdYS5W)TDFRQEz`7nGP{V9g!IbNWfY(goz((fOMVqNWB%kt zC2juX2~S-}pM*hEFH({%Av;ZF1y_L7Cfn+LNrmD7+=q>#QwLI9(OqfUnZ3 z)VM=wd(<3t*xf;g5+7#A0`5e)%UND(w^$MZcpl82@_LiqX)!wumP9bwN_=Jj@Ofk( zY`ky1cIVM@62qv*Mv$v0yLOY~h=LWZuz7IR=0SQ{Ue;)CnhMkz8a=(1HHN7GV?jfy zzSI=4G*q%b-_|Z~*wA%Hp`jpJz*`IS$uNR@ptA$6%Mgp;7Apm<4-~_q4u~pXYv*}@ z*r9Wgtwn3Ihq229BWMXEqFCZ4ccLtwUo3o=i)wgCQG|DNb zo_uNn&9fG7hF5L3eN4~f$i#q=%aP&Xo3|Fr;eLYV{&Ua0pFWwBw{PBZ8{tle;)?*2 zC4cHFCr=t8EptmnUU*Pmp6;_`~n-Xi4@xaCdiWYC!ONXjrd`adZjXX2~69geCG+4$UUH$?P(@ z^rc0faA{Hdm_yI2r^X&P`ND};3yRXRF6gwdu?J>m9?0D5s#dV0S8}7T<6`V`woFZ* zK5c$c{vg_j3H*Zpq)9x|yNjMWZhWcesoRX~c=eCFYJSuOpk-ACmv6(JAG0h-i8J$#zBQS@{w;a@FAMdTW`6T_ zLb=+9gYwP)hkdY8KKZ}hhp!*2f9IorqX%+yU)z?~-=+gxf*!}#f^U)@l+)F;++bp4 zq234wlWHyY3e;y4f&t-T86@j_OFFeQ`4ce#8$N^_fz zN3gD!H+#bMU+e6_vKzLrZ-$crGe@{wqsh>0vNp7oxQtIktnTWIcsNjAZY={m@(Dx`&8&8h%yD&yY$i=#wL7e#474u$QA2alWKXfBKyR=`hf;xto?$uw&>uch(Gam0wVNGnBb*nQicBV534-Ml6{Z4< z-|dSVb%jooHDHiUk$)(1m)Wguo25)he;CrVAjHiP za8fKW$^Tj!e1xm$;~27dZV#8Ry0q30ngbQ}9Sxo~Uq|I={R*?+)7ak9)ZI}z@2m;g zD`U>;u)S(;Ye%rUZo=Qu*kiT?dRn`b>e_K%Z^J+sxrk%Uf!ccYFTgP@-ok#${|L=2 zm$yrEBzG=igY>8JS`#Hbe{0<(CvcHt|DGP(61-7WAX}Uv6MzB?Ve9RQE zOt!6y>nOI8g7%{PGN>R|X5|}g*~{<2eVfhWs(eE(vZWybl-OE^z=8CM;wTt3IDmox z$mvgs%qR|tf&pldX-K`0i_{6HAqV9xnrO{I*f&wzJ_Aq3k>|vC?I~%A; zeL*lW{t9CgBFUL+%Rb(1Y?2EbjH&XD(e?G|LFc3?>~CG?{DtvlS;xL;{EXbu4%ZLvpbO(Ngz`4!rv5?Z`sSnvIY(vx4L!0VtJ+^4G zz1Qrsb$jb=A!RsWW65Nn3FN5McVs@WyJXMCp4riw!kxPcW3En%tswJ^Y&Q?veFeK{ zOb~4WMOf+ztTRi>SfAh1Mso7b}Zfk`2Ps%Fd>-moNOOLH1|VGvI%H} z2L7fAlqq^5rKb8T#tkJCAiGWWt~z&DquoK$3CkFvm~2yrDHcayOn$5!6xK{kFP0xK zwp)Hrx%2k&A6u^q!d2=IIPKv?0^#x#yW0a*0k1Vw6?cYBV+Qk0-bP2NdShLHr!#eB zh3qHAnUft=>_f)(>AB4AS-JT9YyA6GZoGBAzi`(MS-<}>bG4_zUY<$IK3i`r!gmlp z@_aCv&vK}ZXP(!ejSs3OT5=;lAw@8pq?H75EycA|%T+?=1(i$2QA%903RjwEYK9Lr zj|#>e%K?TzhO>y5MCKOyK$KyJ_?u;z=^?|MabpQ%e9G9zmhsIG8E=xWFkVy?@)76s ztZQj1L>F8{(4@sYFV&0# z`GTdJKZWgIQ$s|&6?lo@L8`2whD=cAWyf;yg^7(zP+*MNq+rDY!g-Oy}iu^nKcQg zZ>7U^ZQLGhR-%ZP{L*A#E%jNyvVP52ntOszrN@PU2mL z8fZ+b(PG4W_+=upJsgYFA2wW9+!$X|k?6DC zbgxck?=!IZgswHAyV4X$hU(4U()v(iuMUV9*p11Gh zMP+R%(GD6B#8Lv?#42z@_#zFC=CPVFo74f?hDq}B@&#TSa1gYh2$}ffqxO|+YA5%0 z*hZ~YY3rmZ;;Wr#Ra#pdF+*Ug{L^XQXwo*n+kE-#`u7|dES{Y$N`)bUq&8kKIJwDU zeBZ{*%bsdlSHQ=^;qB3`8dtzJHeI*+ zypHl7Yh{yd%-|`XaaY??qtmumI;YCmi$&>m3z?bSrpxwhe&2!Kg00&PE#U@-zbI2t z;I;J*6p`%S2OtYTkBW427CLQHN}i`^x^X@kr$(#!f-{c2&>Xj7Sj56827?F;+w`!I zQ3x3&B!*)O-{=nWo613o4*cc>%f(_wOh&9}*ouZdmn01fVzh?ig`setrKx|L=~=_j z6$QPio^p1$^cshg4;s5l*R<|Aw7#gU=(p>Uf2bht-_TyxsI>R2b!1Ncj$s}$sc!K< zAsdpspUX(Bbt2zy12G~4F(L}Q=P>V=;;T&vD`mMm+8L>qIdXT-+?^+P=hf~o!rgKY zbC`JCs_)_W9~-jFJZ)yrRSq{PY#SRq^1kWT&875jOL$+!eWmvsKVEv@M!6z6m~gDW zXf()}Gtv|3$LG1^dn8>ZTBf;owai>p6b)c3}P|GN|{Yt!1 zhoMn7u&hTZ9i*}y*9u(sf}T#_1F+nu6@A+nR&2*&!MA_n@wW+cJr#JHAKhX+*yV5Y z$lHg>KKr&ow3$a}q~G=tSg#L4Kl~TaPMnWP4sDFFD;i@wiD)|fhiCTUnO|tnlxxqB zB^fbR>{0ER1fKbscxEC;EBnPWlk6kfGgQy7&sxs}dt7@aiDzCHWRL~{$Go(cAh z_RRjX)YC7XnaaU~JWj}BP5qj{-W!#6cWTcF+C{$zX7!m>Ihap>W*eUQxu|E2LpULXWRy%~89V+2MVAA+w%6c=C!X zP9A$`;-O7LNnQOA9w!{5jvwUe&}(%N4)vmrbaM}Du4l~!_9VT|9z3>Xs9u*G+Vl|N zo&yF+gP{~c<{4``tr;Xd=Rqj|u2gWIxaz7WG8@_bciy(?)=fQeUA+6xlao{@Bw`Jw zx2-b|8Y6;u^7!#5*@Nik{daEeMr}Q)HS-;+F{RE086q7*2i zdWM%1s~&Bt1p8m?{u>{fy#M~mhi;_Su!o2_k!$N7j7uWhk|wLEx-X2GB%12rY!l8g zfoPbPt*Vo4^1bVB-I%VGYtyLb+RU-L-}%nF(FYo3LaJ+qW`^Ky$oh5|(dfw? z@A&TC;`5%{y1HOp&8`hyh2>_>R~6_n$79m9{D+*Zcn#RmJD%;M7VRc1|BaYJ#G%Mm zhE0WnS2dPF{C_U%wyD84IzPn)MToNCK(fFbjgom184Z>!?P`FD8r&U4C!p<$@b#bw zU&lS{OuVvdORdhR#OuA`wkoHqx-;T$tO}OuV$ z{;)U%Z|-j((e-5eofk{B!Pbl`LQX}j8RS$GJhO$EVib^~-ob(a%|<(1Ef=VZn6I$) zryV+7SN+QV^R{m+(E0j;?s&1GV&AnmLHz}b%g{5%R%h%(O0C5)atr?$@fFYFt6azL zhHarK?@@D;{Dw0*aspkRz*OOlbXAg|CCLrQV1>aTsJW_%o>W_Ze#3;rncW|O_;9hR zm~sl$HZ+zvXS=AhSke4P9;qGdA=v@i zBM+BgS%SQml|Bv{2uTvsW}Klo($P$_7ph^%M6uqv%!deB^9-O*#BfNv>D@7 zCbh^{+kcO&o8)|Ay!E1sFK%z#&=b+G;(T%pUyrq?HuQvv2evMLoZl^DySCs36um$u zU_c;a*9)1QAe?@)bF%1z(E^>DHI8R4-poE8NcUtuH#Edwc=Hg(Z1ENRDS-XI0PB5o zmXfq+iL;HFy5X2&CR8Pjwnl+l>kTX@lZny9Or@;z_^9zuH#3h{*2_9)Z7-iZ^=L0U zkoi3;Pwi-F*#SKM742Rxa>Q@VwyM$Z*;>^ITJwLa$^ig?`~jk-#oi!DN7WF)=J6Z+ z#X=qx_kF@pHsJC$TzZfCOx*LX4Qedf%AfpB4AfrypFxfFU5$Q z9*+V2@gyw`f*;W`ls!ny*=&`ufCimb*%`ElUic^WNaj22i7zlVc2PeYV72|5b(vpg zUK0MOt&7+3)u>;emoT*T6!oiGGzh>FMC$mUWh?vh{>)1k@jst3^4m|HM{`sMUGRDS z9OhL`-g=Vv*=vZ-&ru4hMFHo8IJ0A@P2dw84}2P0zL^Ry*>_GiSXu#(8NMN z3`HW|TE+$^5m)&$B^|TMr4=Sms=m=!)zTAe>A3veI=!x}!V*Y1eBm{v;jziEJ&AZv5PgqS5Iu; z#PB1#cjfWz>GbyFD@TuSZ$0&8U4dM6uy62!L{sA}nQyZv3QH36-F*uQxxm=G<>H~C zi?=k>wMh3wVR1oyb62W!gl#T-!dOz%*j!s+D159CAc0t{i+|wVT(8Aufs140X^t1L zW_UG-YM3|kIx9*&#O}(>K4f9V1+1j~z76-`$%@5a@Fre{cSBjMXt6<98_{`m91)9J zfRodrkAq+61}R@`=mz z)1S;aD3=-*KO^tqe}KpkNA3&a^Tgd%F@m=EQAo>j3ZbY|)oegApSldCm&gwEJ9~EB z?F)T<3%9S!UI&hCZf@RuY+&FbB8H0w8aDLDV*MK$wCh;={`a4=?T!N-9S82%cFz0v zw~y3sx_s5D%Qq&I8|k{Kep{q}OS)xCe>B>^rKNRCUxfO~r7TY9oDYJYs78gJe6|#% zN-QEBwCJNjOR#&4f2Z%%Hh%r7Bc1$*eW&Wj()EOoH?68CiZ@I zosM1C$>q8?|Alsl=ASLnRwK1dv?QL72ATTGsRO(`^B3*K2~LKb?!~WTY<`4xNOz<6 zNOuDvXy*ce4nS7jqODfhmbplmxk&A2_C3mwede1K(Wlly%0>2$a-vcEJK=!pO&4ob zkMs6ZU(42ioE0;~^`Kvm00%E>IG|REZtz-|HOuP-DEvkK=D)~wgdf5~_IVW#XiIpg zvhNfGS@yN}p87p2&b~Zx>gxm-Yz|)sJ!f%2B`Pj}6#+A|pkanbM3X;y^S5Fg@G9EQ zzpLWo^tTBgYCU;ni&((&y7k4`>c>xg4QIb++c=*2OXe@4ogw5FItiNx(N}Jj%P$#f zeib4!Vz9YYE=O=f{XErr>Oa|EGQ}nQ{I*kf^d~t2%D9Aj2FCqx)xl4HDBGI zq%snDtJ0^mo;P`Ie^uws>`DL?>GySdx2-;B7X za!GPhYYsFfQ^H35%F;w=Rg+bhIPb#aeXV`RFF9CmTYK|x)fHE5`qYPSXzgse=7XQx zE5_Bc_)GRP=yH`}Mv@7IW~3_j(#oT*p;;f4CFPgJ=}{tsG=+s(z(KCCMtl}mqAh3* z7Iw--CY-=o<2AZX(V~K`7Mx-3DY5!(?%I&8NXIQDCUd#TRhMk?$41;{SEZ+6+LF1X zW}p@kEogmk@io{L?!g%Ty>cIE5USj#>bFj8da=s1xm$$8I)D0s4{W*To_bwtOG~S+ zt)-=etz~O74`&|Ubmb)%A3uKaB?1qWV=}}a!R%J~wVEvr3cs1{nVPE{$Ir0~9>Jr~ zf$7jd{@_*?Oc)mgZ~r+LTwab?$eyLQoIoM z9H(0-DsOu+&K&cWq-s}irG|%Ghz{g+ktA)Eme%s1^dtT=?S0Zr#QTL5FQ$fBJ5rxX z)eZF*ha*le5A*tPvPZ2%!1EK{#vYMlfcO=OAP0=BfDf?0$O_8-oGp_cz{X{i~3_ zv5CIVqRkCxvylI}oxb+~t}?(?$X{tkKNla#yeY*NKd;qGR6%x0P$EJoV*ZV_gQ%9? zyNCC1AF!|Iujk+-hI((;Ql#`eTc?hj45GWmFr~W zD?kWhxH$gKqZ=A`>3CD^HP9QJel>bk>QF&VY2j*lbR$NGVc?fP;PD=p>ghKGSNy!RS^p4sFIZ49$UZuQX;6Du?E=aG;V=LjGl zUjt}+NoHtGhZVXQszUvQ!5$`5Ay_G}XdJ3aD<$$UE3*2L<-ltz?AQD2`*;VkPXr9* zL3bHNwi*Jh)oz02RsIyKlP5qWH21Ui2C6pJ1C>P6uPzzsmIq_8SjyC6*~Fh3?KA`v ziJ+l#l=>sJ^M2`R%%i-WfYu&S2XQn?m3{ZCNV!nu_xj`XE(g61B0uqG@vc*NKE(bCw5$>vMV63TS0yvSTLmPkB@P3d zqay0D`=Sri6(2t6ae3limp7WdQaiup&%pZ7^1o;YX(l2bn=kUPcID4_oXD8$bX8@q zgvU1CF1;id!-|$2i(I~CmTsYFTbOu8nM09_*Vxwf7Z-Tr4ZOXfpuD_NH_F=@Tp`MU z&ZG{=0l$zJu<}wpB!8)MA9aF^x-#EQu9v}X>+avcn@S*;J2LzTl?izlX+2O% zGoMUz@LEv4rziNBGz3C0#km!y!_&e8af8oJ^-=9=ovYa+FgNT0JrG6Y`7+hi+yuFt zNPG>8Hx{lj+N=B7BMmYRjVky0-0qq%P8WeJvv}8H7`Z?xPe^8Q=FOjqvZ2KW>9WOp zIb@l|U2p!5;9oqt=#;t^zX5#Nm$a3aCiSW`iAgV#Q@@*aHhC3)q}E;HZy9~LL3Z2B zR$j}ERX*X3-~z**@>vHq^(6e=vUz3y2VO(?cTC}I@^9p{o3XjBET>X8~2CI!?8NM8Rv^z z8^!tJaes-Y%VQ}oNgIJ@jPclFOuBXPS&Z?Ui#y-^jVPO5oRsDlZ$sG|i?eV36>!Ll zFJpbGgp5e*lNYugvXrQFdJ-OsY*q;pjQ*ar3I;H}4NTN!bA>)(bB3Jwyl7-bBOi1l zYmL+DiDa)2r4b?^L(X`HCFS@1AGRN|xfG}}!H4j1;{I0#W-;<-TsCLaZF5Gl*SppB zssH8jIf5d+VujAS_Ej%w_B?n831eV=OWpcQSLxd;cc=eyTF?2{Lr0Ro&UQF^1=_WK zhvgq?{ic|REZ+Zq$)FzQ!P9%YqxOQ{Gdp`x5c@?f9P}!e1BVH#fs?G+p?X{UUN7| z%ik6_P+`g9;3Q~~0lxo^oJ825h3RyR+_o~cN_SoYN$ImgpS_;gt_%$++XXBt9i02W z9*@(hf6wHKjx&k>iVLGxspCQPUm^eKf8Flsy`JB`dicy9AHF<(g4*SazvHd!ddT;* z>Z-EElGR#hQnV|~6g+?Hnwkx|8{>1WytQuAxs@ZV@^Ay*|1P=7P}np--q_i@?~%HKG8$A z{p&V2tkv2tn5x;V_5TVviuawlCrlI1=TzbvoQVRn$x;sALuD9}o{?})I6IF0xO%LoWRs?_?d5Ie+j1^#i)H(9i4OT< zbl#YCxD^{vv>p{#>P#k!g{S1oP!)2vim|Pgo6(LB`!&h!pA8Ss>ewgYGgqzP>RhMD zXFB=SD&{-pJaXD*drda{)74*7aDLk~ru?Yg?{btn%UVpyC~obgZc|HX5*V1?RN23( zw5+tUFxjMCRJtP^bjq-qXt3oW%0v0TgUwg9f7e*kD&4q)0P-8#45@^;^_f}?Dd23= zW~F!9Y%y2slg-*ig-z(P@(zrSJHP7x9oj5WnyS(Eu_9a0>5Td9g`K3)mem~U)U;YF z&etjPMyx`sy|(H?Sf7X{RNeNUF$XPT9-gM%Y8${zurH>aq~Uh6cvV%})MnY#*myyY zP;+r&aRh4a;lxqFZjQn>XG?9uTh>4%R{lQ7nTPxP7aJypuVq>Sv_3m zi#tZzi*&9~;%t4ruv%v}V@CJ!`YNZG(dwLjiq*?sLBD-sPG`qYHPlm52h5~pc8cZj zTs+cU&{bJg*=lMp-@Hb)xMkTJwGX8W!AdHZqGfj#&GIri1%_hxS)olV{t>p96k;DN zz)tRDK}|{(C&v{dvW$+lC(*4O*APCmnSsK>Xrm8pq4l9Gs#%(Pko{a0W98Fly-V~5BLQhqDgFS#r<}!7bHpK-4FqIc|nwoisHBf0UaYm!g5_@I9dPANS zAj%`D(dl3Lm*6RX3b>1$0l&ynp$BX_d`bYT3D*EVv|)+F5{h#W>}Hpbbjh7OTvMGiw3*gg909kzw9Kj(3_=mSqSesIztmk{;)+IHCH39cgFQIx zOV|XH?65;$%}4MvC>K(y#0L7HF3$xUAtDF)7!Pn@-E}M z9!(XndxwVosY;(-XX;D0Pc^&QH66)S8S{#f+Vr|s(p4k{v-#cf1dn0sqXcXHscpER zydA6Peo;` zZcIfLHWiM1Ua5$5P1Pprfd{Da$XD}I9%Gb$uaLhvrs5|A{J_@$yd?yFRF4BvQk+YH`MB#kt9$1Hf*fu znKFAqR+HWDx0|dX4~2+;wr8}rbn5zJdv~pDT%)rLcffCgU8%Lj z?WJpI-QE-&TH97rVpkM7~yAeJ^V^vMmZT{sC>OB zr|0*J=OL1b@^@yR2j1xUm{z`8eIA{0%RfXp`O)?ATIsif4ucd!B%gzFMU+oV-&#VS z^t_-?c`eZ=;K8`CUy0|%xX9DOOG7)cB;<>D6h6qT6t14mg+n!v^iVnRIm6s#{Lzk6 z?*i7g!oK^d$$uQ^-_Ar zi8Xk-g+F@gT^;xVHk98jev>70&u8s2FhSs?uas;B6jLW!I{1aCoSv69G6&m>bF)r| z8(vJny>b1MhPjn^YJ2F$Eew<$>eH|Iy z^Up7ZpRZqoH|}7c%-o>Ck2A}pmvhgb4u9Nm-ssf&J3825Q9Wp-665g`oVRU3?uhz) zejjb8ZQdT3XCWssqhJFTe1cs1<${M&s!|W`$af7JA?+*9T7R|l+akU$zqb;8hVM*n zsT<$X6zi^b)sF3`3w765#1o@Rh>83MIMt>~mG5egR zkjLK$TrKU37m`vgkIUQig`|G92Tu|w(Kd=wuhe9=idJ?;ufWjsR^dZNy0)~4nsqGi zP7Mykd`DS%^hz9HbG5}9J*^|WFYHI&qJ3>WLm4aBnj^W;PCK-+{h+hxOED%5`7zNV z9`j?OZNd{=ya;2WT2*PITu6)wr2tZ6@({wTg%benGGv0c9wDa7;ePCG&a8hkkNeE) zfAjo$b!@0lR`8*Cer(RLJLl<)HfgEnP0_(E*_b>U8(NQ_L?6|%rO^^9$(?O*et246 z5}tbd_2u@&HJ(QM4OU0OczPdrU&x<%seZnL1}LI1U-EFL7$7EM5&o{Y1@M32cNBKD zCEkSmu7|8)oji}E+6eFCzW8jKJdlTBHlsC!e2`=#%la|$vpV~l@I>w>lNY>^dxen; zycTXdNa^1OCl3NwdMU!--=K1=jlE0C<5Z6SD%mduf28|^_z$H1W zs*-Nh?sbsDKC9gqz+U`4?Y>ZQG1BhoKfSb_RciM|l80sMDVB`b^`$;zKn}A{YWJn= zX7-QTJ+h?A8?^f}$t<6*-CJ;frFxGFjPgy|J&v-K@6zrO2`zt2yNAbKenh+1NyW0T z_34TM-HY-wz%Ro+_LJ!D)$X}u)IG1=%hHtYMeSZEbr&>h_XX0Cf`i(9p_DA3*bJ&i zFFjpIkqC5OBsCRg>nWC8`Xa5|AT{b0?Y>l2^i$eBa%Gep((aKRz2xKCy#@CgoanEs zR<6z)hKE`>t_!go?Dn#)cRIWD~)x@WU^!L z!jYW|^A}KYU299nfth`?3rBX>?VsDxh~!2ssitJhTQ#dSICof?QH~s%*)@A$=FmQ6 zVfWi%X>MLQvUgTlH$O)>n?3^6;r01l^$UlT1^jYI*|~6Z{>Y)Z*~4{jjqKGkNB1j( zb;<}HJuBLe96LC>b}t|k=$>BKedNNKL$eABfYI6c!)W{H{4TUcz)X*hE2|F9&Z`fP zs}IyDd4x68DWWp%U8-j0f|3^@4E3#1W{$Kg8aRh{9-2FNjdHVutr70@{+Yvjft!nG4=qfC&cw{z z-?#q=ng#hNGx^&+)3b->cH`MmNCXSu$j78Z(j2mU?3Ip46z!gbtdNA(m%VRXa^Hl~ zK4}-;+ab;3ej0Bd#(T5S5f9`0s5B29dI2>a6n|&LZ@chIrKtZ1%G)6y)=L+Pe|6GK zuC_Yy<^lXxC0e`?P#wWriZq4#594!4x&VKvwjtC$FW{X-4F^!FC@w&=ARWb1JEd90 zjh&NAzT=%~JUK6*T#aWILi=h1FGT011#RNtX{!p%{< zNwCe~-NWel|AewvqqU>JpaL4H!`~6DR+>$JAGIIB96AUH)}lWu&hpev7~PF}E);m9 z-l|WiG&&3TXsc%`#;6yX*U{pZ4R6kKozUFb%gn6RXK(qa96h^Z^SpwPe zcC*mTfW~G}-+uhvfxiT2e)bXt3<0-maHWxH$8|Y&4g(Szg@gE&#(}7OKdv-tdoX&d z@c#H|kmP&vRyf*)T8KAM%{zdfEQP4^hj;<;j6N}UMx|+R3u^=14fu5m|N3xdAx?%9bDFR_h2I8nodgZg8>8Z$<|IK*R6Z$f!WAdriDwAgvw$j3 zjkD54==~v-9>zbK9W;(}m@fx`38K$kqW{EW2)qCN5mrD)YOUFK4-2Z;iQ0GLvlF$_ z_{{_3M{(VQb_hKeF_@&3LMiu%tqKKTZyv;$Jqp%#4h(o*ebS~tzlDa8aoKqvGr^N z+sHPt%{aqsE88ahoSnnYW!u>d+rf6SU2K-^W_zH0J}-Tj?UnYjId&e~$M&-WY@RK! zgY0~Eh#h7}aCYPc>_T=C@+x1U-EN?7i$(b{o5$y^q}?eF*a>=r|>|yo^_DS|B z#I}8!J<9%pJtp|y1?)4@h3s+mS@s0`9D9UuBG{e zkwN48><8?J>__a!?BCf>*o*9^>}TvH_H*_N*aLpS{)7FBz07_sy^H;Z{g(ZX{hs}S z{ZYC?x?H-F{Yg5`USa>q{>)xwud%o9q@+h1Tw?bAh52E*W(=Z2Hwb1h%;#BEj-Ozv4@}?cJoez$RbrI>>Yi) zA0DGYzJd?&VLrk~`AR;9T}xKPw%K9*bHdI+{%)^S!N>UopX95syLJtq;?sOBU&q(; z4SXZt#5eOTd@J9^&*A6t?RbZyz z{1vQ#S4m%%-U++QyZHg>gmgWhm%^O#ogC!n^F#bFKf;gl3;2cnB7Tft%rD`W^2_+; z{0e?0KhCe>@8DPSYxq0)wfs8%E`EZ)8+)y9faU)t>|=TlzlFaSr<2{rZ|CphckuV) zocO!=-TVXm9{xd`M)qO;5<rFaH?-IKNN&0KXsmKOW!@@`teF<`evr{8Ri9{%QUw zPS}2oe}+HKKg*xspW{zrN7(22Q~V43i~MQ+C3q9Q!k^(^`WBe!Bt@nQEPWXX- z#$Q5io?qbPwEy70;x8k&&~Nx}`S1Ae`5*Wn`Ja&6=Rf(M`K#D{^Ev((WEJ`=e}n%Q z_Nfd=H%Ko?Kjo)*hU3UonMvP=)$0e+52YVVKaqYU{W~m2T$W{>Tp$->i+hn=ESJaz z*(jIFCfO{P$ria>w#qiyE<0qW?2_HGNA}7UvQPHQ0a=lQa!3x#5jiTy)12a1hEzB48?Km`h!L0u1{9LkOV34j2EBcb!wNbk^Y1bC*+NxdqwCjL& zU7=q4wfFnA_xrW?`&;yV3wsvkXZINfcFrBzdGx^U{j(R94D4DsGP4s#jU$DFJ7)lt zT1!%^HMs)ChZbgz6s}NzU7>-#LV#YfBKNx1x&~dp23@~aPrnA;fCk-w2Hk)L-9U?e zg$CX566l7PRS!d2W8v@;C>xUo!dU} zFd2G_tiA2BMnsBS5gMWqTJDG#$36ndI(;$L60~MtvC&>IIVy< ztGrr;Ktn5DLn}VoFf3 z0c}xwxW;bbTC;^~wS;T*i3m4ji>%qU=TeO}g`(jfq2-QiE@tx70CqrVU?W1QAXW}Cr02Z&~*zlJ9XoV$-~8knd@|`#(|=l zs9|Q;ZdP2w%+6ZB9Am3kFoi>P$ogVFtg5#a?RFy&DMI&HR{Ez z14aO-*KAj>radV;H*T2O(M-*2t2@zJV;7^%7jE-K+I-PAU#!g+XY(c4e70wavy~TT zD=*GgUL2LD=~z4;@Tp^`(tz$r4PCct?I!9V{YLkh)2-E-P+1)!rYf`?ip)YHp>W8f zr8bb#v6d4aZ_OTVd%AGj(}m;doU-z1iY3gfAA#bWX`Ur4H@k3*6ULgtQ!rk{xD;eS z(Q%yf2+a0qzRYo2y8O%u9OaUaQE|5Lrqg_lNQhY?Ei>0qV6B5aR0nyqI>;;P5I(Ad z(@`CqPSn9(Q3ogFI@rf`QTES zxQxggS(ule1}ah%CX87uO-3V&rO9Yg9nA${spkB2LEikr+7qX%zZ>a5bX+1WKbqOVc$*E3n^~V&n3u!S zX^b`1NzKX1$sPl3R$$I6(r0DnnT3>gi8AD3T}FXfpO%w7QpAbDvPl(h-*AN_t70^Z zFpmOECS#g`Ob*q*358Yr78URt|T*>-;Eny3vlh)U`Msq zYEpR&0{x-6#&GBK`~nPGu~>j}7-OMX^73-V7v^eVlQW0Ya>ny(qA5~*k1$2z4V`pT zWIT8HrsznMBi0?5M`}4E#p{7765km(9bOOkewtQ}7{4PwkCNf?00QF%5sos7aI}#J z8m6cyK`Awy$DbxOTpNIh_W{);zAV7y*BrRofKR-~t0sXbTruu4VKmO|9?#=1d@m5+ z4&Xwu^3x+uyam9ui!6`Lg{}G6f6u*GtxUSdw6`lW-0mK?y>>6ku0HnLl}TZ1eeA#Ip0z%@XI~$M zt@W{=^6_9eT-63;)G`>X5?xhIPE|G9B|q1knjS`)#VtFfIw1HzLbR>XB;>#tA==6q z!*Ym$Bfn|j&C$v)M29H5=eF@OUh0`I;A*cA;o7&0aP76isNEOi7-J%I25^PTIGDnX zj00S*6E5Qdmu1E033tAB2C6$mX=~RN|sjR zFC+a|fT!@6rQh(!w3LiFOw9kmrlIVMnLh=ye*S>1<<@|h;X}NNSv>{waQ)y7dk+Vc#*M$BdRz7-r;WPQ*G6hIuH9c7s@#$UF4+_`d zCmBFW*)SAOh#73dU6;YGr@0OU@sk_PZS*zDb;H~g?JN2E|L{7Dy1v6adInY}6kvXH z8s^64Nb@n{vk=^#jTxYI(gw`8ZNseDKIs7Ff{#e$QU&&_TtT{N(k=WqV18B)cnJS& z%#C~C?}NOul&z424Pyu^%i!T8_Me2^EE&5_DCQRXW7*#kc1>jL=%8HX6fga(fZL^0 zoTh@)3}uLeSCR5bhW!}2F?1&=om1xEZXCyiF?^F@3k7l_2e99dAm*p2oSpIwzz!Vq zA;%aQHX;~Q5cCdGx?v@UAE>qSzi@qoGVCvFnG{Fpq)6gdN{Ckn7qVj9*%%)wfRh4NCYU08=z3Y&3% z8gg%grr#%bM-O$|auWDeSkB{lbPRnNdJ>ebF&xS<5$qpgIg9w$D3=_-F=zR1XO3yi zu#uLM($wSf&olfFr>w_!f990E7<%*F-3)(VSjA~BGCaocJj0_5(;2R|U?-E*pZu2d zmiqAbCcm7^ch520&9Dh<%E)qmf>J+@*~oA$!yA?}h~Gzk`4NuU$#8`RL5W2&^-*a@`Q(E4dLttT-b0BgYJ6|0C>=A?P3D-_fo_ z?+0-4YR)l;bF&>pxjD!9am)mQ4g31*xg^nhOhMfL)kS7MW};su=?ex9_vw4AOE`@9 zxunJYMsR=Vj};jtE$&zW)e-BDMqzc(YViDbSR->Dy@3I%RZLhbG7c*%R$xWMcBLF^ z0D`f~OSM!=w{gO3mZef2gDV?X4z65WV{zr-%EwiJs}R>XT;p*~z*U56BCg4}p29T+ z*Hm27am~Q>7Rp_NYb~yIxZcL~4z71`t;h8qt_`?0;(8xfDXz`9KE$;J*H&B~yrpy*YrBK=%NK18C(^g1M@=?o4`551= z1O{bDQ7NB5ou|083gA^;`$-M2+lVE+L_TY&^i)+S=?boExNe|zWWY;U)&akK6V?M? zv|t}ijT9o!4a+(C7C$r2vXy_WQHu3WrR0e6tK`cy?v^1RJ@+-qne)MdFv_o#uj09` z!M)CyVD%K&PIR`zPpgxjrwY$gv*Zf!F-|L%Lvg(dKZT&halMM3#R*g*TAn5@c9qYU7T@D-%F3ile^>xjDvDk}{_NVhJP z&9cOD*ivcPZMk7NEO}ctKw|&J&vNK*WYSh`TFOy7`d!PxzmW$?EL$iYaOIz6FZ|$2 z{L6vy-~K^H{`!|>Sw*#3Fv7N!;UfPQdNxZrF7#rc6@1k{F115-*y^jsj4-8G%Lb(N zhF___iCUsz?||J{gW48%zC#^1EEWHj_SQOUb1jf`Ty%2NfAt5hDYa~~?6b@QO>W>? zW!c0o)mCMpk%t~GcnYnw4R`+m21GmLDyc@8N}^D;%OOG6lc?qIv@MlciZaSzcNu$G zxrB0p|BW9%bw#Zu;lMVIXULeki7@cK49Z=pHJ2^Y%J&q(m_rhnvKVE7$`p$h09+5R zn-pZF1*m@3a+>Zx_y?Zb^e1;gU;EmrrU$34z5{+nF9&K9Ml9)64)i{UL>sdF-(aaa zPWlHaF5|Y7<&vd#DpF<%BQX>IMF@Ln5o7-|(Joy4`dV&bO=uk6$nitn;1J7Q`0iqi zPzo9`=g>X-AGr3K2n!lAm4OxKzRfP-NxTMo4X`O$X#wvc<|KS{XA7oaeu8`cPD)_1!gA=r<$^Mxl$Bbd zMD#I#>xbw6T4;1@a`Z&DAMu5tg*6J)EI?DU|C&RXN`kZD>tsb4f?yV)=z;+DSElLYFmu zv(+H(*s@8M14xO~|MYj?6V~9W`#HLnXWT95M%196)fJ)t3AD^Xue}BmK9K4Cr6mn9 z<(4y`$U)0`^y^=vHoBHrWlMSoqI#Z>2p2`i*M-sj4mq>B`VERQ$Q#waZ&^AJ=eUwa41(NwE3; z3m(e^%RI|E{D-2j7I=aQmN|gX(BO+hmJ95I6y5u)eu{hVREIflP5RjAMyaUhw~Z4) zTgyanB=xN~EO-~>6cZ3z!lSraaHy{7pZn-3QTCR5X~7xd2;jwoxu9DC8m(qq$O)LYkM_ zkjv(`H+qJ|s5vgC)V3TR@QX1Wyj~HvDW8}ohyfzuMj##X&?OFb& zhxh=P*pFUn@UyiT#v8P=;cvb17p}cdsx7Itbx2p&_N(pv`dPz(>2rXRzky- zTU(I1K(w&9ZRcm|pQhHKTb7+@r6q6$*H*$kh!FK>E%5DOCc+!=UxK%V?cB4>!`(H| zGrNTrz@05fTg`PItkuPs-;Zhlr-|ALw&EB~8`gLt=&?Wj`TXf!318{x*8wwpwx50Z zwb2<*a>JgRDQwFOPt6d*d#!h^cgO{WYUH9ctN|)5=k71VT7sSH3psZTK6m;g1r@%#vFGY$9tBl=; zr7ePa-B)lal}Yd155Q4-W2*h`{jn_nD&BYTv*2t5(qT35(c6&V?^EKgrJU2>M}_LN znlBjo`2oCfe+f1k;+DXaVz`|ug#HDssQ*3;O3>SJ3G^=H9sIEy5>552!nMJ&8KLc5 zew7%}(z}(t1{c^dRfSiBjDfFcXYNyKc`vAu0Rfb(^(dk|dY81|D>dQD_zSojNj@{qLeTJ>D$1oK83yr!Cn3Z(JH;YJ=Mr%U+cr}Q>Olv;^c-2P`uli`r>phzAdXHw< zv-}pmGSeE5mb|*7HD*lwu!HhC_D=qWeUraqucVA!kq+1q>5Scw4YA`f5W5{4W2a+t z>~d_49gc0WyYXSvPUj5Z>o2ch@#7UN0lao4kk_sR@!FNfymqAtuU%=z>r9$s24*$d zRhAUmUkR7iVbD(AAl_S#Q@^y`m)LcQ8tUMxhg!Vwq#jrkQ-Xc>U*R9YWkzBzdmAYV zJI(t^(bx_C6i$?XMSew!<+>i?=WUPu*4w2H{JamNK3PZed15{;1bg`@hRz0c1T}-P z3IlN{6>DJ-PqT?+XVrkG#rz$ulR*>Rpq4_c1LjWmVOs2{Olt{#m4B05v4i@qI7I5 zh=w(R9_>`ku%6;&?0mf_E#sZI8!>}_U3y=-DNE9an7wzCKE+I#2doHqVpefKQ}!s^2`J;W zM8{zjpsVyV?emu|W1s&3=_+>iPlV-w$?{Y=82j(%V4iI*=9yJ$1K1IG4g2V$&;}b} zNdSA|VJl!W_Q5|Qe=P5TtpLyt^VGj#$9XdLntRDZv3tA$Rthv!8p=7?LGCZ-DrL$s zc`WwNM#=fKgH|rU4%+teIP9S9B9F)J*+h8~wGOEK2U@@)W1STl#l?wmm?Fpdao!3n zxqj_9Bfx6(w`e-K~{0+F@0BL>kcfn3` zoP&;8NI!fb^~c{6trdVAL1;g3>}qa|d`(KsB0Xu4cA8vmi zUO(W2mS2sSchSCev3s2kmHr64U|?P_fENzJ|1DP0xJds2U$}uU$^egH#f_(Q0)MgI z%ol48E&_Afx$VvT;w{~Tw(*v3JuMHUTj;z zi}(oskL6DQx5I*h0vie6z_zu60(+~lSAcVslw;UwUWa%GavY4I*31L^%nh!OAMf!1KQUSe;4K$59Syz(8>*Y=oBMg=AHm>MLn$Q zBOVF>WxUY(#7QlYsy=vtIH@gjQak1(BXd$Xb5bO8QZ#cC8H5i+I0%0S@D%!1<|;b> znbr<8#ov>)gg3NAYxv1Bi9d6gj2hZPgN5PWg1N0VbDPZE7RKDBGPjwS+sJ+iSui1< zQ<&#)rYJOv!aS!i&lzB~WDqbTp7UUytH(U&g_-{;c(SSZ`%2UBZy-&FF7jnw3}9Xi zU|kfzy2uY4`6iy0Rx}1+zyCX+4{>Kpta2#@Er~}%m`B@!N58~#d5gQ9)&?1&%Sq$WDjE+!PuUx= zJ~$YwS)lzqS^LSX{k&QG`9S-1LOgM{KXbM}IJ*!0edWH$+YkD%Az3;Bq}7)GSZ^>) zY6d$eY3Om&<#g~gaer&(ei_`4Ri5avrb=yC2HLO;s4N2!ECUg+Q8FKW8}(=Y(50^d zl049=%|(!w#gK~D%>8w_AMzm^9#Rll@qpy~F8?kCkqr+i7*;&=QWKVqrdab}fS)9! zDOR93OO0XE!v)gfs<^`DyPM($KmPE$D_*cK4V{cp3Uo3cbTVL>Qic*px|*_d=~%h~ zVBa8C@@Ehsq3t-v9npN02A(?Bz@PnIP;%Mz`p41gSwRt{wO!BgWO2(F_uQ%G_e zgWp0B(+2;>EI)xPKaE*_TC)7OvHa9w`KinDxIZiAyek>bKEE`U&r=3_&JFz6VvJ5CJ1MaM+-I@E{nfvQ8_v@Ma_00X=%w(Pcfz0cH%u&>da8u^sHq60Ixo2<2J$q|n6R83B>>yYV7gII^`gmiA;XbdMY|N&~D3 z5yV<2*m@$r2m6EBAI$y`_J_dF)WPG(1~)F5#*Y-bHwGQA0b0S~Hm9QVuaUyx7Oo18 z!KzV*O2oRMKY0v1N^3`bp#_@hn&7SGiY^%Nnyv-lEqeP`?&_N19hx)8G_=Pi7}d>3KeZY>@)0ax z(OYv5q^GxKJ>K}OKI~di@EnMnY>QiM^L=Ua{bu!{VYya}Q@lBj-mu+h2a9q`23|T^ zHLI7gmqpYiV+43@x< z!U-v0S?oR=Vq`xIcEnKTUC@KdzKgPne?{5W7$N&qn+~P9J7A@(p1ze@F;Fme%2Y;? z)i7m@lC9+Y6FXp%qR#++wOLFfYiY2Wh7?IiQJdW~vY7_kX~5?d@QSQoN_`Kt0elK< zP4$EC75IAVAZz;hbW6tf8U0?Y8Dz_J)pqIR1IjGiMOUofj*+g-2HyP^@Z=BB%iAp9 zk=;AkSt~|fPzUuoqu;M#1y6Yv_w=~85S$>a?=8L8<{lC}5A5j71mc%Pa2v~u0ox%T zxK)1Lj=okaYky*6jcxqhSBurI-`{#BSZS;I9AwF_2ECpkyLCF=_7A1O_T@BKK3js_HCv>;(DFwxZd8;^eBn}*9DEs5 zlmhJYGC(@IgTFf9Yt|Wr9)~2f!%& zq39M%ZFLcHNUf3#DQ0Vc|Bkwm`07cuJqD|tFG;V+23Y5elM|_S#Jz+t^~y4A&r!?} zq;TfDvT}{$F_HsheI`S*iSLMa(FxE9g7}$69%7F`BPkf~D$OvC3jt@V)J7P$h_9_t zc+d62dsmFKkKeMs;`ghsVM{Jf+RvlV11K@zPrfUA!lvDWzAK|&!J6c6kh zq9b}Ddagj+qx}kI)@ktTOo&lH>13#q*OfOgrV%O9k%D~P72ZdHR)G~f#ON@p#rJBw zc{|{n553W%_rXX))OQ9g??U+yJ}v5i?hCb}q<~hhC1_Q^s4P4B2wQ z$U6vQ?_h+RqSdgLo8K?#yG(5sWAk8(w*dA*$4TR1g}4a2s3xJr)6yC2bvujk*Du)R za{;^FE=rg9-R?5p?XJR_;&tq0xGCL&wNcPdSboLcPhs)39llZ6+i!ghQe3NDP^(o? zt4&Z)b_AX~2Xy(j6sD0V?Q3a?*0Qrvs@W$67cmdfw<+*_t$i^1U$(^g?=Uc7G=v@t zZA4>i@L*m~2VU`#=3si}JE0KbXTBE&1_YQ0$UKS~M`))QPy;BF2s)j#`%P zp?iZ%Z)y1X{-)0Gy>4(0DehW)vySYjl+5t0K-5V^mW{5ev%#T_yH4?QkW{n5rHuhi zG$UG(^(6z;erl*)Ou&kuX#to3rhgv{vhrbamJE24G2@Q(R~y?EruTkq*q!4;zn|rK z>r#vQqjxpwdSRf~ypkDS>(v>$OSqCtba)?DJf^&S;m+i}y&pf{WAXSyhP&<6IyO{g z2Ou?lHY2GUq&IjegS!~(t6l~KoV?tUVY>l)UW4P!x#>o4)svzfy<8It^HR*&<1(|d z(v5Xd8e(0%3Hc|uWw$95(yFD;-3~Dit z$)yt+;=8Cp4eA(SKf+|hVITMnZcvAgGl4OL@W|N6*um;>J7fn9uvX{d4Zv9F%TFd= zJNMzF&kDY7@?$9mP&a#B+)?^rLbK8PpGa)~ZNhM$Yk&34ZnIJ@ZVA9GG7cY1j5{Ic%1CWW6aa=BAgIIGJN%N||7 zMeBadTK010v+1p$erDH`-n;jG(cb&W&goT+>J%KG-{kEtZ{8`G+_K_kcmJtxeYUji z`sdHDu2|R7=PC2eg=6b&JK1-6k2Aw=pK*UHblJM};O`GFIJa-|o4vaxSQ?&8aGdY@ zW5&#B!$wU=OWglt(v*RpdQIL_boq-<$11RvDzBV=Tb+KBn=;T{@1ysAV)6Ctp4uw$yp-~?`WaB!4meG9dj+Qb@G%<21s*mwR2vA+@t^{kU)q|~h?urUd-j0*=%!DX zbk488SoG`E$JKSeW_)n_lyl(6eP$SjML)5+|1zH!&IinQPRPDK=E7r>)pNgPzR)z^ z)idXjwd-T+-3r&5e<|vm(tJVo z=buN9db+XG+%D&j{gm7(aD2CCLwpRwSI3NM;<>V4!>6ZgR%hr}LgHs@67T-awU~W> z?1;?PA0D;P->>gI82_)!kdR>&79Q+n*c5A(;go+Q!x3O4RvB&nN`?nyj?BhUGLYkl zzm($@sjjgJTRv|3RzkOr-7U+j%q|07-mviKyPu0S} zehdlP-{Zuw)c-Vi&NO7h@I`~yywR$!dxJ|0j+)yi_6z*R^HJCNkKBEG{f!Y1Kk`m) z-r4zQpV;rQb@$V0uQdFm`Lq+~zH9R4!H<-Q%g4VwB>l5X4GOk(DGn)f>N#iroR``z z9iPxBDBM z+4`{0bN6iT{d5bbJFcIs?X$?~gh#8qb^C=J&ybTrsR61RF+Yo)f+-`E6Oo$HS(QrlDETqit!G;x^T3&6(z~dy=**$j@(^ zYHm9c_Hfek)DDDPBYh+p*eGdN($+pVDTF`C4OQ@WrQBqv+>-WYu5|D29rT}`NBXBW z=rlZPTb&BE5uwpk@2mPut6lrm>}Ao3$kK%Nr7wj@J*!?!QKKiUoY~Sb$9L25=4B;^ zUeT>9?%jOZ;?BB&V+T$ZebqR_aAdQobj*%xp)FFwPj^cjQ>Wsyk?uDgRz+q_e$Hp_ zFPnbe^vki}y<_X{f3=`&^U&j;L^q0`P%+_y{jK!DE7x7_v3pkQm)xg)Tkr0%q2sdq z40lgV>XKb&!}*xS8y`C2Jl5lGKvC(mN$+G{`+dn~H=j0_rw(y``1K(teZKUXK1K?Q zsk5f_i=ihrT^qbsey{$L(01MYk2d-Evp*)h((kk4jWcEqt9rP!-}0jHHer*tmIXU| zjlD3c;gE06y{RULKG&_&)^DbMv7=*?jMM>(Kgle3XHQ^(B)5-3q3?IE%-n#kY_o}JsU)IzU4b=J|I>s9AIO-~sggumwGz+s1DqOvM ztT%!O<`w4S+_H4ox5^uBd`OLqJ<~QlqRoar&H^537x%9yGAg#!-0WYNc4?ksnsu3$!C_39M)*PAEvnVPa{) zkK(+xG#-~>(3FNz5lE^H!~SX*G&}yi<-6DP+JErU=TSRLo-fL8b$I-lodZ9Qy!r7( z|7GWsbH5+t-?HJ_ugYbI^$u6wJ!=U3*0AQ?XSe#!Y!?*hobvs#I@cSNsyV~^kMo)H z=%hXK9-8sg2k$eCVcUkZBvvxK05fiqse__)_4HTP83 zD+(V62aa{p(P)9e`r+zOb+ADXucY=@TUd)zWFJ4RI6AhE z6e_rk3Tu~|n-Art4Y(9V4e)zV%Dh}N5N0LXR&ArUE@@fPytt`WENM`CB-`btn#0?U zjO1|?4c#%0@=?9573mb4Pj}ylDuj~P(>GNcuL8Ro{ndtufFOBV1*uox9^KlS+M0|J zcG`C3+;1AjJ#0MjcH`$}j``}Rq7|Dq4X&YWr+%OQ)~;ifA6Kc)SL0)EEAPRY*gdL) zwe6^@f!m(wbzJvbw{C&&K0Gd9!AJh_71xTDxWWmayX`vj#_otd?rVSPUb?-@%xBME zd$zRaQIBrzZ~k0=-bXWUefY?QA?bauuIxV6!)H>!iR(XH+|l>ZoLh_DU)yhU()zux zm7jgxt$xRkTTL>ql&*%&ezvRUb2EN*exjS(yruhYELb^daiQ0~N2)q@%5m-6I;+iu zp6cDxPr7+^{voDttz%Kz?_YK}{cG2kUCUj%S{z5WSDyZM#DBJ)Sa{8SS?2DrL1FTO zr>4wwn>Ma6>Z{+A%-1r%_Io3(%}4s|U+VQg;<;$~;0;gj-uB3})h&BT6Qgt;wwo8G zeznZu(zItT9eZ{D%}ad`rIx+8s#(zvXj=>l_0~b*6TLTXd3(tEt{YRE6t!IbX2Crq zQ~y6xKs1JoR3pI})-j|pT8&hrZTj+>(MzpoaMj+YJ1DZwOTh~vjoa-a6>q16^ei)- zrf7Xvtn1|sjXjQz;_H()(wv<+QM{UZFazryyc|u@5iv$nY)yqswSj$|++5`qZGZhj9w57OwVdQc))H|K#k`H>HDv}V+K|4GKb z9M)d=zHM=qi@$!&`HMg7Zd-ZC@yj3gY>IH5J9B5&1^s56`>Wam42_=e$ifqkaqjY1@^AUHkqsIPrv4U4h2(($g4t1bKt?PpHGxAqLkci@VCjw-RN?1_rgKYAXx+xB)57e4L{S zDu29%YKLHtSw~*EU`~+W+STp~3AgI~n%%Jd=4T zI(VGghR|)K$4j;vToP0gP;Axy`LLa8!wUg=A5ONShVH6|+6~%O>o?F{d1)PimM@Ka zDq9DnDt}UNK@Bxss~)dqQ0x@)+|rl^JuXJQmG}8`K2Ov;x%i^*;8nAd^C!Az%&t3S z(ajsb|L{!X($^x2e!JcyE4|U0#Gr%iuczD|SvKYD?lCKzFCX)LH9Pdk&WjK2I63*y z=Dk1k`Q0$rdB5dQqDkMgRNb~e>f~_KJFeyRR;6b?G-%uBZ#TH{?2lnvdN=YpbvEtr z;MOZYozUo&|K4i$2QE$W-q-TGs ze9i4rTF;SwH~(|m*e>+NsqT-eQ|z+18FSU_lB{W?a8R1yOguXiOaEXx~NRL!f?!EV+hm*`A#5 zzvW7aQsr#3nG$K+q9_vy2=*O3E;yZe0m=6L7j>q@0pw)Oh-=buK-%~*M1{{daXxa7sl#=MaBX6W%DOX6NT zGpb>D$m~ja(kF8p-TwW+mb@NO5L+8cDcN0*BaHC&@Re&N!N1I@ntyz(W_ zInOund*-KJ5AR!-Ub$j-YOkgRYgD$6LlGWk0l8 z-|FE@o!+Teu<@&#V>^Bv^ZfD|imN(9ajb4VgK>s@3)=P?F>v1h_O~U)^=lZ_kYIwC5LfIC->iZ{N4yn*Vdwtkp{#K2&b(S}?plM>6IDek zMjR^47`A?(e_mDgmB3CHru%;=DKi$E8vZ!OG-dv0=8vXb`>lJc6o-`#Pmhq*ips2& zLCbf=yRK;bWX~twDO_!tANj(2&g-w_wO{e7(}d`&XY#(hcBgZjQ(qqY;AGS@`i*zX zS`GT*c~h&H*N2+N#Voxu;dtLm%a#uvxgl=crXZiX{r`A;#mKttZoj%ccB#|WpQ=1h zv~9omF_(>-zfCQ6Jma)zYHm*7KHuzYRI;^4;?~XiN0nV(Wsjy5e-IbA+COA_L{yuJ eH+~8oF*|T{$>iv3ZCYHulJ2tpGq)9({rG=m$g6b# literal 0 HcmV?d00001 diff --git a/app/assets/images/auth_buttons/facebook_64.png b/app/assets/images/auth_buttons/facebook_64.png new file mode 100644 index 0000000000000000000000000000000000000000..1f1a80d7368ceb08b3e47d688f9e039b41ecfc0e GIT binary patch literal 2970 zcmbVO2~<;O7ET0YDU@9)pu|8aiex2_#3Yi9MP)f`f(jCnXMK{5BtW1tA_Cfq7N#sB z3NlkXMS+P36`c+s1r$f1h>%JtTW54!5U~iOwlMF7EyHr=oXI&a@BiwiPK~qwprU+2*P)d|a{y`|VL&oOB8;C{uHcFJz&t$&(X+@*ceV%7o#}!1z~i|D zGK0tH1NzzvG0MufJHmOdEGmH|A4L>4NM2pO84B!asrB8Gs0*7kCb zc`ywNYt%aT=PnhE6}nXzMi6r0hGG~^Jhb`)0--DM<1j;&$g%zV<1Cq0Gl`ys9$;0~ z-!4_DN6TIM8KL`9&8;8q9sly(KZ-|9&HfTNgV19Rab7W*N6jXgLFRSQDm`;u>$(Sh zeSOZw&W}1$0*-LhPQ<#WHSI6Uihpju-+6z!qo_#Ib=hbtN}ZBFF=qRaSa3ygn`M?S zGeK9gqq3c*0K>gg5hfhvoCU*D|Tb(FK`Z_{7YSvpj2N%Lt; z_0zefzL8$?!-b|2(f1_X2qzx3-|m{Kq7DCQAjj1pX5vB6-pqun#j_UV>pWKN?2~7S zt(c~JRSng)u7&qHe*e7PDXXFNQeZjn{M&yi@bk)~{u>;*ZCl zY=~l|+0Y8_{%~OA&w1hDx_K7LYD{UGy=650{pR7`+^&&Cj=rid(5dI9$1LTOtp)_{ z$-Bm1%(hPE;U?`+{^mwC)n>iEVIqc<(s*vekZV}_jjHmhH{?{|?%S_7n1`~1>+68% z+k^|ZsWDPz@HaY}r&62ie)`?Y#ow^C_rhn0JCumW)%%>MFNI_uPbTqRZK?6;+S$#v zc&>Nt19FYQjM3DocTqLJnK~7HwKe335t-%Hp5qtV^1S2KVdE^`t~?BJ>-H0e1>4V( zTi1P^Rl2Q`Y-(eF*~^cGv1!f-w?{hYe^Rr*eA{*Xa5VBDSo|%xsriSiq4sI6u0(If0RB@O2y85zMxy<=u3C7j4@n%$R z*Z>B#PS`bVs3MNm)s7>h?c#St59z$fR=SOSmZtU|IIEsU>~M_U4b{BP{KhYD=uMrc z)DIf;m7{e~oc|^k74!6^+=+oZUXNtG9C4@YXfy-Negv1%b&? zq+ZKsI#-` + + addAward: (emoji) -> + @postEmoji emoji, => + @addAwardToEmojiBar(emoji) + + addAwardToEmojiBar: (emoji, custom_path = '') -> + if @exist(emoji) + if @isActive(emoji) + @decrementCounter(emoji) + else + counter = @findEmojiIcon(emoji).siblings(".counter") + counter.text(parseInt(counter.text()) + 1) + counter.parent().addClass("active") + @addMeToAuthorList(emoji) + else + @createEmoji(emoji, custom_path) + + exist: (emoji) -> + @findEmojiIcon(emoji).length > 0 + + isActive: (emoji) -> + @findEmojiIcon(emoji).parent().hasClass("active") + + decrementCounter: (emoji) -> + counter = @findEmojiIcon(emoji).siblings(".counter") + + if parseInt(counter.text()) > 1 + counter.text(parseInt(counter.text()) - 1) + counter.parent().removeClass("active") + @removeMeFromAuthorList(emoji) + else + award = counter.parent() + award.tooltip("destroy") + award.remove() + + removeMeFromAuthorList: (emoji) -> + award_block = @findEmojiIcon(emoji).parent() + authors = award_block.attr("data-original-title").split(", ") + authors = _.without(authors, "me").join(", ") + award_block.attr("title", authors) + @resetTooltip(award_block) + + addMeToAuthorList: (emoji) -> + award_block = @findEmojiIcon(emoji).parent() + authors = award_block.attr("data-original-title").split(", ") + authors.push("me") + award_block.attr("title", authors.join(", ")) + @resetTooltip(award_block) + + resetTooltip: (award) -> + award.tooltip("destroy") + + # "destroy" call is asynchronous, this is why we need to set timeout. + setTimeout (-> + award.tooltip() + ), 200 + + + createEmoji: (emoji, custom_path) -> + nodes = [] + nodes.push("

") + + $(".awards-controls").before(nodes.join("\n")) + + $(".award").tooltip() + + getImage: (emoji, custom_path) -> + if custom_path + $("").attr({src: custom_path, width: 20, height: 20}).wrap("
").parent().html() + else + $("li[data-emoji='" + emoji + "']").html() + + + postEmoji: (emoji, callback) -> + $.post @post_emoji_url, { note: { + note: ":" + emoji + ":" + noteable_type: @noteable_type + noteable_id: @noteable_id + }},(data) -> + if data.ok + callback.call() + + findEmojiIcon: (emoji) -> + $(".icon[data-emoji='" + emoji + "']") \ No newline at end of file diff --git a/app/assets/javascripts/blob/blob_file_dropzone.js.coffee b/app/assets/javascripts/blob/blob_file_dropzone.js.coffee index 5b604adbbb..195f8b11e5 100644 --- a/app/assets/javascripts/blob/blob_file_dropzone.js.coffee +++ b/app/assets/javascripts/blob/blob_file_dropzone.js.coffee @@ -23,18 +23,6 @@ class @BlobFileDropzone init: -> this.on 'addedfile', (file) -> $('.dropzone-alerts').html('').hide() - commit_message = form.find('#commit_message')[0] - - if /^Upload/.test(commit_message.placeholder) - commit_message.placeholder = 'Upload ' + file.name - - return - - this.on 'removedfile', (file) -> - commit_message = form.find('#commit_message')[0] - - if /^Upload/.test(commit_message.placeholder) - commit_message.placeholder = 'Upload new file' return @@ -47,8 +35,9 @@ class @BlobFileDropzone return this.on 'sending', (file, xhr, formData) -> - formData.append('new_branch', form.find('#new_branch').val()) - formData.append('commit_message', form.find('#commit_message').val()) + formData.append('new_branch', form.find('.js-new-branch').val()) + formData.append('create_merge_request', form.find('.js-create-merge-request').val()) + formData.append('commit_message', form.find('.js-commit-message').val()) return # Override behavior of adding error underneath preview diff --git a/app/assets/javascripts/blob/edit_blob.js.coffee b/app/assets/javascripts/blob/edit_blob.js.coffee index 050888f9c1..f6bf836f19 100644 --- a/app/assets/javascripts/blob/edit_blob.js.coffee +++ b/app/assets/javascripts/blob/edit_blob.js.coffee @@ -11,10 +11,10 @@ class @EditBlob if ace_mode editor.getSession().setMode "ace/mode/" + ace_mode - $(".js-commit-button").click -> - $("#file-content").val editor.getValue() - $(".file-editor form").submit() - return false + # Before a form submission, move the content from the Ace editor into the + # submitted textarea + $('form').submit -> + $("#file-content").val(editor.getValue()) editModePanes = $(".js-edit-mode-pane") editModeLinks = $(".js-edit-mode a") diff --git a/app/assets/javascripts/blob/new_blob.js.coffee b/app/assets/javascripts/blob/new_blob.js.coffee index 1f36a53f19..68c5e5195e 100644 --- a/app/assets/javascripts/blob/new_blob.js.coffee +++ b/app/assets/javascripts/blob/new_blob.js.coffee @@ -11,10 +11,10 @@ class @NewBlob if ace_mode editor.getSession().setMode "ace/mode/" + ace_mode - $(".js-commit-button").click -> - $("#file-content").val editor.getValue() - $(".file-editor form").submit() - return false + # Before a form submission, move the content from the Ace editor into the + # submitted textarea + $('form').submit -> + $("#file-content").val(editor.getValue()) editor: -> return @editor diff --git a/app/assets/javascripts/calendar.js.coffee b/app/assets/javascripts/calendar.js.coffee index 4c4bc3d66e..9762123692 100644 --- a/app/assets/javascripts/calendar.js.coffee +++ b/app/assets/javascripts/calendar.js.coffee @@ -25,7 +25,7 @@ class @Calendar 30 ] legendCellPadding: 3 - cellSize: $('.user-calendar').width() / 80 + cellSize: $('.user-calendar').width() / 73 onClick: (date, count) -> formated_date = date.getFullYear() + "-" + (date.getMonth()+1) + "-" + date.getDate() $.ajax diff --git a/app/assets/javascripts/ci/build.coffee b/app/assets/javascripts/ci/build.coffee index 93385b32a1..44d5ddb7d9 100644 --- a/app/assets/javascripts/ci/build.coffee +++ b/app/assets/javascripts/ci/build.coffee @@ -31,7 +31,7 @@ class CiBuild $('#build-trace code').html build.trace_html $('#build-trace code').append '' @checkAutoscroll() - else + else if build.status != build_status Turbolinks.visit build_url , 4000 diff --git a/app/assets/javascripts/copy_to_clipboard.js.coffee b/app/assets/javascripts/copy_to_clipboard.js.coffee new file mode 100644 index 0000000000..9c68c5cc1b --- /dev/null +++ b/app/assets/javascripts/copy_to_clipboard.js.coffee @@ -0,0 +1,32 @@ +#= require clipboard + +$ -> + clipboard = new Clipboard '.js-clipboard-trigger', + text: (trigger) -> + $target = $(trigger.nextElementSibling || trigger.previousElementSibling) + $target.data('clipboard-text') || $target.text().trim() + + clipboard.on 'success', (e) -> + $(e.trigger). + tooltip(trigger: 'manual', placement: 'auto bottom', title: 'Copied!'). + tooltip('show'). + one('mouseleave', -> $(this).tooltip('hide')) + + # Clear the selection and blur the trigger so it loses its border + e.clearSelection() + $(e.trigger).blur() + + # Safari doesn't support `execCommand`, so instead we inform the user to + # copy manually. + # + # See http://clipboardjs.com/#browser-support + clipboard.on 'error', (e) -> + if /Mac/i.test(navigator.userAgent) + title = "Press ⌘-C to copy" + else + title = "Press Ctrl-C to copy" + + $(e.trigger). + tooltip(trigger: 'manual', placement: 'auto bottom', html: true, title: title). + tooltip('show'). + one('mouseleave', -> $(this).tooltip('hide')) diff --git a/app/assets/javascripts/dispatcher.js.coffee b/app/assets/javascripts/dispatcher.js.coffee index 5bf0b30217..4059fc39c6 100644 --- a/app/assets/javascripts/dispatcher.js.coffee +++ b/app/assets/javascripts/dispatcher.js.coffee @@ -28,6 +28,8 @@ class Dispatcher when 'projects:milestones:new', 'projects:milestones:edit' new ZenMode() new DropzoneInput($('.milestone-form')) + when 'groups:milestones:new' + new ZenMode() when 'projects:compare:show' new Diff() when 'projects:issues:new','projects:issues:edit' @@ -39,6 +41,12 @@ class Dispatcher shortcut_handler = new ShortcutsNavigation() new DropzoneInput($('.merge-request-form')) new IssuableForm($('.merge-request-form')) + when 'projects:tags:new' + new ZenMode() + new DropzoneInput($('.tag-form')) + when 'projects:releases:edit' + new ZenMode() + new DropzoneInput($('.release-form')) when 'projects:merge_requests:show' new Diff() shortcut_handler = new ShortcutsIssuable() diff --git a/app/assets/javascripts/new_commit_form.js.coffee b/app/assets/javascripts/new_commit_form.js.coffee new file mode 100644 index 0000000000..2e561dea3e --- /dev/null +++ b/app/assets/javascripts/new_commit_form.js.coffee @@ -0,0 +1,21 @@ +class @NewCommitForm + constructor: (form) -> + @newBranch = form.find('.js-new-branch') + @originalBranch = form.find('.js-original-branch') + @createMergeRequest = form.find('.js-create-merge-request') + @createMergeRequestFormGroup = form.find('.js-create-merge-request-form-group') + + @renderDestination() + @newBranch.keyup @renderDestination + + renderDestination: => + different = @newBranch.val() != @originalBranch.val() + + if different + @createMergeRequestFormGroup.show() + @createMergeRequest.prop('checked', true) unless @wasDifferent + else + @createMergeRequestFormGroup.hide() + @createMergeRequest.prop('checked', false) + + @wasDifferent = different diff --git a/app/assets/javascripts/notes.js.coffee b/app/assets/javascripts/notes.js.coffee index ea75c656bc..7de7632201 100644 --- a/app/assets/javascripts/notes.js.coffee +++ b/app/assets/javascripts/notes.js.coffee @@ -113,13 +113,16 @@ class @Notes renderNote: (note) -> # render note if it not present in loaded list # or skip if rendered - if @isNewNote(note) + if @isNewNote(note) && !note.award @note_ids.push(note.id) $('ul.main-notes-list'). append(note.html). syntaxHighlight() @initTaskList() + if note.award + awards_handler.addAwardToEmojiBar(note.note, note.emoji_path) + ### Check if note does not exists on page ### @@ -255,7 +258,6 @@ class @Notes ### addNote: (xhr, note, status) => @renderNote(note) - @updateVotes() ### Called in response to the new note form being submitted @@ -473,9 +475,6 @@ class @Notes form = $(e.target).closest(".js-discussion-note-form") @removeDiscussionNoteForm(form) - updateVotes: -> - true - ### Called after an attachment file has been selected. diff --git a/app/assets/javascripts/stat_graph_contributors_util.js.coffee b/app/assets/javascripts/stat_graph_contributors_util.js.coffee index cfe5508290..f5584bcfe4 100644 --- a/app/assets/javascripts/stat_graph_contributors_util.js.coffee +++ b/app/assets/javascripts/stat_graph_contributors_util.js.coffee @@ -6,7 +6,7 @@ window.ContributorsStatGraphUtil = for entry in log @add_date(entry.date, total) unless total[entry.date]? - data = by_author[entry.author_name] #|| by_email[entry.author_email] + data = by_author[entry.author_name] || by_email[entry.author_email] data ?= @add_author(entry, by_author, by_email) @add_date(entry.date, data) unless data[entry.date] @@ -95,5 +95,4 @@ window.ContributorsStatGraphUtil = if date_range is null || date_range[0] <= new Date(date) <= date_range[1] true else - false - + false \ No newline at end of file diff --git a/app/assets/stylesheets/framework/blocks.scss b/app/assets/stylesheets/framework/blocks.scss index 6ce34b5c3e..1635df9c97 100644 --- a/app/assets/stylesheets/framework/blocks.scss +++ b/app/assets/stylesheets/framework/blocks.scss @@ -18,6 +18,7 @@ line-height: 36px; } +.content-block, .gray-content-block { margin: -$gl-padding; background-color: $background-color; @@ -27,6 +28,14 @@ border-bottom: 1px solid $border-color; color: $gl-gray; + &.oneline-block { + line-height: 42px; + } + + &.white { + background-color: white; + } + &.top-block { border-top: none; } @@ -60,3 +69,48 @@ line-height: 42px; } } + +.cover-block { + text-align: center; + background: #f7f8fa; + margin: -$gl-padding; + margin-bottom: 0; + padding: 44px $gl-padding; + border-bottom: 1px solid $border-color; + position: relative; + + .avatar-holder { + margin-bottom: 16px; + + .avatar, .identicon { + margin: 0 auto; + float: none; + } + + .identicon { + @include border-radius(50%); + } + } + + .cover-title { + color: $gl-header-color; + margin: 0; + font-size: 23px; + font-weight: normal; + margin: 16px 0 5px 0; + color: #4c4e54; + font-size: 23px; + line-height: 1.1; + } + + .cover-desc { + padding: 0 $gl-padding 3px; + color: $gl-text-color; + } + + .cover-controls { + position: absolute; + top: 10px; + right: 10px; + } +} diff --git a/app/assets/stylesheets/framework/buttons.scss b/app/assets/stylesheets/framework/buttons.scss index e5f0c0ad9e..fe56266284 100644 --- a/app/assets/stylesheets/framework/buttons.scss +++ b/app/assets/stylesheets/framework/buttons.scss @@ -162,10 +162,25 @@ border-color: #e7e9ed; width: 140px; + .badge { + font-weight: normal; + background-color: #eee; + color: #78a; + } + &.active { border-color: $gl-info; background: $gl-info; color: #fff; + + .badge { + color: $gl-info; + background-color: white; + } } } } + +.btn-clipboard { + border: none; +} diff --git a/app/assets/stylesheets/framework/callout.scss b/app/assets/stylesheets/framework/callout.scss index f1699d21c9..f3ce4e3c21 100644 --- a/app/assets/stylesheets/framework/callout.scss +++ b/app/assets/stylesheets/framework/callout.scss @@ -9,9 +9,9 @@ .bs-callout { margin: 20px 0; padding: 20px; - border-left: 3px solid #eee; - color: #666; - background: #f9f9f9; + border-left: 3px solid $border-color; + color: $text-color; + background: $background-color; } .bs-callout h4 { margin-top: 0; diff --git a/app/assets/stylesheets/framework/common.scss b/app/assets/stylesheets/framework/common.scss index e1a1793be9..40f4beb196 100644 --- a/app/assets/stylesheets/framework/common.scss +++ b/app/assets/stylesheets/framework/common.scss @@ -16,6 +16,7 @@ .append-bottom-10 { margin-bottom:10px } .append-bottom-15 { margin-bottom:15px } .append-bottom-20 { margin-bottom:20px } +.append-bottom-default { margin-bottom: $gl-padding; } .inline { display: inline-block } .center { text-align: center } @@ -327,6 +328,10 @@ table { } } +.well { + margin-bottom: 0; +} + .search_box { @extend .well; text-align: center; @@ -387,6 +392,36 @@ table { } } +.center-middle-menu { + @include nav-menu; + padding: 0; + text-align: center; + margin: -$gl-padding; + margin-top: 0; + margin-bottom: 0; + height: 58px; + border-bottom: 1px solid $border-color; + + li { + &:after { + content: "|"; + color: $border-gray-light; + } + + &:last-child { + &:after { + content: none; + } + } + + > a { + display: inline-block; + text-transform: uppercase; + font-size: 13px; + } + } +} + .dropzone .dz-preview .dz-progress { border-color: $border-color !important; } diff --git a/app/assets/stylesheets/framework/files.scss b/app/assets/stylesheets/framework/files.scss index 9dd7774788..35db00281e 100644 --- a/app/assets/stylesheets/framework/files.scss +++ b/app/assets/stylesheets/framework/files.scss @@ -10,6 +10,10 @@ border-bottom: 1px solid #E7E9EE; margin-bottom: 1em; + &.readme-holder { + border-bottom: 0; + } + table { @extend .table; } @@ -94,7 +98,6 @@ border-right: none; } background: #fff; - padding: 10px $gl-padding; } .lines { pre { diff --git a/app/assets/stylesheets/framework/header.scss b/app/assets/stylesheets/framework/header.scss index 91e6975e26..02ea91602e 100644 --- a/app/assets/stylesheets/framework/header.scss +++ b/app/assets/stylesheets/framework/header.scss @@ -118,6 +118,10 @@ header { } } } + + .impersonation i { + color: $red-normal; + } } @mixin collapsed-header { diff --git a/app/assets/stylesheets/framework/layout.scss b/app/assets/stylesheets/framework/layout.scss index c7b3b60e76..b91c15d891 100644 --- a/app/assets/stylesheets/framework/layout.scss +++ b/app/assets/stylesheets/framework/layout.scss @@ -5,7 +5,6 @@ html { body { padding-top: $header-height; - text-rendering: geometricPrecision; } } diff --git a/app/assets/stylesheets/framework/lists.scss b/app/assets/stylesheets/framework/lists.scss index c5764c3659..45f3b5849b 100644 --- a/app/assets/stylesheets/framework/lists.scss +++ b/app/assets/stylesheets/framework/lists.scss @@ -107,7 +107,7 @@ ul.content-list { > li { padding: $gl-padding; - border-color: #f1f2f4; + border-color: $table-border-color; margin-left: -$gl-padding; margin-right: -$gl-padding; color: $gl-gray; @@ -117,7 +117,7 @@ ul.content-list { } .controls { - padding-top: 4px; + padding-top: 1px; float: right; .btn { diff --git a/app/assets/stylesheets/framework/markdown_area.scss b/app/assets/stylesheets/framework/markdown_area.scss index ed0333d233..cc660529cb 100644 --- a/app/assets/stylesheets/framework/markdown_area.scss +++ b/app/assets/stylesheets/framework/markdown_area.scss @@ -106,6 +106,7 @@ } .markdown-area { + @include border-radius(0); background: #FFF; border: 1px solid #ddd; min-height: 140px; diff --git a/app/assets/stylesheets/framework/mixins.scss b/app/assets/stylesheets/framework/mixins.scss index 089e6958ee..11c48d26ab 100644 --- a/app/assets/stylesheets/framework/mixins.scss +++ b/app/assets/stylesheets/framework/mixins.scss @@ -72,9 +72,10 @@ list-style: none; > li { + @include clearfix; + padding: 10px 0; border-bottom: 1px solid #EEE; - overflow: hidden; display: block; margin: 0px; @@ -137,6 +138,7 @@ &:hover, &:active, &:focus { text-decoration: none; + outline: none; } } @@ -147,14 +149,8 @@ .badge { font-weight: normal; - background-color: #fff; background-color: #eee; color: #78a; } } } - -.fa-align { - top: 20px; - position: relative; -} diff --git a/app/assets/stylesheets/framework/sidebar.scss b/app/assets/stylesheets/framework/sidebar.scss index 985ea16457..c1b0129c86 100644 --- a/app/assets/stylesheets/framework/sidebar.scss +++ b/app/assets/stylesheets/framework/sidebar.scss @@ -64,6 +64,7 @@ text-decoration: none; padding-left: 22px; font-weight: normal; + outline: none; &:hover { text-decoration: none; @@ -176,6 +177,7 @@ text-align: center; line-height: 40px; transition-duration: .3s; + outline: none; } .collapse-nav a:hover { @@ -238,6 +240,7 @@ width: 100%; padding: 10px 22px; overflow: hidden; + outline: none; img { width: 36px; diff --git a/app/assets/stylesheets/framework/tables.scss b/app/assets/stylesheets/framework/tables.scss index 789b34020c..66e16e8df7 100644 --- a/app/assets/stylesheets/framework/tables.scss +++ b/app/assets/stylesheets/framework/tables.scss @@ -1,3 +1,9 @@ +.table-holder { + margin: -$gl-padding; + margin-top: 0; + margin-bottom: 0; +} + table { &.table { .dropdown-menu a { @@ -18,15 +24,17 @@ table { tr { td, th { - padding: 8px 10px; + padding: 10px $gl-padding; line-height: 20px; vertical-align: middle; } + th { font-weight: normal; font-size: 15px; border-bottom: 1px solid $border-color !important; } + td { border-color: $table-border-color !important; border-bottom: 1px solid; diff --git a/app/assets/stylesheets/framework/timeline.scss b/app/assets/stylesheets/framework/timeline.scss index 9d6f053aef..eb53c4153d 100644 --- a/app/assets/stylesheets/framework/timeline.scss +++ b/app/assets/stylesheets/framework/timeline.scss @@ -6,7 +6,7 @@ .timeline-entry { padding: $gl-padding; - border-color: #f1f2f4; + border-color: $table-border-color; margin-left: -$gl-padding; margin-right: -$gl-padding; color: $gl-gray; diff --git a/app/assets/stylesheets/framework/tw_bootstrap.scss b/app/assets/stylesheets/framework/tw_bootstrap.scss index 99d028d122..94f0ed761d 100644 --- a/app/assets/stylesheets/framework/tw_bootstrap.scss +++ b/app/assets/stylesheets/framework/tw_bootstrap.scss @@ -172,7 +172,7 @@ } .panel-body { - form { + form, pre { margin: 0; } @@ -190,6 +190,10 @@ .btn { min-width: 124px; } + + .btn-clipboard { + min-width: 0px; + } } &.panel-small { diff --git a/app/assets/stylesheets/framework/typography.scss b/app/assets/stylesheets/framework/typography.scss index e6558a2385..ba0312ba0d 100644 --- a/app/assets/stylesheets/framework/typography.scss +++ b/app/assets/stylesheets/framework/typography.scss @@ -173,7 +173,6 @@ * */ body { - text-rendering:optimizeLegibility; -webkit-text-shadow: rgba(255,255,255,0.01) 0 0 1px; } diff --git a/app/assets/stylesheets/pages/ci_projects.scss b/app/assets/stylesheets/pages/ci_projects.scss index 8c5273abcd..2a7b5cfc7f 100644 --- a/app/assets/stylesheets/pages/ci_projects.scss +++ b/app/assets/stylesheets/pages/ci_projects.scss @@ -6,11 +6,6 @@ line-height: 1.5; } - .wide-table-holder { - margin-left: -$gl-padding; - margin-right: -$gl-padding; - } - .builds, .projects-table { .light { diff --git a/app/assets/stylesheets/pages/commit.scss b/app/assets/stylesheets/pages/commit.scss index fbd7c363de..a0e5f7554e 100644 --- a/app/assets/stylesheets/pages/commit.scss +++ b/app/assets/stylesheets/pages/commit.scss @@ -56,6 +56,7 @@ li { padding: 3px 0px; + line-height: 20px; } } .new-file { diff --git a/app/assets/stylesheets/pages/commits.scss b/app/assets/stylesheets/pages/commits.scss index 4e121b95d1..c9dfcff629 100644 --- a/app/assets/stylesheets/pages/commits.scss +++ b/app/assets/stylesheets/pages/commits.scss @@ -33,6 +33,8 @@ } li.commit { + list-style: none; + .commit-row-title { font-size: $list-font-size; line-height: 20px; @@ -113,3 +115,10 @@ li.commit { } } } + +.branch-commit { + color: $gl-gray; + .commit-id, .commit-row-message { + color: $gl-gray; + } +} diff --git a/app/assets/stylesheets/pages/diff.scss b/app/assets/stylesheets/pages/diff.scss index d9ef06dc6b..afd6fb7367 100644 --- a/app/assets/stylesheets/pages/diff.scss +++ b/app/assets/stylesheets/pages/diff.scss @@ -367,7 +367,6 @@ .inline-parallel-buttons { float: right; - margin-top: -5px; } // Mobile diff --git a/app/assets/stylesheets/pages/editor.scss b/app/assets/stylesheets/pages/editor.scss index 1d565477dd..e2c521af91 100644 --- a/app/assets/stylesheets/pages/editor.scss +++ b/app/assets/stylesheets/pages/editor.scss @@ -50,7 +50,7 @@ .editor-file-name { .new-file-name { display: inline-block; - width: 200px; + width: 450px; } .form-control { diff --git a/app/assets/stylesheets/pages/events.scss b/app/assets/stylesheets/pages/events.scss index ca2ee45542..282aaf2219 100644 --- a/app/assets/stylesheets/pages/events.scss +++ b/app/assets/stylesheets/pages/events.scss @@ -4,10 +4,10 @@ */ .event-item { font-size: $gl-font-size; - padding: $gl-padding; + padding: $gl-padding $gl-padding $gl-padding ($gl-padding + $gl-avatar-size + 15px); margin-left: -$gl-padding; margin-right: -$gl-padding; - border-bottom: 1px solid #f1f2f4; + border-bottom: 1px solid $table-border-color; color: #7f8fa4; &.event-inline { @@ -16,10 +16,7 @@ top: -2px; } - .event-title { - line-height: 44px; - } - + .event-title, .event-item-timestamp { line-height: 44px; } @@ -30,7 +27,7 @@ } .avatar { - margin-right: 15px; + margin-left: -($gl-avatar-size + 15px); } .event-title { @@ -43,8 +40,7 @@ } .event-body { - margin-left: 63px; - margin-right: 80px; + margin-right: 174px; .event-note { margin-top: 5px; @@ -155,6 +151,8 @@ @media (max-width: $screen-xs-max) { .event-item { + padding-left: $gl-padding; + .event-title { white-space: normal; overflow: visible; diff --git a/app/assets/stylesheets/pages/issuable.scss b/app/assets/stylesheets/pages/issuable.scss index 9da085a347..3a08ee70bc 100644 --- a/app/assets/stylesheets/pages/issuable.scss +++ b/app/assets/stylesheets/pages/issuable.scss @@ -80,3 +80,92 @@ } } } + +.issuable-filter-count { + span { + display: block; + margin-bottom: -16px; + padding: 13px 0; + } +} + +.cross-project-reference { + text-align: center; + width: 100%; + + .slead { + padding: 5px; + } + + span, button { + background-color: $background-color; + } +} + +.awards { + @include clearfix; + line-height: 34px; + margin: 2px 0; + + .award { + @include border-radius(5px); + + border: 1px solid; + padding: 0px 10px; + float: left; + margin: 0 5px; + border-color: $border-color; + cursor: pointer; + + &.active { + border-color: $border-gray-light; + background-color: $gray-light; + + .counter { + font-weight: bold; + } + } + + .icon { + float: left; + margin-right: 10px; + } + + .counter { + float: left; + } + } + + .awards-controls { + margin-left: 10px; + float: left; + + .add-award { + font-size: 24px; + color: $gl-gray; + position: relative; + top: 2px; + + &:hover, + &:link { + text-decoration: none; + } + } + + .awards-menu { + padding: $gl-padding; + min-width: 214px; + + > li { + margin: 5px; + } + } + } + + .awards-menu{ + li { + float: left; + margin: 3px; + } + } +} diff --git a/app/assets/stylesheets/pages/merge_requests.scss b/app/assets/stylesheets/pages/merge_requests.scss index a1a5208c59..08e4bcdf52 100644 --- a/app/assets/stylesheets/pages/merge_requests.scss +++ b/app/assets/stylesheets/pages/merge_requests.scss @@ -19,6 +19,20 @@ .accept-merge-holder { .accept-action { display: inline-block; + + .accept_merge_request { + &.ci-pending, + &.ci-running { + @include btn-orange; + } + + &.ci-skipped, + &.ci-failed, + &.ci-canceled, + &.ci-error { + @include btn-red; + } + } } .accept-control { @@ -205,6 +219,15 @@ #modal_merge_info .modal-dialog { width: 600px; + + .btn-clipboard { + @extend .pull-right; + + margin-right: 18px; + margin-top: 5px; + position: absolute; + right: 0; + } } .mr-source-target { diff --git a/app/assets/stylesheets/pages/note_form.scss b/app/assets/stylesheets/pages/note_form.scss index 4392f08942..268fc995aa 100644 --- a/app/assets/stylesheets/pages/note_form.scss +++ b/app/assets/stylesheets/pages/note_form.scss @@ -56,6 +56,10 @@ .note_text { width: 100%; } + + .comment-hints { + margin-top: -12px; + } } /* loading indicator */ @@ -168,7 +172,7 @@ color: #999; background: #FFF; padding: 7px; - margin-top: -11px; + margin-top: -7px; border: 1px solid $border-color; font-size: 13px; } diff --git a/app/assets/stylesheets/pages/profile.scss b/app/assets/stylesheets/pages/profile.scss index 8e4f0eb2b2..1d6ca0dfc1 100644 --- a/app/assets/stylesheets/pages/profile.scss +++ b/app/assets/stylesheets/pages/profile.scss @@ -47,3 +47,31 @@ } } } + +.calendar-hint { + margin-top: -12px; + float: right; + font-size: 12px; +} + +.profile-link-holder { + display: inline; + + &:after { + content: "\00B7"; + padding: 0px 6px; + font-weight: bold; + } + + &:last-child { + &:after { + content: ""; + padding: 0; + } + } + + a { + color: $blue-dark; + text-decoration: none; + } +} diff --git a/app/assets/stylesheets/pages/projects.scss b/app/assets/stylesheets/pages/projects.scss index ec674fdf1c..d3b1004002 100644 --- a/app/assets/stylesheets/pages/projects.scss +++ b/app/assets/stylesheets/pages/projects.scss @@ -50,7 +50,17 @@ } .project-home-dropdown { - margin: 11px 3px 0; + margin: 13px 0px 0; + } + + .notifications-btn { + .fa-bell { + margin-right: 6px; + } + + .fa-angle-down { + margin-left: 6px; + } } .project-home-desc { @@ -85,6 +95,7 @@ color: inherit; } } + .input-group { display: inline-table; position: relative; @@ -233,23 +244,11 @@ } } - .fa-fw { + i { margin-right: 8px; } } -.fa-bell { - margin-right: 6px; -} - -.fa-angle-down { - margin-left: 6px; -} - -.project-home-panel .project-home-dropdown { - margin: 13px 0px 0; -} - .project-visibility-level-holder { .radio { margin-bottom: 10px; @@ -457,7 +456,7 @@ pre.light-well { .project-row { padding: $gl-padding; - border-color: #f1f2f4; + border-color: $table-border-color; margin-left: -$gl-padding; margin-right: -$gl-padding; @@ -512,6 +511,45 @@ pre.light-well { } } -.project-show-readme .readme-holder { - padding: 7px; +.project-last-commit { + margin: 0 7px; + + .ci-status { + margin-right: 16px; + } + + .commit-row-message { + color: $gl-gray; + } + + .commit_short_id { + margin-right: 5px; + color: $gl-link-color; + font-weight: 600; + } + + .commit-author-link { + margin-left: 7px; + text-decoration: none; + .avatar { + float: none; + margin-right: 4px; + } + + .commit-author-name { + font-weight: 600; + } + } } + +.project-show-readme .readme-holder { + margin-left: -$gl-padding; + margin-right: -$gl-padding; + padding: ($gl-padding + 7px); + border-top: 0; + + .edit-project-readme { + z-index: 100; + position: relative; + } +} \ No newline at end of file diff --git a/app/assets/stylesheets/pages/runners.scss b/app/assets/stylesheets/pages/runners.scss index 2b15ab8312..a9111a7388 100644 --- a/app/assets/stylesheets/pages/runners.scss +++ b/app/assets/stylesheets/pages/runners.scss @@ -1,36 +1,34 @@ -.ci-body { - .runner-state { - padding: 6px 12px; - margin-right: 10px; - color: #FFF; +.runner-state { + padding: 6px 12px; + margin-right: 10px; + color: #FFF; - &.runner-state-shared { - background: #32b186; - } - &.runner-state-specific { - background: #3498db; - } + &.runner-state-shared { + background: #32b186; } - - .runner-status-online { - color: green; - } - - .runner-status-offline { - color: gray; - } - - .runner-status-paused { - color: red; - } - - .runner { - .btn { - padding: 1px 6px; - } - - h4 { - font-weight: normal; - } + &.runner-state-specific { + background: #3498db; + } +} + +.runner-status-online { + color: green; +} + +.runner-status-offline { + color: gray; +} + +.runner-status-paused { + color: red; +} + +.runner { + .btn { + padding: 1px 6px; + } + + h4 { + font-weight: normal; } } diff --git a/app/assets/stylesheets/pages/sherlock.scss b/app/assets/stylesheets/pages/sherlock.scss new file mode 100644 index 0000000000..92d84d9640 --- /dev/null +++ b/app/assets/stylesheets/pages/sherlock.scss @@ -0,0 +1,33 @@ +table .sherlock-code { + max-width: 700px; +} + +.sherlock-code { + pre { + word-wrap: normal; + } + + pre code { + white-space: pre; + } +} + +.sherlock-line-samples-table { + margin-bottom: 0px !important; + + thead tr th, + tbody tr td { + font-size: 13px !important; + text-align: right; + padding: 0px 10px !important; + } +} + +.sherlock-file-sample pre { + padding-top: 28px !important; +} + +.sherlock-line-samples-table .slow { + color: $red-light; + font-weight: bold; +} diff --git a/app/assets/stylesheets/pages/snippets.scss b/app/assets/stylesheets/pages/snippets.scss index a3d7aba054..242783a7b7 100644 --- a/app/assets/stylesheets/pages/snippets.scss +++ b/app/assets/stylesheets/pages/snippets.scss @@ -1,8 +1,3 @@ -.my-snippets li:first-child { - h4 { margin-top: 0; } - padding-top: 0; -} - .snippet-form-holder .file-holder .file-title { padding: 2px; } @@ -30,3 +25,58 @@ } } } + +.snippet-holder { + .snippet-details { + .page-title { + margin-top: -15px; + padding: 10px 0; + margin-bottom: 0; + color: #5c5d5e; + font-size: 16px; + + .author { + color: #5c5d5e; + } + + .snippet-id { + color: #5c5d5e; + } + } + + .snippet-title { + margin: 0; + font-size: 23px; + color: #313236; + } + + @media (max-width: $screen-md-max) { + .new-snippet-link { + display: none; + } + } + + @media (max-width: $screen-sm-max) { + .creator, + .page-title .btn-close { + display: none; + } + } + } + + .file-holder { + border-top: 0; + } +} + + +.snippet-box { + @include border-radius(2px); + + display: inline-block; + padding: 10px $gl-padding; + font-weight: normal; + margin-right: 10px; + font-size: $gl-font-size; + border: 1px solid; +} diff --git a/app/assets/stylesheets/pages/tree.scss b/app/assets/stylesheets/pages/tree.scss index dadd86e88c..d4ab6967cc 100644 --- a/app/assets/stylesheets/pages/tree.scss +++ b/app/assets/stylesheets/pages/tree.scss @@ -1,25 +1,11 @@ .tree-holder { - .tree-table-holder { - margin-left: -$gl-padding; - margin-right: -$gl-padding; - } - - .tree_progress { - display: none; - margin: 20px; - &.loading { - display: block; - } - } .tree-table { margin-bottom: 0; tr { > td, > th { - padding: 10px $gl-padding; - line-height: 32px; - border-color: $table-border-color !important; + line-height: 28px; } &:hover { diff --git a/app/controllers/admin/application_controller.rb b/app/controllers/admin/application_controller.rb index 56e2438646..9083bfb41c 100644 --- a/app/controllers/admin/application_controller.rb +++ b/app/controllers/admin/application_controller.rb @@ -8,4 +8,10 @@ class Admin::ApplicationController < ApplicationController def authenticate_admin! return render_404 unless current_user.is_admin? end + + def authorize_impersonator! + if session[:impersonator_id] + User.find_by!(username: session[:impersonator_id]).admin? + end + end end diff --git a/app/controllers/admin/application_settings_controller.rb b/app/controllers/admin/application_settings_controller.rb index 039f18f23e..a9bcfc7456 100644 --- a/app/controllers/admin/application_settings_controller.rb +++ b/app/controllers/admin/application_settings_controller.rb @@ -57,6 +57,8 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController :version_check_enabled, :admin_notification_email, :user_oauth_applications, + :shared_runners_enabled, + :max_artifacts_size, restricted_visibility_levels: [], import_sources: [] ) diff --git a/app/controllers/admin/impersonation_controller.rb b/app/controllers/admin/impersonation_controller.rb new file mode 100644 index 0000000000..0382402afa --- /dev/null +++ b/app/controllers/admin/impersonation_controller.rb @@ -0,0 +1,32 @@ +class Admin::ImpersonationController < Admin::ApplicationController + skip_before_action :authenticate_admin!, only: :destroy + + before_action :user + before_action :authorize_impersonator! + + def create + session[:impersonator_id] = current_user.username + session[:impersonator_return_to] = request.env['HTTP_REFERER'] + + warden.set_user(user, scope: 'user') + + flash[:alert] = "You are impersonating #{user.username}." + + redirect_to root_path + end + + def destroy + redirect = session[:impersonator_return_to] + + warden.set_user(user, scope: 'user') + + session[:impersonator_return_to] = nil + session[:impersonator_id] = nil + + redirect_to redirect || root_path + end + + def user + @user ||= User.find_by!(username: params[:id] || session[:impersonator_id]) + end +end diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index c63d0793e3..d7c927d444 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -63,12 +63,6 @@ class Admin::UsersController < Admin::ApplicationController end end - def login_as - sign_in(user) - flash[:alert] = "Logged in as #{user.username}" - redirect_to root_path - end - def disable_two_factor user.disable_two_factor! redirect_to admin_user_path(user), diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 865deb7d46..0d182e8eb0 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -59,13 +59,8 @@ class ApplicationController < ActionController::Base end def authenticate_user!(*args) - # If user is not signed-in and tries to access root_path - redirect him to landing page - # Don't redirect to the default URL to prevent endless redirections - if current_application_settings.home_page_url.present? && - current_application_settings.home_page_url.chomp('/') != Gitlab.config.gitlab['url'].chomp('/') - if current_user.nil? && root_path == request.path - redirect_to current_application_settings.home_page_url and return - end + if redirect_to_home_page_url? + redirect_to current_application_settings.home_page_url and return end super(*args) @@ -124,7 +119,6 @@ class ApplicationController < ActionController::Base project_path = "#{namespace}/#{id}" @project = Project.find_with_namespace(project_path) - if @project and can?(current_user, :read_project, @project) if @project.path_with_namespace != project_path redirect_to request.original_url.gsub(project_path, @project.path_with_namespace) and return @@ -347,4 +341,17 @@ class ApplicationController < ActionController::Base def git_import_enabled? current_application_settings.import_sources.include?('git') end + + def redirect_to_home_page_url? + # If user is not signed-in and tries to access root_path - redirect him to landing page + # Don't redirect to the default URL to prevent endless redirections + return false unless current_application_settings.home_page_url.present? + + home_page_url = current_application_settings.home_page_url.chomp('/') + root_urls = [Gitlab.config.gitlab['url'].chomp('/'), root_url.chomp('/')] + + return false if root_urls.include?(home_page_url) + + current_user.nil? && root_path == request.path + end end diff --git a/app/controllers/ci/admin/runners_controller.rb b/app/controllers/ci/admin/runners_controller.rb index 110954a612..0cafad2741 100644 --- a/app/controllers/ci/admin/runners_controller.rb +++ b/app/controllers/ci/admin/runners_controller.rb @@ -17,6 +17,7 @@ module Ci @projects = @projects.where(gitlab_id: @gl_projects.select(:id)) end @projects = @projects.where("ci_projects.id NOT IN (?)", @runner.projects.pluck(:id)) if @runner.projects.any? + @projects = @projects.joins(:gl_project) @projects = @projects.page(params[:page]).per(30) end diff --git a/app/controllers/ci/application_controller.rb b/app/controllers/ci/application_controller.rb index 9be470660e..848f2b4e31 100644 --- a/app/controllers/ci/application_controller.rb +++ b/app/controllers/ci/application_controller.rb @@ -8,14 +8,6 @@ module Ci private - def authenticate_public_page! - unless project.public - authenticate_user! - - return access_denied! unless can?(current_user, :read_project, gl_project) - end - end - def authenticate_token! unless project.valid_token?(params[:token]) return head(403) diff --git a/app/controllers/ci/events_controller.rb b/app/controllers/ci/events_controller.rb deleted file mode 100644 index 89b784a1e8..0000000000 --- a/app/controllers/ci/events_controller.rb +++ /dev/null @@ -1,21 +0,0 @@ -module Ci - class EventsController < Ci::ApplicationController - EVENTS_PER_PAGE = 50 - - before_action :authenticate_user! - before_action :project - before_action :authorize_manage_project! - - layout 'ci/project' - - def index - @events = project.events.order("created_at DESC").page(params[:page]).per(EVENTS_PER_PAGE) - end - - private - - def project - @project ||= Ci::Project.find(params[:project_id]) - end - end -end diff --git a/app/controllers/ci/lints_controller.rb b/app/controllers/ci/lints_controller.rb index 24dd1b5c93..a4f6aff49b 100644 --- a/app/controllers/ci/lints_controller.rb +++ b/app/controllers/ci/lints_controller.rb @@ -15,10 +15,10 @@ module Ci @builds = @config_processor.builds @status = true end - rescue Ci::GitlabCiYamlProcessor::ValidationError => e + rescue Ci::GitlabCiYamlProcessor::ValidationError, Psych::SyntaxError => e @error = e.message @status = false - rescue Exception + rescue @error = "Undefined error" @status = false end diff --git a/app/controllers/ci/projects_controller.rb b/app/controllers/ci/projects_controller.rb index 809b44387b..8406399fb6 100644 --- a/app/controllers/ci/projects_controller.rb +++ b/app/controllers/ci/projects_controller.rb @@ -26,10 +26,6 @@ module Ci redirect_to namespace_project_runners_path(project.gl_project.namespace, project.gl_project) end - def dumped_yaml - send_data @project.generated_yaml_config, filename: '.gitlab-ci.yml' - end - protected def project diff --git a/app/controllers/ci/runner_projects_controller.rb b/app/controllers/ci/runner_projects_controller.rb index 97f01d40af..9d55531336 100644 --- a/app/controllers/ci/runner_projects_controller.rb +++ b/app/controllers/ci/runner_projects_controller.rb @@ -4,8 +4,6 @@ module Ci before_action :project before_action :authorize_manage_project! - layout 'ci/project' - def create @runner = Ci::Runner.find(params[:runner_project][:runner_id]) diff --git a/app/controllers/concerns/creates_merge_request_for_commit.rb b/app/controllers/concerns/creates_merge_request_for_commit.rb new file mode 100644 index 0000000000..c752782215 --- /dev/null +++ b/app/controllers/concerns/creates_merge_request_for_commit.rb @@ -0,0 +1,28 @@ +module CreatesMergeRequestForCommit + extend ActiveSupport::Concern + + def new_merge_request_path + if @project.forked? + target_project = @project.forked_from_project || @project + target_branch = target_project.repository.root_ref + else + target_project = @project + target_branch = @ref + end + + new_namespace_project_merge_request_path( + @project.namespace, + @project, + merge_request: { + source_project_id: @project.id, + target_project_id: target_project.id, + source_branch: @new_branch, + target_branch: target_branch + } + ) + end + + def create_merge_request? + params[:create_merge_request] && @new_branch != @ref + end +end diff --git a/app/controllers/concerns/global_milestones.rb b/app/controllers/concerns/global_milestones.rb new file mode 100644 index 0000000000..b428249acd --- /dev/null +++ b/app/controllers/concerns/global_milestones.rb @@ -0,0 +1,19 @@ +module GlobalMilestones + extend ActiveSupport::Concern + + def milestones + @milestones = MilestonesFinder.new.execute(@projects, params) + @milestones = GlobalMilestone.build_collection(@milestones) + @milestones = Kaminari.paginate_array(@milestones).page(params[:page]).per(ApplicationController::PER_PAGE) + end + + def milestone + milestones = Milestone.of_projects(@projects).where(title: params[:title]) + + if milestones.present? + @milestone = GlobalMilestone.new(params[:title], milestones) + else + render_404 + end + end +end diff --git a/app/controllers/dashboard/milestones_controller.rb b/app/controllers/dashboard/milestones_controller.rb index 53896d4f2c..2bdce0f8a0 100644 --- a/app/controllers/dashboard/milestones_controller.rb +++ b/app/controllers/dashboard/milestones_controller.rb @@ -1,34 +1,19 @@ class Dashboard::MilestonesController < Dashboard::ApplicationController - before_action :load_projects + include GlobalMilestones + + before_action :projects + before_action :milestones, only: [:index] + before_action :milestone, only: [:show] def index - project_milestones = case params[:state] - when 'all'; state - when 'closed'; state('closed') - else state('active') - end - @dashboard_milestones = Milestones::GroupService.new(project_milestones).execute - @dashboard_milestones = Kaminari.paginate_array(@dashboard_milestones).page(params[:page]).per(PER_PAGE) end def show - project_milestones = Milestone.where(project_id: @projects).order("due_date ASC") - @dashboard_milestone = Milestones::GroupService.new(project_milestones).milestone(title) end private - def load_projects - @projects = current_user.authorized_projects.sorted_by_activity.non_archived - end - - def title - params[:title] - end - - def state(state = nil) - conditions = { project_id: @projects } - conditions.reverse_merge!(state: state) if state - Milestone.where(conditions).order("title ASC") + def projects + @projects ||= current_user.authorized_projects.sorted_by_activity.non_archived end end diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index 4ebb3d7276..b2c1fa4230 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -1,5 +1,6 @@ class DashboardController < Dashboard::ApplicationController before_action :event_filter, only: :activity + before_action :projects, only: [:issues, :merge_requests] respond_to :html @@ -47,4 +48,8 @@ class DashboardController < Dashboard::ApplicationController @events = @event_filter.apply_filter(@events).with_associations @events = @events.limit(20).offset(params[:offset] || 0) end + + def projects + @projects ||= current_user.authorized_projects.sorted_by_activity.non_archived + end end diff --git a/app/controllers/groups/application_controller.rb b/app/controllers/groups/application_controller.rb index 6878d4bc07..be801858ea 100644 --- a/app/controllers/groups/application_controller.rb +++ b/app/controllers/groups/application_controller.rb @@ -1,8 +1,13 @@ class Groups::ApplicationController < ApplicationController layout 'group' + before_action :group private - + + def group + @group ||= Group.find_by(path: params[:group_id]) + end + def authorize_read_group! unless @group and can?(current_user, :read_group, @group) if current_user.nil? @@ -12,13 +17,13 @@ class Groups::ApplicationController < ApplicationController end end end - + def authorize_admin_group! unless can?(current_user, :admin_group, group) return render_404 end end - + def authorize_admin_group_member! unless can?(current_user, :admin_group_member, group) return render_403 diff --git a/app/controllers/groups/avatars_controller.rb b/app/controllers/groups/avatars_controller.rb index 6aa64222f7..76c87366ba 100644 --- a/app/controllers/groups/avatars_controller.rb +++ b/app/controllers/groups/avatars_controller.rb @@ -1,8 +1,6 @@ -class Groups::AvatarsController < ApplicationController +class Groups::AvatarsController < Groups::ApplicationController def destroy - @group = Group.find_by(path: params[:group_id]) @group.remove_avatar! - @group.save redirect_to edit_group_path(@group) diff --git a/app/controllers/groups/group_members_controller.rb b/app/controllers/groups/group_members_controller.rb index 91518c44a9..0e902c4bb4 100644 --- a/app/controllers/groups/group_members_controller.rb +++ b/app/controllers/groups/group_members_controller.rb @@ -1,11 +1,9 @@ class Groups::GroupMembersController < Groups::ApplicationController skip_before_action :authenticate_user!, only: [:index] - before_action :group # Authorize before_action :authorize_read_group! - before_action :authorize_admin_group!, except: [:index, :leave] - before_action :authorize_admin_group_member!, only: [:create, :resend_invite] + before_action :authorize_admin_group_member!, except: [:index, :leave] def index @project = @group.projects.find(params[:project_id]) if params[:project_id] @@ -18,7 +16,8 @@ class Groups::GroupMembersController < Groups::ApplicationController end @members = @members.order('access_level DESC').page(params[:page]).per(50) - @group_member = GroupMember.new + + @group_member = @group.group_members.new end def create @@ -28,24 +27,23 @@ class Groups::GroupMembersController < Groups::ApplicationController end def update - @member = @group.group_members.find(params[:id]) + @group_member = @group.group_members.find(params[:id]) - return render_403 unless can?(current_user, :update_group_member, @member) + return render_403 unless can?(current_user, :update_group_member, @group_member) - @member.update_attributes(member_params) + @group_member.update_attributes(member_params) end def destroy @group_member = @group.group_members.find(params[:id]) - if can?(current_user, :destroy_group_member, @group_member) # May fail if last owner. - @group_member.destroy - respond_to do |format| - format.html { redirect_to group_group_members_path(@group), notice: 'User was successfully removed from group.' } - format.js { render nothing: true } - end - else - return render_403 + return render_403 unless can?(current_user, :destroy_group_member, @group_member) + + @group_member.destroy + + respond_to do |format| + format.html { redirect_to group_group_members_path(@group), notice: 'User was successfully removed from group.' } + format.js { render nothing: true } end end @@ -64,10 +62,11 @@ class Groups::GroupMembersController < Groups::ApplicationController end def leave - @group_member = @group.group_members.where(user_id: current_user.id).first + @group_member = @group.group_members.find_by(user_id: current_user) if can?(current_user, :destroy_group_member, @group_member) @group_member.destroy + redirect_to(dashboard_groups_path, notice: "You left #{group.name} group.") else if @group.last_owner?(current_user) @@ -80,10 +79,6 @@ class Groups::GroupMembersController < Groups::ApplicationController protected - def group - @group ||= Group.find_by(path: params[:group_id]) - end - def member_params params.require(:group_member).permit(:access_level, :user_id) end diff --git a/app/controllers/groups/milestones_controller.rb b/app/controllers/groups/milestones_controller.rb index 669f7f3126..10233222ee 100644 --- a/app/controllers/groups/milestones_controller.rb +++ b/app/controllers/groups/milestones_controller.rb @@ -1,54 +1,55 @@ class Groups::MilestonesController < Groups::ApplicationController - before_action :authorize_group_milestone!, only: :update + include GlobalMilestones + + before_action :projects + before_action :milestones, only: [:index] + before_action :milestone, only: [:show, :update] + before_action :authorize_group_milestone!, only: [:create, :update] def index - project_milestones = case params[:state] - when 'all'; state - when 'closed'; state('closed') - else state('active') - end - @group_milestones = Milestones::GroupService.new(project_milestones).execute - @group_milestones = Kaminari.paginate_array(@group_milestones).page(params[:page]).per(PER_PAGE) + end + + def new + @milestone = Milestone.new + end + + def create + project_ids = params[:milestone][:project_ids] + title = milestone_params[:title] + + @group.projects.where(id: project_ids).each do |project| + Milestones::CreateService.new(project, current_user, milestone_params).execute + end + + redirect_to milestone_path(title) end def show - project_milestones = Milestone.where(project_id: group.projects).order("due_date ASC") - @group_milestone = Milestones::GroupService.new(project_milestones).milestone(title) end def update - project_milestones = Milestone.where(project_id: group.projects).order("due_date ASC") - @group_milestones = Milestones::GroupService.new(project_milestones).milestone(title) - - @group_milestones.milestones.each do |milestone| - Milestones::UpdateService.new(milestone.project, current_user, params[:milestone]).execute(milestone) + @milestone.milestones.each do |milestone| + Milestones::UpdateService.new(milestone.project, current_user, milestone_params).execute(milestone) end - respond_to do |format| - format.js - format.html do - redirect_to group_milestones_path(group) - end - end + redirect_back_or_default(default: milestone_path(@milestone.title)) end private - def group - @group ||= Group.find_by(path: params[:group_id]) - end - - def title - params[:title] - end - - def state(state = nil) - conditions = { project_id: group.projects } - conditions.reverse_merge!(state: state) if state - Milestone.where(conditions).order("title ASC") - end - def authorize_group_milestone! - return render_404 unless can?(current_user, :admin_group, group) + return render_404 unless can?(current_user, :admin_milestones, group) + end + + def milestone_params + params.require(:milestone).permit(:title, :description, :due_date, :state_event) + end + + def milestone_path(title) + group_milestone_path(@group, title.parameterize, title: title) + end + + def projects + @projects ||= @group.projects end end diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb index 40fb15a5b3..fb4eb094f2 100644 --- a/app/controllers/groups_controller.rb +++ b/app/controllers/groups_controller.rb @@ -4,12 +4,12 @@ class GroupsController < Groups::ApplicationController before_action :group, except: [:new, :create] # Authorize - before_action :authorize_read_group!, except: [:show, :new, :create] + before_action :authorize_read_group!, except: [:show, :new, :create, :autocomplete] before_action :authorize_admin_group!, only: [:edit, :update, :destroy, :projects] before_action :authorize_create_group!, only: [:new, :create] # Load group projects - before_action :load_projects, except: [:new, :create, :projects, :edit, :update] + before_action :load_projects, except: [:new, :create, :projects, :edit, :update, :autocomplete] before_action :event_filter, only: :show layout :determine_layout @@ -133,7 +133,7 @@ class GroupsController < Groups::ApplicationController end def group_params - params.require(:group).permit(:name, :description, :path, :avatar) + params.require(:group).permit(:name, :description, :path, :avatar, :public) end def load_events diff --git a/app/controllers/projects/application_controller.rb b/app/controllers/projects/application_controller.rb index 519d6d6127..d3f926b62b 100644 --- a/app/controllers/projects/application_controller.rb +++ b/app/controllers/projects/application_controller.rb @@ -29,7 +29,7 @@ class Projects::ApplicationController < ApplicationController private def ci_enabled - return render_404 unless @project.gitlab_ci? + return render_404 unless @project.builds_enabled? end def ci_project diff --git a/app/controllers/projects/blob_controller.rb b/app/controllers/projects/blob_controller.rb index 8cc2f21d88..31a33bfd23 100644 --- a/app/controllers/projects/blob_controller.rb +++ b/app/controllers/projects/blob_controller.rb @@ -1,6 +1,7 @@ # Controller for viewing a file's blame class Projects::BlobController < Projects::ApplicationController include ExtractsPath + include CreatesMergeRequestForCommit include ActionView::Helpers::SanitizeHelper # Raised when given an invalid file path @@ -22,21 +23,9 @@ class Projects::BlobController < Projects::ApplicationController end def create - result = Files::CreateService.new(@project, current_user, @commit_params).execute - - if result[:status] == :success - flash[:notice] = "The changes have been successfully committed" - respond_to do |format| - format.html { redirect_to namespace_project_blob_path(@project.namespace, @project, File.join(@target_branch, @file_path)) } - format.json { render json: { message: "success", filePath: namespace_project_blob_path(@project.namespace, @project, File.join(@target_branch, @file_path)) } } - end - else - flash[:alert] = result[:message] - respond_to do |format| - format.html { render :new } - format.json { render json: { message: "failed", filePath: namespace_project_blob_path(@project.namespace, @project, @id) } } - end - end + create_commit(Files::CreateService, success_path: after_create_path, + failure_view: :new, + failure_path: namespace_project_new_blob_path(@project.namespace, @project, @ref)) end def show @@ -47,21 +36,9 @@ class Projects::BlobController < Projects::ApplicationController end def update - result = Files::UpdateService.new(@project, current_user, @commit_params).execute - - if result[:status] == :success - flash[:notice] = "Your changes have been successfully committed" - respond_to do |format| - format.html { redirect_to after_edit_path } - format.json { render json: { message: "success", filePath: after_edit_path } } - end - else - flash[:alert] = result[:message] - respond_to do |format| - format.html { render :edit } - format.json { render json: { message: "failed", filePath: namespace_project_new_blob_path(@project.namespace, @project, @id) } } - end - end + create_commit(Files::UpdateService, success_path: after_edit_path, + failure_view: :edit, + failure_path: namespace_project_blob_path(@project.namespace, @project, @id)) end def preview @@ -77,7 +54,7 @@ class Projects::BlobController < Projects::ApplicationController if result[:status] == :success flash[:notice] = "Your changes have been successfully committed" - redirect_to namespace_project_tree_path(@project.namespace, @project, @target_branch) + redirect_to after_destroy_path else flash[:alert] = result[:message] render :show @@ -131,15 +108,51 @@ class Projects::BlobController < Projects::ApplicationController render_404 end + def create_commit(service, success_path:, failure_view:, failure_path:) + result = service.new(@project, current_user, @commit_params).execute + + if result[:status] == :success + flash[:notice] = "Your changes have been successfully committed" + respond_to do |format| + format.html { redirect_to success_path } + format.json { render json: { message: "success", filePath: success_path } } + end + else + flash[:alert] = result[:message] + respond_to do |format| + format.html { render failure_view } + format.json { render json: { message: "failed", filePath: failure_path } } + end + end + end + + def after_create_path + @after_create_path ||= + if create_merge_request? + new_merge_request_path + else + namespace_project_blob_path(@project.namespace, @project, File.join(@new_branch, @file_path)) + end + end + def after_edit_path @after_edit_path ||= - if from_merge_request + if create_merge_request? + new_merge_request_path + elsif from_merge_request && @new_branch == @ref diffs_namespace_project_merge_request_path(from_merge_request.target_project.namespace, from_merge_request.target_project, from_merge_request) + "#file-path-#{hexdigest(@path)}" - elsif @target_branch.present? - namespace_project_blob_path(@project.namespace, @project, File.join(@target_branch, @path)) else - namespace_project_blob_path(@project.namespace, @project, @id) + namespace_project_blob_path(@project.namespace, @project, File.join(@new_branch, @path)) + end + end + + def after_destroy_path + @after_destroy_path ||= + if create_merge_request? + new_merge_request_path + else + namespace_project_tree_path(@project.namespace, @project, @new_branch) end end @@ -154,14 +167,14 @@ class Projects::BlobController < Projects::ApplicationController def editor_variables @current_branch = @ref - @target_branch = params[:new_branch].present? ? sanitized_new_branch_name : @ref + @new_branch = params[:new_branch].present? ? sanitized_new_branch_name : @ref @file_path = if action_name.to_s == 'create' if params[:file].present? params[:file_name] = params[:file].original_filename end - File.join(@path, File.basename(params[:file_name])) + File.join(@path, params[:file_name]) else @path end @@ -174,7 +187,7 @@ class Projects::BlobController < Projects::ApplicationController @commit_params = { file_path: @file_path, current_branch: @current_branch, - target_branch: @target_branch, + target_branch: @new_branch, commit_message: params[:commit_message], file_content: params[:content], file_content_encoding: params[:encoding] diff --git a/app/controllers/projects/builds_controller.rb b/app/controllers/projects/builds_controller.rb index 816012762c..4638f77b88 100644 --- a/app/controllers/projects/builds_controller.rb +++ b/app/controllers/projects/builds_controller.rb @@ -2,23 +2,25 @@ class Projects::BuildsController < Projects::ApplicationController before_action :ci_project before_action :build, except: [:index, :cancel_all] - before_action :authorize_admin_project!, except: [:index, :show, :status] + before_action :authorize_manage_builds!, except: [:index, :show, :status] + before_action :authorize_download_build_artifacts!, only: [:download] layout "project" def index @scope = params[:scope] @all_builds = project.ci_builds + @builds = @all_builds.order('created_at DESC') @builds = case @scope when 'all' - @all_builds + @builds when 'finished' - @all_builds.finished + @builds.finished else - @all_builds.running_or_pending + @builds.running_or_pending.reverse_order end - @builds = @builds.order('created_at DESC').page(params[:page]).per(30) + @builds = @builds.page(params[:page]).per(30) end def cancel_all @@ -29,7 +31,7 @@ class Projects::BuildsController < Projects::ApplicationController def show @builds = @ci_project.commits.find_by_sha(@build.sha).builds.order('id DESC') - @builds = @builds.where("id not in (?)", @build.id).page(params[:page]).per(20) + @builds = @builds.where("id not in (?)", @build.id) @commit = @build.commit respond_to do |format| @@ -41,17 +43,25 @@ class Projects::BuildsController < Projects::ApplicationController end def retry - if @build.commands.blank? + unless @build.retryable? return page_404 end build = Ci::Build.retry(@build) - if params[:return_to] - redirect_to URI.parse(params[:return_to]).path - else - redirect_to build_path(build) + redirect_to build_path(build) + end + + def download + unless artifacts_file.file_storage? + return redirect_to artifacts_file.url end + + unless artifacts_file.exists? + return not_found! + end + + send_file artifacts_file.path, disposition: 'attachment' end def status @@ -70,7 +80,27 @@ class Projects::BuildsController < Projects::ApplicationController @build ||= ci_project.builds.unscoped.find_by!(id: params[:id]) end + def artifacts_file + build.artifacts_file + end + def build_path(build) namespace_project_build_path(build.gl_project.namespace, build.gl_project, build) end + + def authorize_manage_builds! + unless can?(current_user, :manage_builds, project) + return page_404 + end + end + + def authorize_download_build_artifacts! + unless can?(current_user, :download_build_artifacts, @project) + if current_user.nil? + return authenticate_user! + else + return render_404 + end + end + end end diff --git a/app/controllers/projects/ci_services_controller.rb b/app/controllers/projects/ci_services_controller.rb index 406f313ae7..550a019e8e 100644 --- a/app/controllers/projects/ci_services_controller.rb +++ b/app/controllers/projects/ci_services_controller.rb @@ -14,17 +14,17 @@ class Projects::CiServicesController < Projects::ApplicationController end def update - if @service.update_attributes(service_params) - redirect_to edit_namespace_project_ci_service_path(@project, @project.namespace, @service.to_param) + if service.update_attributes(service_params) + redirect_to edit_namespace_project_ci_service_path(@project.namespace, @project, service.to_param) else render 'edit' end end def test - last_build = @project.builds.last + last_build = @project.ci_builds.last - if @service.execute(last_build) + if service.execute(last_build) message = { notice: 'We successfully tested the service' } else message = { alert: 'We tried to test the service but error occurred' } diff --git a/app/controllers/projects/commit_controller.rb b/app/controllers/projects/commit_controller.rb index 7886f3c6de..deefdd7666 100644 --- a/app/controllers/projects/commit_controller.rb +++ b/app/controllers/projects/commit_controller.rb @@ -4,16 +4,17 @@ class Projects::CommitController < Projects::ApplicationController # Authorize before_action :require_non_empty_project - before_action :authorize_download_code! + before_action :authorize_download_code!, except: [:cancel_builds] + before_action :authorize_manage_builds!, only: [:cancel_builds] before_action :commit + before_action :authorize_manage_builds!, only: [:cancel_builds, :retry_builds] + before_action :define_show_vars, only: [:show, :builds] def show return git_not_found! unless @commit @line_notes = commit.notes.inline - @diffs = @commit.diffs @note = @project.build_commit_note(commit) - @notes_count = commit.notes.count @notes = commit.notes.not_inline.fresh @noteable = @commit @comments_allowed = @reply_allowed = true @@ -22,8 +23,6 @@ class Projects::CommitController < Projects::ApplicationController commit_id: @commit.id } - @ci_commit = project.ci_commit(commit.sha) - respond_to do |format| format.html format.diff { render text: @commit.to_diff } @@ -31,20 +30,25 @@ class Projects::CommitController < Projects::ApplicationController end end - def ci - @ci_commit = @project.ci_commit(@commit.sha) - @builds = @ci_commit.builds if @ci_commit - @notes_count = @commit.notes.count + def builds @ci_project = @project.gitlab_ci_project end def cancel_builds - @ci_commit = @project.ci_commit(@commit.sha) - @ci_commit.builds.running_or_pending.each(&:cancel) + ci_commit.builds.running_or_pending.each(&:cancel) - redirect_to ci_namespace_project_commit_path(project.namespace, project, commit.sha) + redirect_to builds_namespace_project_commit_path(project.namespace, project, commit.sha) end + def retry_builds + ci_commit.builds.latest.failed.each do |build| + if build.retryable? + Ci::Build.retry(build) + end + end + + redirect_to builds_namespace_project_commit_path(project.namespace, project, commit.sha) + end def branches @branches = @project.repository.branch_names_contains(commit.id) @@ -52,7 +56,26 @@ class Projects::CommitController < Projects::ApplicationController render layout: false end + private + def commit @commit ||= @project.commit(params[:id]) end + + def ci_commit + @ci_commit ||= project.ci_commit(commit.sha) + end + + def define_show_vars + @diffs = commit.diffs + @notes_count = commit.notes.count + + @builds = ci_commit.builds if ci_commit + end + + def authorize_manage_builds! + unless can?(current_user, :manage_builds, project) + return page_404 + end + end end diff --git a/app/controllers/projects/commits_controller.rb b/app/controllers/projects/commits_controller.rb index d1c15174ae..58fb946dbc 100644 --- a/app/controllers/projects/commits_controller.rb +++ b/app/controllers/projects/commits_controller.rb @@ -12,7 +12,7 @@ class Projects::CommitsController < Projects::ApplicationController @limit, @offset = (params[:limit] || 40), (params[:offset] || 0) @commits = @repo.commits(@ref, @path, @limit, @offset) - @note_counts = Note.where(commit_id: @commits.map(&:id)). + @note_counts = project.notes.where(commit_id: @commits.map(&:id)). group(:commit_id).count respond_to do |format| diff --git a/app/controllers/projects/compare_controller.rb b/app/controllers/projects/compare_controller.rb index 71aaad1fad..5200d609cc 100644 --- a/app/controllers/projects/compare_controller.rb +++ b/app/controllers/projects/compare_controller.rb @@ -12,15 +12,16 @@ class Projects::CompareController < Projects::ApplicationController def show base_ref = Addressable::URI.unescape(params[:from]) @ref = head_ref = Addressable::URI.unescape(params[:to]) + diff_options = { ignore_whitespace_change: true } if params[:w] == '1' compare_result = CompareService.new. - execute(@project, head_ref, @project, base_ref) + execute(@project, head_ref, @project, base_ref, diff_options) if compare_result @commits = Commit.decorate(compare_result.commits, @project) @diffs = compare_result.diffs - @commit = @commits.last - @first_commit = @commits.first + @commit = @project.commit(head_ref) + @first_commit = @project.commit(base_ref) @line_notes = [] end end diff --git a/app/controllers/projects/imports_controller.rb b/app/controllers/projects/imports_controller.rb index 066b66014f..fb8788f081 100644 --- a/app/controllers/projects/imports_controller.rb +++ b/app/controllers/projects/imports_controller.rb @@ -28,8 +28,8 @@ class Projects::ImportsController < Projects::ApplicationController if @project.import_finished? redirect_to(project_path(@project)) and return else - redirect_to new_namespace_project_import_path(@project.namespace, - @project) && return + redirect_to(new_namespace_project_import_path(@project.namespace, + @project)) and return end end end diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index e767efbdc0..5250a0f5e6 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -60,7 +60,7 @@ class Projects::IssuesController < Projects::ApplicationController def show @participants = @issue.participants(current_user) @note = @project.notes.new(noteable: @issue) - @notes = @issue.notes.with_associations.fresh + @notes = @issue.notes.nonawards.with_associations.fresh @noteable = @issue respond_with(@issue) @@ -158,10 +158,12 @@ class Projects::IssuesController < Projects::ApplicationController end def issue_params - params.require(:issue).permit( + permitted = params.require(:issue).permit( :title, :assignee_id, :position, :description, :milestone_id, :state_event, :task_num, label_ids: [] ) + params[:issue][:title].strip! if params[:issue][:title] + permitted end def bulk_update_params diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 16c4238662..6378a1f56b 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -31,6 +31,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController end @merge_requests = @merge_requests.page(params[:page]).per(PER_PAGE) + @merge_requests = @merge_requests.preload(:target_project) respond_to do |format| format.html @@ -253,7 +254,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController # Build a note object for comment form @note = @project.notes.new(noteable: @merge_request) - @notes = @merge_request.mr_and_commit_notes.inc_author.fresh + @notes = @merge_request.mr_and_commit_notes.nonawards.inc_author.fresh @discussions = Note.discussions_from_notes(@notes) @noteable = @merge_request @@ -275,11 +276,13 @@ class Projects::MergeRequestsController < Projects::ApplicationController end def merge_request_params - params.require(:merge_request).permit( + permitted = params.require(:merge_request).permit( :title, :assignee_id, :source_project_id, :source_branch, :target_project_id, :target_branch, :milestone_id, :state_event, :description, :task_num, label_ids: [] ) + params[:merge_request][:title].strip! if params[:merge_request][:title] + permitted end # Make sure merge requests created before 8.0 diff --git a/app/controllers/projects/milestones_controller.rb b/app/controllers/projects/milestones_controller.rb index 86f4a02a6e..15506bd677 100644 --- a/app/controllers/projects/milestones_controller.rb +++ b/app/controllers/projects/milestones_controller.rb @@ -75,11 +75,7 @@ class Projects::MilestonesController < Projects::ApplicationController end def sort_issues - @issues = @milestone.issues.where(id: params['sortable_issue']) - @issues.each do |issue| - issue.position = params['sortable_issue'].index(issue.id.to_s) + 1 - issue.save - end + @milestone.sort_issues(params['sortable_issue'].map(&:to_i)) render json: { saved: true } end diff --git a/app/controllers/projects/notes_controller.rb b/app/controllers/projects/notes_controller.rb index 41cd08c93c..5ac18446aa 100644 --- a/app/controllers/projects/notes_controller.rb +++ b/app/controllers/projects/notes_controller.rb @@ -3,7 +3,7 @@ class Projects::NotesController < Projects::ApplicationController before_action :authorize_read_note! before_action :authorize_create_note!, only: [:create] before_action :authorize_admin_note!, only: [:update, :destroy] - before_action :find_current_user_notes, except: [:destroy, :delete_attachment] + before_action :find_current_user_notes, except: [:destroy, :delete_attachment, :award_toggle] def index current_fetched_at = Time.now.to_i @@ -58,6 +58,30 @@ class Projects::NotesController < Projects::ApplicationController end end + def award_toggle + noteable = if note_params[:noteable_type] == "issue" + project.issues.find(note_params[:noteable_id]) + else + project.merge_requests.find(note_params[:noteable_id]) + end + + data = { + author: current_user, + is_award: true, + note: note_params[:note].gsub(":", '') + } + + note = noteable.notes.find_by(data) + + if note + note.destroy + else + Notes::CreateService.new(project, current_user, note_params).execute + end + + render json: { ok: true } + end + private def note @@ -111,6 +135,9 @@ class Projects::NotesController < Projects::ApplicationController id: note.id, discussion_id: note.discussion_id, html: note_to_html(note), + award: note.is_award, + emoji_path: note.is_award ? view_context.image_url(::AwardEmoji.path_to_emoji_image(note.note)) : "", + note: note.note, discussion_html: note_to_discussion_html(note), discussion_with_diff_html: note_to_discussion_with_diff_html(note) } diff --git a/app/controllers/projects/project_members_controller.rb b/app/controllers/projects/project_members_controller.rb index 9de5269cd2..07eb94e4f4 100644 --- a/app/controllers/projects/project_members_controller.rb +++ b/app/controllers/projects/project_members_controller.rb @@ -1,6 +1,6 @@ class Projects::ProjectMembersController < Projects::ApplicationController # Authorize - before_action :authorize_admin_project!, except: :leave + before_action :authorize_admin_project_member!, except: :leave def index @project_members = @project.project_members @@ -29,10 +29,6 @@ class Projects::ProjectMembersController < Projects::ApplicationController @project_member = @project.project_members.new end - def new - @project_member = @project.project_members.new - end - def create @project.team.add_users(params[:user_ids].split(','), params[:access_level], current_user) @@ -41,11 +37,17 @@ class Projects::ProjectMembersController < Projects::ApplicationController def update @project_member = @project.project_members.find(params[:id]) + + return render_403 unless can?(current_user, :update_project_member, @project_member) + @project_member.update_attributes(member_params) end def destroy @project_member = @project.project_members.find(params[:id]) + + return render_403 unless can?(current_user, :destroy_project_member, @project_member) + @project_member.destroy respond_to do |format| @@ -71,16 +73,22 @@ class Projects::ProjectMembersController < Projects::ApplicationController end def leave - if @project.namespace == current_user.namespace - message = 'You can not leave your own project. Transfer or delete the project.' - return redirect_back_or_default(default: { action: 'index' }, options: { alert: message }) - end + @project_member = @project.project_members.find_by(user_id: current_user) - @project.project_members.find_by(user_id: current_user).destroy + if can?(current_user, :destroy_project_member, @project_member) + @project_member.destroy - respond_to do |format| - format.html { redirect_to dashboard_projects_path } - format.js { render nothing: true } + respond_to do |format| + format.html { redirect_to dashboard_projects_path, notice: "You left the project." } + format.js { render nothing: true } + end + else + if current_user == @project.owner + message = 'You can not leave your own project. Transfer or delete the project.' + redirect_back_or_default(default: { action: 'index' }, options: { alert: message }) + else + render_403 + end end end diff --git a/app/controllers/projects/releases_controller.rb b/app/controllers/projects/releases_controller.rb new file mode 100644 index 0000000000..0825a4311c --- /dev/null +++ b/app/controllers/projects/releases_controller.rb @@ -0,0 +1,31 @@ +class Projects::ReleasesController < Projects::ApplicationController + # Authorize + before_action :require_non_empty_project + before_action :authorize_download_code! + before_action :authorize_push_code! + before_action :tag + before_action :release + + def edit + end + + def update + release.update_attributes(release_params) + + redirect_to namespace_project_tag_path(@project.namespace, @project, @tag.name) + end + + private + + def tag + @tag ||= @repository.find_tag(params[:tag_id]) + end + + def release + @release ||= @project.releases.find_or_initialize_by(tag: @tag.name) + end + + def release_params + params.require(:release).permit(:description) + end +end diff --git a/app/controllers/projects/runners_controller.rb b/app/controllers/projects/runners_controller.rb index deb07a2141..bfbcf2567f 100644 --- a/app/controllers/projects/runners_controller.rb +++ b/app/controllers/projects/runners_controller.rb @@ -6,11 +6,10 @@ class Projects::RunnersController < Projects::ApplicationController layout 'project_settings' def index - @runners = @ci_project.runners.order('id DESC') - @specific_runners = - Ci::Runner.specific.includes(:runner_projects). - where(Ci::RunnerProject.table_name => { project_id: current_user.authorized_projects } ). - where.not(id: @runners).order("#{Ci::Runner.table_name}.id DESC").page(params[:page]).per(20) + @runners = @ci_project.runners.ordered + @specific_runners = current_user.ci_authorized_runners. + where.not(id: @ci_project.runners). + ordered.page(params[:page]).per(20) @shared_runners = Ci::Runner.shared.active @shared_runners_count = @shared_runners.count(:all) end diff --git a/app/controllers/projects/snippets_controller.rb b/app/controllers/projects/snippets_controller.rb index b07a2a8db2..2104c7a7a7 100644 --- a/app/controllers/projects/snippets_controller.rb +++ b/app/controllers/projects/snippets_controller.rb @@ -21,6 +21,7 @@ class Projects::SnippetsController < Projects::ApplicationController filter: :by_project, project: @project }) + @snippets = @snippets.page(params[:page]).per(PER_PAGE) end def new diff --git a/app/controllers/projects/tags_controller.rb b/app/controllers/projects/tags_controller.rb index f565fbbbbc..cb39c2b878 100644 --- a/app/controllers/projects/tags_controller.rb +++ b/app/controllers/projects/tags_controller.rb @@ -8,15 +8,23 @@ class Projects::TagsController < Projects::ApplicationController def index sorted = VersionSorter.rsort(@repository.tag_names) @tags = Kaminari.paginate_array(sorted).page(params[:page]).per(PER_PAGE) + @releases = project.releases.where(tag: @tags) + end + + def show + @tag = @repository.find_tag(params[:id]) + @release = @project.releases.find_or_initialize_by(tag: @tag.name) + @commit = @repository.commit(@tag.target) end def create result = CreateTagService.new(@project, current_user). - execute(params[:tag_name], params[:ref], params[:message]) + execute(params[:tag_name], params[:ref], params[:message], params[:release_description]) if result[:status] == :success @tag = result[:tag] - redirect_to namespace_project_tags_path(@project.namespace, @project) + + redirect_to namespace_project_tag_path(@project.namespace, @project, @tag.name) else @error = result[:message] render action: 'new' @@ -26,12 +34,6 @@ class Projects::TagsController < Projects::ApplicationController def destroy DeleteTagService.new(project, current_user).execute(params[:id]) - respond_to do |format| - format.html do - redirect_to namespace_project_tags_path(@project.namespace, - @project) - end - format.js - end + redirect_to namespace_project_tags_path(@project.namespace, @project) end end diff --git a/app/controllers/projects/tree_controller.rb b/app/controllers/projects/tree_controller.rb index bdcb1a3e29..8f272ad128 100644 --- a/app/controllers/projects/tree_controller.rb +++ b/app/controllers/projects/tree_controller.rb @@ -1,6 +1,7 @@ # Controller for viewing a repository's file structure class Projects::TreeController < Projects::ApplicationController include ExtractsPath + include CreatesMergeRequestForCommit include ActionView::Helpers::SanitizeHelper before_action :require_non_empty_project, except: [:new, :create] @@ -43,7 +44,7 @@ class Projects::TreeController < Projects::ApplicationController if result && result[:status] == :success flash[:notice] = "The directory has been successfully created" respond_to do |format| - format.html { redirect_to namespace_project_blob_path(@project.namespace, @project, File.join(@new_branch, @dir_name)) } + format.html { redirect_to after_create_dir_path } end else flash[:alert] = message @@ -53,6 +54,8 @@ class Projects::TreeController < Projects::ApplicationController end end + private + def assign_dir_vars @new_branch = params[:new_branch].present? ? sanitize(strip_tags(params[:new_branch])) : @ref @dir_name = File.join(@path, params[:dir_name]) @@ -63,4 +66,12 @@ class Projects::TreeController < Projects::ApplicationController commit_message: params[:commit_message], } end + + def after_create_dir_path + if create_merge_request? + new_merge_request_path + else + namespace_project_blob_path(@project.namespace, @project, File.join(@new_branch, @dir_name)) + end + end end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 1ea992c4e8..23453195e8 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -1,11 +1,14 @@ class ProjectsController < ApplicationController - prepend_before_filter :render_go_import, only: [:show] + include ExtractsPath + + prepend_before_action :render_go_import, only: [:show] skip_before_action :authenticate_user!, only: [:show, :activity] before_action :project, except: [:new, :create] before_action :repository, except: [:new, :create] + before_action :assign_ref_vars, :tree, only: [:show], if: :repo_exists? # Authorize - before_action :authorize_admin_project!, only: [:edit, :update, :destroy, :transfer, :archive, :unarchive] + before_action :authorize_admin_project!, only: [:edit, :update] before_action :event_filter, only: [:show, :activity] layout :determine_layout @@ -56,6 +59,8 @@ class ProjectsController < ApplicationController end def transfer + return access_denied! unless can?(current_user, :change_namespace, @project) + namespace = Namespace.find_by(id: params[:new_namespace_id]) ::Projects::TransferService.new(project, current_user).execute(namespace) @@ -64,6 +69,14 @@ class ProjectsController < ApplicationController end end + def remove_fork + return access_denied! unless can?(current_user, :remove_fork_project, @project) + + if @project.unlink_fork + flash[:notice] = 'The fork relationship has been removed.' + end + end + def activity respond_to do |format| format.html @@ -110,11 +123,7 @@ class ProjectsController < ApplicationController ::Projects::DestroyService.new(@project, current_user, {}).execute flash[:alert] = "Project '#{@project.name}' was deleted." - if request.referer.include?('/admin') - redirect_to admin_namespaces_projects_path - else - redirect_to dashboard_projects_path - end + redirect_back_or_default(default: dashboard_projects_path, options: {}) rescue Projects::DestroyService::DestroyError => ex redirect_to edit_project_path(@project), alert: ex.message end @@ -139,6 +148,7 @@ class ProjectsController < ApplicationController def archive return access_denied! unless can?(current_user, :archive_project, @project) + @project.archive! respond_to do |format| @@ -148,6 +158,7 @@ class ProjectsController < ApplicationController def unarchive return access_denied! unless can?(current_user, :archive_project, @project) + @project.unarchive! respond_to do |format| @@ -201,7 +212,8 @@ class ProjectsController < ApplicationController params.require(:project).permit( :name, :path, :description, :issues_tracker, :tag_list, :issues_enabled, :merge_requests_enabled, :snippets_enabled, :issues_tracker_id, :default_branch, - :wiki_enabled, :visibility_level, :import_url, :last_activity_at, :namespace_id, :avatar + :wiki_enabled, :visibility_level, :import_url, :last_activity_at, :namespace_id, :avatar, + :builds_enabled ) end @@ -225,4 +237,14 @@ class ProjectsController < ApplicationController render "go_import", layout: false end + + def repo_exists? + project.repository_exists? && !project.empty_repo? + end + + # Override get_id from ExtractsPath, which returns the branch and file path + # for the blob/tree, which in this case is just the root of the default branch. + def get_id + project.repository.root_ref + end end diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb index eb0408a95e..9bb42ec86b 100644 --- a/app/controllers/search_controller.rb +++ b/app/controllers/search_controller.rb @@ -23,8 +23,8 @@ class SearchController < ApplicationController @search_results = if @project - unless %w(blobs notes issues merge_requests milestones wiki_blobs). - include?(@scope) + unless %w(blobs notes issues merge_requests milestones wiki_blobs + commits).include?(@scope) @scope = 'blobs' end diff --git a/app/controllers/sherlock/application_controller.rb b/app/controllers/sherlock/application_controller.rb new file mode 100644 index 0000000000..682ca5e382 --- /dev/null +++ b/app/controllers/sherlock/application_controller.rb @@ -0,0 +1,12 @@ +module Sherlock + class ApplicationController < ::ApplicationController + before_action :find_transaction + + def find_transaction + if params[:transaction_id] + @transaction = Gitlab::Sherlock.collection. + find_transaction(params[:transaction_id]) + end + end + end +end diff --git a/app/controllers/sherlock/file_samples_controller.rb b/app/controllers/sherlock/file_samples_controller.rb new file mode 100644 index 0000000000..0c3bc10010 --- /dev/null +++ b/app/controllers/sherlock/file_samples_controller.rb @@ -0,0 +1,7 @@ +module Sherlock + class FileSamplesController < Sherlock::ApplicationController + def show + @file_sample = @transaction.find_file_sample(params[:id]) + end + end +end diff --git a/app/controllers/sherlock/queries_controller.rb b/app/controllers/sherlock/queries_controller.rb new file mode 100644 index 0000000000..63b26aab1a --- /dev/null +++ b/app/controllers/sherlock/queries_controller.rb @@ -0,0 +1,7 @@ +module Sherlock + class QueriesController < Sherlock::ApplicationController + def show + @query = @transaction.find_query(params[:id]) + end + end +end diff --git a/app/controllers/sherlock/transactions_controller.rb b/app/controllers/sherlock/transactions_controller.rb new file mode 100644 index 0000000000..ccc739da87 --- /dev/null +++ b/app/controllers/sherlock/transactions_controller.rb @@ -0,0 +1,19 @@ +module Sherlock + class TransactionsController < Sherlock::ApplicationController + def index + @transactions = Gitlab::Sherlock.collection.newest_first + end + + def show + @transaction = Gitlab::Sherlock.collection.find_transaction(params[:id]) + + render_404 unless @transaction + end + + def destroy_all + Gitlab::Sherlock.collection.clear + + redirect_to(:back) + end + end +end diff --git a/app/controllers/snippets_controller.rb b/app/controllers/snippets_controller.rb index 9f9f9a92f1..08f2483af3 100644 --- a/app/controllers/snippets_controller.rb +++ b/app/controllers/snippets_controller.rb @@ -1,6 +1,9 @@ class SnippetsController < ApplicationController before_action :snippet, only: [:show, :edit, :destroy, :update, :raw] + # Allow read snippet + before_action :authorize_read_snippet!, only: [:show] + # Allow modify snippet before_action :authorize_update_snippet!, only: [:edit, :update] @@ -79,10 +82,14 @@ class SnippetsController < ApplicationController [Snippet::PUBLIC, Snippet::INTERNAL]). find(params[:id]) else - PersonalSnippet.are_public.find(params[:id]) + PersonalSnippet.find(params[:id]) end end + def authorize_read_snippet! + authenticate_user! unless can?(current_user, :read_personal_snippet, @snippet) + end + def authorize_update_snippet! return render_404 unless can?(current_user, :update_personal_snippet, @snippet) end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 1484356a7f..30cb869eb2 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -3,14 +3,11 @@ class UsersController < ApplicationController before_action :set_user def show - @contributed_projects = contributed_projects.joined(@user). - reject(&:forked?) + @contributed_projects = contributed_projects.joined(@user).reject(&:forked?) - @projects = @user.personal_projects. - where(id: authorized_projects_ids).includes(:namespace) + @projects = PersonalProjectsFinder.new(@user).execute(current_user) - # Collect only groups common for both users - @groups = @user.groups & GroupsFinder.new.execute(current_user) + @groups = JoinedGroupsFinder.new(@user).execute(current_user) respond_to do |format| format.html @@ -53,16 +50,8 @@ class UsersController < ApplicationController @user = User.find_by_username!(params[:username]) end - def authorized_projects_ids - # Projects user can view - @authorized_projects_ids ||= - ProjectsFinder.new.execute(current_user).pluck(:id) - end - def contributed_projects - @contributed_projects = Project. - where(id: authorized_projects_ids & @user.contributed_projects_ids). - includes(:namespace) + ContributedProjectsFinder.new(@user).execute(current_user) end def contributions_calendar @@ -73,9 +62,13 @@ class UsersController < ApplicationController def load_events # Get user activity feed for projects common for both users @events = @user.recent_events. - where(project_id: authorized_projects_ids). - with_associations + merge(projects_for_current_user). + references(:project). + with_associations. + limit_recent(20, params[:offset]) + end - @events = @events.limit(20).offset(params[:offset] || 0) + def projects_for_current_user + ProjectsFinder.new.execute(current_user) end end diff --git a/app/finders/contributed_projects_finder.rb b/app/finders/contributed_projects_finder.rb new file mode 100644 index 0000000000..0209649b01 --- /dev/null +++ b/app/finders/contributed_projects_finder.rb @@ -0,0 +1,37 @@ +class ContributedProjectsFinder + def initialize(user) + @user = user + end + + # Finds the projects "@user" contributed to, limited to either public projects + # or projects visible to the given user. + # + # current_user - When given the list of the projects is limited to those only + # visible by this user. + # + # Returns an ActiveRecord::Relation. + def execute(current_user = nil) + if current_user + relation = projects_visible_to_user(current_user) + else + relation = public_projects + end + + relation.includes(:namespace).order_id_desc + end + + private + + def projects_visible_to_user(current_user) + authorized = @user.contributed_projects.visible_to_user(current_user) + + union = Gitlab::SQL::Union. + new([authorized.select(:id), public_projects.select(:id)]) + + Project.where("projects.id IN (#{union.to_sql})") + end + + def public_projects + @user.contributed_projects.public_only + end +end diff --git a/app/finders/groups_finder.rb b/app/finders/groups_finder.rb index d3597ef090..91cb0f228f 100644 --- a/app/finders/groups_finder.rb +++ b/app/finders/groups_finder.rb @@ -1,38 +1,44 @@ class GroupsFinder - def execute(current_user, options = {}) - all_groups(current_user) + # Finds the groups available to the given user. + # + # current_user - The user to find the groups for. + # + # Returns an ActiveRecord::Relation. + def execute(current_user = nil) + if current_user + relation = groups_visible_to_user(current_user) + else + relation = public_groups + end + + relation.order_id_desc end private - def all_groups(current_user) - if current_user - if current_user.authorized_groups.any? - # User has access to groups - # - # Return only: - # groups with public projects - # groups with internal projects - # groups with joined projects - # - group_ids = Project.public_and_internal_only.pluck(:namespace_id) + - current_user.authorized_groups.pluck(:id) - Group.where(id: group_ids) - else - # User has no group membership - # - # Return only: - # groups with public projects - # groups with internal projects - # - Group.where(id: Project.public_and_internal_only.pluck(:namespace_id)) - end - else - # Not authenticated - # - # Return only: - # groups with public projects - Group.where(id: Project.public_only.pluck(:namespace_id)) - end + # This method returns the groups "current_user" can see. + def groups_visible_to_user(current_user) + base = groups_for_projects(public_and_internal_projects) + + union = Gitlab::SQL::Union. + new([base.select(:id), current_user.authorized_groups.select(:id)]) + + Group.where("namespaces.id IN (#{union.to_sql})") + end + + def public_groups + groups_for_projects(public_projects) + end + + def groups_for_projects(projects) + Group.public_and_given_groups(projects.select(:namespace_id)) + end + + def public_projects + Project.unscoped.public_only + end + + def public_and_internal_projects + Project.unscoped.public_and_internal_only end end diff --git a/app/finders/joined_groups_finder.rb b/app/finders/joined_groups_finder.rb new file mode 100644 index 0000000000..e7523136fe --- /dev/null +++ b/app/finders/joined_groups_finder.rb @@ -0,0 +1,49 @@ +# Class for finding the groups a user is a member of. +class JoinedGroupsFinder + def initialize(user = nil) + @user = user + end + + # Finds the groups of the source user, optionally limited to those visible to + # the current user. + # + # current_user - If given the groups of "@user" will only include the groups + # "current_user" can also see. + # + # Returns an ActiveRecord::Relation. + def execute(current_user = nil) + if current_user + relation = groups_visible_to_user(current_user) + else + relation = public_groups + end + + relation.order_id_desc + end + + private + + # Returns the groups the user in "current_user" can see. + # + # This list includes all public/internal projects as well as the projects of + # "@user" that "current_user" also has access to. + def groups_visible_to_user(current_user) + base = @user.authorized_groups.visible_to_user(current_user) + extra = public_and_internal_groups + union = Gitlab::SQL::Union.new([base.select(:id), extra.select(:id)]) + + Group.where("namespaces.id IN (#{union.to_sql})") + end + + def public_groups + groups_for_projects(@user.authorized_projects.public_only) + end + + def public_and_internal_groups + groups_for_projects(@user.authorized_projects.public_and_internal_only) + end + + def groups_for_projects(projects) + @user.groups.public_and_given_groups(projects.select(:namespace_id)) + end +end diff --git a/app/finders/milestones_finder.rb b/app/finders/milestones_finder.rb new file mode 100644 index 0000000000..b704e87890 --- /dev/null +++ b/app/finders/milestones_finder.rb @@ -0,0 +1,12 @@ +class MilestonesFinder + def execute(projects, params) + milestones = Milestone.of_projects(projects) + milestones = milestones.order("due_date ASC") + + case params[:state] + when 'closed' then milestones.closed + when 'all' then milestones + else milestones.active + end + end +end diff --git a/app/finders/notes_finder.rb b/app/finders/notes_finder.rb index ab252821b5..fa4c635f55 100644 --- a/app/finders/notes_finder.rb +++ b/app/finders/notes_finder.rb @@ -12,9 +12,9 @@ class NotesFinder when "commit" project.notes.for_commit_id(target_id).not_inline when "issue" - project.issues.find(target_id).notes.inc_author + project.issues.find(target_id).notes.nonawards.inc_author when "merge_request" - project.merge_requests.find(target_id).mr_and_commit_notes.inc_author + project.merge_requests.find(target_id).mr_and_commit_notes.nonawards.inc_author when "snippet", "project_snippet" project.snippets.find(target_id).notes else diff --git a/app/finders/personal_projects_finder.rb b/app/finders/personal_projects_finder.rb new file mode 100644 index 0000000000..a61ffa2299 --- /dev/null +++ b/app/finders/personal_projects_finder.rb @@ -0,0 +1,41 @@ +class PersonalProjectsFinder + def initialize(user) + @user = user + end + + # Finds the projects belonging to the user in "@user", limited to either + # public projects or projects visible to the given user. + # + # current_user - When given the list of projects is limited to those only + # visible by this user. + # + # Returns an ActiveRecord::Relation. + def execute(current_user = nil) + if current_user + relation = projects_visible_to_user(current_user) + else + relation = public_projects + end + + relation.includes(:namespace).order_id_desc + end + + private + + def projects_visible_to_user(current_user) + authorized = @user.personal_projects.visible_to_user(current_user) + + union = Gitlab::SQL::Union. + new([authorized.select(:id), public_and_internal_projects.select(:id)]) + + Project.where("projects.id IN (#{union.to_sql})") + end + + def public_projects + @user.personal_projects.public_only + end + + def public_and_internal_projects + @user.personal_projects.public_and_internal_only + end +end diff --git a/app/finders/projects_finder.rb b/app/finders/projects_finder.rb index c81bb51583..dd35c215c5 100644 --- a/app/finders/projects_finder.rb +++ b/app/finders/projects_finder.rb @@ -1,11 +1,39 @@ class ProjectsFinder - def execute(current_user, options = {}) + # Returns all projects, optionally including group projects a user has access + # to. + # + # ## Examples + # + # Retrieving all public projects: + # + # ProjectsFinder.new.execute + # + # Retrieving all public/internal projects and those the given user has access + # to: + # + # ProjectsFinder.new.execute(some_user) + # + # Retrieving all public/internal projects as well as the group's projects the + # user has access to: + # + # ProjectsFinder.new.execute(some_user, group: some_group) + # + # Returns an ActiveRecord::Relation. + def execute(current_user = nil, options = {}) group = options[:group] if group - group_projects(current_user, group) + base, extra = group_projects(current_user, group) else - all_projects(current_user) + base, extra = all_projects(current_user) + end + + if base and extra + union = Gitlab::SQL::Union.new([base.select(:id), extra.select(:id)]) + + Project.where("projects.id IN (#{union.to_sql})") + else + base end end @@ -13,77 +41,36 @@ class ProjectsFinder def group_projects(current_user, group) if current_user - if group.users.include?(current_user) - # User is group member - # - # Return ALL group projects - group.projects - else - projects_members = ProjectMember.in_projects(group.projects). - with_user(current_user) - - if projects_members.any? - # User is a project member - # - # Return only: - # public projects - # internal projects - # joined projects - # - group.projects.where( - "projects.id IN (?) OR projects.visibility_level IN (?)", - projects_members.pluck(:source_id), - Project.public_and_internal_levels - ) - else - # User has no access to group or group projects - # - # Return only: - # public projects - # internal projects - # - group.projects.public_and_internal_only - end - end + [ + group_projects_for_user(current_user, group), + group.projects.public_and_internal_only + ] else - # Not authenticated - # - # Return only: - # public projects - group.projects.public_only + [group.projects.public_only] end end def all_projects(current_user) if current_user - if current_user.authorized_projects.any? - # User has access to private projects - # - # Return only: - # public projects - # internal projects - # joined projects - # - Project.where( - "projects.id IN (?) OR projects.visibility_level IN (?)", - current_user.authorized_projects.pluck(:id), - Project.public_and_internal_levels - ) - else - # User has no access to private projects - # - # Return only: - # public projects - # internal projects - # - Project.public_and_internal_only - end + [current_user.authorized_projects, public_and_internal_projects] else - # Not authenticated - # - # Return only: - # public projects - Project.public_only + [Project.public_only] end end + + def group_projects_for_user(current_user, group) + if group.users.include?(current_user) + group.projects + else + group.projects.visible_to_user(current_user) + end + end + + def public_projects + Project.unscoped.public_only + end + + def public_and_internal_projects + Project.unscoped.public_and_internal_only + end end diff --git a/app/helpers/auth_helper.rb b/app/helpers/auth_helper.rb index cd99a23240..2c81ea1623 100644 --- a/app/helpers/auth_helper.rb +++ b/app/helpers/auth_helper.rb @@ -1,5 +1,5 @@ module AuthHelper - PROVIDERS_WITH_ICONS = %w(twitter github gitlab bitbucket google_oauth2).freeze + PROVIDERS_WITH_ICONS = %w(twitter github gitlab bitbucket google_oauth2 facebook).freeze FORM_BASED_PROVIDERS = [/\Aldap/, 'crowd'].freeze def ldap_enabled? diff --git a/app/helpers/builds_helper.rb b/app/helpers/builds_helper.rb deleted file mode 100644 index 1b5a2c31d7..0000000000 --- a/app/helpers/builds_helper.rb +++ /dev/null @@ -1,13 +0,0 @@ -module BuildsHelper - def build_ref_link build - gitlab_ref_link build.project, build.ref - end - - def build_commit_link build - gitlab_commit_link build.project, build.short_sha - end - - def build_url(build) - namespace_project_build_path(build.gl_project, build.project, build) - end -end diff --git a/app/helpers/ci/gitlab_helper.rb b/app/helpers/ci/gitlab_helper.rb index baddbc806f..e34c8be1df 100644 --- a/app/helpers/ci/gitlab_helper.rb +++ b/app/helpers/ci/gitlab_helper.rb @@ -4,25 +4,6 @@ module Ci { :"data-no-turbolink" => "data-no-turbolink" } end - def gitlab_ref_link project, ref - gitlab_url = project.gitlab_url.dup - gitlab_url << "/commits/#{ref}" - link_to ref, gitlab_url, no_turbolink - end - - def gitlab_compare_link project, before, after - gitlab_url = project.gitlab_url.dup - gitlab_url << "/compare/#{before}...#{after}" - - link_to "#{before}...#{after}", gitlab_url, no_turbolink - end - - def gitlab_commit_link project, sha - gitlab_url = project.gitlab_url.dup - gitlab_url << "/commit/#{sha}" - link_to Ci::Commit.truncate_sha(sha), gitlab_url, no_turbolink - end - def yaml_web_editor_link(project) commits = project.commits diff --git a/app/helpers/ci_status_helper.rb b/app/helpers/ci_status_helper.rb index dbd1e26fa7..0ecf77bb45 100644 --- a/app/helpers/ci_status_helper.rb +++ b/app/helpers/ci_status_helper.rb @@ -1,7 +1,7 @@ module CiStatusHelper def ci_status_path(ci_commit) project = ci_commit.gl_project - ci_namespace_project_commit_path(project.namespace, project, ci_commit.sha) + builds_namespace_project_commit_path(project.namespace, project, ci_commit.sha) end def ci_status_icon(ci_commit) @@ -42,4 +42,13 @@ module CiStatusHelper icon(icon_name) end + + def render_ci_status(ci_commit) + link_to ci_status_path(ci_commit), + class: "c#{ci_status_color(ci_commit)}", + title: "Build status: #{ci_commit.status}", + data: { toggle: 'tooltip', placement: 'left' } do + ci_status_icon(ci_commit) + end + end end diff --git a/app/helpers/clipboard_helper.rb b/app/helpers/clipboard_helper.rb new file mode 100644 index 0000000000..3c1d7569fa --- /dev/null +++ b/app/helpers/clipboard_helper.rb @@ -0,0 +1,8 @@ +module ClipboardHelper + def clipboard_button + content_tag :button, + icon('clipboard'), + class: 'btn btn-xs btn-clipboard js-clipboard-trigger', + type: :button + end +end diff --git a/app/helpers/diff_helper.rb b/app/helpers/diff_helper.rb index e65e37211c..0fd5c98658 100644 --- a/app/helpers/diff_helper.rb +++ b/app/helpers/diff_helper.rb @@ -1,4 +1,8 @@ module DiffHelper + def diff_view + params[:view] == 'parallel' ? 'parallel' : 'inline' + end + def allowed_diff_size if diff_hard_limit_enabled? Commit::DIFF_HARD_LIMIT_FILES @@ -137,7 +141,7 @@ module DiffHelper # Always use HTML to handle case where JSON diff rendered this button params_copy.delete(:format) - link_to url_for(params_copy), id: "inline-diff-btn", class: (params[:view] != 'parallel' ? 'btn btn-sm active' : 'btn btn-sm') do + link_to url_for(params_copy), id: "inline-diff-btn", class: (diff_view == 'inline' ? 'btn active' : 'btn') do 'Inline' end end @@ -148,7 +152,7 @@ module DiffHelper # Always use HTML to handle case where JSON diff rendered this button params_copy.delete(:format) - link_to url_for(params_copy), id: "parallel-diff-btn", class: (params[:view] == 'parallel' ? 'btn active btn-sm' : 'btn btn-sm') do + link_to url_for(params_copy), id: "parallel-diff-btn", class: (diff_view == 'parallel' ? 'btn active' : 'btn') do 'Side-by-side' end end @@ -171,7 +175,7 @@ module DiffHelper def commit_for_diff(diff) if diff.deleted_file first_commit = @first_commit || @commit - first_commit.parent + first_commit.parent || @first_commit else @commit end diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb index 6f69c2a9f3..dde83ff36b 100644 --- a/app/helpers/events_helper.rb +++ b/app/helpers/events_helper.rb @@ -108,19 +108,23 @@ module EventsHelper end end elsif event.push? - if event.push_with_commits? && event.md_ref? - if event.commits_count > 1 - namespace_project_compare_url(event.project.namespace, event.project, - from: event.commit_from, to: - event.commit_to) - else - namespace_project_commit_url(event.project.namespace, event.project, - id: event.commit_to) - end + push_event_feed_url(event) + end + end + + def push_event_feed_url(event) + if event.push_with_commits? && event.md_ref? + if event.commits_count > 1 + namespace_project_compare_url(event.project.namespace, event.project, + from: event.commit_from, to: + event.commit_to) else - namespace_project_commits_url(event.project.namespace, event.project, - event.ref_name) + namespace_project_commit_url(event.project.namespace, event.project, + id: event.commit_to) end + else + namespace_project_commits_url(event.project.namespace, event.project, + event.ref_name) end end @@ -198,7 +202,7 @@ module EventsHelper xml.link href: event_link xml.title truncate(event_title, length: 80) xml.updated event.created_at.xmlschema - xml.media :thumbnail, width: "40", height: "40", url: avatar_icon(event.author_email) + xml.media :thumbnail, width: "40", height: "40", url: image_url(avatar_icon(event.author_email)) xml.author do |author| xml.name event.author_name xml.email event.author_email diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index fda18e7b31..493f370d9a 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -74,7 +74,7 @@ module IssuesHelper issue.project, issue) xml.title truncate(issue.title, length: 80) xml.updated issue.created_at.strftime("%Y-%m-%dT%H:%M:%SZ") - xml.media :thumbnail, width: "40", height: "40", url: avatar_icon(issue.author_email) + xml.media :thumbnail, width: "40", height: "40", url: image_url(avatar_icon(issue.author_email)) xml.author do |author| xml.name issue.author_name xml.email issue.author_email @@ -87,6 +87,33 @@ module IssuesHelper merge_requests.map(&:to_reference).to_sentence(last_word_connector: ', or ') end + def url_to_emoji(name) + emoji_path = ::AwardEmoji.path_to_emoji_image(name) + url_to_image(emoji_path) + rescue StandardError + "" + end + + def emoji_author_list(notes, current_user) + list = notes.map do |note| + note.author == current_user ? "me" : note.author.username + end + + list.join(", ") + end + + def emoji_list + ::AwardEmoji::EMOJI_LIST + end + + def note_active_class(notes, current_user) + if current_user && notes.pluck(:author_id).include?(current_user.id) + "active" + else + "" + end + end + # Required for Gitlab::Markdown::IssueReferenceFilter module_function :url_for_issue end diff --git a/app/helpers/labels_helper.rb b/app/helpers/labels_helper.rb index ee04ace35d..795fb439f2 100644 --- a/app/helpers/labels_helper.rb +++ b/app/helpers/labels_helper.rb @@ -100,7 +100,7 @@ module LabelsHelper Label.where(project_id: @projects) end - grouped_labels = Labels::GroupService.new(labels).execute + grouped_labels = GlobalLabel.build_collection(labels) grouped_labels.unshift(Label::None) grouped_labels.unshift(Label::Any) diff --git a/app/helpers/merge_requests_helper.rb b/app/helpers/merge_requests_helper.rb index 728d877ace..b804d4f4e3 100644 --- a/app/helpers/merge_requests_helper.rb +++ b/app/helpers/merge_requests_helper.rb @@ -8,14 +8,6 @@ module MergeRequestsHelper ) end - def new_mr_path_for_fork_from_push_event(event) - new_namespace_project_merge_request_path( - event.project.namespace, - event.project, - new_mr_from_push_event(event, event.project.forked_from_project) - ) - end - def new_mr_from_push_event(event, target_project) { merge_request: { diff --git a/app/helpers/milestones_helper.rb b/app/helpers/milestones_helper.rb index 37a5b58cce..ad43892b63 100644 --- a/app/helpers/milestones_helper.rb +++ b/app/helpers/milestones_helper.rb @@ -28,7 +28,7 @@ module MilestonesHelper Milestone.where(project_id: @projects) end.active - grouped_milestones = Milestones::GroupService.new(milestones).execute + grouped_milestones = GlobalMilestone.build_collection(milestones) grouped_milestones.unshift(Milestone::None) grouped_milestones.unshift(Milestone::Any) diff --git a/app/helpers/notifications_helper.rb b/app/helpers/notifications_helper.rb index cf11f8e532..499c655d2b 100644 --- a/app/helpers/notifications_helper.rb +++ b/app/helpers/notifications_helper.rb @@ -16,40 +16,28 @@ module NotificationsHelper def notification_list_item(notification_level, user_membership) case notification_level when Notification::N_DISABLED - content_tag(:li, class: active_level_for(user_membership, Notification::N_DISABLED)) do - link_to '#', class: 'update-notification', data: { notification_level: Notification::N_DISABLED } do - icon('microphone-slash fw', text: 'Disabled') - end - end + update_notification_link(Notification::N_DISABLED, user_membership, 'Disabled', 'microphone-slash') when Notification::N_PARTICIPATING - content_tag(:li, class: active_level_for(user_membership, Notification::N_PARTICIPATING)) do - link_to '#', class: 'update-notification', data: { notification_level: Notification::N_PARTICIPATING } do - icon('volume-up fw', text: 'Participate') - end - end + update_notification_link(Notification::N_PARTICIPATING, user_membership, 'Participate', 'volume-up') when Notification::N_WATCH - content_tag(:li, class: active_level_for(user_membership, Notification::N_WATCH)) do - link_to '#', class: 'update-notification', data: { notification_level: Notification::N_WATCH } do - icon('eye fw', text: 'Watch') - end - end + update_notification_link(Notification::N_WATCH, user_membership, 'Watch', 'eye') when Notification::N_MENTION - content_tag(:li, class: active_level_for(user_membership, Notification::N_MENTION)) do - link_to '#', class: 'update-notification', data: { notification_level: Notification::N_MENTION } do - icon('at fw', text: 'On mention') - end - end + update_notification_link(Notification::N_MENTION, user_membership, 'On mention', 'at') when Notification::N_GLOBAL - content_tag(:li, class: active_level_for(user_membership, Notification::N_GLOBAL)) do - link_to '#', class: 'update-notification', data: { notification_level: Notification::N_GLOBAL } do - icon('globe fw', text: 'Global') - end - end + update_notification_link(Notification::N_GLOBAL, user_membership, 'Global', 'globe') else # do nothing end end + def update_notification_link(notification_level, user_membership, title, icon) + content_tag(:li, class: active_level_for(user_membership, notification_level)) do + link_to '#', class: 'update-notification', data: { notification_level: notification_level } do + icon("#{icon} fw", text: title) + end + end + end + def notification_label(user_membership) Notification.new(user_membership).to_s end diff --git a/app/helpers/preferences_helper.rb b/app/helpers/preferences_helper.rb index 4710171eba..c73cb3028e 100644 --- a/app/helpers/preferences_helper.rb +++ b/app/helpers/preferences_helper.rb @@ -34,7 +34,8 @@ module PreferencesHelper def project_view_choices [ ['Readme (default)', :readme], - ['Activity view', :activity] + ['Activity view', :activity], + ['Files view', :files] ] end @@ -46,8 +47,7 @@ module PreferencesHelper Gitlab::ColorSchemes.for_user(current_user).css_class end - def prefer_readme? - !current_user || - current_user.project_view == 'readme' + def default_project_view + current_user ? current_user.project_view : 'readme' end end diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index dd5e3828da..c9cd4a0d54 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -70,6 +70,10 @@ module ProjectsHelper "You are going to transfer #{project.name_with_namespace} to another owner. Are you ABSOLUTELY sure?" end + def remove_fork_project_message(project) + "You are going to remove the fork relationship to source project #{@project.forked_from_project.name_with_namespace}. Are you ABSOLUTELY sure?" + end + def project_nav_tabs @nav_tabs ||= get_project_nav_tabs(@project, current_user) end @@ -113,7 +117,7 @@ module ProjectsHelper nav_tabs << :merge_requests end - if project.gitlab_ci? && can?(current_user, :read_build, project) + if project.builds_enabled? && can?(current_user, :read_build, project) nav_tabs << :builds end @@ -249,14 +253,6 @@ module ProjectsHelper filename_path(project, :version) end - def hidden_pass_url(original_url) - result = URI(original_url) - result.password = '*****' unless result.password.nil? - result - rescue - original_url - end - def project_wiki_path_with_version(proj, page, version, is_newest) url_params = is_newest ? {} : { version_id: version } namespace_project_wiki_path(proj.namespace, proj, page, url_params) diff --git a/app/helpers/search_helper.rb b/app/helpers/search_helper.rb index c31a556ff7..a6ee688024 100644 --- a/app/helpers/search_helper.rb +++ b/app/helpers/search_helper.rb @@ -70,7 +70,7 @@ module SearchHelper # Autocomplete results for the current user's groups def groups_autocomplete(term, limit = 5) - current_user.authorized_groups.search(term).limit(limit).map do |group| + GroupsFinder.new.execute(current_user).search(term).limit(limit).map do |group| { label: "group: #{search_result_sanitize(group.name)}", url: group_path(group) diff --git a/app/helpers/tab_helper.rb b/app/helpers/tab_helper.rb index 0e7d8065ac..04e53fe7c6 100644 --- a/app/helpers/tab_helper.rb +++ b/app/helpers/tab_helper.rb @@ -110,22 +110,4 @@ module TabHelper 'active' end end - - # Use nav_tab for save controller/action but different params - def nav_tab(key, value, &block) - o = {} - o[:class] = "" - - if value.nil? - o[:class] << " active" if params[key].blank? - else - o[:class] << " active" if params[key] == value - end - - if block_given? - content_tag(:li, capture(&block), o) - else - content_tag(:li, nil, o) - end - end end diff --git a/app/models/ability.rb b/app/models/ability.rb index 38bc208668..07f3a56ec7 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -1,8 +1,8 @@ class Ability class << self def allowed(user, subject) - return not_auth_abilities(user, subject) if user.nil? - return [] unless user.kind_of?(User) + return anonymous_abilities(user, subject) if user.nil? + return [] unless user.is_a?(User) return [] if user.blocked? case subject.class.name @@ -15,19 +15,30 @@ class Ability when "Group" then group_abilities(user, subject) when "Namespace" then namespace_abilities(user, subject) when "GroupMember" then group_member_abilities(user, subject) + when "ProjectMember" then project_member_abilities(user, subject) else [] end.concat(global_abilities(user)) end - # List of possible abilities - # for non-authenticated user - def not_auth_abilities(user, subject) - project = if subject.kind_of?(Project) + # List of possible abilities for anonymous user + def anonymous_abilities(user, subject) + case true + when subject.is_a?(PersonalSnippet) + anonymous_personal_snippet_abilities(subject) + when subject.is_a?(Project) || subject.respond_to?(:project) + anonymous_project_abilities(subject) + when subject.is_a?(Group) || subject.respond_to?(:group) + anonymous_group_abilities(subject) + else + [] + end + end + + def anonymous_project_abilities(subject) + project = if subject.is_a?(Project) subject - elsif subject.respond_to?(:project) - subject.project else - nil + subject.project end if project && project.public? @@ -47,19 +58,29 @@ class Ability rules - project_disabled_features_rules(project) else - group = if subject.kind_of?(Group) - subject - elsif subject.respond_to?(:group) - subject.group - else - nil - end + [] + end + end - if group && group.public_profile? - [:read_group] - else - [] - end + def anonymous_group_abilities(subject) + group = if subject.is_a?(Group) + subject + else + subject.group + end + + if group && group.public_profile? + [:read_group] + else + [] + end + end + + def anonymous_personal_snippet_abilities(snippet) + if snippet.public? + [:read_personal_snippet] + else + [] end end @@ -154,6 +175,7 @@ class Ability :create_merge_request, :create_wiki, :manage_builds, + :download_build_artifacts, :push_code ] end @@ -189,7 +211,8 @@ class Ability :change_visibility_level, :rename_project, :remove_project, - :archive_project + :archive_project, + :remove_fork_project ] end @@ -229,18 +252,19 @@ class Ability # Only group masters and group owners can create new projects in group if group.has_master?(user) || group.has_owner?(user) || user.admin? - rules.push(*[ + rules += [ :create_projects, - ]) + :admin_milestones + ] end # Only group owner and administrators can admin group if group.has_owner?(user) || user.admin? - rules.push(*[ + rules += [ :admin_group, :admin_namespace, :admin_group_member - ]) + ] end rules.flatten @@ -251,16 +275,15 @@ class Ability # Only namespace owner and administrators can admin it if namespace.owner == user || user.admin? - rules.push(*[ + rules += [ :create_projects, :admin_namespace - ]) + ] end rules.flatten end - [:issue, :merge_request].each do |name| define_method "#{name}_abilities" do |user, subject| rules = [] @@ -277,7 +300,7 @@ class Ability end end - [:note, :project_snippet, :personal_snippet].each do |name| + [:note, :project_snippet].each do |name| define_method "#{name}_abilities" do |user, subject| rules = [] @@ -297,19 +320,61 @@ class Ability end end + def personal_snippet_abilities(user, snippet) + rules = [] + + if snippet.author == user + rules += [ + :read_personal_snippet, + :update_personal_snippet, + :admin_personal_snippet + ] + end + + if snippet.public? || snippet.internal? + rules << :read_personal_snippet + end + + rules + end + def group_member_abilities(user, subject) rules = [] target_user = subject.user group = subject.group - can_manage = group_abilities(user, group).include?(:admin_group_member) - if can_manage && (user != target_user) - rules << :update_group_member - rules << :destroy_group_member + unless group.last_owner?(target_user) + can_manage = group_abilities(user, group).include?(:admin_group_member) + + if can_manage && user != target_user + rules << :update_group_member + rules << :destroy_group_member + end + + if user == target_user + rules << :destroy_group_member + end end - if !group.last_owner?(user) && (can_manage || (user == target_user)) - rules << :destroy_group_member + rules + end + + def project_member_abilities(user, subject) + rules = [] + target_user = subject.user + project = subject.project + + unless target_user == project.owner + can_manage = project_abilities(user, project).include?(:admin_project_member) + + if can_manage && user != target_user + rules << :update_project_member + rules << :destroy_project_member + end + + if user == target_user + rules << :destroy_project_member + end end rules @@ -317,10 +382,10 @@ class Ability def abilities @abilities ||= begin - abilities = Six.new - abilities << self - abilities - end + abilities = Six.new + abilities << self + abilities + end end private diff --git a/app/models/application_setting.rb b/app/models/application_setting.rb index 05430c2ee1..b2d5fe1558 100644 --- a/app/models/application_setting.rb +++ b/app/models/application_setting.rb @@ -23,6 +23,10 @@ # after_sign_out_path :string(255) # session_expire_delay :integer default(10080), not null # import_sources :text +# help_page_text :text +# admin_notification_email :string(255) +# shared_runners_enabled :boolean default(TRUE), not null +# max_artifacts_size :integer default(100), not null # class ApplicationSetting < ActiveRecord::Base @@ -68,8 +72,14 @@ class ApplicationSetting < ActiveRecord::Base end end + after_commit do + Rails.cache.write('application_setting.last', self) + end + def self.current - ApplicationSetting.last + Rails.cache.fetch('application_setting.last') do + ApplicationSetting.last + end end def self.create_from_defaults @@ -87,7 +97,9 @@ class ApplicationSetting < ActiveRecord::Base default_project_visibility: Settings.gitlab.default_projects_features['visibility_level'], default_snippet_visibility: Settings.gitlab.default_projects_features['visibility_level'], restricted_signup_domains: Settings.gitlab['restricted_signup_domains'], - import_sources: ['github','bitbucket','gitlab','gitorious','google_code','fogbugz','git'] + import_sources: ['github','bitbucket','gitlab','gitorious','google_code','fogbugz','git'], + shared_runners_enabled: Settings.gitlab_ci['shared_runners_enabled'], + max_artifacts_size: Settings.artifacts['max_size'], ) end diff --git a/app/models/ci/application_setting.rb b/app/models/ci/application_setting.rb index 0cf496f7d8..1307fa0b47 100644 --- a/app/models/ci/application_setting.rb +++ b/app/models/ci/application_setting.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: application_settings +# Table name: ci_application_settings # # id :integer not null, primary key # all_broken_builds :boolean @@ -12,9 +12,15 @@ module Ci class ApplicationSetting < ActiveRecord::Base extend Ci::Model - + + after_commit do + Rails.cache.write('ci_application_setting.last', self) + end + def self.current - Ci::ApplicationSetting.last + Rails.cache.fetch('ci_application_setting.last') do + Ci::ApplicationSetting.last + end end def self.create_from_defaults diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index b19e2ac136..52ce1b920f 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: builds +# Table name: ci_builds # # id :integer not null, primary key # project_id :integer @@ -11,16 +11,24 @@ # updated_at :datetime # started_at :datetime # runner_id :integer -# commit_id :integer # coverage :float +# commit_id :integer # commands :text # job_id :integer # name :string(255) +# deploy :boolean default(FALSE) # options :text # allow_failure :boolean default(FALSE), not null # stage :string(255) -# deploy :boolean default(FALSE) # trigger_request_id :integer +# stage_idx :integer +# tag :boolean +# ref :string(255) +# user_id :integer +# type :string(255) +# target_url :string(255) +# description :string(255) +# artifacts_file :text # module Ci @@ -39,6 +47,8 @@ module Ci scope :ignore_failures, ->() { where(allow_failure: false) } scope :similar, ->(build) { where(ref: build.ref, tag: build.tag, trigger_request_id: build.trigger_request_id) } + mount_uploader :artifacts_file, ArtifactUploader + acts_as_taggable # To prevent db load megabytes of data from trace @@ -87,6 +97,8 @@ module Ci state_machine :status, initial: :pending do after_transition any => [:success, :failed, :canceled] do |build, transition| + return unless build.gl_project + project = build.project if project.web_hooks? @@ -106,6 +118,14 @@ module Ci failed? && allow_failure? end + def retryable? + commands.present? + end + + def retried? + !self.commit.latest_builds_for_ref(self.ref).include?(self) + end + def trace_html html = Ci::Ansi2html::convert(trace) if trace.present? html || '' @@ -209,6 +229,14 @@ module Ci "#{dir_to_trace}/#{id}.log" end + def token + project.token + end + + def valid_token? token + project.valid_token? token + end + def target_url Gitlab::Application.routes.url_helpers. namespace_project_build_url(gl_project.namespace, gl_project, self) @@ -222,7 +250,7 @@ module Ci end def retry_url - if commands.present? + if retryable? Gitlab::Application.routes.url_helpers. retry_namespace_project_build_path(gl_project.namespace, gl_project, self) end @@ -240,6 +268,13 @@ module Ci pending? && !any_runners_online? end + def download_url + if artifacts_file.exists? + Gitlab::Application.routes.url_helpers. + download_namespace_project_build_path(gl_project.namespace, gl_project, self) + end + end + private def yaml_variables diff --git a/app/models/ci/commit.rb b/app/models/ci/commit.rb index 13437b2483..971e899de8 100644 --- a/app/models/ci/commit.rb +++ b/app/models/ci/commit.rb @@ -1,18 +1,19 @@ # == Schema Information # -# Table name: commits +# Table name: ci_commits # -# id :integer not null, primary key -# project_id :integer -# ref :string(255) -# sha :string(255) -# before_sha :string(255) -# push_data :text -# created_at :datetime -# updated_at :datetime -# tag :boolean default(FALSE) -# yaml_errors :text -# committed_at :datetime +# id :integer not null, primary key +# project_id :integer +# ref :string(255) +# sha :string(255) +# before_sha :string(255) +# push_data :text +# created_at :datetime +# updated_at :datetime +# tag :boolean default(FALSE) +# yaml_errors :text +# committed_at :datetime +# gl_project_id :integer # module Ci @@ -187,13 +188,13 @@ module Ci end def config_processor - @config_processor ||= Ci::GitlabCiYamlProcessor.new(ci_yaml_file) - rescue Ci::GitlabCiYamlProcessor::ValidationError => e + return nil unless ci_yaml_file + @config_processor ||= Ci::GitlabCiYamlProcessor.new(ci_yaml_file, gl_project.path_with_namespace) + rescue Ci::GitlabCiYamlProcessor::ValidationError, Psych::SyntaxError => e save_yaml_error(e.message) nil - rescue Exception => e - logger.error e.message + "\n" + e.backtrace.join("\n") - save_yaml_error("Undefined yaml error") + rescue + save_yaml_error("Undefined error") nil end diff --git a/app/models/ci/event.rb b/app/models/ci/event.rb index cac3a7a49c..8c39be4267 100644 --- a/app/models/ci/event.rb +++ b/app/models/ci/event.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: events +# Table name: ci_events # # id :integer not null, primary key # project_id :integer diff --git a/app/models/ci/project.rb b/app/models/ci/project.rb index eb65c77357..669ee1cc0d 100644 --- a/app/models/ci/project.rb +++ b/app/models/ci/project.rb @@ -1,9 +1,9 @@ # == Schema Information # -# Table name: projects +# Table name: ci_projects # # id :integer not null, primary key -# name :string(255) not null +# name :string(255) # timeout :integer default(3600), not null # created_at :datetime # updated_at :datetime @@ -66,30 +66,6 @@ module Ci class << self include Ci::CurrentSettings - def base_build_script - <<-eos - git submodule update --init - ls -la - eos - end - - def parse(project) - params = { - gitlab_id: project.id, - default_ref: project.default_branch || 'master', - email_add_pusher: current_application_settings.add_pusher, - email_only_broken_builds: current_application_settings.all_broken_builds, - } - - project = Ci::Project.new(params) - project.build_missing_services - project - end - - def already_added?(project) - where(gitlab_id: project.id).any? - end - def unassigned(runner) joins("LEFT JOIN #{Ci::RunnerProject.table_name} ON #{Ci::RunnerProject.table_name}.project_id = #{Ci::Project.table_name}.id " \ "AND #{Ci::RunnerProject.table_name}.runner_id = #{runner.id}"). @@ -99,6 +75,7 @@ module Ci def ordered_by_last_commit_date last_commit_subquery = "(SELECT gl_project_id, MAX(committed_at) committed_at FROM #{Ci::Commit.table_name} GROUP BY gl_project_id)" joins("LEFT JOIN #{last_commit_subquery} AS last_commit ON #{Ci::Project.table_name}.gitlab_id = last_commit.gl_project_id"). + joins(:gl_project). order("CASE WHEN last_commit.committed_at IS NULL THEN 1 ELSE 0 END, last_commit.committed_at DESC") end end diff --git a/app/models/ci/project_status.rb b/app/models/ci/project_status.rb index b66f1212f2..2d35aeac22 100644 --- a/app/models/ci/project_status.rb +++ b/app/models/ci/project_status.rb @@ -27,9 +27,5 @@ module Ci def human_status status end - - def last_commit_for_ref(ref) - commits.where(ref: ref).last - end end end diff --git a/app/models/ci/runner.rb b/app/models/ci/runner.rb index 1b3669f1b7..8971048581 100644 --- a/app/models/ci/runner.rb +++ b/app/models/ci/runner.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: runners +# Table name: ci_runners # # id :integer not null, primary key # token :string(255) @@ -36,6 +36,7 @@ module Ci scope :active, ->() { where(active: true) } scope :paused, ->() { where(active: false) } scope :online, ->() { where('contacted_at > ?', LAST_CONTACT_TIME) } + scope :ordered, ->() { order(id: :desc) } acts_as_taggable diff --git a/app/models/ci/runner_project.rb b/app/models/ci/runner_project.rb index 44453ee4b4..3f4fc43873 100644 --- a/app/models/ci/runner_project.rb +++ b/app/models/ci/runner_project.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: runner_projects +# Table name: ci_runner_projects # # id :integer not null, primary key # runner_id :integer not null diff --git a/app/models/ci/service.rb b/app/models/ci/service.rb index ed5e3f940b..8063c51e82 100644 --- a/app/models/ci/service.rb +++ b/app/models/ci/service.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: services +# Table name: ci_services # # id :integer not null, primary key # type :string(255) diff --git a/app/models/ci/trigger.rb b/app/models/ci/trigger.rb index fe224b7dc7..b73c35d5ae 100644 --- a/app/models/ci/trigger.rb +++ b/app/models/ci/trigger.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: triggers +# Table name: ci_triggers # # id :integer not null, primary key # token :string(255) diff --git a/app/models/ci/trigger_request.rb b/app/models/ci/trigger_request.rb index 29cd955339..9973d2e5ad 100644 --- a/app/models/ci/trigger_request.rb +++ b/app/models/ci/trigger_request.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: trigger_requests +# Table name: ci_trigger_requests # # id :integer not null, primary key # trigger_id :integer not null diff --git a/app/models/ci/variable.rb b/app/models/ci/variable.rb index 7a542802fa..b3d2b809e0 100644 --- a/app/models/ci/variable.rb +++ b/app/models/ci/variable.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: variables +# Table name: ci_variables # # id :integer not null, primary key # project_id :integer not null diff --git a/app/models/ci/web_hook.rb b/app/models/ci/web_hook.rb index 8f03b0625d..7ca16a1bde 100644 --- a/app/models/ci/web_hook.rb +++ b/app/models/ci/web_hook.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: web_hooks +# Table name: ci_web_hooks # # id :integer not null, primary key # url :string(255) not null diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb index 8188ba3a28..e70f4d3718 100644 --- a/app/models/commit_status.rb +++ b/app/models/commit_status.rb @@ -1,3 +1,36 @@ +# == Schema Information +# +# Table name: ci_builds +# +# id :integer not null, primary key +# project_id :integer +# status :string(255) +# finished_at :datetime +# trace :text +# created_at :datetime +# updated_at :datetime +# started_at :datetime +# runner_id :integer +# coverage :float +# commit_id :integer +# commands :text +# job_id :integer +# name :string(255) +# deploy :boolean default(FALSE) +# options :text +# allow_failure :boolean default(FALSE), not null +# stage :string(255) +# trigger_request_id :integer +# stage_idx :integer +# tag :boolean +# ref :string(255) +# user_id :integer +# type :string(255) +# target_url :string(255) +# description :string(255) +# artifacts_file :text +# + class CommitStatus < ActiveRecord::Base self.table_name = 'ci_builds' @@ -15,12 +48,11 @@ class CommitStatus < ActiveRecord::Base scope :pending, -> { where(status: 'pending') } scope :success, -> { where(status: 'success') } scope :failed, -> { where(status: 'failed') } - scope :running_or_pending, -> { where(status:[:running, :pending]) } - scope :finished, -> { where(status:[:success, :failed, :canceled]) } + scope :running_or_pending, -> { where(status: [:running, :pending]) } + scope :finished, -> { where(status: [:success, :failed, :canceled]) } scope :latest, -> { where(id: unscope(:select).select('max(id)').group(:name, :ref)) } scope :ordered, -> { order(:ref, :stage_idx, :name) } scope :for_ref, ->(ref) { where(ref: ref) } - scope :running_or_pending, -> { where(status: [:running, :pending]) } state_machine :status, initial: :pending do event :run do @@ -93,4 +125,8 @@ class CommitStatus < ActiveRecord::Base def show_warning? false end + + def download_url + nil + end end diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb index 5e964f04ef..b54145ba1b 100644 --- a/app/models/concerns/issuable.rb +++ b/app/models/concerns/issuable.rb @@ -24,7 +24,7 @@ module Issuable scope :authored, ->(user) { where(author_id: user) } scope :assigned_to, ->(u) { where(assignee_id: u.id)} - scope :recent, -> { order("created_at DESC") } + scope :recent, -> { reorder(id: :desc) } scope :assigned, -> { where("assignee_id IS NOT NULL") } scope :unassigned, -> { where("assignee_id IS NULL") } scope :of_projects, ->(ids) { where(project_id: ids) } @@ -89,39 +89,14 @@ module Issuable opened? || reopened? end - # - # Votes - # - - # Return the number of -1 comments (downvotes) + # Deprecated. Still exists to preserve API compatibility. def downvotes - filter_superceded_votes(notes.select(&:downvote?), notes).size + 0 end - def downvotes_in_percent - if votes_count.zero? - 0 - else - 100.0 - upvotes_in_percent - end - end - - # Return the number of +1 comments (upvotes) + # Deprecated. Still exists to preserve API compatibility. def upvotes - filter_superceded_votes(notes.select(&:upvote?), notes).size - end - - def upvotes_in_percent - if votes_count.zero? - 0 - else - 100.0 / votes_count * upvotes - end - end - - # Return the total number of votes - def votes_count - upvotes + downvotes + 0 end def subscribed?(user) @@ -183,18 +158,4 @@ module Issuable def notes_with_associations notes.includes(:author, :project) end - - private - - def filter_superceded_votes(votes, notes) - filteredvotes = [] + votes - - votes.each do |vote| - if vote.superceded?(notes) - filteredvotes.delete(vote) - end - end - - filteredvotes - end end diff --git a/app/models/concerns/sortable.rb b/app/models/concerns/sortable.rb index 0ad2654867..7391a77383 100644 --- a/app/models/concerns/sortable.rb +++ b/app/models/concerns/sortable.rb @@ -8,12 +8,13 @@ module Sortable included do # By default all models should be ordered # by created_at field starting from newest - default_scope { order(created_at: :desc, id: :desc) } + default_scope { order_id_desc } - scope :order_created_desc, -> { reorder(created_at: :desc, id: :desc) } - scope :order_created_asc, -> { reorder(created_at: :asc, id: :asc) } - scope :order_updated_desc, -> { reorder(updated_at: :desc, id: :desc) } - scope :order_updated_asc, -> { reorder(updated_at: :asc, id: :asc) } + scope :order_id_desc, -> { reorder(id: :desc) } + scope :order_created_desc, -> { reorder(created_at: :desc) } + scope :order_created_asc, -> { reorder(created_at: :asc) } + scope :order_updated_desc, -> { reorder(updated_at: :desc) } + scope :order_updated_asc, -> { reorder(updated_at: :asc) } scope :order_name_asc, -> { reorder(name: :asc) } scope :order_name_desc, -> { reorder(name: :desc) } end diff --git a/app/models/event.rb b/app/models/event.rb index 47600c57e3..9afd223bce 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -45,7 +45,7 @@ class Event < ActiveRecord::Base after_create :reset_project_activity # Scopes - scope :recent, -> { order(created_at: :desc) } + scope :recent, -> { reorder(id: :desc) } scope :code_push, -> { where(action: PUSHED) } scope :in_projects, ->(project_ids) { where(project_id: project_ids).recent } scope :with_associations, -> { includes(project: :namespace) } @@ -63,6 +63,16 @@ class Event < ActiveRecord::Base Event::PUSHED, ["MergeRequest", "Issue"], [Event::CREATED, Event::CLOSED, Event::MERGED]) end + + def latest_update_time + row = select(:updated_at, :project_id).reorder(id: :desc).take + + row ? row.updated_at : nil + end + + def limit_recent(limit = 20, offset = nil) + recent.limit(limit).offset(offset) + end end def proper? diff --git a/app/models/generic_commit_status.rb b/app/models/generic_commit_status.rb index fa54e3540d..12c934e249 100644 --- a/app/models/generic_commit_status.rb +++ b/app/models/generic_commit_status.rb @@ -1,3 +1,36 @@ +# == Schema Information +# +# Table name: ci_builds +# +# id :integer not null, primary key +# project_id :integer +# status :string(255) +# finished_at :datetime +# trace :text +# created_at :datetime +# updated_at :datetime +# started_at :datetime +# runner_id :integer +# coverage :float +# commit_id :integer +# commands :text +# job_id :integer +# name :string(255) +# deploy :boolean default(FALSE) +# options :text +# allow_failure :boolean default(FALSE), not null +# stage :string(255) +# trigger_request_id :integer +# stage_idx :integer +# tag :boolean +# ref :string(255) +# user_id :integer +# type :string(255) +# target_url :string(255) +# description :string(255) +# artifacts_file :text +# + class GenericCommitStatus < CommitStatus before_validation :set_default_values diff --git a/app/models/global_label.rb b/app/models/global_label.rb new file mode 100644 index 0000000000..0171f7d54b --- /dev/null +++ b/app/models/global_label.rb @@ -0,0 +1,17 @@ +class GlobalLabel + attr_accessor :title, :labels + alias_attribute :name, :title + + def self.build_collection(labels) + labels = labels.group_by(&:title) + + labels.map do |title, label| + new(title, label) + end + end + + def initialize(title, labels) + @title = title + @labels = labels + end +end diff --git a/app/models/group_milestone.rb b/app/models/global_milestone.rb similarity index 76% rename from app/models/group_milestone.rb rename to app/models/global_milestone.rb index 91844da62e..1321ccd963 100644 --- a/app/models/group_milestone.rb +++ b/app/models/global_milestone.rb @@ -1,7 +1,15 @@ -class GroupMilestone +class GlobalMilestone attr_accessor :title, :milestones alias_attribute :name, :title + def self.build_collection(milestones) + milestones = milestones.group_by(&:title) + + milestones.map do |title, milestones| + new(title, milestones) + end + end + def initialize(title, milestones) @title = title @milestones = milestones @@ -10,7 +18,7 @@ class GroupMilestone def safe_title @title.parameterize end - + def projects milestones.map { |milestone| milestone.project } end @@ -60,15 +68,15 @@ class GroupMilestone end def issues - @group_issues ||= milestones.map(&:issues).flatten.group_by(&:state) + @issues ||= milestones.map(&:issues).flatten.group_by(&:state) end def merge_requests - @group_merge_requests ||= milestones.map(&:merge_requests).flatten.group_by(&:state) + @merge_requests ||= milestones.map(&:merge_requests).flatten.group_by(&:state) end def participants - @group_participants ||= milestones.map(&:participants).flatten.compact.uniq + @participants ||= milestones.map(&:participants).flatten.compact.uniq end def opened_issues @@ -86,4 +94,8 @@ class GroupMilestone def closed_merge_requests merge_requests.values_at("closed", "merged", "locked").compact.flatten end + + def complete? + total_items_count == closed_items_count + end end diff --git a/app/models/group.rb b/app/models/group.rb index 465c22d23a..1b5b875a19 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -11,6 +11,7 @@ # type :string(255) # description :string(255) default(""), not null # avatar :string(255) +# public :boolean default(FALSE) # require 'carrierwave/orm/activerecord' @@ -19,8 +20,9 @@ require 'file_size_validator' class Group < Namespace include Gitlab::ConfigHelper include Referable - + has_many :group_members, dependent: :destroy, as: :source, class_name: 'GroupMember' + alias_method :members, :group_members has_many :users, through: :group_members validate :avatar_type, if: ->(user) { user.avatar.present? && user.avatar_changed? } @@ -47,6 +49,14 @@ class Group < Namespace def reference_pattern User.reference_pattern end + + def public_and_given_groups(ids) + where('public IS TRUE OR namespaces.id IN (?)', ids) + end + + def visible_to_user(user) + where(id: user.authorized_groups.select(:id).reorder(nil)) + end end def to_reference(_from_project = nil) @@ -109,10 +119,6 @@ class Group < Namespace has_owner?(user) && owners.size == 1 end - def members - group_members - end - def avatar_type unless self.avatar.image? self.errors.add :avatar, "only images allowed" @@ -120,7 +126,7 @@ class Group < Namespace end def public_profile? - projects.public_only.any? + self.public || projects.public_only.any? end def post_create_hook diff --git a/app/models/group_label.rb b/app/models/group_label.rb deleted file mode 100644 index 0fc39cb877..0000000000 --- a/app/models/group_label.rb +++ /dev/null @@ -1,9 +0,0 @@ -class GroupLabel - attr_accessor :title, :labels - alias_attribute :name, :title - - def initialize(title, labels) - @title = title - @labels = labels - end -end diff --git a/app/models/hooks/project_hook.rb b/app/models/hooks/project_hook.rb index ca7066b959..337b309712 100644 --- a/app/models/hooks/project_hook.rb +++ b/app/models/hooks/project_hook.rb @@ -2,18 +2,19 @@ # # Table name: web_hooks # -# id :integer not null, primary key -# url :string(255) -# project_id :integer -# created_at :datetime -# updated_at :datetime -# type :string(255) default("ProjectHook") -# service_id :integer -# push_events :boolean default(TRUE), not null -# issues_events :boolean default(FALSE), not null -# merge_requests_events :boolean default(FALSE), not null -# tag_push_events :boolean default(FALSE) -# note_events :boolean default(FALSE), not null +# id :integer not null, primary key +# url :string(255) +# project_id :integer +# created_at :datetime +# updated_at :datetime +# type :string(255) default("ProjectHook") +# service_id :integer +# push_events :boolean default(TRUE), not null +# issues_events :boolean default(FALSE), not null +# merge_requests_events :boolean default(FALSE), not null +# tag_push_events :boolean default(FALSE) +# note_events :boolean default(FALSE), not null +# enable_ssl_verification :boolean default(TRUE) # class ProjectHook < WebHook diff --git a/app/models/hooks/service_hook.rb b/app/models/hooks/service_hook.rb index b55e217975..09bb3ee52a 100644 --- a/app/models/hooks/service_hook.rb +++ b/app/models/hooks/service_hook.rb @@ -2,18 +2,19 @@ # # Table name: web_hooks # -# id :integer not null, primary key -# url :string(255) -# project_id :integer -# created_at :datetime -# updated_at :datetime -# type :string(255) default("ProjectHook") -# service_id :integer -# push_events :boolean default(TRUE), not null -# issues_events :boolean default(FALSE), not null -# merge_requests_events :boolean default(FALSE), not null -# tag_push_events :boolean default(FALSE) -# note_events :boolean default(FALSE), not null +# id :integer not null, primary key +# url :string(255) +# project_id :integer +# created_at :datetime +# updated_at :datetime +# type :string(255) default("ProjectHook") +# service_id :integer +# push_events :boolean default(TRUE), not null +# issues_events :boolean default(FALSE), not null +# merge_requests_events :boolean default(FALSE), not null +# tag_push_events :boolean default(FALSE) +# note_events :boolean default(FALSE), not null +# enable_ssl_verification :boolean default(TRUE) # class ServiceHook < WebHook diff --git a/app/models/hooks/system_hook.rb b/app/models/hooks/system_hook.rb index 6fb2d42102..2f63c59b07 100644 --- a/app/models/hooks/system_hook.rb +++ b/app/models/hooks/system_hook.rb @@ -2,18 +2,19 @@ # # Table name: web_hooks # -# id :integer not null, primary key -# url :string(255) -# project_id :integer -# created_at :datetime -# updated_at :datetime -# type :string(255) default("ProjectHook") -# service_id :integer -# push_events :boolean default(TRUE), not null -# issues_events :boolean default(FALSE), not null -# merge_requests_events :boolean default(FALSE), not null -# tag_push_events :boolean default(FALSE) -# note_events :boolean default(FALSE), not null +# id :integer not null, primary key +# url :string(255) +# project_id :integer +# created_at :datetime +# updated_at :datetime +# type :string(255) default("ProjectHook") +# service_id :integer +# push_events :boolean default(TRUE), not null +# issues_events :boolean default(FALSE), not null +# merge_requests_events :boolean default(FALSE), not null +# tag_push_events :boolean default(FALSE) +# note_events :boolean default(FALSE), not null +# enable_ssl_verification :boolean default(TRUE) # class SystemHook < WebHook diff --git a/app/models/hooks/web_hook.rb b/app/models/hooks/web_hook.rb index a078accbdb..d6c6f415c4 100644 --- a/app/models/hooks/web_hook.rb +++ b/app/models/hooks/web_hook.rb @@ -2,18 +2,19 @@ # # Table name: web_hooks # -# id :integer not null, primary key -# url :string(255) -# project_id :integer -# created_at :datetime -# updated_at :datetime -# type :string(255) default("ProjectHook") -# service_id :integer -# push_events :boolean default(TRUE), not null -# issues_events :boolean default(FALSE), not null -# merge_requests_events :boolean default(FALSE), not null -# tag_push_events :boolean default(FALSE) -# note_events :boolean default(FALSE), not null +# id :integer not null, primary key +# url :string(255) +# project_id :integer +# created_at :datetime +# updated_at :datetime +# type :string(255) default("ProjectHook") +# service_id :integer +# push_events :boolean default(TRUE), not null +# issues_events :boolean default(FALSE), not null +# merge_requests_events :boolean default(FALSE), not null +# tag_push_events :boolean default(FALSE) +# note_events :boolean default(FALSE), not null +# enable_ssl_verification :boolean default(TRUE) # class WebHook < ActiveRecord::Base diff --git a/app/models/label.rb b/app/models/label.rb index 1bb4b5f55c..b306aecbac 100644 --- a/app/models/label.rb +++ b/app/models/label.rb @@ -8,6 +8,7 @@ # project_id :integer # created_at :datetime # updated_at :datetime +# template :boolean default(FALSE) # class Label < ActiveRecord::Base diff --git a/app/models/lfs_object.rb b/app/models/lfs_object.rb new file mode 100644 index 0000000000..3c1426f59d --- /dev/null +++ b/app/models/lfs_object.rb @@ -0,0 +1,8 @@ +class LfsObject < ActiveRecord::Base + has_many :lfs_objects_projects, dependent: :destroy + has_many :projects, through: :lfs_objects_projects + + validates :oid, presence: true, uniqueness: true + + mount_uploader :file, LfsObjectUploader +end diff --git a/app/models/lfs_objects_project.rb b/app/models/lfs_objects_project.rb new file mode 100644 index 0000000000..0fd5f089db --- /dev/null +++ b/app/models/lfs_objects_project.rb @@ -0,0 +1,8 @@ +class LfsObjectsProject < ActiveRecord::Base + belongs_to :project + belongs_to :lfs_object + + validates :lfs_object_id, presence: true + validates :lfs_object_id, uniqueness: { scope: [:project_id], message: "already exists in project" } + validates :project_id, presence: true +end diff --git a/app/models/member.rb b/app/models/member.rb index cae8caa23f..28aee2e379 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -30,13 +30,22 @@ class Member < ActiveRecord::Base validates :user, presence: true, unless: :invite? validates :source, presence: true - validates :user_id, uniqueness: { scope: [:source_type, :source_id], + validates :user_id, uniqueness: { scope: [:source_type, :source_id], message: "already exists in source", allow_nil: true } validates :access_level, inclusion: { in: Gitlab::Access.all_values }, presence: true - validates :invite_email, presence: { if: :invite? }, - email: { strict_mode: true, allow_nil: true }, - uniqueness: { scope: [:source_type, :source_id], allow_nil: true } + validates :invite_email, + presence: { + if: :invite? + }, + email: { + strict_mode: true, + allow_nil: true + }, + uniqueness: { + scope: [:source_type, :source_id], + allow_nil: true + } scope :invite, -> { where(user_id: nil) } scope :non_invite, -> { where("user_id IS NOT NULL") } @@ -73,7 +82,7 @@ class Member < ActiveRecord::Base def add_user(members, user_id, access_level, current_user = nil) user = user_for_id(user_id) - + # `user` can be either a User object or an email to be invited if user.is_a?(User) member = members.find_or_initialize_by(user_id: user.id) @@ -82,10 +91,21 @@ class Member < ActiveRecord::Base member.invite_email = user end - member.created_by ||= current_user - member.access_level = access_level + if can_update_member?(current_user, member) + member.created_by ||= current_user + member.access_level = access_level - member.save + member.save + end + end + + private + + def can_update_member?(current_user, member) + # There is no current user for bulk actions, in which case anything is allowed + !current_user || + current_user.can?(:update_group_member, member) || + current_user.can?(:update_project_member, member) end end @@ -95,7 +115,7 @@ class Member < ActiveRecord::Base def accept_invite!(new_user) return false unless invite? - + self.invite_token = nil self.invite_accepted_at = Time.now.utc diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 21861a46a8..942a052876 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -20,6 +20,7 @@ # position :integer default(0) # locked_at :datetime # updated_by_id :integer +# merge_error :string(255) # require Rails.root.join("app/models/commit") @@ -40,7 +41,7 @@ class MergeRequest < ActiveRecord::Base after_create :create_merge_request_diff after_update :update_merge_request_diff - delegate :commits, :diffs, to: :merge_request_diff, prefix: nil + delegate :commits, :diffs, :diffs_no_whitespace, to: :merge_request_diff, prefix: nil # When this attribute is true some MR validation is ignored # It allows us to close or modify broken merge requests @@ -159,11 +160,11 @@ class MergeRequest < ActiveRecord::Base def last_commit merge_request_diff ? merge_request_diff.last_commit : compare_commits.last - end + end def first_commit merge_request_diff ? merge_request_diff.first_commit : compare_commits.first - end + end def last_commit_short_sha last_commit.short_id @@ -257,7 +258,7 @@ class MergeRequest < ActiveRecord::Base Note.where( "(project_id = :target_project_id AND noteable_type = 'MergeRequest' AND noteable_id = :mr_id) OR" + - "(project_id = :source_project_id AND noteable_type = 'Commit' AND commit_id IN (:commit_ids))", + "((project_id = :source_project_id OR project_id = :target_project_id) AND noteable_type = 'Commit' AND commit_id IN (:commit_ids))", mr_id: id, commit_ids: commit_ids, target_project_id: target_project_id, @@ -470,4 +471,10 @@ class MergeRequest < ActiveRecord::Base unlock_mr if locked? end end + + def ci_commit + if last_commit and source_project + source_project.ci_commit(last_commit.id) + end + end end diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index 6575d0bc81..c499a4b5b4 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -19,7 +19,7 @@ class MergeRequestDiff < ActiveRecord::Base # Prevent store of diff if commits amount more then 500 COMMITS_SAFE_SIZE = 500 - attr_reader :commits, :diffs + attr_reader :commits, :diffs, :diffs_no_whitespace belongs_to :merge_request @@ -47,6 +47,20 @@ class MergeRequestDiff < ActiveRecord::Base @diffs ||= (load_diffs(st_diffs) || []) end + def diffs_no_whitespace + # Get latest sha of branch from source project + source_sha = merge_request.source_project.commit(source_branch).sha + + compare_result = Gitlab::CompareResult.new( + Gitlab::Git::Compare.new( + merge_request.target_project.repository.raw_repository, + merge_request.target_branch, + source_sha, + ), { ignore_whitespace_change: true } + ) + @diffs_no_whitespace ||= load_diffs(dump_commits(compare_result.diffs)) + end + def commits @commits ||= load_commits(st_commits || []) end diff --git a/app/models/milestone.rb b/app/models/milestone.rb index 84acba30b6..2ff16e2825 100644 --- a/app/models/milestone.rb +++ b/app/models/milestone.rb @@ -105,4 +105,36 @@ class Milestone < ActiveRecord::Base def author_id nil end + + # Sorts the issues for the given IDs. + # + # This method runs a single SQL query using a CASE statement to update the + # position of all issues in the current milestone (scoped to the list of IDs). + # + # Given the ids [10, 20, 30] this method produces a SQL query something like + # the following: + # + # UPDATE issues + # SET position = CASE + # WHEN id = 10 THEN 1 + # WHEN id = 20 THEN 2 + # WHEN id = 30 THEN 3 + # ELSE position + # END + # WHERE id IN (10, 20, 30); + # + # This method expects that the IDs given in `ids` are already Fixnums. + def sort_issues(ids) + pairs = [] + + ids.each_with_index do |id, index| + pairs << id + pairs << index + 1 + end + + conditions = 'WHEN id = ? THEN ? ' * ids.length + + issues.where(id: ids). + update_all(["position = CASE #{conditions} ELSE position END", *pairs]) + end end diff --git a/app/models/namespace.rb b/app/models/namespace.rb index 5782e649f8..20b92e68d6 100644 --- a/app/models/namespace.rb +++ b/app/models/namespace.rb @@ -11,6 +11,7 @@ # type :string(255) # description :string(255) default(""), not null # avatar :string(255) +# public :boolean default(FALSE) # class Namespace < ActiveRecord::Base diff --git a/app/models/note.rb b/app/models/note.rb index 0b3aa30abd..1c6345e735 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -40,16 +40,20 @@ class Note < ActiveRecord::Base delegate :name, :email, to: :author, prefix: true validates :note, :project, presence: true + validates :note, uniqueness: { scope: [:author, :noteable_type, :noteable_id] }, if: ->(n) { n.is_award } validates :line_code, format: { with: /\A[a-z0-9]+_\d+_\d+\Z/ }, allow_blank: true # Attachments are deprecated and are handled by Markdown uploader validates :attachment, file_size: { maximum: :max_attachment_size } validates :noteable_id, presence: true, if: ->(n) { n.noteable_type.present? && n.noteable_type != 'Commit' } validates :commit_id, presence: true, if: ->(n) { n.noteable_type == 'Commit' } + validates :author, presence: true mount_uploader :attachment, AttachmentUploader # Scopes + scope :awards, ->{ where(is_award: true) } + scope :nonawards, ->{ where(is_award: false) } scope :for_commit_id, ->(commit_id) { where(noteable_type: "Commit", commit_id: commit_id) } scope :inline, ->{ where("line_code IS NOT NULL") } scope :not_inline, ->{ where(line_code: [nil, '']) } @@ -97,6 +101,12 @@ class Note < ActiveRecord::Base def search(query) where("LOWER(note) like :query", query: "%#{query.downcase}%") end + + def grouped_awards + awards.select(:note).distinct.map do |note| + [ note.note, where(note: note.note) ] + end + end end def cross_reference? @@ -288,44 +298,6 @@ class Note < ActiveRecord::Base nil end - DOWNVOTES = %w(-1 :-1: :thumbsdown: :thumbs_down_sign:) - - # Check if the note is a downvote - def downvote? - votable? && note.start_with?(*DOWNVOTES) - end - - UPVOTES = %w(+1 :+1: :thumbsup: :thumbs_up_sign:) - - # Check if the note is an upvote - def upvote? - votable? && note.start_with?(*UPVOTES) - end - - def superceded?(notes) - return false unless vote? - - notes.each do |note| - next if note == self - - if note.vote? && - self[:author_id] == note[:author_id] && - self[:created_at] <= note[:created_at] - return true - end - end - - false - end - - def vote? - upvote? || downvote? - end - - def votable? - for_issue? || (for_merge_request? && !for_diff_line?) - end - # Mentionable override. def gfm_reference(from_project = nil) noteable.gfm_reference(from_project) @@ -363,6 +335,16 @@ class Note < ActiveRecord::Base read_attribute(:system) end + # Deprecated. Still exists to preserve API compatibility. + def downvote? + false + end + + # Deprecated. Still exists to preserve API compatibility. + def upvote? + false + end + def editable? !system? end diff --git a/app/models/project.rb b/app/models/project.rb index 88cd88dcb5..f0a4b6aae7 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -37,11 +37,12 @@ class Project < ActiveRecord::Base include Gitlab::ConfigHelper include Gitlab::ShellAdapter include Gitlab::VisibilityLevel + include Gitlab::CurrentSettings include Referable include Sortable include AfterCommitQueue include CaseSensitivity - + extend Gitlab::ConfigHelper extend Enumerize @@ -51,6 +52,7 @@ class Project < ActiveRecord::Base default_value_for :visibility_level, gitlab_config_features.visibility_level default_value_for :issues_enabled, gitlab_config_features.issues default_value_for :merge_requests_enabled, gitlab_config_features.merge_requests + default_value_for :builds_enabled, gitlab_config_features.builds default_value_for :wiki_enabled, gitlab_config_features.wiki default_value_for :wall_enabled, false default_value_for :snippets_enabled, gitlab_config_features.snippets @@ -121,6 +123,9 @@ class Project < ActiveRecord::Base has_many :starrers, through: :users_star_projects, source: :user has_many :ci_commits, dependent: :destroy, class_name: 'Ci::Commit', foreign_key: :gl_project_id has_many :ci_builds, through: :ci_commits, source: :builds, dependent: :destroy, class_name: 'Ci::Build' + has_many :releases, dependent: :destroy + has_many :lfs_objects_projects, dependent: :destroy + has_many :lfs_objects, through: :lfs_objects_projects has_one :import_data, dependent: :destroy, class_name: "ProjectImportData" has_one :gitlab_ci_project, dependent: :destroy, class_name: "Ci::Project", foreign_key: :gitlab_id @@ -243,11 +248,12 @@ class Project < ActiveRecord::Base # Use of unscoped ensures we're not secretly adding any ORDER BYs, which # have a negative impact on performance (and aren't needed for this # query). - unscoped. + projects = unscoped. joins(:namespace). - iwhere('namespaces.path' => namespace_path). - iwhere('projects.path' => project_path). - take + iwhere('namespaces.path' => namespace_path) + + projects.where('projects.path' => project_path).take || + projects.iwhere('projects.path' => project_path).take end def visibility_levels @@ -280,6 +286,10 @@ class Project < ActiveRecord::Base joins(join_body).reorder('join_note_counts.amount DESC') end + + def visible_to_user(user) + where(id: user.authorized_projects.select(:id).reorder(nil)) + end end def team @@ -304,15 +314,17 @@ class Project < ActiveRecord::Base def add_import_job if forked? - unless RepositoryForkWorker.perform_async(id, forked_from_project.path_with_namespace, self.namespace.path) - import_fail - end + RepositoryForkWorker.perform_async(self.id, forked_from_project.path_with_namespace, self.namespace.path) else - RepositoryImportWorker.perform_async(id) + RepositoryImportWorker.perform_async(self.id) end end def clear_import_data + update(import_error: nil) + + ProjectCacheWorker.perform_async(self.id) + self.import_data.destroy if self.import_data end @@ -340,6 +352,14 @@ class Project < ActiveRecord::Base import_status == 'finished' end + def safe_import_url + result = URI.parse(self.import_url) + result.password = '*****' unless result.password.nil? + result.to_s + rescue + original_url + end + def check_limit unless creator.can_create_project? or namespace.kind == 'group' errors[:limit_reached] << ("Your project limit is #{creator.projects_limit} projects! Please contact your administrator to increase it") @@ -454,10 +474,6 @@ class Project < ActiveRecord::Base list.find { |service| service.to_param == name } end - def gitlab_ci? - gitlab_ci_service && gitlab_ci_service.active && gitlab_ci_project.present? - end - def ci_services services.select { |service| service.category == :ci } end @@ -567,7 +583,7 @@ class Project < ActiveRecord::Base end def empty_repo? - !repository.exists? || repository.empty? + !repository.exists? || !repository.has_visible_content? end def repo @@ -774,12 +790,38 @@ class Project < ActiveRecord::Base end def ensure_gitlab_ci_project - gitlab_ci_project || create_gitlab_ci_project + gitlab_ci_project || create_gitlab_ci_project( + shared_runners_enabled: current_application_settings.shared_runners_enabled + ) + end + + # TODO: this should be migrated to Project table, + # the same as issues_enabled + def builds_enabled + gitlab_ci_service && gitlab_ci_service.active + end + + def builds_enabled? + builds_enabled + end + + def builds_enabled=(value) + service = gitlab_ci_service || create_gitlab_ci_service + service.active = value + service.save end def enable_ci - service = gitlab_ci_service || create_gitlab_ci_service - service.active = true - service.save + self.builds_enabled = true + end + + def unlink_fork + if forked? + forked_from_project.lfs_objects.find_each do |lfs_object| + lfs_object.projects << self + end + + forked_project_link.destroy + end end end diff --git a/app/models/project_services/ci/hip_chat_message.rb b/app/models/project_services/ci/hip_chat_message.rb index cbf325cc52..d89466b689 100644 --- a/app/models/project_services/ci/hip_chat_message.rb +++ b/app/models/project_services/ci/hip_chat_message.rb @@ -11,7 +11,7 @@ module Ci def to_s lines = Array.new lines.push("#{project.name} - ") - lines.push("Commit ##{commit.id}
") + lines.push("Commit ##{commit.id}
") lines.push("#{commit.short_sha} #{commit.git_author_name} - #{commit.git_commit_message}
") lines.push("#{humanized_status(commit_status)} in #{commit.duration} second(s).") lines.join('') diff --git a/app/models/project_services/ci/hip_chat_service.rb b/app/models/project_services/ci/hip_chat_service.rb index f17993d9f3..0df03890ef 100644 --- a/app/models/project_services/ci/hip_chat_service.rb +++ b/app/models/project_services/ci/hip_chat_service.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: services +# Table name: ci_services # # id :integer not null, primary key # type :string(255) diff --git a/app/models/project_services/ci/mail_service.rb b/app/models/project_services/ci/mail_service.rb index fd19330100..d31dd6899c 100644 --- a/app/models/project_services/ci/mail_service.rb +++ b/app/models/project_services/ci/mail_service.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: services +# Table name: ci_services # # id :integer not null, primary key # type :string(255) diff --git a/app/models/project_services/ci/slack_message.rb b/app/models/project_services/ci/slack_message.rb index dc050a3fc5..1a6ff8e34c 100644 --- a/app/models/project_services/ci/slack_message.rb +++ b/app/models/project_services/ci/slack_message.rb @@ -45,7 +45,7 @@ module Ci def attachment_message out = "<#{ci_project_url(project)}|#{project_name}>: " - out << "Commit <#{ci_namespace_project_commit_url(commit.gl_project.namespace, commit.gl_project, commit.sha)}|\##{commit.id}> " + out << "Commit <#{builds_namespace_project_commit_url(commit.gl_project.namespace, commit.gl_project, commit.sha)}|\##{commit.id}> " out << "(<#{commit_sha_link}|#{commit.short_sha}>) " out << "of <#{commit_ref_link}|#{commit.ref}> " out << "by #{commit.git_author_name} " if commit.git_author_name diff --git a/app/models/project_services/ci/slack_service.rb b/app/models/project_services/ci/slack_service.rb index ee8e498882..7064bfe78d 100644 --- a/app/models/project_services/ci/slack_service.rb +++ b/app/models/project_services/ci/slack_service.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: services +# Table name: ci_services # # id :integer not null, primary key # type :string(255) diff --git a/app/models/project_services/drone_ci_service.rb b/app/models/project_services/drone_ci_service.rb index c73c4b058a..127684bd27 100644 --- a/app/models/project_services/drone_ci_service.rb +++ b/app/models/project_services/drone_ci_service.rb @@ -32,7 +32,8 @@ class DroneCiService < CiService def compose_service_hook hook = service_hook || build_service_hook - hook.url = [drone_url, "/api/hook", "?owner=#{project.namespace.path}", "&name=#{project.path}", "&access_token=#{token}"].join + # If using a service template, project may not be available + hook.url = [drone_url, "/api/hook", "?owner=#{project.namespace.path}", "&name=#{project.path}", "&access_token=#{token}"].join if project hook.enable_ssl_verification = enable_ssl_verification hook.save end diff --git a/app/models/project_services/gitlab_ci_service.rb b/app/models/project_services/gitlab_ci_service.rb index 4dcd16ede3..c5657b5070 100644 --- a/app/models/project_services/gitlab_ci_service.rb +++ b/app/models/project_services/gitlab_ci_service.rb @@ -30,6 +30,7 @@ class GitlabCiService < CiService end def ensure_gitlab_ci_project + return unless project project.ensure_gitlab_ci_project end @@ -71,7 +72,7 @@ class GitlabCiService < CiService def build_page(sha, ref) if project.gitlab_ci_project.present? - ci_namespace_project_commit_url(project.namespace, project, sha) + builds_namespace_project_commit_url(project.namespace, project, sha) end end diff --git a/app/models/project_wiki.rb b/app/models/project_wiki.rb index 231973fa54..b5fec38378 100644 --- a/app/models/project_wiki.rb +++ b/app/models/project_wiki.rb @@ -86,6 +86,8 @@ class ProjectWiki commit = commit_details(:created, message, title) wiki.write_page(title, format, content, commit) + + update_project_activity rescue Gollum::DuplicatePageError => e @error_message = "Duplicate page: #{e.message}" return false @@ -95,10 +97,14 @@ class ProjectWiki commit = commit_details(:updated, message, page.title) wiki.update_page(page, page.name, format, content, commit) + + update_project_activity end def delete_page(page, message = nil) wiki.delete_page(page, commit_details(:deleted, message, page.title)) + + update_project_activity end def page_title_and_dir(title) @@ -146,4 +152,8 @@ class ProjectWiki def path_to_repo @path_to_repo ||= File.join(Gitlab.config.gitlab_shell.repos_path, "#{path_with_namespace}.git") end + + def update_project_activity + @project.touch(:last_activity_at) + end end diff --git a/app/models/release.rb b/app/models/release.rb new file mode 100644 index 0000000000..89f70278af --- /dev/null +++ b/app/models/release.rb @@ -0,0 +1,17 @@ +# == Schema Information +# +# Table name: releases +# +# id :integer not null, primary key +# tag :string(255) +# description :text +# project_id :integer +# created_at :datetime +# updated_at :datetime +# + +class Release < ActiveRecord::Base + belongs_to :project + + validates :description, :project, :tag, presence: true +end diff --git a/app/models/repository.rb b/app/models/repository.rb index 0808896fd8..c183610346 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -6,7 +6,7 @@ class Repository include Gitlab::ShellAdapter - attr_accessor :raw_repository, :path_with_namespace, :project + attr_accessor :path_with_namespace, :project def self.clean_old_archives repository_downloads_path = Gitlab.config.gitlab.repository_downloads_path @@ -19,14 +19,18 @@ class Repository def initialize(path_with_namespace, default_branch = nil, project = nil) @path_with_namespace = path_with_namespace @project = project + end - if path_with_namespace - @raw_repository = Gitlab::Git::Repository.new(path_to_repo) - @raw_repository.autocrlf = :input + def raw_repository + return nil unless path_with_namespace + + @raw_repository ||= begin + repo = Gitlab::Git::Repository.new(path_to_repo) + repo.autocrlf = :input + repo + rescue Gitlab::Git::Repository::NoRepository + nil end - - rescue Gitlab::Git::Repository::NoRepository - nil end # Return absolute path to repository @@ -44,6 +48,19 @@ class Repository raw_repository.empty? end + # + # Git repository can contains some hidden refs like: + # /refs/notes/* + # /refs/git-as-svn/* + # /refs/pulls/* + # This refs by default not visible in project page and not cloned to client side. + # + # This method return true if repository contains some content visible in project page. + # + def has_visible_content? + !raw_repository.branches.empty? + end + def commit(id = 'HEAD') return nil unless raw_repository commit = Gitlab::Git::Commit.find(raw_repository, id) @@ -54,13 +71,16 @@ class Repository end def commits(ref, path = nil, limit = nil, offset = nil, skip_merges = false) - commits = Gitlab::Git::Commit.where( + options = { repo: raw_repository, ref: ref, path: path, limit: limit, offset: offset, - ) + follow: path.present? + } + + commits = Gitlab::Git::Commit.where(options) commits = Commit.decorate(commits, @project) if commits.present? commits end @@ -71,6 +91,15 @@ class Repository commits end + def find_commits_by_message(query) + # Limited to 1000 commits for now, could be parameterized? + args = %W(#{Gitlab.config.git.bin_path} log --pretty=%H --max-count 1000 --grep=#{query}) + + git_log_results = Gitlab::Popen.popen(args, path_to_repo).first.lines.map(&:chomp) + commits = git_log_results.map { |c| commit(c) } + commits + end + def find_branch(name) branches.find { |branch| branch.name == name } end @@ -80,29 +109,25 @@ class Repository end def add_branch(branch_name, ref) - cache.expire(:branch_names) - @branches = nil + expire_branches_cache gitlab_shell.add_branch(path_with_namespace, branch_name, ref) end def add_tag(tag_name, ref, message = nil) - cache.expire(:tag_names) - @tags = nil + expire_tags_cache gitlab_shell.add_tag(path_with_namespace, tag_name, ref, message) end def rm_branch(branch_name) - cache.expire(:branch_names) - @branches = nil + expire_branches_cache gitlab_shell.rm_branch(path_with_namespace, branch_name) end def rm_tag(tag_name) - cache.expire(:tag_names) - @tags = nil + expire_tags_cache gitlab_shell.rm_tag(path_with_namespace, tag_name) end @@ -144,6 +169,16 @@ class Repository end end + def expire_tags_cache + cache.expire(:tag_names) + @tags = nil + end + + def expire_branches_cache + cache.expire(:branch_names) + @branches = nil + end + def expire_cache cache_keys.each do |key| cache.expire(key) @@ -271,7 +306,7 @@ class Repository end def last_commit_for_path(sha, path) - args = %W(git rev-list --max-count=1 #{sha} -- #{path}) + args = %W(#{Gitlab.config.git.bin_path} rev-list --max-count=1 #{sha} -- #{path}) sha = Gitlab::Popen.popen(args, path_to_repo).first.strip commit(sha) end @@ -321,8 +356,8 @@ class Repository end end - def branch_names_contains(sha) - args = %W(git branch --contains #{sha}) + def refs_contains_sha(ref_type, sha) + args = %W(#{Gitlab.config.git.bin_path} #{ref_type} --contains #{sha}) names = Gitlab::Popen.popen(args, path_to_repo).first if names.respond_to?(:split) @@ -338,21 +373,12 @@ class Repository end end + def branch_names_contains(sha) + refs_contains_sha('branch', sha) + end + def tag_names_contains(sha) - args = %W(git tag --contains #{sha}) - names = Gitlab::Popen.popen(args, path_to_repo).first - - if names.respond_to?(:split) - names = names.split("\n").map(&:strip) - - names.each do |name| - name.slice! '* ' - end - - names - else - [] - end + refs_contains_sha('tag', sha) end def branches @@ -468,7 +494,7 @@ class Repository root_ref_commit = commit(root_ref) if branch_commit - rugged.merge_base(root_ref_commit.id, branch_commit.id) == branch_commit.id + is_ancestor?(branch_commit.id, root_ref_commit.id) else nil end @@ -478,9 +504,14 @@ class Repository rugged.merge_base(first_commit_id, second_commit_id) end + def is_ancestor?(ancestor_id, descendant_id) + merge_base(ancestor_id, descendant_id) == ancestor_id + end + + def search_files(query, ref) offset = 2 - args = %W(git grep -i -n --before-context #{offset} --after-context #{offset} #{query} #{ref || root_ref}) + args = %W(#{Gitlab.config.git.bin_path} grep -i -n --before-context #{offset} --after-context #{offset} -e #{query} #{ref || root_ref}) Gitlab::Popen.popen(args, path_to_repo).first.scrub.split(/^--$/) end @@ -512,7 +543,7 @@ class Repository end def fetch_ref(source_path, source_ref, target_ref) - args = %W(git fetch #{source_path} #{source_ref}:#{target_ref}) + args = %W(#{Gitlab.config.git.bin_path} fetch -f #{source_path} #{source_ref}:#{target_ref}) Gitlab::Popen.popen(args, path_to_repo) end diff --git a/app/models/user.rb b/app/models/user.rb index 17ccb3b878..9374f01f99 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -54,6 +54,7 @@ # public_email :string(255) default(""), not null # dashboard :integer default(0) # project_view :integer default(0) +# consumed_timestep :integer # layout :integer default(0) # @@ -183,7 +184,7 @@ class User < ActiveRecord::Base # User's Project preference # Note: When adding an option, it MUST go on the end of the array. - enum project_view: [:readme, :activity] + enum project_view: [:readme, :activity, :files] alias_attribute :private_token, :authentication_token @@ -235,21 +236,16 @@ class User < ActiveRecord::Base # Find a User by their primary email or any associated secondary email def find_by_any_email(email) - user_table = arel_table - email_table = Email.arel_table + sql = 'SELECT * + FROM users + WHERE id IN ( + SELECT id FROM users WHERE email = :email + UNION + SELECT emails.user_id FROM emails WHERE email = :email + ) + LIMIT 1;' - # Use ARel to build a query: - query = user_table. - # SELECT "users".* FROM "users" - project(user_table[Arel.star]). - # LEFT OUTER JOIN "emails" - join(email_table, Arel::Nodes::OuterJoin). - # ON "users"."id" = "emails"."user_id" - on(user_table[:id].eq(email_table[:user_id])). - # WHERE ("user"."email" = '' OR "emails"."email" = '') - where(user_table[:email].eq(email).or(email_table[:email].eq(email))) - - find_by_sql(query.to_sql).first + User.find_by_sql([sql, { email: email }]).first end def filter(filter_name) @@ -393,31 +389,23 @@ class User < ActiveRecord::Base end end - # Groups user has access to + # Returns the groups a user has access to def authorized_groups - @authorized_groups ||= begin - group_ids = (groups.pluck(:id) + authorized_projects.pluck(:namespace_id)) - Group.where(id: group_ids) - end + union = Gitlab::SQL::Union. + new([groups.select(:id), authorized_projects.select(:namespace_id)]) + + Group.where("namespaces.id IN (#{union.to_sql})") end - - # Projects user has access to + # Returns the groups a user is authorized to access. def authorized_projects - @authorized_projects ||= begin - project_ids = personal_projects.pluck(:id) - project_ids.push(*groups_projects.pluck(:id)) - project_ids.push(*projects.pluck(:id).uniq) - Project.where(id: project_ids) - end + Project.where("projects.id IN (#{projects_union.to_sql})") end def owned_projects @owned_projects ||= - begin - namespace_ids = owned_groups.pluck(:id).push(namespace.id) - Project.in_namespace(namespace_ids).joins(:namespace) - end + Project.where('namespace_id IN (?) OR namespace_id = ?', + owned_groups.select(:id), namespace.id).joins(:namespace) end # Team membership in authorized projects @@ -706,12 +694,15 @@ class User < ActiveRecord::Base end def toggle_star(project) - user_star_project = users_star_projects. - where(project: project, user: self).take - if user_star_project - user_star_project.destroy - else - UsersStarProject.create!(project: project, user: self) + UsersStarProject.transaction do + user_star_project = users_star_projects. + where(project: project, user: self).lock(true).first + + if user_star_project + user_star_project.destroy + else + UsersStarProject.create!(project: project, user: self) + end end end @@ -729,12 +720,25 @@ class User < ActiveRecord::Base Doorkeeper::AccessToken.where(resource_owner_id: self.id, revoked_at: nil) end - def contributed_projects_ids - Event.contributions.where(author_id: self). + # Returns the projects a user contributed to in the last year. + # + # This method relies on a subquery as this performs significantly better + # compared to a JOIN when coupled with, for example, + # `Project.visible_to_user`. That is, consider the following code: + # + # some_user.contributed_projects.visible_to_user(other_user) + # + # If this method were to use a JOIN the resulting query would take roughly 200 + # ms on a database with a similar size to GitLab.com's database. On the other + # hand, using a subquery means we can get the exact same data in about 40 ms. + def contributed_projects + events = Event.select(:project_id). + contributions.where(author_id: self). where("created_at > ?", Time.now - 1.year). - reorder(project_id: :desc). - select(:project_id). - uniq.map(&:project_id) + uniq. + reorder(nil) + + Project.where(id: events) end def restricted_signup_domains @@ -764,12 +768,30 @@ class User < ActiveRecord::Base !solo_owned_groups.present? end - def ci_authorized_projects - @ci_authorized_projects ||= Ci::Project.where(gitlab_id: authorized_projects) + def ci_authorized_runners + @ci_authorized_runners ||= begin + runner_ids = Ci::RunnerProject.joins(:project). + where("ci_projects.gitlab_id IN (#{ci_projects_union.to_sql})"). + select(:runner_id) + + Ci::Runner.specific.where(id: runner_ids) + end end - def ci_authorized_runners - Ci::Runner.specific.includes(:runner_projects). - where(ci_runner_projects: { project_id: ci_authorized_projects } ) + private + + def projects_union + Gitlab::SQL::Union.new([personal_projects.select(:id), + groups_projects.select(:id), + projects.select(:id)]) + end + + def ci_projects_union + scope = { access_level: [Gitlab::Access::MASTER, Gitlab::Access::OWNER] } + groups = groups_projects.where(members: scope) + other = projects.where(members: scope) + + Gitlab::SQL::Union.new([personal_projects.select(:id), groups.select(:id), + other.select(:id)]) end end diff --git a/app/services/ci/image_for_build_service.rb b/app/services/ci/image_for_build_service.rb index b95835ba09..b8d2419303 100644 --- a/app/services/ci/image_for_build_service.rb +++ b/app/services/ci/image_for_build_service.rb @@ -1,17 +1,15 @@ module Ci class ImageForBuildService def execute(project, params) - image_name = - if params[:sha] - commit = project.commits.find_by(sha: params[:sha]) - image_for_commit(commit) - elsif params[:ref] - commit = project.last_commit_for_ref(params[:ref]) - image_for_commit(commit) - else - 'build-unknown.svg' + sha = params[:sha] + sha ||= + if params[:ref] + project.gl_project.commit(params[:ref]).try(:sha) end + commit = project.commits.ordered.find_by(sha: sha) + image_name = image_for_commit(commit) + image_path = Rails.root.join('public/ci', image_name) OpenStruct.new( diff --git a/app/services/compare_service.rb b/app/services/compare_service.rb index bfe6a3dc4b..ec581658fc 100644 --- a/app/services/compare_service.rb +++ b/app/services/compare_service.rb @@ -3,7 +3,7 @@ require 'securerandom' # Compare 2 branches for one repo or between repositories # and return Gitlab::CompareResult object that responds to commits and diffs class CompareService - def execute(source_project, source_branch, target_project, target_branch) + def execute(source_project, source_branch, target_project, target_branch, diff_options = {}) source_commit = source_project.commit(source_branch) return unless source_commit @@ -25,7 +25,7 @@ class CompareService target_project.repository.raw_repository, target_branch, source_sha, - ) + ), diff_options ) end end diff --git a/app/services/create_release_service.rb b/app/services/create_release_service.rb new file mode 100644 index 0000000000..e06a6f2f47 --- /dev/null +++ b/app/services/create_release_service.rb @@ -0,0 +1,31 @@ +require_relative 'base_service' + +class CreateReleaseService < BaseService + def execute(tag_name, release_description) + + repository = project.repository + existing_tag = repository.find_tag(tag_name) + + # Only create a release if the tag exists + if existing_tag + release = project.releases.find_by(tag: tag_name) + + if release + error('Release already exists', 409) + else + release = project.releases.new({ tag: tag_name, description: release_description }) + release.save + + success(release) + end + else + error('Tag does not exist', 404) + end + end + + def success(release) + out = super() + out[:release] = release + out + end +end diff --git a/app/services/create_tag_service.rb b/app/services/create_tag_service.rb index 1a7318048b..2452999382 100644 --- a/app/services/create_tag_service.rb +++ b/app/services/create_tag_service.rb @@ -1,7 +1,7 @@ require_relative 'base_service' class CreateTagService < BaseService - def execute(tag_name, ref, message) + def execute(tag_name, ref, message, release_description = nil) valid_tag = Gitlab::GitRefValidator.validate(tag_name) if valid_tag == false return error('Tag name invalid') @@ -20,11 +20,15 @@ class CreateTagService < BaseService if new_tag push_data = create_push_data(project, current_user, new_tag) - EventCreateService.new.push(project, current_user, push_data) project.execute_hooks(push_data.dup, :tag_push_hooks) project.execute_services(push_data.dup, :tag_push_hooks) + if release_description + CreateReleaseService.new(@project, @current_user). + execute(tag_name, release_description) + end + success(new_tag) else error('Invalid reference name') diff --git a/app/services/delete_tag_service.rb b/app/services/delete_tag_service.rb index 0c83640113..de3352a675 100644 --- a/app/services/delete_tag_service.rb +++ b/app/services/delete_tag_service.rb @@ -11,8 +11,10 @@ class DeleteTagService < BaseService end if repository.rm_tag(tag_name) + release = project.releases.find_by(tag: tag_name) + release.destroy if release + push_data = build_push_data(tag) - EventCreateService.new.push(project, current_user, push_data) project.execute_hooks(push_data.dup, :tag_push_hooks) project.execute_services(push_data.dup, :tag_push_hooks) diff --git a/app/services/files/create_dir_service.rb b/app/services/files/create_dir_service.rb index 71272fb570..6107254a34 100644 --- a/app/services/files/create_dir_service.rb +++ b/app/services/files/create_dir_service.rb @@ -5,5 +5,16 @@ module Files def commit repository.commit_dir(current_user, @file_path, @commit_message, @target_branch) end + + def validate + super + + unless @file_path =~ Gitlab::Regex.file_path_regex + raise_error( + 'Your changes could not be committed, because the file path ' + + Gitlab::Regex.file_path_regex_message + ) + end + end end end diff --git a/app/services/files/create_service.rb b/app/services/files/create_service.rb index c8e3a910bb..2348920cc5 100644 --- a/app/services/files/create_service.rb +++ b/app/services/files/create_service.rb @@ -9,12 +9,17 @@ module Files def validate super - file_name = File.basename(@file_path) - - unless file_name =~ Gitlab::Regex.file_name_regex + if @file_path =~ Gitlab::Regex.directory_traversal_regex raise_error( 'Your changes could not be committed, because the file name ' + - Gitlab::Regex.file_name_regex_message + Gitlab::Regex.directory_traversal_regex_message + ) + end + + unless @file_path =~ Gitlab::Regex.file_path_regex + raise_error( + 'Your changes could not be committed, because the file name ' + + Gitlab::Regex.file_path_regex_message ) end diff --git a/app/services/git_push_service.rb b/app/services/git_push_service.rb index 3de7bb9dca..f11690aa3f 100644 --- a/app/services/git_push_service.rb +++ b/app/services/git_push_service.rb @@ -58,12 +58,6 @@ class GitPushService @push_data = build_push_data(oldrev, newrev, ref) - # If CI was disabled but .gitlab-ci.yml file was pushed - # we enable CI automatically - if !project.gitlab_ci? && gitlab_ci_yaml?(newrev) - project.enable_ci - end - EventCreateService.new.push(project, user, @push_data) project.execute_hooks(@push_data.dup, :push_hooks) project.execute_services(@push_data.dup, :push_hooks) @@ -134,10 +128,4 @@ class GitPushService def commit_user(commit) commit.author || user end - - def gitlab_ci_yaml?(sha) - @project.repository.blob_at(sha, '.gitlab-ci.yml') - rescue Rugged::ReferenceError - nil - end end diff --git a/app/services/issues/update_service.rb b/app/services/issues/update_service.rb index 2b5426ad45..aa1fd79d22 100644 --- a/app/services/issues/update_service.rb +++ b/app/services/issues/update_service.rb @@ -22,24 +22,27 @@ module Issues issue, issue.labels - old_labels, old_labels - issue.labels) end - if issue.previous_changes.include?('milestone_id') - create_milestone_note(issue) - end - - if issue.previous_changes.include?('assignee_id') - create_assignee_note(issue) - notification_service.reassigned_issue(issue, current_user) - end - - if issue.previous_changes.include?('title') - create_title_change_note(issue, issue.previous_changes['title'].first) - end - - issue.create_new_cross_references! + handle_changes(issue) + issue.create_new_cross_references!(current_user) execute_hooks(issue, 'update') end issue end + + def handle_changes(issue) + if issue.previous_changes.include?('milestone_id') + create_milestone_note(issue) + end + + if issue.previous_changes.include?('assignee_id') + create_assignee_note(issue) + notification_service.reassigned_issue(issue, current_user) + end + + if issue.previous_changes.include?('title') + create_title_change_note(issue, issue.previous_changes['title'].first) + end + end end end diff --git a/app/services/labels/group_service.rb b/app/services/labels/group_service.rb deleted file mode 100644 index b26cee24d5..0000000000 --- a/app/services/labels/group_service.rb +++ /dev/null @@ -1,26 +0,0 @@ -module Labels - class GroupService < ::BaseService - def initialize(project_labels) - @project_labels = project_labels.group_by(&:title) - end - - def execute - build(@project_labels) - end - - def label(title) - if title - group_label = @project_labels[title].group_by(&:title) - build(group_label).first - else - nil - end - end - - private - - def build(label) - label.map { |title, labels| GroupLabel.new(title, labels) } - end - end -end diff --git a/app/services/merge_requests/refresh_service.rb b/app/services/merge_requests/refresh_service.rb index d68bc79ecc..e180edb4bf 100644 --- a/app/services/merge_requests/refresh_service.rb +++ b/app/services/merge_requests/refresh_service.rb @@ -7,17 +7,17 @@ module MergeRequests @branch_name = Gitlab::Git.ref_name(ref) find_new_commits + # Be sure to close outstanding MRs before reloading them to avoid generating an + # empty diff during a manual merge + close_merge_requests reload_merge_requests # Leave a system note if a branch was deleted/added if branch_added? || branch_removed? comment_mr_branch_presence_changed - comment_mr_with_commits - else - comment_mr_with_commits - close_merge_requests end + comment_mr_with_commits execute_mr_web_hooks true diff --git a/app/services/merge_requests/update_service.rb b/app/services/merge_requests/update_service.rb index ebbe0af803..d2849e5193 100644 --- a/app/services/merge_requests/update_service.rb +++ b/app/services/merge_requests/update_service.rb @@ -35,35 +35,38 @@ module MergeRequests ) end - if merge_request.previous_changes.include?('target_branch') - create_branch_change_note(merge_request, 'target', - merge_request.previous_changes['target_branch'].first, - merge_request.target_branch) - end - - if merge_request.previous_changes.include?('milestone_id') - create_milestone_note(merge_request) - end - - if merge_request.previous_changes.include?('assignee_id') - create_assignee_note(merge_request) - notification_service.reassigned_merge_request(merge_request, current_user) - end - - if merge_request.previous_changes.include?('title') - create_title_change_note(merge_request, merge_request.previous_changes['title'].first) - end - - if merge_request.previous_changes.include?('target_branch') || - merge_request.previous_changes.include?('source_branch') - merge_request.mark_as_unchecked - end - - merge_request.create_new_cross_references! + handle_changes(merge_request) + merge_request.create_new_cross_references!(current_user) execute_hooks(merge_request, 'update') end merge_request end + + def handle_changes(merge_request) + if merge_request.previous_changes.include?('target_branch') + create_branch_change_note(merge_request, 'target', + merge_request.previous_changes['target_branch'].first, + merge_request.target_branch) + end + + if merge_request.previous_changes.include?('milestone_id') + create_milestone_note(merge_request) + end + + if merge_request.previous_changes.include?('assignee_id') + create_assignee_note(merge_request) + notification_service.reassigned_merge_request(merge_request, current_user) + end + + if merge_request.previous_changes.include?('title') + create_title_change_note(merge_request, merge_request.previous_changes['title'].first) + end + + if merge_request.previous_changes.include?('target_branch') || + merge_request.previous_changes.include?('source_branch') + merge_request.mark_as_unchecked + end + end end end diff --git a/app/services/milestones/group_service.rb b/app/services/milestones/group_service.rb deleted file mode 100644 index 11d702f1e7..0000000000 --- a/app/services/milestones/group_service.rb +++ /dev/null @@ -1,26 +0,0 @@ -module Milestones - class GroupService < Milestones::BaseService - def initialize(project_milestones) - @project_milestones = project_milestones.group_by(&:title) - end - - def execute - build(@project_milestones) - end - - def milestone(title) - if title - group_milestone = @project_milestones[title].group_by(&:title) - build(group_milestone).first - else - nil - end - end - - private - - def build(milestone) - milestone.map{ |title, milestones| GroupMilestone.new(title, milestones) } - end - end -end diff --git a/app/services/notes/create_service.rb b/app/services/notes/create_service.rb index 2001dc89c3..dbff58dfb9 100644 --- a/app/services/notes/create_service.rb +++ b/app/services/notes/create_service.rb @@ -5,11 +5,16 @@ module Notes note.author = current_user note.system = false + if contains_emoji_only?(params[:note]) + note.is_award = true + note.note = emoji_name(params[:note]) + end + if note.save notification_service.new_note(note) - # Skip system notes, like status changes and cross-references. - unless note.system + # Skip system notes, like status changes and cross-references and awards + unless note.system || note.is_award event_service.leave_note(note, note.author) note.create_cross_references! execute_hooks(note) @@ -28,5 +33,13 @@ module Notes note.project.execute_hooks(note_data, :note_hooks) note.project.execute_services(note_data, :note_hooks) end + + def contains_emoji_only?(note) + note =~ /\A:[-_+[:alnum:]]*:\s?\z/ + end + + def emoji_name(note) + note.match(/\A:([-_+[:alnum:]]*):\s?/)[1] + end end end diff --git a/app/services/notes/update_service.rb b/app/services/notes/update_service.rb index 6c2f08e596..72e2f78008 100644 --- a/app/services/notes/update_service.rb +++ b/app/services/notes/update_service.rb @@ -4,7 +4,7 @@ module Notes return note unless note.editable? note.update_attributes(params.merge(updated_by: current_user)) - note.create_new_cross_references! + note.create_new_cross_references!(current_user) note.reset_events_cache note diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb index a6b2234865..dc78f85105 100644 --- a/app/services/notification_service.rb +++ b/app/services/notification_service.rb @@ -102,6 +102,7 @@ class NotificationService # ignore gitlab service messages return true if note.note.start_with?('Status changed to closed') return true if note.cross_reference? && note.system == true + return true if note.is_award target = note.noteable @@ -361,11 +362,13 @@ class NotificationService end def reassign_resource_email(target, project, current_user, method) - assignee_id_was = previous_record(target, "assignee_id") - recipients = build_recipients(target, project, current_user) + previous_assignee_id = previous_record(target, "assignee_id") + previous_assignee = User.find_by(id: previous_assignee_id) if previous_assignee_id + + recipients = build_recipients(target, project, current_user, [previous_assignee]) recipients.each do |recipient| - mailer.send(method, recipient.id, target.id, assignee_id_was, current_user.id) + mailer.send(method, recipient.id, target.id, previous_assignee_id, current_user.id) end end @@ -377,9 +380,11 @@ class NotificationService end end - def build_recipients(target, project, current_user) + def build_recipients(target, project, current_user, extra_recipients = nil) recipients = target.participants(current_user) + recipients = recipients.concat(extra_recipients).compact.uniq if extra_recipients + recipients = add_project_watchers(recipients, project) recipients = reject_mention_users(recipients, project) recipients = reject_muted_users(recipients, project) diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb index faf1ee008e..700a1db04d 100644 --- a/app/services/projects/create_service.rb +++ b/app/services/projects/create_service.rb @@ -55,7 +55,9 @@ module Projects @project.save if @project.persisted? && !@project.import? - raise 'Failed to create repository' unless @project.create_repository + unless @project.create_repository + raise 'Failed to create repository' + end end end @@ -94,11 +96,7 @@ module Projects @project.team << [current_user, :master, current_user] end - @project.update_column(:last_activity_at, @project.created_at) - - if @project.import? - @project.import_start - end + @project.import_start if @project.import? end end end diff --git a/app/services/projects/fork_service.rb b/app/services/projects/fork_service.rb index 46374a3909..5da1c7afd9 100644 --- a/app/services/projects/fork_service.rb +++ b/app/services/projects/fork_service.rb @@ -17,7 +17,7 @@ module Projects new_project = CreateService.new(current_user, new_params).execute if new_project.persisted? - if @project.gitlab_ci? + if @project.builds_enabled? new_project.enable_ci settings = @project.gitlab_ci_project.attributes.select do |attr_name, value| diff --git a/app/services/system_hooks_service.rb b/app/services/system_hooks_service.rb index 9a5fe4af9d..8b5143e1eb 100644 --- a/app/services/system_hooks_service.rb +++ b/app/services/system_hooks_service.rb @@ -33,17 +33,7 @@ class SystemHooksService ) end when Project - owner = model.owner - - data.merge!({ - name: model.name, - path: model.path, - path_with_namespace: model.path_with_namespace, - project_id: model.id, - owner_name: owner.name, - owner_email: owner.respond_to?(:email) ? owner.email : "", - project_visibility: Project.visibility_levels.key(model.visibility_level_field).downcase - }) + data.merge!(project_data(model)) when User data.merge!({ name: model.name, @@ -51,16 +41,7 @@ class SystemHooksService user_id: model.id }) when ProjectMember - data.merge!({ - project_name: model.project.name, - project_path: model.project.path, - project_path_with_namespace: model.project.path_with_namespace, - project_id: model.project.id, - user_name: model.user.name, - user_email: model.user.email, - access_level: model.human_access, - project_visibility: Project.visibility_levels.key(model.project.visibility_level_field).downcase - }) + data.merge!(project_member_data(model)) when Group owner = model.owner @@ -72,15 +53,7 @@ class SystemHooksService owner_email: owner.respond_to?(:email) ? owner.email : nil, ) when GroupMember - data.merge!( - group_name: model.group.name, - group_path: model.group.path, - group_id: model.group.id, - user_name: model.user.name, - user_email: model.user.email, - user_id: model.user.id, - group_access: model.human_access, - ) + data.merge!(group_member_data(model)) end end @@ -96,4 +69,43 @@ class SystemHooksService "#{model.class.name.downcase}_#{event.to_s}" end end + + def project_data(model) + owner = model.owner + + { + name: model.name, + path: model.path, + path_with_namespace: model.path_with_namespace, + project_id: model.id, + owner_name: owner.name, + owner_email: owner.respond_to?(:email) ? owner.email : "", + project_visibility: Project.visibility_levels.key(model.visibility_level_field).downcase + } + end + + def project_member_data(model) + { + project_name: model.project.name, + project_path: model.project.path, + project_path_with_namespace: model.project.path_with_namespace, + project_id: model.project.id, + user_name: model.user.name, + user_email: model.user.email, + access_level: model.human_access, + project_visibility: Project.visibility_levels.key(model.project.visibility_level_field).downcase + } + end + + def group_member_data(model) + { + group_name: model.group.name, + group_path: model.group.path, + group_id: model.group.id, + user_name: model.user.name, + user_email: model.user.email, + user_id: model.user.id, + group_access: model.human_access, + } + end end diff --git a/app/services/update_release_service.rb b/app/services/update_release_service.rb new file mode 100644 index 0000000000..25eb13ef09 --- /dev/null +++ b/app/services/update_release_service.rb @@ -0,0 +1,29 @@ +require_relative 'base_service' + +class UpdateReleaseService < BaseService + def execute(tag_name, release_description) + + repository = project.repository + existing_tag = repository.find_tag(tag_name) + + if existing_tag + release = project.releases.find_by(tag: tag_name) + + if release + release.update_attributes(description: release_description) + + success(release) + else + error('Release does not exist', 404) + end + else + error('Tag does not exist', 404) + end + end + + def success(release) + out = super() + out[:release] = release + out + end +end diff --git a/app/uploaders/artifact_uploader.rb b/app/uploaders/artifact_uploader.rb new file mode 100644 index 0000000000..1dccc39e7e --- /dev/null +++ b/app/uploaders/artifact_uploader.rb @@ -0,0 +1,50 @@ +# encoding: utf-8 +class ArtifactUploader < CarrierWave::Uploader::Base + storage :file + + attr_accessor :build, :field + + def self.artifacts_path + Gitlab.config.artifacts.path + end + + def self.artifacts_upload_path + File.join(self.artifacts_path, 'tmp/uploads/') + end + + def self.artifacts_cache_path + File.join(self.artifacts_path, 'tmp/cache/') + end + + def initialize(build, field) + @build, @field = build, field + end + + def artifacts_path + File.join(build.created_at.utc.strftime('%Y_%m'), build.project.id.to_s, build.id.to_s) + end + + def store_dir + File.join(ArtifactUploader.artifacts_path, artifacts_path) + end + + def cache_dir + File.join(ArtifactUploader.artifacts_cache_path, artifacts_path) + end + + def file_storage? + self.class.storage == CarrierWave::Storage::File + end + + def exists? + file.try(:exists?) + end + + def move_to_cache + true + end + + def move_to_store + true + end +end diff --git a/app/uploaders/attachment_uploader.rb b/app/uploaders/attachment_uploader.rb index a9691bee46..a65a896e41 100644 --- a/app/uploaders/attachment_uploader.rb +++ b/app/uploaders/attachment_uploader.rb @@ -1,26 +1,11 @@ # encoding: utf-8 class AttachmentUploader < CarrierWave::Uploader::Base + include UploaderHelper + storage :file def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end - - def image? - img_ext = %w(png jpg jpeg gif bmp tiff) - if file.respond_to?(:extension) - img_ext.include?(file.extension.downcase) - else - # Not all CarrierWave storages respond to :extension - ext = file.path.split('.').last.downcase - img_ext.include?(ext) - end - rescue - false - end - - def file_storage? - self.class.storage == CarrierWave::Storage::File - end end diff --git a/app/uploaders/avatar_uploader.rb b/app/uploaders/avatar_uploader.rb index 7cad044555..6135c3ad96 100644 --- a/app/uploaders/avatar_uploader.rb +++ b/app/uploaders/avatar_uploader.rb @@ -1,6 +1,8 @@ # encoding: utf-8 class AvatarUploader < CarrierWave::Uploader::Base + include UploaderHelper + storage :file after :store, :reset_events_cache @@ -9,23 +11,6 @@ class AvatarUploader < CarrierWave::Uploader::Base "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end - def image? - img_ext = %w(png jpg jpeg gif bmp tiff) - if file.respond_to?(:extension) - img_ext.include?(file.extension.downcase) - else - # Not all CarrierWave storages respond to :extension - ext = file.path.split('.').last.downcase - img_ext.include?(ext) - end - rescue - false - end - - def file_storage? - self.class.storage == CarrierWave::Storage::File - end - def reset_events_cache(file) model.reset_events_cache if model.is_a?(User) end diff --git a/app/uploaders/file_uploader.rb b/app/uploaders/file_uploader.rb index e821158583..ac920119a8 100644 --- a/app/uploaders/file_uploader.rb +++ b/app/uploaders/file_uploader.rb @@ -1,5 +1,7 @@ # encoding: utf-8 class FileUploader < CarrierWave::Uploader::Base + include UploaderHelper + storage :file attr_accessor :project, :secret @@ -28,21 +30,4 @@ class FileUploader < CarrierWave::Uploader::Base def secure_url File.join("/uploads", @secret, file.filename) end - - def file_storage? - self.class.storage == CarrierWave::Storage::File - end - - def image? - img_ext = %w(png jpg jpeg gif bmp tiff) - if file.respond_to?(:extension) - img_ext.include?(file.extension.downcase) - else - # Not all CarrierWave storages respond to :extension - ext = file.path.split('.').last.downcase - img_ext.include?(ext) - end - rescue - false - end end diff --git a/app/uploaders/lfs_object_uploader.rb b/app/uploaders/lfs_object_uploader.rb new file mode 100644 index 0000000000..28085b3108 --- /dev/null +++ b/app/uploaders/lfs_object_uploader.rb @@ -0,0 +1,29 @@ +# encoding: utf-8 + +class LfsObjectUploader < CarrierWave::Uploader::Base + storage :file + + def store_dir + "#{Gitlab.config.lfs.storage_path}/#{model.oid[0,2]}/#{model.oid[2,2]}" + end + + def cache_dir + "#{Gitlab.config.lfs.storage_path}/tmp/cache" + end + + def move_to_cache + true + end + + def move_to_store + true + end + + def exists? + file.try(:exists?) + end + + def filename + model.oid[4..-1] + end +end diff --git a/app/uploaders/uploader_helper.rb b/app/uploaders/uploader_helper.rb new file mode 100644 index 0000000000..5ef440f336 --- /dev/null +++ b/app/uploaders/uploader_helper.rb @@ -0,0 +1,19 @@ +# Extra methods for uploader +module UploaderHelper + def image? + img_ext = %w(png jpg jpeg gif bmp tiff) + if file.respond_to?(:extension) + img_ext.include?(file.extension.downcase) + else + # Not all CarrierWave storages respond to :extension + ext = file.path.split('.').last.downcase + img_ext.include?(ext) + end + rescue + false + end + + def file_storage? + self.class.storage == CarrierWave::Storage::File + end +end diff --git a/app/views/admin/abuse_reports/index.html.haml b/app/views/admin/abuse_reports/index.html.haml index 2e8746146d..40a5fe4628 100644 --- a/app/views/admin/abuse_reports/index.html.haml +++ b/app/views/admin/abuse_reports/index.html.haml @@ -2,16 +2,17 @@ %h3.page-title Abuse Reports %hr - if @abuse_reports.present? - %table.table - %thead - %tr - %th Reported by - %th Reported at - %th Message - %th User - %th Primary action - %th - = render @abuse_reports + .table-holder + %table.table + %thead + %tr + %th Reported by + %th Reported at + %th Message + %th User + %th Primary action + %th + = render @abuse_reports = paginate @abuse_reports - else %h4 There are no abuse reports diff --git a/app/views/admin/application_settings/_form.html.haml b/app/views/admin/application_settings/_form.html.haml index 7a78526e09..ddaf0e0e8f 100644 --- a/app/views/admin/application_settings/_form.html.haml +++ b/app/views/admin/application_settings/_form.html.haml @@ -130,5 +130,19 @@ = f.text_area :help_page_text, class: 'form-control', rows: 4 .help-block Markdown enabled + %fieldset + %legend Continuous Integration + .form-group + .col-sm-offset-2.col-sm-10 + .checkbox + = f.label :shared_runners_enabled do + = f.check_box :shared_runners_enabled + Enable shared runners for a new projects + + .form-group + = f.label :max_artifacts_size, 'Maximum artifacts size (MB)', class: 'control-label col-sm-2' + .col-sm-10 + = f.number_field :max_artifacts_size, class: 'form-control' + .form-actions = f.submit 'Save', class: 'btn btn-primary' diff --git a/app/views/admin/applications/show.html.haml b/app/views/admin/applications/show.html.haml index 0ea2ffeda9..3eb9d61972 100644 --- a/app/views/admin/applications/show.html.haml +++ b/app/views/admin/applications/show.html.haml @@ -3,25 +3,26 @@ Application: #{@application.name} -%table.table - %tr - %td - Application Id - %td - %code#application_id= @application.uid - %tr - %td - Secret: - %td - %code#secret= @application.secret +.table-holder + %table.table + %tr + %td + Application Id + %td + %code#application_id= @application.uid + %tr + %td + Secret: + %td + %code#secret= @application.secret - %tr - %td - Callback url - %td - - @application.redirect_uri.split.each do |uri| - %div - %span.monospace= uri + %tr + %td + Callback url + %td + - @application.redirect_uri.split.each do |uri| + %div + %span.monospace= uri .form-actions = link_to 'Edit', edit_admin_application_path(@application), class: 'btn btn-primary wide pull-left' = render 'delete_form', application: @application, submit_btn_css: 'btn btn-danger prepend-left-10' diff --git a/app/views/admin/background_jobs/show.html.haml b/app/views/admin/background_jobs/show.html.haml index 3a01e11510..de5bc050cf 100644 --- a/app/views/admin/background_jobs/show.html.haml +++ b/app/views/admin/background_jobs/show.html.haml @@ -12,24 +12,25 @@ %i.fa.fa-exclamation-triangle There are no running sidekiq processes. Please restart GitLab - else - %table.table - %thead - %th USER - %th PID - %th CPU - %th MEM - %th STATE - %th START - %th COMMAND - %tbody - - @sidekiq_processes.each do |process| - - next unless process.match(/(sidekiq \d+\.\d+\.\d+.+$)/) - - data = process.strip.split(' ') - %tr - %td= gitlab_config.user - - 5.times do - %td= data.shift - %td= data.join(' ') + .table-holder + %table.table + %thead + %th USER + %th PID + %th CPU + %th MEM + %th STATE + %th START + %th COMMAND + %tbody + - @sidekiq_processes.each do |process| + - next unless process.match(/(sidekiq \d+\.\d+\.\d+.+$)/) + - data = process.strip.split(' ') + %tr + %td= gitlab_config.user + - 5.times do + %td= data.shift + %td= data.join(' ') .clearfix %p diff --git a/app/views/admin/deploy_keys/index.html.haml b/app/views/admin/deploy_keys/index.html.haml index 2bf1689cbc..841e6971fb 100644 --- a/app/views/admin/deploy_keys/index.html.haml +++ b/app/views/admin/deploy_keys/index.html.haml @@ -5,22 +5,23 @@ .panel-head-actions = link_to 'New Deploy Key', new_admin_deploy_key_path, class: "btn btn-new btn-sm" - if @deploy_keys.any? - %table.table - %thead.panel-heading - %tr - %th Title - %th Fingerprint - %th Added at - %th - %tbody - - @deploy_keys.each do |deploy_key| + .table-holder + %table.table + %thead.panel-heading %tr - %td - %strong= deploy_key.title - %td - %code.key-fingerprint= deploy_key.fingerprint - %td - %span.cgray - added #{time_ago_with_tooltip(deploy_key.created_at)} - %td - = link_to 'Remove', admin_deploy_key_path(deploy_key), data: { confirm: 'Are you sure?'}, method: :delete, class: "btn btn-sm btn-remove delete-key pull-right" + %th Title + %th Fingerprint + %th Added at + %th + %tbody + - @deploy_keys.each do |deploy_key| + %tr + %td + %strong= deploy_key.title + %td + %code.key-fingerprint= deploy_key.fingerprint + %td + %span.cgray + added #{time_ago_with_tooltip(deploy_key.created_at)} + %td + = link_to 'Remove', admin_deploy_key_path(deploy_key), data: { confirm: 'Are you sure?'}, method: :delete, class: "btn btn-sm btn-remove delete-key pull-right" diff --git a/app/views/admin/identities/index.html.haml b/app/views/admin/identities/index.html.haml index ae57e3adc4..8358a14445 100644 --- a/app/views/admin/identities/index.html.haml +++ b/app/views/admin/identities/index.html.haml @@ -2,12 +2,13 @@ = render 'admin/users/head' - if @identities.present? - %table.table - %thead - %tr - %th Provider - %th Identifier - %th - = render @identities + .table-holder + %table.table + %thead + %tr + %th Provider + %th Identifier + %th + = render @identities - else %h4 This user has no identities diff --git a/app/views/admin/labels/_form.html.haml b/app/views/admin/labels/_form.html.haml index ad58a3837f..a5ace4e7a3 100644 --- a/app/views/admin/labels/_form.html.haml +++ b/app/views/admin/labels/_form.html.haml @@ -31,5 +31,5 @@ = f.submit 'Save', class: 'btn btn-save js-save-button' = link_to "Cancel", admin_labels_path, class: 'btn btn-cancel' -:coffeescript - new Labels +:javascript + new Labels(); diff --git a/app/views/admin/services/index.html.haml b/app/views/admin/services/index.html.haml index e237729114..6a5986f496 100644 --- a/app/views/admin/services/index.html.haml +++ b/app/views/admin/services/index.html.haml @@ -2,22 +2,23 @@ %h3.page-title Service templates %p.light Service template allows you to set default values for project services -%table.table - %thead - %tr - %th - %th Service - %th Description - %th Last edit - - @services.sort_by(&:title).each do |service| - %tr - %td - = icon("copy", class: 'clgray') - %td - = link_to edit_admin_application_settings_service_path(service.id) do - %strong= service.title - %td - = service.description - %td.light - = time_ago_in_words service.updated_at - ago +.table-holder + %table.table + %thead + %tr + %th + %th Service + %th Description + %th Last edit + - @services.sort_by(&:title).each do |service| + %tr + %td + = icon("copy", class: 'clgray') + %td + = link_to edit_admin_application_settings_service_path(service.id) do + %strong= service.title + %td + = service.description + %td.light + = time_ago_in_words service.updated_at + ago diff --git a/app/views/admin/users/_head.html.haml b/app/views/admin/users/_head.html.haml index 4245d0f1ed..8d1cab4137 100644 --- a/app/views/admin/users/_head.html.haml +++ b/app/views/admin/users/_head.html.haml @@ -7,7 +7,7 @@ .pull-right - unless @user == current_user - = link_to 'Log in as this user', login_as_admin_user_path(@user), method: :post, class: "btn btn-grouped btn-info" + = link_to 'Impersonate', impersonate_admin_user_path(@user), method: :post, class: "btn btn-grouped btn-info" = link_to edit_admin_user_path(@user), class: "btn btn-grouped" do %i.fa.fa-pencil-square-o Edit diff --git a/app/views/users/_profile.html.haml b/app/views/admin/users/_profile.html.haml similarity index 83% rename from app/views/users/_profile.html.haml rename to app/views/admin/users/_profile.html.haml index 90d9980c85..7d11edc79e 100644 --- a/app/views/users/_profile.html.haml +++ b/app/views/admin/users/_profile.html.haml @@ -16,11 +16,11 @@ - unless user.linkedin.blank? %li %span.light LinkedIn: - %strong= link_to user.linkedin, "http://www.linkedin.com/in/#{user.linkedin}" + %strong= link_to user.linkedin, "https://www.linkedin.com/in/#{user.linkedin}" - unless user.twitter.blank? %li %span.light Twitter: - %strong= link_to user.twitter, "http://www.twitter.com/#{user.twitter}" + %strong= link_to user.twitter, "https://twitter.com/#{user.twitter}" - unless user.website_url.blank? %li %span.light Website: diff --git a/app/views/admin/users/show.html.haml b/app/views/admin/users/show.html.haml index 231bcb0426..0848504b7a 100644 --- a/app/views/admin/users/show.html.haml +++ b/app/views/admin/users/show.html.haml @@ -14,7 +14,7 @@ %strong = link_to user_path(@user) do = @user.username - = render 'users/profile', user: @user + = render 'admin/users/profile', user: @user .panel.panel-default .panel-heading diff --git a/app/views/ci/admin/events/index.html.haml b/app/views/ci/admin/events/index.html.haml index f9ab099430..5a5b4dc7c3 100644 --- a/app/views/ci/admin/events/index.html.haml +++ b/app/views/ci/admin/events/index.html.haml @@ -1,17 +1,18 @@ -%table.table - %thead - %tr - %th User ID - %th Description - %th When - - @events.each do |event| - %tr - %td - = event.user_id - %td - = event.description - %td.light - = time_ago_in_words event.updated_at - ago +.table-holder + %table.table + %thead + %tr + %th User ID + %th Description + %th When + - @events.each do |event| + %tr + %td + = event.user_id + %td + = event.description + %td.light + = time_ago_in_words event.updated_at + ago -= paginate @events \ No newline at end of file += paginate @events diff --git a/app/views/ci/admin/projects/index.html.haml b/app/views/ci/admin/projects/index.html.haml index dc7b041473..0da8547924 100644 --- a/app/views/ci/admin/projects/index.html.haml +++ b/app/views/ci/admin/projects/index.html.haml @@ -1,15 +1,16 @@ -%table.table - %thead - %tr - %th ID - %th Name - %th Last build - %th Access - %th Builds - %th +.table-holder + %table.table + %thead + %tr + %th ID + %th Name + %th Last build + %th Access + %th Builds + %th - - @projects.each do |project| - = render "ci/admin/projects/project", project: project + - @projects.each do |project| + = render "ci/admin/projects/project", project: project = paginate @projects diff --git a/app/views/ci/admin/runner_projects/index.html.haml b/app/views/ci/admin/runner_projects/index.html.haml index f049b4f4c4..6b4e3b2cb3 100644 --- a/app/views/ci/admin/runner_projects/index.html.haml +++ b/app/views/ci/admin/runner_projects/index.html.haml @@ -1,5 +1,5 @@ %p.lead - To register new runner visit #{link_to 'this page ', ci_runners_path} + To register a new runner visit #{link_to 'this page ', ci_runners_path} .row .col-md-8 diff --git a/app/views/ci/admin/runners/index.html.haml b/app/views/ci/admin/runners/index.html.haml index 01ce81b447..bacaccfbff 100644 --- a/app/views/ci/admin/runners/index.html.haml +++ b/app/views/ci/admin/runners/index.html.haml @@ -1,5 +1,5 @@ %p.lead - %span To register new runner you should enter the following registration token. With this token the runner will request a unique runner token and use that for future communication. + %span To register a new runner you should enter the following registration token. With this token the runner will request a unique runner token and use that for future communication. %code #{GitlabCi::REGISTRATION_TOKEN} .bs-callout @@ -21,7 +21,7 @@ \- run builds from assigned projects %li %span.label.label-danger paused - \- runner will not receive any new build + \- runner will not receive any new builds .append-bottom-20.clearfix .pull-left @@ -35,18 +35,19 @@ %br -%table.table - %thead - %tr - %th Type - %th Runner token - %th Description - %th Projects - %th Builds - %th Tags - %th Last contact - %th +.table-holder + %table.table + %thead + %tr + %th Type + %th Runner token + %th Description + %th Projects + %th Builds + %th Tags + %th Last contact + %th - - @runners.each do |runner| - = render "ci/admin/runners/runner", runner: runner + - @runners.each do |runner| + = render "ci/admin/runners/runner", runner: runner = paginate @runners diff --git a/app/views/ci/admin/runners/show.html.haml b/app/views/ci/admin/runners/show.html.haml index 92787b2e6a..1498db46a8 100644 --- a/app/views/ci/admin/runners/show.html.haml +++ b/app/views/ci/admin/runners/show.html.haml @@ -13,13 +13,13 @@ - if @runner.shared? .bs-callout.bs-callout-success - %h4 This runner will process build from ALL UNASSIGNED projects + %h4 This runner will process builds from ALL UNASSIGNED projects %p If you want runners to build only specific projects, enable them in the table below. Keep in mind that this is a one way transition. - else .bs-callout.bs-callout-info - %h4 This runner will process build only from ASSIGNED projects + %h4 This runner will process builds only from ASSIGNED projects %p You can't make this a shared runner. %hr = form_for @runner, url: ci_admin_runner_path(@runner), html: { class: 'form-horizontal' } do |f| @@ -53,13 +53,14 @@ %th - @runner.runner_projects.each do |runner_project| - project = runner_project.project - %tr.alert-info - %td - %strong - = project.name - %td - .pull-right - = link_to 'Disable', [:ci, :admin, project, runner_project], method: :delete, class: 'btn btn-danger btn-xs' + - if project.gl_project + %tr.alert-info + %td + %strong + = project.name + %td + .pull-right + = link_to 'Disable', [:ci, :admin, project, runner_project], method: :delete, class: 'btn btn-danger btn-xs' %table.table %thead @@ -103,21 +104,26 @@ %th Finished at - @builds.each do |build| + - gl_project = build.gl_project %tr.build %td.id - - gl_project = build.project.gl_project - = link_to namespace_project_build_path(gl_project.namespace, gl_project, build) do + - if gl_project + = link_to namespace_project_build_path(gl_project.namespace, gl_project, build) do + = build.id + - else = build.id %td.status = ci_status_with_icon(build.status) %td.status - = build.project.name + - if gl_project + = gl_project.name_with_namespace %td.build-link - = link_to ci_status_path(build.commit) do - %strong #{build.commit.short_sha} + - if gl_project + = link_to ci_status_path(build.commit) do + %strong #{build.commit.short_sha} %td.timestamp - if build.finished_at diff --git a/app/views/ci/events/index.html.haml b/app/views/ci/events/index.html.haml deleted file mode 100644 index 779f49b3d3..0000000000 --- a/app/views/ci/events/index.html.haml +++ /dev/null @@ -1,19 +0,0 @@ -%h3.page-title Events - -%table.table - %thead - %tr - %th User ID - %th Description - %th When - - @events.each do |event| - %tr - %td - = event.user_id - %td - = event.description - %td.light - = time_ago_in_words event.updated_at - ago - -= paginate @events \ No newline at end of file diff --git a/app/views/ci/lints/_create.html.haml b/app/views/ci/lints/_create.html.haml index e2179e60f3..77f78caa8d 100644 --- a/app/views/ci/lints/_create.html.haml +++ b/app/views/ci/lints/_create.html.haml @@ -4,29 +4,35 @@ syntax is correct %i.fa.fa-ok.correct-syntax - %table.table.table-bordered - %thead - %tr - %th Parameter - %th Value - %tbody - - @stages.each do |stage| - - @builds.select { |build| build[:stage] == stage }.each do |build| - %tr - %td #{stage.capitalize} Job - #{build[:name]} - %td - %pre - = simple_format build[:script] + .table-holder + %table.table.table-bordered + %thead + %tr + %th Parameter + %th Value + %tbody + - @stages.each do |stage| + - @builds.select { |build| build[:stage] == stage }.each do |build| + %tr + %td #{stage.capitalize} Job - #{build[:name]} + %td + %pre + = simple_format build[:commands] - %br - %b Tag list: - = build[:tags] - %br - %b Refs only: - = build[:only] && build[:only].join(", ") - %br - %b Refs except: - = build[:except] && build[:except].join(", ") + %br + %b Tag list: + = build[:tags] + %br + %b Refs only: + = build[:only] && build[:only].join(", ") + %br + %b Refs except: + = build[:except] && build[:except].join(", ") + %br + %b When: + = build[:when] + - if build[:allow_failure] + %b Allowed to fail -else %p diff --git a/app/views/ci/lints/show.html.haml b/app/views/ci/lints/show.html.haml index a9b954771c..fb9057e488 100644 --- a/app/views/ci/lints/show.html.haml +++ b/app/views/ci/lints/show.html.haml @@ -11,15 +11,17 @@ .controls.pull-left.prepend-top-10 = submit_tag "Validate", class: 'btn btn-success submit-yml' - + %p.text-center.loading %i.fa.fa-refresh.fa-spin .results.prepend-top-20 -:coffeescript - $(".loading").hide() - $('form').bind 'ajax:beforeSend', -> - $(".loading").show() - $('form').bind 'ajax:complete', -> - $(".loading").hide() +:javascript + $(".loading").hide(); + $('form').bind('ajax:beforeSend', function() { + $(".loading").show(); + }); + $('form').bind('ajax:complete', function() { + $(".loading").hide(); + }); diff --git a/app/views/ci/notify/build_fail_email.html.haml b/app/views/ci/notify/build_fail_email.html.haml index 69689a7502..b0aaea8907 100644 --- a/app/views/ci/notify/build_fail_email.html.haml +++ b/app/views/ci/notify/build_fail_email.html.haml @@ -7,13 +7,17 @@ = @project.name %p - Commit link: #{gitlab_commit_link(@project, @build.commit.short_sha)} + Commit: #{link_to @build.short_sha, namespace_project_commit_path(@build.gl_project.namespace, @build.gl_project, @build.sha)} %p Author: #{@build.commit.git_author_name} %p Branch: #{@build.ref} +%p + Stage: #{@build.stage} +%p + Job: #{@build.name} %p Message: #{@build.commit.git_commit_message} %p - Url: #{link_to @build.short_sha, namespace_project_build_url(@build.gl_project.namespace, @build.gl_project, @build)} + Build details: #{link_to "Build #{@build.id}", namespace_project_build_url(@build.gl_project.namespace, @build.gl_project, @build)} diff --git a/app/views/ci/notify/build_fail_email.text.erb b/app/views/ci/notify/build_fail_email.text.erb index 6de5dc10f1..17a3b9b1d3 100644 --- a/app/views/ci/notify/build_fail_email.text.erb +++ b/app/views/ci/notify/build_fail_email.text.erb @@ -4,6 +4,8 @@ Status: <%= @build.status %> Commit: <%= @build.commit.short_sha %> Author: <%= @build.commit.git_author_name %> Branch: <%= @build.ref %> +Stage: <%= @build.stage %> +Job: <%= @build.name %> Message: <%= @build.commit.git_commit_message %> Url: <%= namespace_project_build_url(@build.gl_project.namespace, @build.gl_project, @build) %> diff --git a/app/views/ci/notify/build_success_email.html.haml b/app/views/ci/notify/build_success_email.html.haml index 4e3015a356..24c439e50e 100644 --- a/app/views/ci/notify/build_success_email.html.haml +++ b/app/views/ci/notify/build_success_email.html.haml @@ -8,13 +8,17 @@ = @project.name %p - Commit link: #{gitlab_commit_link(@project, @build.commit.short_sha)} + Commit: #{link_to @build.short_sha, namespace_project_commit_path(@build.gl_project.namespace, @build.gl_project, @build.sha)} %p Author: #{@build.commit.git_author_name} %p Branch: #{@build.ref} +%p + Stage: #{@build.stage} +%p + Job: #{@build.name} %p Message: #{@build.commit.git_commit_message} %p - Url: #{link_to @build.short_sha, namespace_project_build_url(@build.gl_project.namespace, @build.gl_project, @build)} + Build details: #{link_to "Build #{@build.id}", namespace_project_build_url(@build.gl_project.namespace, @build.gl_project, @build)} diff --git a/app/views/ci/notify/build_success_email.text.erb b/app/views/ci/notify/build_success_email.text.erb index d0a43ae1c1..bc8b978c3d 100644 --- a/app/views/ci/notify/build_success_email.text.erb +++ b/app/views/ci/notify/build_success_email.text.erb @@ -4,6 +4,8 @@ Status: <%= @build.status %> Commit: <%= @build.commit.short_sha %> Author: <%= @build.commit.git_author_name %> Branch: <%= @build.ref %> +Stage: <%= @build.stage %> +Job: <%= @build.name %> Message: <%= @build.commit.git_commit_message %> Url: <%= namespace_project_build_url(@build.gl_project.namespace, @build.gl_project, @build) %> diff --git a/app/views/ci/user_sessions/new.html.haml b/app/views/ci/user_sessions/new.html.haml index 308b217ea7..b8d9a1d708 100644 --- a/app/views/ci/user_sessions/new.html.haml +++ b/app/views/ci/user_sessions/new.html.haml @@ -1,8 +1,7 @@ .login-block %h2 Login using GitLab account %p.light - Make sure you have account on GitLab server + Make sure you have an account on the GitLab server = link_to GitlabCi.config.gitlab_server.url, GitlabCi.config.gitlab_server.url, no_turbolink %hr = link_to "Login with GitLab", auth_ci_user_sessions_path(state: params[:state]), no_turbolink.merge( class: 'btn btn-login btn-success' ) - diff --git a/app/views/dashboard/groups/index.html.haml b/app/views/dashboard/groups/index.html.haml index c249f5cace..f3f3f58111 100644 --- a/app/views/dashboard/groups/index.html.haml +++ b/app/views/dashboard/groups/index.html.haml @@ -16,4 +16,4 @@ - group = group_member.group = render 'shared/groups/group', group: group, group_member: group_member -= paginate @group_members += paginate @group_members, theme: 'gitlab' diff --git a/app/views/dashboard/milestones/index.html.haml b/app/views/dashboard/milestones/index.html.haml index 21b25c3986..635251e237 100644 --- a/app/views/dashboard/milestones/index.html.haml +++ b/app/views/dashboard/milestones/index.html.haml @@ -10,10 +10,10 @@ .milestones %ul.content-list - - if @dashboard_milestones.blank? + - if @milestones.blank? %li .nothing-here-block No milestones to show - else - - @dashboard_milestones.each do |milestone| + - @milestones.each do |milestone| = render 'milestone', milestone: milestone - = paginate @dashboard_milestones, theme: "gitlab" + = paginate @milestones, theme: "gitlab" diff --git a/app/views/dashboard/milestones/show.html.haml b/app/views/dashboard/milestones/show.html.haml index d5c4a44fef..83077a398b 100644 --- a/app/views/dashboard/milestones/show.html.haml +++ b/app/views/dashboard/milestones/show.html.haml @@ -1,82 +1,84 @@ -- page_title @dashboard_milestone.title, "Milestones" +- page_title @milestone.title, "Milestones" %h4.page-title - .issue-box{ class: "issue-box-#{@dashboard_milestone.closed? ? 'closed' : 'open'}" } - - if @dashboard_milestone.closed? + .issue-box{ class: "issue-box-#{@milestone.closed? ? 'closed' : 'open'}" } + - if @milestone.closed? Closed - else Open - Milestone #{@dashboard_milestone.title} + Milestone #{@milestone.title} %hr -- if (@dashboard_milestone.total_items_count == @dashboard_milestone.closed_items_count) && @dashboard_milestone.active? +- if @milestone.complete? && @milestone.active? .alert.alert-success %span All issues for this milestone are closed. You may close the milestone now. .description -%table.table - %thead - %tr - %th Project - %th Open issues - %th State - %th Due date - - @dashboard_milestone.milestones.each do |milestone| - %tr - %td - = link_to "#{milestone.project.name_with_namespace}", namespace_project_milestone_path(milestone.project.namespace, milestone.project, milestone) - %td - = milestone.issues.opened.count - %td - - if milestone.closed? - Closed - - else - Open - %td - = milestone.expires_at + +.table-holder + %table.table + %thead + %tr + %th Project + %th Open issues + %th State + %th Due date + - @milestone.milestones.each do |milestone| + %tr + %td + = link_to "#{milestone.project.name_with_namespace}", namespace_project_milestone_path(milestone.project.namespace, milestone.project, milestone) + %td + = milestone.issues.opened.count + %td + - if milestone.closed? + Closed + - else + Open + %td + = milestone.expires_at .context %p.lead Progress: - #{@dashboard_milestone.closed_items_count} closed + #{@milestone.closed_items_count} closed – - #{@dashboard_milestone.open_items_count} open - = milestone_progress_bar(@dashboard_milestone) + #{@milestone.open_items_count} open + = milestone_progress_bar(@milestone) %ul.nav.nav-tabs %li.active = link_to '#tab-issues', 'data-toggle' => 'tab' do Issues - %span.badge= @dashboard_milestone.issue_count + %span.badge= @milestone.issue_count %li = link_to '#tab-merge-requests', 'data-toggle' => 'tab' do Merge Requests - %span.badge= @dashboard_milestone.merge_requests_count + %span.badge= @milestone.merge_requests_count %li = link_to '#tab-participants', 'data-toggle' => 'tab' do Participants - %span.badge= @dashboard_milestone.participants.count + %span.badge= @milestone.participants.count .pull-right - = link_to 'Browse Issues', issues_dashboard_path(milestone_title: @dashboard_milestone.title), class: "btn edit-milestone-link btn-grouped" + = link_to 'Browse Issues', issues_dashboard_path(milestone_title: @milestone.title), class: "btn edit-milestone-link btn-grouped" .tab-content .tab-pane.active#tab-issues .row .col-md-6 - = render 'issues', title: "Open", issues: @dashboard_milestone.opened_issues + = render 'issues', title: "Open", issues: @milestone.opened_issues .col-md-6 - = render 'issues', title: "Closed", issues: @dashboard_milestone.closed_issues + = render 'issues', title: "Closed", issues: @milestone.closed_issues .tab-pane#tab-merge-requests .row .col-md-6 - = render 'merge_requests', title: "Open", merge_requests: @dashboard_milestone.opened_merge_requests + = render 'merge_requests', title: "Open", merge_requests: @milestone.opened_merge_requests .col-md-6 - = render 'merge_requests', title: "Closed", merge_requests: @dashboard_milestone.closed_merge_requests + = render 'merge_requests', title: "Closed", merge_requests: @milestone.closed_merge_requests .tab-pane#tab-participants %ul.bordered-list - - @dashboard_milestone.participants.each do |user| + - @milestone.participants.each do |user| %li = link_to user, title: user.name, class: "darken" do = image_tag avatar_icon(user, 32), class: "avatar s32" diff --git a/app/views/dashboard/projects/index.atom.builder b/app/views/dashboard/projects/index.atom.builder index d2c5148684..c8c219f4cc 100644 --- a/app/views/dashboard/projects/index.atom.builder +++ b/app/views/dashboard/projects/index.atom.builder @@ -4,7 +4,7 @@ xml.feed "xmlns" => "http://www.w3.org/2005/Atom", "xmlns:media" => "http://sear xml.link href: dashboard_projects_url(format: :atom, private_token: current_user.try(:private_token)), rel: "self", type: "application/atom+xml" xml.link href: dashboard_projects_url, rel: "alternate", type: "text/html" xml.id dashboard_projects_url - xml.updated @events.maximum(:updated_at).strftime("%Y-%m-%dT%H:%M:%SZ") if @events.any? + xml.updated @events.latest_update_time.strftime("%Y-%m-%dT%H:%M:%SZ") if @events.any? @events.each do |event| event_to_atom(xml, event) diff --git a/app/views/dashboard/snippets/index.html.haml b/app/views/dashboard/snippets/index.html.haml index d3908062f4..07b6d57932 100644 --- a/app/views/dashboard/snippets/index.html.haml +++ b/app/views/dashboard/snippets/index.html.haml @@ -6,33 +6,29 @@ .gray-content-block .pull-right = link_to new_snippet_path, class: "btn btn-new", title: "New Snippet" do - Add new snippet + = icon('plus') + New Snippet - .oneline - Share code pastes with others out of git repository - -%ul.nav.nav-tabs.prepend-top-20 - = nav_tab :scope, nil do - = link_to dashboard_snippets_path do + .btn-group.btn-group-next.snippet-scope-menu + = link_to dashboard_snippets_path, class: "btn btn-default #{"active" unless params[:scope]}" do All %span.badge = current_user.snippets.count - = nav_tab :scope, 'are_private' do - = link_to dashboard_snippets_path(scope: 'are_private') do + + = link_to dashboard_snippets_path(scope: 'are_private'), class: "btn btn-default #{"active" if params[:scope] == "are_private"}" do Private %span.badge = current_user.snippets.are_private.count - = nav_tab :scope, 'are_internal' do - = link_to dashboard_snippets_path(scope: 'are_internal') do + + = link_to dashboard_snippets_path(scope: 'are_internal'), class: "btn btn-default #{"active" if params[:scope] == "are_internal"}" do Internal %span.badge = current_user.snippets.are_internal.count - = nav_tab :scope, 'are_public' do - = link_to dashboard_snippets_path(scope: 'are_public') do + + = link_to dashboard_snippets_path(scope: 'are_public'), class: "btn btn-default #{"active" if params[:scope] == "are_public"}" do Public %span.badge = current_user.snippets.are_public.count -.my-snippets - = render 'snippets/snippets' += render 'snippets/snippets' diff --git a/app/views/doorkeeper/applications/index.html.haml b/app/views/doorkeeper/applications/index.html.haml index 3b0b19107c..ba4c5b86ef 100644 --- a/app/views/doorkeeper/applications/index.html.haml +++ b/app/views/doorkeeper/applications/index.html.haml @@ -1,17 +1,19 @@ - page_title "Applications" %h3.page-title Your applications %p= link_to 'New Application', new_oauth_application_path, class: 'btn btn-success' -%table.table.table-striped - %thead - %tr - %th Name - %th Callback URL - %th - %th - %tbody - - @applications.each do |application| - %tr{:id => "application_#{application.id}"} - %td= link_to application.name, oauth_application_path(application) - %td= application.redirect_uri - %td= link_to 'Edit', edit_oauth_application_path(application), class: 'btn btn-link' - %td= render 'delete_form', application: application + +.table-holder + %table.table.table-striped + %thead + %tr + %th Name + %th Callback URL + %th + %th + %tbody + - @applications.each do |application| + %tr{:id => "application_#{application.id}"} + %td= link_to application.name, oauth_application_path(application) + %td= application.redirect_uri + %td= link_to 'Edit', edit_oauth_application_path(application), class: 'btn btn-link' + %td= render 'delete_form', application: application diff --git a/app/views/doorkeeper/applications/show.html.haml b/app/views/doorkeeper/applications/show.html.haml index 80340aca54..47442b78d4 100644 --- a/app/views/doorkeeper/applications/show.html.haml +++ b/app/views/doorkeeper/applications/show.html.haml @@ -2,26 +2,26 @@ %h3.page-title Application: #{@application.name} +.table-holder + %table.table + %tr + %td + Application Id + %td + %code#application_id= @application.uid + %tr + %td + Secret: + %td + %code#secret= @application.secret -%table.table - %tr - %td - Application Id - %td - %code#application_id= @application.uid - %tr - %td - Secret: - %td - %code#secret= @application.secret - - %tr - %td - Callback url - %td - - @application.redirect_uri.split.each do |uri| - %div - %span.monospace= uri + %tr + %td + Callback url + %td + - @application.redirect_uri.split.each do |uri| + %div + %span.monospace= uri .form-actions = link_to 'Edit', edit_oauth_application_path(@application), class: 'btn btn-primary wide pull-left' = render 'delete_form', application: @application, submit_btn_css: 'btn btn-danger prepend-left-10' diff --git a/app/views/doorkeeper/authorized_applications/index.html.haml b/app/views/doorkeeper/authorized_applications/index.html.haml index 814cdc987e..b184b9c01d 100644 --- a/app/views/doorkeeper/authorized_applications/index.html.haml +++ b/app/views/doorkeeper/authorized_applications/index.html.haml @@ -1,16 +1,17 @@ %header.page-header %h1 Your authorized applications %main{:role => "main"} - %table.table.table-striped - %thead - %tr - %th Application - %th Created At - %th - %th - %tbody - - @applications.each do |application| + .table-holder + %table.table.table-striped + %thead %tr - %td= application.name - %td= application.created_at.strftime('%Y-%m-%d %H:%M:%S') - %td= render 'delete_form', application: application \ No newline at end of file + %th Application + %th Created At + %th + %th + %tbody + - @applications.each do |application| + %tr + %td= application.name + %td= application.created_at.strftime('%Y-%m-%d %H:%M:%S') + %td= render 'delete_form', application: application diff --git a/app/views/explore/snippets/index.html.haml b/app/views/explore/snippets/index.html.haml index 7e4fa7d487..0f100c39ff 100644 --- a/app/views/explore/snippets/index.html.haml +++ b/app/views/explore/snippets/index.html.haml @@ -10,7 +10,8 @@ - if current_user .pull-right = link_to new_snippet_path, class: "btn btn-new", title: "New Snippet" do - Add new snippet + = icon('plus') + New Snippet .oneline Public snippets created by you and other users are listed here diff --git a/app/views/groups/edit.html.haml b/app/views/groups/edit.html.haml index ae8fc9f85f..57308a661c 100644 --- a/app/views/groups/edit.html.haml +++ b/app/views/groups/edit.html.haml @@ -25,6 +25,15 @@ %hr = link_to 'Remove avatar', group_avatar_path(@group.to_param), data: { confirm: "Group avatar will be removed. Are you sure?"}, method: :delete, class: "btn btn-remove btn-sm remove-avatar" + .form-group + %hr + = f.label :public, class: 'control-label' do + Public + .col-sm-10 + .checkbox + = f.check_box :public + %span.descr Make this group public (even if there is no any public project inside this group) + .form-actions = f.submit 'Save group', class: "btn btn-save" diff --git a/app/views/groups/group_members/_group_member.html.haml b/app/views/groups/group_members/_group_member.html.haml index 3c19381321..be94b1abc1 100644 --- a/app/views/groups/group_members/_group_member.html.haml +++ b/app/views/groups/group_members/_group_member.html.haml @@ -1,6 +1,5 @@ - user = member.user - return unless user || member.invite? -- show_roles = true if show_roles.nil? %li{class: "#{dom_class(member)} js-toggle-container", id: dom_id(member)} %span{class: ("list-item-name" if show_controls)} @@ -25,11 +24,11 @@ = link_to member.created_by.name, user_path(member.created_by) = time_ago_with_tooltip(member.created_at) - - if show_controls && can?(current_user, :admin_group_member, member) + - if show_controls && can?(current_user, :admin_group_member, @group) = link_to resend_invite_group_group_member_path(@group, member), method: :post, class: "btn-xs btn", title: 'Resend invite' do Resend invite - - if show_roles + - if should_user_see_group_roles?(current_user, @group) %span.pull-right %strong= member.human_access - if show_controls @@ -37,6 +36,7 @@ = button_tag class: "btn-xs btn js-toggle-button", title: 'Edit access level', type: 'button' do %i.fa.fa-pencil-square-o + - if can?(current_user, :destroy_group_member, member)   - if current_user == user diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index fee4b0052b..d4ad33a8bf 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -1,8 +1,6 @@ - page_title "Members" - header_title group_title(@group, "Members", group_group_members_path(@group)) -- show_roles = should_user_see_group_roles?(current_user, @group) - -- if show_roles +- if should_user_see_group_roles?(current_user, @group) %p.light Members of group have access to all group projects. Read more about permissions @@ -32,11 +30,12 @@ (#{@members.total_count}) %ul.well-list - @members.each do |member| - = render 'groups/group_members/group_member', member: member, show_roles: show_roles, show_controls: true + = render 'groups/group_members/group_member', member: member, show_controls: true = paginate @members, theme: 'gitlab' -:coffeescript - $('form.member-search-form').on 'submit', (event) -> - event.preventDefault() - Turbolinks.visit @.action + '?' + $(@).serialize() +:javascript + $('form.member-search-form').on('submit', function(event) { + event.preventDefault(); + Turbolinks.visit(this.action + '?' + $(this).serialize()); + }); diff --git a/app/views/groups/milestones/_milestone.html.haml b/app/views/groups/milestones/_milestone.html.haml index 41dffdd2fb..a20bf75bc3 100644 --- a/app/views/groups/milestones/_milestone.html.haml +++ b/app/views/groups/milestones/_milestone.html.haml @@ -22,7 +22,7 @@ %span.label.label-gray = milestone.project.name .col-sm-6 - - if can?(current_user, :admin_group, @group) + - if can?(current_user, :admin_milestones, @group) - if milestone.closed? = link_to 'Reopen Milestone', group_milestone_path(@group, milestone.safe_title, title: milestone.title, milestone: {state_event: :activate }), method: :put, class: "btn btn-xs btn-grouped btn-reopen" - else diff --git a/app/views/groups/milestones/index.html.haml b/app/views/groups/milestones/index.html.haml index 2bbcad5fdf..84ec77c618 100644 --- a/app/views/groups/milestones/index.html.haml +++ b/app/views/groups/milestones/index.html.haml @@ -3,15 +3,22 @@ = render 'shared/milestones_filter' .gray-content-block - Only milestones from - %strong #{@group.name} - group are listed here. + - if can?(current_user, :admin_milestones, @group) + .pull-right + %span.pull-right.hidden-xs + = link_to new_group_milestone_path(@group), class: "btn btn-new" do + New Milestone + + .oneline + Only milestones from + %strong #{@group.name} + group are listed here. .milestones %ul.content-list - - if @group_milestones.blank? + - if @milestones.blank? %li .nothing-here-block No milestones to show - else - - @group_milestones.each do |milestone| + - @milestones.each do |milestone| = render 'milestone', milestone: milestone - = paginate @group_milestones, theme: "gitlab" + = paginate @milestones, theme: "gitlab" diff --git a/app/views/groups/milestones/new.html.haml b/app/views/groups/milestones/new.html.haml new file mode 100644 index 0000000000..800bac4ef0 --- /dev/null +++ b/app/views/groups/milestones/new.html.haml @@ -0,0 +1,48 @@ +- page_title "Milestones" +- header_title group_title(@group, "Milestones", group_milestones_path(@group)) + +%h3.page-title + New Milestone + +%p.light + This will create milestone in every selected project +%hr + += form_for @milestone, url: group_milestones_path(@group), html: { class: 'form-horizontal milestone-form gfm-form js-requires-input' } do |f| + .row + .col-md-6 + .form-group + = f.label :title, "Title", class: "control-label" + .col-sm-10 + = f.text_field :title, maxlength: 255, class: "form-control js-quick-submit", required: true + %p.hint Required + .form-group.milestone-description + = f.label :description, "Description", class: "control-label" + .col-sm-10 + = render layout: 'projects/md_preview', locals: { preview_class: "md-preview" } do + = render 'projects/zen', f: f, attr: :description, classes: 'description form-control js-quick-submit' + .clearfix + .error-alert + .form-group + = f.label :projects, "Projects", class: "control-label" + .col-sm-10 + = f.collection_select :project_ids, @group.projects, :id, :name, + { selected: @group.projects.map(&:id) }, multiple: true, class: 'select2' + + .col-md-6 + .form-group + = f.label :due_date, "Due Date", class: "control-label" + .col-sm-10= f.hidden_field :due_date + .col-sm-10 + .datepicker + + .form-actions + = f.submit 'Create Milestone', class: "btn-create btn" + = link_to "Cancel", group_milestones_path(@group), class: "btn btn-cancel" + + +:javascript + $(".datepicker").datepicker({ + dateFormat: "yy-mm-dd", + onSelect: function(dateText, inst) { $("#milestone_due_date").val(dateText) } + }).datepicker("setDate", $.datepicker.parseDate('yy-mm-dd', $('#milestone_due_date').val())); diff --git a/app/views/groups/milestones/show.html.haml b/app/views/groups/milestones/show.html.haml index c6cde97c58..d161259e4a 100644 --- a/app/views/groups/milestones/show.html.haml +++ b/app/views/groups/milestones/show.html.haml @@ -1,90 +1,92 @@ -- page_title @group_milestone.title, "Milestones" +- page_title @milestone.title, "Milestones" = render "header_title" %h4.page-title - .issue-box{ class: "issue-box-#{@group_milestone.closed? ? 'closed' : 'open'}" } - - if @group_milestone.closed? + .issue-box{ class: "issue-box-#{@milestone.closed? ? 'closed' : 'open'}" } + - if @milestone.closed? Closed - else Open - Milestone #{@group_milestone.title} + Milestone #{@milestone.title} .pull-right - - if can?(current_user, :admin_group, @group) - - if @group_milestone.active? - = link_to 'Close Milestone', group_milestone_path(@group, @group_milestone.safe_title, title: @group_milestone.title, milestone: {state_event: :close }), method: :put, class: "btn btn-sm btn-close" + - if can?(current_user, :admin_milestones, @group) + - if @milestone.active? + = link_to 'Close Milestone', group_milestone_path(@group, @milestone.safe_title, title: @milestone.title, milestone: {state_event: :close }), method: :put, class: "btn btn-sm btn-close" - else - = link_to 'Reopen Milestone', group_milestone_path(@group, @group_milestone.safe_title, title: @group_milestone.title, milestone: {state_event: :activate }), method: :put, class: "btn btn-sm btn-grouped btn-reopen" + = link_to 'Reopen Milestone', group_milestone_path(@group, @milestone.safe_title, title: @milestone.title, milestone: {state_event: :activate }), method: :put, class: "btn btn-sm btn-grouped btn-reopen" %hr -- if (@group_milestone.total_items_count == @group_milestone.closed_items_count) && @group_milestone.active? +- if @milestone.complete? && @milestone.active? .alert.alert-success %span All issues for this milestone are closed. You may close the milestone now. .description -%table.table - %thead - %tr - %th Project - %th Open issues - %th State - %th Due date - - @group_milestone.milestones.each do |milestone| - %tr - %td - = link_to "#{milestone.project.name}", namespace_project_milestone_path(milestone.project.namespace, milestone.project, milestone) - %td - = milestone.issues.opened.count - %td - - if milestone.closed? - Closed - - else - Open - %td - = milestone.expires_at + +.table-holder + %table.table + %thead + %tr + %th Project + %th Open issues + %th State + %th Due date + - @milestone.milestones.each do |milestone| + %tr + %td + = link_to "#{milestone.project.name}", namespace_project_milestone_path(milestone.project.namespace, milestone.project, milestone) + %td + = milestone.issues.opened.count + %td + - if milestone.closed? + Closed + - else + Open + %td + = milestone.expires_at .context %p.lead Progress: - #{@group_milestone.closed_items_count} closed + #{@milestone.closed_items_count} closed – - #{@group_milestone.open_items_count} open - = milestone_progress_bar(@group_milestone) + #{@milestone.open_items_count} open + = milestone_progress_bar(@milestone) %ul.nav.nav-tabs %li.active = link_to '#tab-issues', 'data-toggle' => 'tab' do Issues - %span.badge= @group_milestone.issue_count + %span.badge= @milestone.issue_count %li = link_to '#tab-merge-requests', 'data-toggle' => 'tab' do Merge Requests - %span.badge= @group_milestone.merge_requests_count + %span.badge= @milestone.merge_requests_count %li = link_to '#tab-participants', 'data-toggle' => 'tab' do Participants - %span.badge= @group_milestone.participants.count + %span.badge= @milestone.participants.count .pull-right - = link_to 'Browse Issues', issues_group_path(@group, milestone_title: @group_milestone.title), class: "btn edit-milestone-link btn-grouped" + = link_to 'Browse Issues', issues_group_path(@group, milestone_title: @milestone.title), class: "btn edit-milestone-link btn-grouped" .tab-content .tab-pane.active#tab-issues .row .col-md-6 - = render 'issues', title: "Open", issues: @group_milestone.opened_issues + = render 'issues', title: "Open", issues: @milestone.opened_issues .col-md-6 - = render 'issues', title: "Closed", issues: @group_milestone.closed_issues + = render 'issues', title: "Closed", issues: @milestone.closed_issues .tab-pane#tab-merge-requests .row .col-md-6 - = render 'merge_requests', title: "Open", merge_requests: @group_milestone.opened_merge_requests + = render 'merge_requests', title: "Open", merge_requests: @milestone.opened_merge_requests .col-md-6 - = render 'merge_requests', title: "Closed", merge_requests: @group_milestone.closed_merge_requests + = render 'merge_requests', title: "Closed", merge_requests: @milestone.closed_merge_requests .tab-pane#tab-participants %ul.bordered-list - - @group_milestone.participants.each do |user| + - @milestone.participants.each do |user| %li = link_to user, title: user.name, class: "darken" do = image_tag avatar_icon(user, 32), class: "avatar s32" diff --git a/app/views/groups/show.atom.builder b/app/views/groups/show.atom.builder index a91d1a6e94..7ea574434c 100644 --- a/app/views/groups/show.atom.builder +++ b/app/views/groups/show.atom.builder @@ -4,7 +4,7 @@ xml.feed "xmlns" => "http://www.w3.org/2005/Atom", "xmlns:media" => "http://sear xml.link href: group_url(@group, format: :atom, private_token: current_user.try(:private_token)), rel: "self", type: "application/atom+xml" xml.link href: group_url(@group), rel: "alternate", type: "text/html" xml.id group_url(@group) - xml.updated @events.maximum(:updated_at).strftime("%Y-%m-%dT%H:%M:%SZ") if @events.any? + xml.updated @events.latest_update_time.strftime("%Y-%m-%dT%H:%M:%SZ") if @events.any? @events.each do |event| event_to_atom(xml, event) diff --git a/app/views/help/_shortcuts.html.haml b/app/views/help/_shortcuts.html.haml index 67349fcbd7..7e801b5332 100644 --- a/app/views/help/_shortcuts.html.haml +++ b/app/views/help/_shortcuts.html.haml @@ -222,8 +222,8 @@ :javascript - $('.js-more-help-button').click(function(e){ - $(this).remove() - $('.hidden-shortcut').show() - e.preventDefault() + $('.js-more-help-button').click(function (e) { + $(this).remove()l + $('.hidden-shortcut').show(); + e.preventDefault(); }); diff --git a/app/views/import/bitbucket/status.html.haml b/app/views/import/bitbucket/status.html.haml index 777eb48271..1f09a27e2d 100644 --- a/app/views/import/bitbucket/status.html.haml +++ b/app/views/import/bitbucket/status.html.haml @@ -14,45 +14,46 @@ = button_tag 'Import all projects', class: "btn btn-success js-import-all" -%table.table.import-jobs - %thead - %tr - %th From Bitbucket - %th To GitLab - %th Status - %tbody - - @already_added_projects.each do |project| - %tr{id: "project_#{project.id}", class: "#{project_status_css_class(project.import_status)}"} - %td - = link_to project.import_source, "https://bitbucket.org/#{project.import_source}", target: "_blank" - %td - %strong= link_to project.path_with_namespace, [project.namespace.becomes(Namespace), project] - %td.job-status - - if project.import_status == 'finished' - %span - %i.fa.fa-check - done - - elsif project.import_status == 'started' - %i.fa.fa-spinner.fa-spin - started - - else - = project.human_import_status_name +.table-holder + %table.table.import-jobs + %thead + %tr + %th From Bitbucket + %th To GitLab + %th Status + %tbody + - @already_added_projects.each do |project| + %tr{id: "project_#{project.id}", class: "#{project_status_css_class(project.import_status)}"} + %td + = link_to project.import_source, "https://bitbucket.org/#{project.import_source}", target: "_blank" + %td + %strong= link_to project.path_with_namespace, [project.namespace.becomes(Namespace), project] + %td.job-status + - if project.import_status == 'finished' + %span + %i.fa.fa-check + done + - elsif project.import_status == 'started' + %i.fa.fa-spinner.fa-spin + started + - else + = project.human_import_status_name - - @repos.each do |repo| - %tr{id: "repo_#{repo["owner"]}___#{repo["slug"]}"} - %td - = link_to "#{repo["owner"]}/#{repo["slug"]}", "https://bitbucket.org/#{repo["owner"]}/#{repo["slug"]}", target: "_blank" - %td.import-target - = "#{repo["owner"]}/#{repo["slug"]}" - %td.import-actions.job-status - = button_tag "Import", class: "btn js-add-to-import" - - @incompatible_repos.each do |repo| - %tr{id: "repo_#{repo["owner"]}___#{repo["slug"]}"} - %td - = link_to "#{repo["owner"]}/#{repo["slug"]}", "https://bitbucket.org/#{repo["owner"]}/#{repo["slug"]}", target: "_blank" - %td.import-target - %td.import-actions-job-status - = label_tag "Incompatible Project", nil, class: "label label-danger" + - @repos.each do |repo| + %tr{id: "repo_#{repo["owner"]}___#{repo["slug"]}"} + %td + = link_to "#{repo["owner"]}/#{repo["slug"]}", "https://bitbucket.org/#{repo["owner"]}/#{repo["slug"]}", target: "_blank" + %td.import-target + = "#{repo["owner"]}/#{repo["slug"]}" + %td.import-actions.job-status + = button_tag "Import", class: "btn js-add-to-import" + - @incompatible_repos.each do |repo| + %tr{id: "repo_#{repo["owner"]}___#{repo["slug"]}"} + %td + = link_to "#{repo["owner"]}/#{repo["slug"]}", "https://bitbucket.org/#{repo["owner"]}/#{repo["slug"]}", target: "_blank" + %td.import-target + %td.import-actions-job-status + = label_tag "Incompatible Project", nil, class: "label label-danger" - if @incompatible_repos.any? %p @@ -65,5 +66,5 @@ again. -:coffeescript - new ImporterStatus("#{jobs_import_bitbucket_path}", "#{import_bitbucket_path}") +:javascript + new ImporterStatus("#{jobs_import_bitbucket_path}", "#{import_bitbucket_path}"); diff --git a/app/views/import/fogbugz/new_user_map.html.haml b/app/views/import/fogbugz/new_user_map.html.haml index 25cebfb366..bc3c90294e 100644 --- a/app/views/import/fogbugz/new_user_map.html.haml +++ b/app/views/import/fogbugz/new_user_map.html.haml @@ -22,28 +22,29 @@ %strong Map a FogBugz account ID to a GitLab user %p Selecting a GitLab user will add a link to the GitLab user in the descriptions - of issues and comments (e.g. "By @johnsmith"). It will also + of issues and comments (e.g. "By @johnsmith"). It will also associate and/or assign these issues and comments with the selected user. - %table.table - %thead - %tr - %th ID - %th Name - %th Email - %th GitLab User - %tbody - - @user_map.each do |id, user| + .table-holder + %table.table + %thead %tr - %td= id - %td= text_field_tag "users[#{id}][name]", user[:name], class: 'form-control' - %td= text_field_tag "users[#{id}][email]", user[:email], class: 'form-control' - %td - = users_select_tag("users[#{id}][gitlab_user]", class: 'custom-form-control', - scope: :all, email_user: true, selected: user[:gitlab_user]) + %th ID + %th Name + %th Email + %th GitLab User + %tbody + - @user_map.each do |id, user| + %tr + %td= id + %td= text_field_tag "users[#{id}][name]", user[:name], class: 'form-control' + %td= text_field_tag "users[#{id}][email]", user[:email], class: 'form-control' + %td + = users_select_tag("users[#{id}][gitlab_user]", class: 'custom-form-control', + scope: :all, email_user: true, selected: user[:gitlab_user]) .form-actions = submit_tag 'Continue to the next step', class: 'btn btn-create' -:coffeescript - new UsersSelect() +:javascript + new UsersSelect(); diff --git a/app/views/import/fogbugz/status.html.haml b/app/views/import/fogbugz/status.html.haml index f179ece402..b902006597 100644 --- a/app/views/import/fogbugz/status.html.haml +++ b/app/views/import/fogbugz/status.html.haml @@ -14,38 +14,39 @@ %p = button_tag 'Import all projects', class: 'btn btn-success js-import-all' -%table.table.import-jobs - %thead - %tr - %th From FogBugz - %th To GitLab - %th Status - %tbody - - @already_added_projects.each do |project| - %tr{id: "project_#{project.id}", class: "#{project_status_css_class(project.import_status)}"} - %td - = project.import_source - %td - %strong= link_to project.path_with_namespace, [project.namespace.becomes(Namespace), project] - %td.job-status - - if project.import_status == 'finished' - %span - %i.fa.fa-check - done - - elsif project.import_status == 'started' - %i.fa.fa-spinner.fa-spin - started - - else - = project.human_import_status_name +.table-holder + %table.table.import-jobs + %thead + %tr + %th From FogBugz + %th To GitLab + %th Status + %tbody + - @already_added_projects.each do |project| + %tr{id: "project_#{project.id}", class: "#{project_status_css_class(project.import_status)}"} + %td + = project.import_source + %td + %strong= link_to project.path_with_namespace, [project.namespace.becomes(Namespace), project] + %td.job-status + - if project.import_status == 'finished' + %span + %i.fa.fa-check + done + - elsif project.import_status == 'started' + %i.fa.fa-spinner.fa-spin + started + - else + = project.human_import_status_name - - @repos.each do |repo| - %tr{id: "repo_#{repo.id}"} - %td - = repo.name - %td.import-target - = "#{current_user.username}/#{repo.name}" - %td.import-actions.job-status - = button_tag "Import", class: "btn js-add-to-import" + - @repos.each do |repo| + %tr{id: "repo_#{repo.id}"} + %td + = repo.name + %td.import-target + = "#{current_user.username}/#{repo.name}" + %td.import-actions.job-status + = button_tag "Import", class: "btn js-add-to-import" -:coffeescript - new ImporterStatus("#{jobs_import_fogbugz_path}", "#{import_fogbugz_path}") +:javascript + new ImporterStatus("#{jobs_import_fogbugz_path}", "#{import_fogbugz_path}"); diff --git a/app/views/import/github/status.html.haml b/app/views/import/github/status.html.haml index ef55249823..0699321c8c 100644 --- a/app/views/import/github/status.html.haml +++ b/app/views/import/github/status.html.haml @@ -9,38 +9,39 @@ %p = button_tag 'Import all projects', class: "btn btn-success js-import-all" -%table.table.import-jobs - %thead - %tr - %th From GitHub - %th To GitLab - %th Status - %tbody - - @already_added_projects.each do |project| - %tr{id: "project_#{project.id}", class: "#{project_status_css_class(project.import_status)}"} - %td - = link_to project.import_source, "https://github.com/#{project.import_source}", target: "_blank" - %td - %strong= link_to project.path_with_namespace, [project.namespace.becomes(Namespace), project] - %td.job-status - - if project.import_status == 'finished' - %span - %i.fa.fa-check - done - - elsif project.import_status == 'started' - %i.fa.fa-spinner.fa-spin - started - - else - = project.human_import_status_name +.table-holder + %table.table.import-jobs + %thead + %tr + %th From GitHub + %th To GitLab + %th Status + %tbody + - @already_added_projects.each do |project| + %tr{id: "project_#{project.id}", class: "#{project_status_css_class(project.import_status)}"} + %td + = link_to project.import_source, "https://github.com/#{project.import_source}", target: "_blank" + %td + %strong= link_to project.path_with_namespace, [project.namespace.becomes(Namespace), project] + %td.job-status + - if project.import_status == 'finished' + %span + %i.fa.fa-check + done + - elsif project.import_status == 'started' + %i.fa.fa-spinner.fa-spin + started + - else + = project.human_import_status_name - - @repos.each do |repo| - %tr{id: "repo_#{repo.id}"} - %td - = link_to repo.full_name, "https://github.com/#{repo.full_name}", target: "_blank" - %td.import-target - = repo.full_name - %td.import-actions.job-status - = button_tag "Import", class: "btn js-add-to-import" + - @repos.each do |repo| + %tr{id: "repo_#{repo.id}"} + %td + = link_to repo.full_name, "https://github.com/#{repo.full_name}", target: "_blank" + %td.import-target + = repo.full_name + %td.import-actions.job-status + = button_tag "Import", class: "btn js-add-to-import" -:coffeescript - new ImporterStatus("#{jobs_import_github_path}", "#{import_github_path}") +:javascript + new ImporterStatus("#{jobs_import_github_path}", "#{import_github_path}"); diff --git a/app/views/import/gitlab/status.html.haml b/app/views/import/gitlab/status.html.haml index 727f3c7e7f..f4a2b33af2 100644 --- a/app/views/import/gitlab/status.html.haml +++ b/app/views/import/gitlab/status.html.haml @@ -9,38 +9,39 @@ %p = button_tag 'Import all projects', class: "btn btn-success js-import-all" -%table.table.import-jobs - %thead - %tr - %th From GitLab.com - %th To this GitLab instance - %th Status - %tbody - - @already_added_projects.each do |project| - %tr{id: "project_#{project.id}", class: "#{project_status_css_class(project.import_status)}"} - %td - = link_to project.import_source, "https://gitlab.com/#{project.import_source}", target: "_blank" - %td - %strong= link_to project.path_with_namespace, [project.namespace.becomes(Namespace), project] - %td.job-status - - if project.import_status == 'finished' - %span - %i.fa.fa-check - done - - elsif project.import_status == 'started' - %i.fa.fa-spinner.fa-spin - started - - else - = project.human_import_status_name +.table-holder + %table.table.import-jobs + %thead + %tr + %th From GitLab.com + %th To this GitLab instance + %th Status + %tbody + - @already_added_projects.each do |project| + %tr{id: "project_#{project.id}", class: "#{project_status_css_class(project.import_status)}"} + %td + = link_to project.import_source, "https://gitlab.com/#{project.import_source}", target: "_blank" + %td + %strong= link_to project.path_with_namespace, [project.namespace.becomes(Namespace), project] + %td.job-status + - if project.import_status == 'finished' + %span + %i.fa.fa-check + done + - elsif project.import_status == 'started' + %i.fa.fa-spinner.fa-spin + started + - else + = project.human_import_status_name - - @repos.each do |repo| - %tr{id: "repo_#{repo["id"]}"} - %td - = link_to repo["path_with_namespace"], "https://gitlab.com/#{repo["path_with_namespace"]}", target: "_blank" - %td.import-target - = repo["path_with_namespace"] - %td.import-actions.job-status - = button_tag "Import", class: "btn js-add-to-import" + - @repos.each do |repo| + %tr{id: "repo_#{repo["id"]}"} + %td + = link_to repo["path_with_namespace"], "https://gitlab.com/#{repo["path_with_namespace"]}", target: "_blank" + %td.import-target + = repo["path_with_namespace"] + %td.import-actions.job-status + = button_tag "Import", class: "btn js-add-to-import" -:coffeescript - new ImporterStatus("#{jobs_import_gitlab_path}", "#{import_gitlab_path}") +:javascript + new ImporterStatus("#{jobs_import_gitlab_path}", "#{import_gitlab_path}"); diff --git a/app/views/import/gitorious/status.html.haml b/app/views/import/gitorious/status.html.haml index bff7ee7c85..71752d21ef 100644 --- a/app/views/import/gitorious/status.html.haml +++ b/app/views/import/gitorious/status.html.haml @@ -9,38 +9,39 @@ %p = button_tag 'Import all projects', class: "btn btn-success js-import-all" -%table.table.import-jobs - %thead - %tr - %th From Gitorious.org - %th To GitLab - %th Status - %tbody - - @already_added_projects.each do |project| - %tr{id: "project_#{project.id}", class: "#{project_status_css_class(project.import_status)}"} - %td - = link_to project.import_source, "https://gitorious.org/#{project.import_source}", target: "_blank" - %td - %strong= link_to project.path_with_namespace, [project.namespace.becomes(Namespace), project] - %td.job-status - - if project.import_status == 'finished' - %span - %i.fa.fa-check - done - - elsif project.import_status == 'started' - %i.fa.fa-spinner.fa-spin - started - - else - = project.human_import_status_name +.table-holder + %table.table.import-jobs + %thead + %tr + %th From Gitorious.org + %th To GitLab + %th Status + %tbody + - @already_added_projects.each do |project| + %tr{id: "project_#{project.id}", class: "#{project_status_css_class(project.import_status)}"} + %td + = link_to project.import_source, "https://gitorious.org/#{project.import_source}", target: "_blank" + %td + %strong= link_to project.path_with_namespace, [project.namespace.becomes(Namespace), project] + %td.job-status + - if project.import_status == 'finished' + %span + %i.fa.fa-check + done + - elsif project.import_status == 'started' + %i.fa.fa-spinner.fa-spin + started + - else + = project.human_import_status_name - - @repos.each do |repo| - %tr{id: "repo_#{repo.id}"} - %td - = link_to repo.full_name, "https://gitorious.org/#{repo.full_name}", target: "_blank" - %td.import-target - = repo.full_name - %td.import-actions.job-status - = button_tag "Import", class: "btn js-add-to-import" + - @repos.each do |repo| + %tr{id: "repo_#{repo.id}"} + %td + = link_to repo.full_name, "https://gitorious.org/#{repo.full_name}", target: "_blank" + %td.import-target + = repo.full_name + %td.import-actions.job-status + = button_tag "Import", class: "btn js-add-to-import" -:coffeescript - new ImporterStatus("#{jobs_import_gitorious_path}", "#{import_gitorious_path}") +:javascript + new ImporterStatus("#{jobs_import_gitorious_path}", "#{import_gitorious_path}"); diff --git a/app/views/import/google_code/status.html.haml b/app/views/import/google_code/status.html.haml index e8ec79e72f..8c64fd27e6 100644 --- a/app/views/import/google_code/status.html.haml +++ b/app/views/import/google_code/status.html.haml @@ -17,45 +17,46 @@ - else = button_tag 'Import all projects', class: "btn btn-success js-import-all" -%table.table.import-jobs - %thead - %tr - %th From Google Code - %th To GitLab - %th Status - %tbody - - @already_added_projects.each do |project| - %tr{id: "project_#{project.id}", class: "#{project_status_css_class(project.import_status)}"} - %td - = link_to project.import_source, "https://code.google.com/p/#{project.import_source}", target: "_blank" - %td - %strong= link_to project.path_with_namespace, [project.namespace.becomes(Namespace), project] - %td.job-status - - if project.import_status == 'finished' - %span - %i.fa.fa-check - done - - elsif project.import_status == 'started' - %i.fa.fa-spinner.fa-spin - started - - else - = project.human_import_status_name +.table-holder + %table.table.import-jobs + %thead + %tr + %th From Google Code + %th To GitLab + %th Status + %tbody + - @already_added_projects.each do |project| + %tr{id: "project_#{project.id}", class: "#{project_status_css_class(project.import_status)}"} + %td + = link_to project.import_source, "https://code.google.com/p/#{project.import_source}", target: "_blank" + %td + %strong= link_to project.path_with_namespace, [project.namespace.becomes(Namespace), project] + %td.job-status + - if project.import_status == 'finished' + %span + %i.fa.fa-check + done + - elsif project.import_status == 'started' + %i.fa.fa-spinner.fa-spin + started + - else + = project.human_import_status_name - - @repos.each do |repo| - %tr{id: "repo_#{repo.id}"} - %td - = link_to repo.name, "https://code.google.com/p/#{repo.name}", target: "_blank" - %td.import-target - = "#{current_user.username}/#{repo.name}" - %td.import-actions.job-status - = button_tag "Import", class: "btn js-add-to-import" - - @incompatible_repos.each do |repo| - %tr{id: "repo_#{repo.id}"} - %td - = link_to repo.name, "https://code.google.com/p/#{repo.name}", target: "_blank" - %td.import-target - %td.import-actions-job-status - = label_tag "Incompatible Project", nil, class: "label label-danger" + - @repos.each do |repo| + %tr{id: "repo_#{repo.id}"} + %td + = link_to repo.name, "https://code.google.com/p/#{repo.name}", target: "_blank" + %td.import-target + = "#{current_user.username}/#{repo.name}" + %td.import-actions.job-status + = button_tag "Import", class: "btn js-add-to-import" + - @incompatible_repos.each do |repo| + %tr{id: "repo_#{repo.id}"} + %td + = link_to repo.name, "https://code.google.com/p/#{repo.name}", target: "_blank" + %td.import-target + %td.import-actions-job-status + = label_tag "Incompatible Project", nil, class: "label label-danger" - if @incompatible_repos.any? %p @@ -66,5 +67,5 @@ = link_to "import flow", new_import_google_code_path again. -:coffeescript - new ImporterStatus("#{jobs_import_google_code_path}", "#{import_google_code_path}") +:javascript + new ImporterStatus("#{jobs_import_google_code_path}", "#{import_google_code_path}"); diff --git a/app/views/layouts/_piwik.html.haml b/app/views/layouts/_piwik.html.haml index 135e8daca2..259b4f7cdf 100644 --- a/app/views/layouts/_piwik.html.haml +++ b/app/views/layouts/_piwik.html.haml @@ -1,12 +1,14 @@ + :javascript var _paq = _paq || []; - _paq.push(["trackPageView"]); - _paq.push(["enableLinkTracking"]); - + _paq.push(['trackPageView']); + _paq.push(['enableLinkTracking']); (function() { - var u=(("https:" == document.location.protocol) ? "https" : "http") + "://#{extra_config.piwik_url}/"; - _paq.push(["setTrackerUrl", u+"piwik.php"]); - _paq.push(["setSiteId", "#{extra_config.piwik_site_id}"]); - var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0]; g.type="text/javascript"; - g.defer=true; g.async=true; g.src=u+"piwik.js"; s.parentNode.insertBefore(g,s); + var u="//#{extra_config.piwik_url}/"; + _paq.push(['setTrackerUrl', u+'piwik.php']); + _paq.push(['setSiteId', #{extra_config.piwik_site_id}]); + var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; + g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s); })(); + + diff --git a/app/views/layouts/_search.html.haml b/app/views/layouts/_search.html.haml index ceb64ce315..a44f5762a6 100644 --- a/app/views/layouts/_search.html.haml +++ b/app/views/layouts/_search.html.haml @@ -11,6 +11,8 @@ = hidden_field_tag :scope, 'merge_requests' - elsif current_controller?(:wikis) = hidden_field_tag :scope, 'wiki_blobs' + - elsif current_controller?(:commits) + = hidden_field_tag :scope, 'commits' - else = hidden_field_tag :search_code, true @@ -23,6 +25,6 @@ :javascript $('.search-input').on('keyup', function(e) { if (e.keyCode == 27) { - $('.search-input').blur() + $('.search-input').blur(); } - }) + }); diff --git a/app/views/layouts/ci/_nav_admin.html.haml b/app/views/layouts/ci/_nav_admin.html.haml index af2545a22d..dcda04a463 100644 --- a/app/views/layouts/ci/_nav_admin.html.haml +++ b/app/views/layouts/ci/_nav_admin.html.haml @@ -9,23 +9,25 @@ = nav_link path: 'projects#index' do = link_to ci_admin_projects_path do = icon('list-alt fw') - Projects + %span + Projects = nav_link path: 'events#index' do = link_to ci_admin_events_path do = icon('book fw') - Events + %span + Events = nav_link path: ['runners#index', 'runners#show'] do = link_to ci_admin_runners_path do = icon('cog fw') - Runners - %small.pull-right - = Ci::Runner.count(:all) + %span + Runners + %span.count= Ci::Runner.count(:all) = nav_link path: 'builds#index' do = link_to ci_admin_builds_path do = icon('link fw') - Builds - %small.pull-right - = Ci::Build.count(:all) + %span + Builds + %span.count= Ci::Build.count(:all) = nav_link(controller: :application_settings, html_options: { class: 'separate-item'}) do = link_to ci_admin_application_settings_path do = icon('cogs fw') diff --git a/app/views/layouts/ci/project.html.haml b/app/views/layouts/ci/project.html.haml deleted file mode 100644 index 15478c3f5b..0000000000 --- a/app/views/layouts/ci/project.html.haml +++ /dev/null @@ -1,11 +0,0 @@ -!!! 5 -%html{ lang: "en"} - = render 'layouts/head' - %body{class: "ci-body #{user_application_theme}", 'data-page' => body_data_page} - - header_title @project.name, ci_project_path(@project) - - if current_user - = render "layouts/header/default", title: header_title - - else - = render "layouts/header/public", title: header_title - - = render 'layouts/ci/page', sidebar: 'nav_project' diff --git a/app/views/layouts/header/_default.html.haml b/app/views/layouts/header/_default.html.haml index c31b1cbe9a..3ca30d3baa 100644 --- a/app/views/layouts/header/_default.html.haml +++ b/app/views/layouts/header/_default.html.haml @@ -13,6 +13,10 @@ %li.visible-sm.visible-xs = link_to search_path, title: 'Search', data: {toggle: 'tooltip', placement: 'bottom'} do = icon('search') + - if session[:impersonator_id] + %li.impersonation + = link_to stop_impersonation_admin_users_path, method: :delete, title: 'Stop impersonation', data: { toggle: 'tooltip', placement: 'bottom' } do + = icon('user-secret fw') - if current_user.is_admin? %li = link_to admin_root_path, title: 'Admin area', data: {toggle: 'tooltip', placement: 'bottom'} do @@ -21,6 +25,11 @@ %li = link_to new_project_path, title: 'New project', data: {toggle: 'tooltip', placement: 'bottom'} do = icon('plus fw') + - if Gitlab::Sherlock.enabled? + %li + = link_to sherlock_transactions_path, title: 'Sherlock Transactions', + data: {toggle: 'tooltip', placement: 'bottom'} do + = icon('tachometer fw') %li = link_to destroy_user_session_path, class: 'logout', method: :delete, title: 'Sign out', data: {toggle: 'tooltip', placement: 'bottom'} do = icon('sign-out') diff --git a/app/views/layouts/nav/_group.html.haml b/app/views/layouts/nav/_group.html.haml index eb35af22b9..319352876b 100644 --- a/app/views/layouts/nav/_group.html.haml +++ b/app/views/layouts/nav/_group.html.haml @@ -1,9 +1,9 @@ %ul.nav.nav-sidebar = nav_link do - = link_to root_path, title: 'Back to dashboard', data: {placement: 'right'}, class: 'back-link' do + = link_to root_path, title: 'Go to dashboard', data: {placement: 'right'}, class: 'back-link' do = icon('caret-square-o-left fw') %span - Back to dashboard + Go to dashboard %li.separate-item diff --git a/app/views/layouts/nav/_group_settings.html.haml b/app/views/layouts/nav/_group_settings.html.haml index 8075fe32fb..c8411521f3 100644 --- a/app/views/layouts/nav/_group_settings.html.haml +++ b/app/views/layouts/nav/_group_settings.html.haml @@ -1,9 +1,9 @@ %ul.nav.nav-sidebar = nav_link do - = link_to group_path(@group), title: 'Back to group', data: {placement: 'right'}, class: 'back-link' do + = link_to group_path(@group), title: 'Go to group', data: {placement: 'right'}, class: 'back-link' do = icon('caret-square-o-left fw') %span - Back to group + Go to group %li.separate-item diff --git a/app/views/layouts/nav/_profile.html.haml b/app/views/layouts/nav/_profile.html.haml index 5a47b8e6db..0f3a793e30 100644 --- a/app/views/layouts/nav/_profile.html.haml +++ b/app/views/layouts/nav/_profile.html.haml @@ -1,9 +1,9 @@ %ul.nav.nav-sidebar = nav_link do - = link_to root_path, title: 'Back to dashboard', data: {placement: 'right'}, class: 'back-link' do + = link_to root_path, title: 'Go to dashboard', data: {placement: 'right'}, class: 'back-link' do = icon('caret-square-o-left fw') %span - Back to dashboard + Go to dashboard %li.separate-item diff --git a/app/views/layouts/nav/_project.html.haml b/app/views/layouts/nav/_project.html.haml index 53a913fe8f..2b91d7721f 100644 --- a/app/views/layouts/nav/_project.html.haml +++ b/app/views/layouts/nav/_project.html.haml @@ -1,16 +1,16 @@ %ul.nav.nav-sidebar - if @project.group = nav_link do - = link_to group_path(@project.group), title: 'Back to group', data: {placement: 'right'}, class: 'back-link' do + = link_to group_path(@project.group), title: 'Go to group', data: {placement: 'right'}, class: 'back-link' do = icon('caret-square-o-left fw') %span - Back to group + Go to group - else = nav_link do - = link_to root_path, title: 'Back to dashboard', data: {placement: 'right'}, class: 'back-link' do + = link_to root_path, title: 'Go to dashboard', data: {placement: 'right'}, class: 'back-link' do = icon('caret-square-o-left fw') %span - Back to dashboard + Go to dashboard %li.separate-item @@ -32,7 +32,7 @@ Files - if project_nav_tab? :commits - = nav_link(controller: %w(commit commits compare repositories tags branches)) do + = nav_link(controller: %w(commit commits compare repositories tags branches releases)) do = link_to project_commits_path(@project), title: 'Commits', class: 'shortcuts-commits', data: {placement: 'right'} do = icon('history fw') %span diff --git a/app/views/layouts/nav/_project_settings.html.haml b/app/views/layouts/nav/_project_settings.html.haml index 954dbe5d2b..377a99e719 100644 --- a/app/views/layouts/nav/_project_settings.html.haml +++ b/app/views/layouts/nav/_project_settings.html.haml @@ -1,9 +1,9 @@ %ul.nav.nav-sidebar = nav_link do - = link_to project_path(@project), title: 'Back to project', data: {placement: 'right'}, class: 'back-link' do + = link_to project_path(@project), title: 'Go to project', data: {placement: 'right'}, class: 'back-link' do = icon('caret-square-o-left fw') %span - Back to project + Go to project %li.separate-item @@ -34,7 +34,7 @@ %span Protected Branches - - if @project.gitlab_ci? + - if @project.builds_enabled? = nav_link(controller: :runners) do = link_to namespace_project_runners_path(@project.namespace, @project), title: 'Runners', data: {placement: 'right'} do = icon('cog fw') @@ -65,8 +65,3 @@ = icon('share fw') %span CI Services - = nav_link path: 'events#index' do - = link_to ci_project_events_path(@project.gitlab_ci_project) do - = icon('book fw') - %span - CI Events diff --git a/app/views/layouts/notify.html.haml b/app/views/layouts/notify.html.haml index 854cda57c3..3ca4c34040 100644 --- a/app/views/layouts/notify.html.haml +++ b/app/views/layouts/notify.html.haml @@ -40,9 +40,10 @@ Reply to this email directly or #{link_to "view it on GitLab", @target_url}. - else - #{link_to "View it on GitLab", @target_url} + #{link_to "View it on GitLab", @target_url}. %br - You're receiving this email because of your account on #{link_to Gitlab.config.gitlab.host, root_url}. + -# Don't link the host is the line below, one link in the email is easier to quickly click than two. + You're receiving this email because of your account on #{Gitlab.config.gitlab.host}. If you'd like to receive fewer emails, you can adjust your notification settings. - = email_action @target_url + = email_action @target_url \ No newline at end of file diff --git a/app/views/notify/project_was_moved_email.text.erb b/app/views/notify/project_was_moved_email.text.erb index d8a23dabf4..b2c5f71e46 100644 --- a/app/views/notify/project_was_moved_email.text.erb +++ b/app/views/notify/project_was_moved_email.text.erb @@ -1,4 +1,4 @@ -Project #{@old_path_with_namespace} was moved to another location +Project <%= @old_path_with_namespace %> was moved to another location The project is now located under <%= namespace_project_url(@project.namespace, @project) %> diff --git a/app/views/profiles/_event_table.html.haml b/app/views/profiles/_event_table.html.haml index c19ac429d5..58af79716a 100644 --- a/app/views/profiles/_event_table.html.haml +++ b/app/views/profiles/_event_table.html.haml @@ -1,16 +1,17 @@ -%table.table#audits - %thead - %tr - %th Action - %th When - - %tbody - - events.each do |event| +.table-holder + %table.table#audits + %thead %tr - %td - %span - Signed in with - %b= event.details[:with] - authentication - %td #{time_ago_in_words event.created_at} ago + %th Action + %th When + + %tbody + - events.each do |event| + %tr + %td + %span + Signed in with + %b= event.details[:with] + authentication + %td #{time_ago_in_words event.created_at} ago = paginate events, theme: "gitlab" diff --git a/app/views/profiles/notifications/_settings.html.haml b/app/views/profiles/notifications/_settings.html.haml index 2c85d2a9b2..742c5c4b68 100644 --- a/app/views/profiles/notifications/_settings.html.haml +++ b/app/views/profiles/notifications/_settings.html.haml @@ -14,4 +14,4 @@ = form_tag profile_notifications_path, method: :put, remote: true, class: 'update-notifications' do = hidden_field_tag :notification_type, type, id: dom_id(membership, 'notification_type') = hidden_field_tag :notification_id, membership.id, id: dom_id(membership, 'notification_id') - = select_tag :notification_level, options_for_select(Notification.options_with_labels, notification.level), class: 'trigger-submit' + = select_tag :notification_level, options_for_select(Notification.options_with_labels, notification.level), class: 'form-control trigger-submit' diff --git a/app/views/profiles/preferences/show.html.haml b/app/views/profiles/preferences/show.html.haml index 01e285a8df..cc41d7dd81 100644 --- a/app/views/profiles/preferences/show.html.haml +++ b/app/views/profiles/preferences/show.html.haml @@ -38,7 +38,7 @@ .col-sm-10 = f.select :layout, layout_choices, {}, class: 'form-control' .help-block - Choose between fixed (max. 1200px) and fluid (100%) application layout + Choose between fixed (max. 1200px) and fluid (100%) application layout. .form-group = f.label :dashboard, class: 'control-label' do Default Dashboard @@ -52,6 +52,6 @@ .col-sm-10 = f.select :project_view, project_view_choices, {}, class: 'form-control' .help-block - Choose what content you want to see when visit project page + Choose what content you want to see on a project's home page. .panel-footer = f.submit 'Save', class: 'btn btn-save' diff --git a/app/views/projects/_activity.html.haml b/app/views/projects/_activity.html.haml index c2683bc621..101880bd10 100644 --- a/app/views/projects/_activity.html.haml +++ b/app/views/projects/_activity.html.haml @@ -1,4 +1,3 @@ -= render 'projects/last_push' .gray-content-block.activity-filter-block - if current_user .pull-right @@ -9,5 +8,5 @@ .content_list{:"data-href" => activity_project_path(@project)} = spinner -:coffeescript - new Activities() +:javascript + new Activities(); diff --git a/app/views/projects/_files.html.haml b/app/views/projects/_files.html.haml new file mode 100644 index 0000000000..fa978325dd --- /dev/null +++ b/app/views/projects/_files.html.haml @@ -0,0 +1,6 @@ +#tree-holder.tree-holder.clearfix + .gray-content-block.second-block + = render 'projects/tree/tree_header', tree: @tree + + = render 'projects/tree/tree_content', tree: @tree + diff --git a/app/views/projects/_home_panel.html.haml b/app/views/projects/_home_panel.html.haml index 8c0980369f..88d54bf6f2 100644 --- a/app/views/projects/_home_panel.html.haml +++ b/app/views/projects/_home_panel.html.haml @@ -18,17 +18,12 @@ .project-repo-buttons .split-one = render 'projects/buttons/star' + = render 'projects/buttons/fork' - - unless empty_repo - = render 'projects/buttons/fork' - = render "shared/clone_panel" - .split-repo-buttons - - unless empty_repo - - if can? current_user, :download_code, @project - = link_to archive_namespace_project_repository_path(@project.namespace, @project, ref: @ref, format: 'zip'), class: 'btn', rel: 'nofollow' do - = icon('download fw') - - = render 'projects/buttons/dropdown' - = render 'projects/buttons/notifications' + .split-repo-buttons + = render "projects/buttons/download" + = render 'projects/buttons/dropdown' + + = render 'projects/buttons/notifications' diff --git a/app/views/projects/_last_commit.html.haml b/app/views/projects/_last_commit.html.haml new file mode 100644 index 0000000000..7e1ee2b7fc --- /dev/null +++ b/app/views/projects/_last_commit.html.haml @@ -0,0 +1,12 @@ +.project-last-commit + - ci_commit = project.ci_commit(commit.sha) + - if ci_commit + = link_to ci_status_path(ci_commit), class: "ci-status ci-#{ci_commit.status}" do + = ci_status_icon(ci_commit) + = ci_commit.status + + = link_to commit.short_id, namespace_project_commit_path(project.namespace, project, commit), class: "commit_short_id" + = link_to_gfm commit.title, namespace_project_commit_path(project.namespace, project, commit), class: "commit-row-message" + · + #{time_ago_with_tooltip(commit.committed_date, skip_js: true)} by + = commit_author_link(commit, avatar: true, size: 24) diff --git a/app/views/projects/_readme.html.haml b/app/views/projects/_readme.html.haml index 5bc1999ec9..b5ef0aca54 100644 --- a/app/views/projects/_readme.html.haml +++ b/app/views/projects/_readme.html.haml @@ -1,12 +1,9 @@ - if readme = @repository.readme - %article.readme-holder#README - .clearfix - .pull-right -   - - if can?(current_user, :push_code, @project) - = link_to namespace_project_edit_blob_path(@project.namespace, @project, tree_join(@repository.root_ref, readme.name)), class: 'light' do - %i.fa-align.fa.fa-pencil - .wiki + %article.readme-holder + .pull-right + - if can?(current_user, :push_code, @project) + = link_to icon('pencil'), namespace_project_edit_blob_path(@project.namespace, @project, tree_join(@repository.root_ref, readme.name)), class: 'light edit-project-readme' + .file-content.wiki = cache(readme_cache_key) do = render_readme(readme) - else diff --git a/app/views/projects/_zen.html.haml b/app/views/projects/_zen.html.haml index 63ebfc9381..7e6301abde 100644 --- a/app/views/projects/_zen.html.haml +++ b/app/views/projects/_zen.html.haml @@ -2,9 +2,12 @@ %input#zen-toggle-comment.zen-toggle-comment(tabindex="-1" type="checkbox") .zen-backdrop - classes << ' js-gfm-input markdown-area' - = f.text_area attr, class: classes, placeholder: '' + - if defined?(f) && f + = f.text_area attr, class: classes, placeholder: '' + - else + = text_area_tag attr, nil, class: classes, placeholder: '' %a.zen-enter-link(tabindex="-1" href="#") - %i.fa.fa-expand + = icon('expand') Edit in fullscreen %a.zen-leave-link(href="#") - %i.fa.fa-compress + = icon('compress') diff --git a/app/views/projects/activity.html.haml b/app/views/projects/activity.html.haml index 555ed76426..69fa4ad37c 100644 --- a/app/views/projects/activity.html.haml +++ b/app/views/projects/activity.html.haml @@ -1,4 +1,6 @@ - page_title "Activity" - header_title project_title(@project, "Activity", activity_project_path(@project)) += render 'projects/last_push' + = render 'projects/activity' diff --git a/app/views/projects/blob/_actions.html.haml b/app/views/projects/blob/_actions.html.haml index 373b3a0c5b..ba3e0c3c59 100644 --- a/app/views/projects/blob/_actions.html.haml +++ b/app/views/projects/blob/_actions.html.haml @@ -19,4 +19,4 @@ - if allowed_tree_edit? .btn-group{ role: "group" } %button.btn.btn-default{ 'data-target' => '#modal-upload-blob', 'data-toggle' => 'modal' } Replace - %button.btn.btn-remove{ 'data-target' => '#modal-remove-blob', 'data-toggle' => 'modal' } Remove + %button.btn.btn-remove{ 'data-target' => '#modal-remove-blob', 'data-toggle' => 'modal' } Delete diff --git a/app/views/projects/blob/_blob.html.haml b/app/views/projects/blob/_blob.html.haml index a1ae139758..42f632b38e 100644 --- a/app/views/projects/blob/_blob.html.haml +++ b/app/views/projects/blob/_blob.html.haml @@ -1,19 +1,22 @@ -%ul.breadcrumb.repo-breadcrumb - %li - %i.fa.fa-angle-right - = link_to namespace_project_tree_path(@project.namespace, @project, @ref) do - = @project.path - - tree_breadcrumbs(@tree, 6) do |title, path| +.gray-content-block.top-block + .tree-ref-holder + = render 'shared/ref_switcher', destination: 'blob', path: @path + + %ul.breadcrumb.repo-breadcrumb %li - - if path - - if path.end_with?(@path) - = link_to namespace_project_blob_path(@project.namespace, @project, path) do - %strong - = truncate(title, length: 40) + = link_to namespace_project_tree_path(@project.namespace, @project, @ref) do + = @project.path + - tree_breadcrumbs(@tree, 6) do |title, path| + %li + - if path + - if path.end_with?(@path) + = link_to namespace_project_blob_path(@project.namespace, @project, path) do + %strong + = truncate(title, length: 40) + - else + = link_to truncate(title, length: 40), namespace_project_tree_path(@project.namespace, @project, path) - else - = link_to truncate(title, length: 40), namespace_project_tree_path(@project.namespace, @project, path) - - else - = link_to title, '#' + = link_to title, '#' %ul.blob-commit-info.hidden-xs - blob_commit = @repository.last_commit_for_path(@commit.id, blob.path) diff --git a/app/views/projects/blob/_new_dir.html.haml b/app/views/projects/blob/_new_dir.html.haml index cb1567a2e6..13b5ffd17f 100644 --- a/app/views/projects/blob/_new_dir.html.haml +++ b/app/views/projects/blob/_new_dir.html.haml @@ -5,21 +5,19 @@ %a.close{href: "#", "data-dismiss" => "modal"} × %h3.page-title Create New Directory .modal-body - = form_tag namespace_project_create_dir_path(@project.namespace, @project, @id), method: :post, remote: false, id: 'dir-create-form', class: 'form-horizontal' do + = form_tag namespace_project_create_dir_path(@project.namespace, @project, @id), method: :post, remote: false, class: 'form-horizontal js-create-dir-form' do .form-group = label_tag :dir_name, 'Directory Name', class: 'control-label' .col-sm-10 = text_field_tag :dir_name, params[:dir_name], placeholder: "Directory name", required: true, class: 'form-control' - = render 'shared/commit_message_container', params: params, placeholder: '' - - unless @project.empty_repo? - .form-group - = label_tag :branch_name, 'Branch', class: 'control-label' - .col-sm-10 - = text_field_tag 'new_branch', @ref, class: "form-control" + + = render 'shared/new_commit_form', placeholder: "Add new directory" + .form-group .col-sm-offset-2.col-sm-10 = submit_tag "Create directory", class: 'btn btn-primary btn-create' = link_to "Cancel", '#', class: "btn btn-cancel", "data-dismiss" => "modal" -:coffeescript - disableButtonIfAnyEmptyField($("#dir-create-form"), ".form-control", ".btn-create"); +:javascript + disableButtonIfAnyEmptyField($(".js-create-dir-form"), ".form-control", ".btn-create"); + new NewCommitForm($('.js-create-dir-form')) diff --git a/app/views/projects/blob/_remove.html.haml b/app/views/projects/blob/_remove.html.haml index cae5ff0109..1cf19a7d3d 100644 --- a/app/views/projects/blob/_remove.html.haml +++ b/app/views/projects/blob/_remove.html.haml @@ -3,16 +3,16 @@ .modal-content .modal-header %a.close{href: "#", "data-dismiss" => "modal"} × - %h3.page-title Remove #{@blob.name} - %p.light - From branch - %strong= @ref + %h3.page-title Delete #{@blob.name} .modal-body - = form_tag namespace_project_blob_path(@project.namespace, @project, @id), method: :delete, class: 'form-horizontal js-requires-input' do - = render 'shared/commit_message_container', params: params, - placeholder: 'Removed this file because...' + = form_tag namespace_project_blob_path(@project.namespace, @project, @id), method: :delete, class: 'form-horizontal js-replace-blob-form js-requires-input' do + = render 'shared/new_commit_form', placeholder: "Delete #{@blob.name}" + .form-group .col-sm-offset-2.col-sm-10 - = button_tag 'Remove file', class: 'btn btn-remove btn-remove-file' + = button_tag 'Delete file', class: 'btn btn-remove btn-remove-file' = link_to "Cancel", '#', class: "btn btn-cancel", "data-dismiss" => "modal" + +:javascript + new NewCommitForm($('.js-replace-blob-form')) diff --git a/app/views/projects/blob/_upload.html.haml b/app/views/projects/blob/_upload.html.haml index e27f170752..3bb61f0c94 100644 --- a/app/views/projects/blob/_upload.html.haml +++ b/app/views/projects/blob/_upload.html.haml @@ -5,7 +5,7 @@ %a.close{href: "#", "data-dismiss" => "modal"} × %h3.page-title #{title} .modal-body - = form_tag form_path, method: method, class: 'blob-file-upload-form-js form-horizontal' do + = form_tag form_path, method: method, class: 'js-upload-blob-form form-horizontal' do .dropzone .dropzone-previews.blob-upload-dropzone-previews %p.dz-message.light @@ -13,19 +13,15 @@ = link_to 'click to upload', '#', class: "markdown-selector" %br .dropzone-alerts{class: "alert alert-danger data", style: "display:none"} - = render 'shared/commit_message_container', params: params, - placeholder: placeholder - - unless @project.empty_repo? - .form-group.branch - = label_tag 'branch', class: 'control-label' do - Branch - .col-sm-10 - = text_field_tag 'new_branch', @ref, class: "form-control" + + = render 'shared/new_commit_form', placeholder: placeholder + .form-group .col-sm-offset-2.col-sm-10 = button_tag button_title, class: 'btn btn-small btn-primary btn-upload-file', id: 'submit-all' = link_to "Cancel", '#', class: "btn btn-cancel", "data-dismiss" => "modal" -:coffeescript - disableButtonIfEmptyField $('.blob-file-upload-form-js').find('#commit_message'), '.btn-upload-file' - new BlobFileDropzone($('.blob-file-upload-form-js'), '#{method}') +:javascript + disableButtonIfEmptyField($('.js-upload-blob-form').find('.js-commit-message'), '.btn-upload-file'); + new BlobFileDropzone($('.js-upload-blob-form'), '#{method}'); + new NewCommitForm($('.js-upload-blob-form')) diff --git a/app/views/projects/blob/edit.html.haml b/app/views/projects/blob/edit.html.haml index a811adc509..5674516525 100644 --- a/app/views/projects/blob/edit.html.haml +++ b/app/views/projects/blob/edit.html.haml @@ -13,15 +13,9 @@ %i.fa.fa-eye = editing_preview_title(@blob.name) - = form_tag(namespace_project_update_blob_path(@project.namespace, @project, @id), method: :put, class: 'form-horizontal js-requires-input') do + = form_tag(namespace_project_update_blob_path(@project.namespace, @project, @id), method: :put, class: 'form-horizontal js-requires-input js-edit-blob-form') do = render 'projects/blob/editor', ref: @ref, path: @path, blob_data: @blob.data - = render 'shared/commit_message_container', params: params, placeholder: "Update #{@blob.name}" - - .form-group.branch - = label_tag 'branch', class: 'control-label' do - Branch - .col-sm-10 - = text_field_tag 'new_branch', @ref, class: "form-control" + = render 'shared/new_commit_form', placeholder: "Update #{@blob.name}" = hidden_field_tag 'last_commit', @last_commit = hidden_field_tag 'content', '', id: "file-content" @@ -30,3 +24,4 @@ :javascript blob = new EditBlob(gon.relative_url_root + "#{Gitlab::Application.config.assets.prefix}", "#{@blob.language.try(:ace_mode)}") + new NewCommitForm($('.js-edit-blob-form')) diff --git a/app/views/projects/blob/new.html.haml b/app/views/projects/blob/new.html.haml index 7975137c37..1ff6800545 100644 --- a/app/views/projects/blob/new.html.haml +++ b/app/views/projects/blob/new.html.haml @@ -2,20 +2,13 @@ = render "header_title" .gray-content-block.top-block - Create a new file + %h3.page-title + Create New File .file-editor - = form_tag(namespace_project_create_blob_path(@project.namespace, @project, @id), method: :post, class: 'form-horizontal form-new-file js-requires-input') do + = form_tag(namespace_project_create_blob_path(@project.namespace, @project, @id), method: :post, class: 'form-horizontal js-new-blob-form js-requires-input') do = render 'projects/blob/editor', ref: @ref - = render 'shared/commit_message_container', params: params, - placeholder: 'Add new file' - - - unless @project.empty_repo? - .form-group.branch - = label_tag 'branch', class: 'control-label' do - Branch - .col-sm-10 - = text_field_tag 'new_branch', @ref, class: "form-control js-quick-submit" + = render 'shared/new_commit_form', placeholder: "Add new file" = hidden_field_tag 'content', '', id: 'file-content' = render 'projects/commit_button', ref: @ref, @@ -23,3 +16,4 @@ :javascript blob = new NewBlob(gon.relative_url_root + "#{Gitlab::Application.config.assets.prefix}", null) + new NewCommitForm($('.js-new-blob-form')) diff --git a/app/views/projects/blob/show.html.haml b/app/views/projects/blob/show.html.haml index fa4be4a1bc..b7276868ce 100644 --- a/app/views/projects/blob/show.html.haml +++ b/app/views/projects/blob/show.html.haml @@ -3,9 +3,6 @@ = render 'projects/last_push' -%div.tree-ref-holder - = render 'shared/ref_switcher', destination: 'blob', path: @path - %div#tree-holder.tree-holder = render 'blob', blob: @blob @@ -13,6 +10,4 @@ = render 'projects/blob/remove' - title = "Replace #{@blob.name}" - = render 'projects/blob/upload', title: title, placeholder: title, - button_title: 'Replace file', form_path: namespace_project_update_blob_path(@project.namespace, @project, @id), - method: :put + = render 'projects/blob/upload', title: title, placeholder: title, button_title: 'Replace file', form_path: namespace_project_update_blob_path(@project.namespace, @project, @id), method: :put diff --git a/app/views/projects/branches/_commit.html.haml b/app/views/projects/branches/_commit.html.haml index 68326e65d8..22d77dda93 100644 --- a/app/views/projects/branches/_commit.html.haml +++ b/app/views/projects/branches/_commit.html.haml @@ -1,5 +1,5 @@ -.branch-commit.light - = link_to commit.short_id, namespace_project_commit_path(project.namespace, project, commit), class: "commit_short_id" +.branch-commit + = link_to commit.short_id, namespace_project_commit_path(project.namespace, project, commit), class: "commit-id" · %span.str-truncated = link_to_gfm commit.title, namespace_project_commit_path(project.namespace, project, commit.id), class: "commit-row-message" diff --git a/app/views/projects/builds/_build.html.haml b/app/views/projects/builds/_build.html.haml deleted file mode 100644 index 4ce4ed63b4..0000000000 --- a/app/views/projects/builds/_build.html.haml +++ /dev/null @@ -1,53 +0,0 @@ -%tr.build - %td.status - = ci_status_with_icon(build.status) - - %td.commit_status-link - - if build.target_url - = link_to build.target_url do - %strong Build ##{build.id} - - else - %strong Build ##{build.id} - - - if build.show_warning? - %i.fa.fa-warning.text-warning - - %td - = link_to build.short_sha, namespace_project_commit_path(@project.namespace, @project, build.sha) - - %td - = link_to build.ref, namespace_project_commits_path(@project.namespace, @project, build.ref) - - %td - - if build.runner - = runner_link(build.runner) - - else - .light none - - %td - = build.name - - .pull-right - - if build.tags.any? - - build.tags.each do |tag| - %span.label.label-primary - = tag - - if build.trigger_request - %span.label.label-info triggered - - if build.allow_failure - %span.label.label-danger allowed to fail - - %td.duration - - if build.duration - #{duration_in_words(build.finished_at, build.started_at)} - - %td.timestamp - - if build.finished_at - %span #{time_ago_in_words build.finished_at} ago - - %td - .pull-right - - if current_user && can?(current_user, :manage_builds, @project) - - if build.cancel_url - = link_to build.cancel_url, title: 'Cancel' do - %i.fa.fa-remove.cred diff --git a/app/views/projects/builds/_header_title.html.haml b/app/views/projects/builds/_header_title.html.haml new file mode 100644 index 0000000000..082dab1f5b --- /dev/null +++ b/app/views/projects/builds/_header_title.html.haml @@ -0,0 +1 @@ +- header_title project_title(@project, "Builds", project_builds_path(@project)) diff --git a/app/views/projects/builds/index.html.haml b/app/views/projects/builds/index.html.haml index 4d8ca16d98..dab7164153 100644 --- a/app/views/projects/builds/index.html.haml +++ b/app/views/projects/builds/index.html.haml @@ -1,12 +1,12 @@ - page_title "Builds" -- header_title project_title(@project, "Builds", project_builds_path(@project)) += render "header_title" .project-issuable-filter .controls - if @ci_project && current_user && can?(current_user, :manage_builds, @project) .pull-left.hidden-xs - if @all_builds.running_or_pending.any? - = link_to 'Cancel all', cancel_all_namespace_project_builds_path(@project.namespace, @project), data: { confirm: 'Are you sure?' }, class: 'btn btn-danger' + = link_to 'Cancel all', cancel_all_namespace_project_builds_path(@project.namespace, @project), data: { confirm: 'Are you sure?' }, class: 'btn btn-danger', method: :post %ul.center-top-menu %li{class: ('active' if @scope.nil?)} @@ -25,28 +25,29 @@ %span.badge.js-totalbuilds-count= @all_builds.count(:id) .gray-content-block - List of #{@scope || 'running'} builds from this project + #{(@scope || 'running').capitalize} builds from this project %ul.content-list - if @builds.blank? %li .nothing-here-block No builds to show - else - %table.table.builds - %thead - %tr - %th Status - %th Build ID - %th Commit - %th Ref - %th Runner - %th Name - %th Duration - %th Finished at - %th + .table-holder + %table.table.builds + %thead + %tr + %th Status + %th Build ID + %th Commit + %th Ref + %th Stage + %th Name + %th Duration + %th Finished at + %th - - @builds.each do |build| - = render 'projects/builds/build', build: build + - @builds.each do |build| + = render 'projects/commit_statuses/commit_status', commit_status: build, commit_sha: true, stage: true, allow_retry: true - = paginate @builds + = paginate @builds, theme: 'gitlab' diff --git a/app/views/projects/builds/show.html.haml b/app/views/projects/builds/show.html.haml index 3a8172dc8e..907e1ce10b 100644 --- a/app/views/projects/builds/show.html.haml +++ b/app/views/projects/builds/show.html.haml @@ -1,10 +1,13 @@ +- page_title "#{@build.name} (#{@build.id})", "Builds" += render "header_title" + .build-page .gray-content-block - Build for commit + Build ##{@build.id} for commit %strong.monospace = link_to @build.commit.short_sha, ci_status_path(@build.commit) from - %code #{@build.ref} + = link_to @build.ref, namespace_project_commits_path(@project.namespace, @project, @build.ref) #up-build-trace - if @commit.matrix_for_ref?(@build.ref) @@ -20,7 +23,7 @@ = build.id - - unless @commit.latest_builds_for_ref(@build.ref).include?(@build) + - if @build.retried? %li.active %a Build ##{@build.id} @@ -37,7 +40,7 @@ %i.fa.fa-time #{duration_in_words(@build.finished_at, @build.started_at)} .pull-right - = @build.updated_at.stamp('19:00 Aug 27') + #{time_ago_with_tooltip(@build.finished_at) if @build.finished_at} - if @build.show_warning? - unless @build.any_runners_online? @@ -84,16 +87,19 @@ Test coverage %h1 #{@build.coverage}% + - if current_user && can?(current_user, :download_build_artifacts, @project) && @build.download_url + .build-widget.center + = link_to "Download artifacts", @build.download_url, class: 'btn btn-sm btn-primary' .build-widget %h4.title - Build + Build ##{@build.id} - if current_user && can?(current_user, :manage_builds, @project) .pull-right - - if @build.active? - = link_to "Cancel", cancel_namespace_project_build_path(@project.namespace, @project, @build), class: 'btn btn-sm btn-danger' - - elsif @build.commands.present? - = link_to "Retry", retry_namespace_project_build_path(@project.namespace, @project, @build), class: 'btn btn-sm btn-primary', method: :post + - if @build.cancel_url + = link_to "Cancel", @build.cancel_url, class: 'btn btn-sm btn-danger', method: :post + - elsif @build.retry_url + = link_to "Retry", @build.retry_url, class: 'btn btn-sm btn-primary', method: :post - if @build.duration %p @@ -101,15 +107,15 @@ #{duration_in_words(@build.finished_at, @build.started_at)} %p %span.attr-name Created: - #{time_ago_in_words(@build.created_at)} ago + #{time_ago_with_tooltip(@build.created_at)} - if @build.finished_at %p %span.attr-name Finished: - #{time_ago_in_words(@build.finished_at)} ago + #{time_ago_with_tooltip(@build.finished_at)} %p %span.attr-name Runner: - if @build.runner && current_user && current_user.admin - \#{link_to "##{@build.runner.id}", ci_admin_runner_path(@build.runner.id)} + = link_to "##{@build.runner.id}", ci_admin_runner_path(@build.runner.id) - elsif @build.runner \##{@build.runner.id} @@ -134,10 +140,11 @@ %h4.title Commit .pull-right - %small #{build_commit_link @build} + %small + = link_to @build.commit.short_sha, ci_status_path(@build.commit), class: "monospace" %p %span.attr-name Branch: - #{build_ref_link @build} + = link_to @build.ref, namespace_project_commits_path(@project.namespace, @project, @build.ref) %p %span.attr-name Author: #{@build.commit.git_author_name} @@ -155,14 +162,16 @@ - if @builds.present? .build-widget - %h4.title #{pluralize(@builds.count, "other build")} for #{@build.short_sha}: + %h4.title #{pluralize(@builds.count(:id), "other build")} for + = succeed ":" do + = link_to @build.commit.short_sha, ci_status_path(@build.commit), class: "monospace" %table.table.builds - @builds.each_with_index do |build, i| %tr.build %td = ci_icon_for_status(build.status) %td - = link_to namespace_project_build_path(@project.namespace, @project, @build) do + = link_to namespace_project_build_path(@project.namespace, @project, build) do - if build.name = build.name - else @@ -171,8 +180,5 @@ %td.status= build.status - = paginate @builds - - :javascript new CiBuild("#{namespace_project_build_url(@project.namespace, @project, @build)}", "#{@build.status}") diff --git a/app/views/projects/buttons/_download.html.haml b/app/views/projects/buttons/_download.html.haml new file mode 100644 index 0000000000..14ee2263b7 --- /dev/null +++ b/app/views/projects/buttons/_download.html.haml @@ -0,0 +1,4 @@ +- unless @project.empty_repo? + - if can? current_user, :download_code, @project + = link_to archive_namespace_project_repository_path(@project.namespace, @project, ref: @ref, format: 'zip'), class: 'btn has_tooltip', rel: 'nofollow', title: "Download ZIP" do + = icon('download') diff --git a/app/views/projects/buttons/_dropdown.html.haml b/app/views/projects/buttons/_dropdown.html.haml index 4580c91269..b277b765b6 100644 --- a/app/views/projects/buttons/_dropdown.html.haml +++ b/app/views/projects/buttons/_dropdown.html.haml @@ -5,7 +5,7 @@ %ul.dropdown-menu.dropdown-menu-right.project-home-dropdown - if can?(current_user, :create_issue, @project) %li - = link_to url_for_new_issue do + = link_to url_for_new_issue(@project, only_path: true) do = icon('exclamation-circle fw') New issue - if can?(current_user, :create_merge_request, @project) @@ -20,6 +20,10 @@ New snippet - if can?(current_user, :push_code, @project) %li.divider + %li + = link_to namespace_project_new_blob_path(@project.namespace, @project, @project.default_branch || 'master'), title: 'New file' do + = icon('file fw') + New file %li = link_to new_namespace_project_branch_path(@project.namespace, @project) do = icon('code-fork fw') @@ -28,5 +32,3 @@ = link_to new_namespace_project_tag_path(@project.namespace, @project) do = icon('tags fw') New tag - - diff --git a/app/views/projects/buttons/_fork.html.haml b/app/views/projects/buttons/_fork.html.haml index 8f2f631eb7..2d3abf0905 100644 --- a/app/views/projects/buttons/_fork.html.haml +++ b/app/views/projects/buttons/_fork.html.haml @@ -1,12 +1,13 @@ -- if current_user && can?(current_user, :fork_project, @project) - - if current_user.already_forked?(@project) && current_user.manageable_namespaces.size < 2 - = link_to namespace_project_path(current_user, current_user.fork_of(@project)), title: 'Go to your fork', class: 'btn' do - = icon('code-fork fw') - Fork - %span.count - = @project.forks_count - - else - = link_to new_namespace_project_fork_path(@project.namespace, @project), title: "Fork project", class: 'btn' do - = icon('code-fork fw') - %span.count - = @project.forks_count +- unless @project.empty_repo? + - if current_user && can?(current_user, :fork_project, @project) + - if current_user.already_forked?(@project) && current_user.manageable_namespaces.size < 2 + = link_to namespace_project_path(current_user, current_user.fork_of(@project)), title: 'Go to your fork', class: 'btn has_tooltip' do + = icon('code-fork fw') + Fork + %span.count + = @project.forks_count + - else + = link_to new_namespace_project_fork_path(@project.namespace, @project), title: "Fork project", class: 'btn has_tooltip' do + = icon('code-fork fw') + %span.count + = @project.forks_count diff --git a/app/views/projects/buttons/_notifications.html.haml b/app/views/projects/buttons/_notifications.html.haml index 0c29884491..3e83ec3912 100644 --- a/app/views/projects/buttons/_notifications.html.haml +++ b/app/views/projects/buttons/_notifications.html.haml @@ -5,7 +5,7 @@ = hidden_field_tag :notification_id, @membership.id = hidden_field_tag :notification_level %span.dropdown - %a.dropdown-new.btn.btn-new#notifications-button{href: '#', "data-toggle" => "dropdown"} + %a.dropdown-new.btn.notifications-btn#notifications-button{href: '#', "data-toggle" => "dropdown"} = icon('bell') = notification_label(@membership) = icon('angle-down') @@ -14,7 +14,7 @@ = notification_list_item(level, @membership) - when GroupMember - .btn.btn-new.disabled.has_tooltip{title: "To change the notification level, you need to be a member of the project itself, not only its group."} + .btn.disabled.notifications-btn.has_tooltip{title: "To change the notification level, you need to be a member of the project itself, not only its group."} = icon('bell') = notification_label(@membership) = icon('angle-down') diff --git a/app/views/projects/buttons/_star.html.haml b/app/views/projects/buttons/_star.html.haml index 3501dddefb..41a3ec6d90 100644 --- a/app/views/projects/buttons/_star.html.haml +++ b/app/views/projects/buttons/_star.html.haml @@ -1,14 +1,16 @@ - if current_user - = link_to toggle_star_namespace_project_path(@project.namespace, @project), class: 'btn star-btn toggle-star', method: :post, remote: true do + = link_to toggle_star_namespace_project_path(@project.namespace, @project), class: 'btn star-btn toggle-star has_tooltip', method: :post, remote: true, title: "Star project" do = icon('star fw') %span.count = @project.star_count - :coffeescript - $('.project-home-panel .toggle-star').on 'ajax:success', (e, data, status, xhr) -> - $(@).replaceWith(data.html) - .on 'ajax:error', (e, xhr, status, error) -> - new Flash('Star toggle failed. Try again later.', 'alert') + :javascript + $('.project-home-panel .toggle-star').on('ajax:success', function (e, data, status, xhr) { + $(this).replaceWith(data.html); + }) + .on('ajax:error', function (e, xhr, status, error) { + new Flash('Star toggle failed. Try again later.', 'alert'); + }); - else = link_to new_user_session_path, class: 'btn has_tooltip star-btn', title: 'You must sign in to star a project' do diff --git a/app/views/projects/ci_services/edit.html.haml b/app/views/projects/ci_services/edit.html.haml index bcc5832792..dacb6b4f6f 100644 --- a/app/views/projects/ci_services/edit.html.haml +++ b/app/views/projects/ci_services/edit.html.haml @@ -1 +1,2 @@ +- page_title @service.title, "CI Services" = render 'form' diff --git a/app/views/projects/ci_services/index.html.haml b/app/views/projects/ci_services/index.html.haml index c164b2d4bc..3f26c7851d 100644 --- a/app/views/projects/ci_services/index.html.haml +++ b/app/views/projects/ci_services/index.html.haml @@ -1,3 +1,4 @@ +- page_title "CI Services" %h3.page-title Project services %p.light Project services allow you to integrate GitLab CI with other applications diff --git a/app/views/projects/ci_settings/_form.html.haml b/app/views/projects/ci_settings/_form.html.haml index d711413c6b..ee6b8885e2 100644 --- a/app/views/projects/ci_settings/_form.html.haml +++ b/app/views/projects/ci_settings/_form.html.haml @@ -102,9 +102,10 @@ %code \(\d+.\d+\%\) covered %li pytest-cov (Python) - - %code \d+\%$ - - + %code \d+\%\s*$ + %li + phpunit --coverage-text --colors=never (PHP) - + %code ^\s*Lines:\s*\d+.\d+\% %fieldset %legend Advanced settings diff --git a/app/views/projects/ci_settings/_no_runners.html.haml b/app/views/projects/ci_settings/_no_runners.html.haml index 33038c5297..1374e6680f 100644 --- a/app/views/projects/ci_settings/_no_runners.html.haml +++ b/app/views/projects/ci_settings/_no_runners.html.haml @@ -5,4 +5,4 @@ You can add Specific runner for this project on Runners page - if current_user.admin - or add Shared runner for whole application in admin are. + or add Shared runner for whole application in admin area. diff --git a/app/views/projects/ci_settings/edit.html.haml b/app/views/projects/ci_settings/edit.html.haml index eedf484bf0..acc912d459 100644 --- a/app/views/projects/ci_settings/edit.html.haml +++ b/app/views/projects/ci_settings/edit.html.haml @@ -1,24 +1,6 @@ -- if @ci_project.generated_yaml_config - %p.alert.alert-danger - CI Jobs are deprecated now, you can #{link_to "download", dumped_yaml_ci_project_path(@ci_project)} - or - %a.preview-yml{:href => "#yaml-content", "data-toggle" => "modal"} preview - yaml file which is based on your old jobs. - Put this file to the root of your project and name it .gitlab-ci.yml +- page_title "CI Settings" - if no_runners_for_project?(@ci_project) = render 'no_runners' = render 'form' - -- if @ci_project.generated_yaml_config - #yaml-content.modal.fade{"aria-hidden" => "true", "aria-labelledby" => ".gitlab-ci.yml", :role => "dialog", :tabindex => "-1"} - .modal-dialog - .modal-content - .modal-header - %button.close{"aria-hidden" => "true", "data-dismiss" => "modal", :type => "button"} × - %h4.modal-title Content of .gitlab-ci.yml - .modal-body - = text_area_tag :yaml, @ci_project.generated_yaml_config, size: "70x25", class: "form-control" - .modal-footer - %button.btn.btn-default{"data-dismiss" => "modal", :type => "button"} Close diff --git a/app/views/projects/ci_web_hooks/index.html.haml b/app/views/projects/ci_web_hooks/index.html.haml index 6aebd7cfc4..2998fb08ff 100644 --- a/app/views/projects/ci_web_hooks/index.html.haml +++ b/app/views/projects/ci_web_hooks/index.html.haml @@ -1,3 +1,4 @@ +- page_title "CI Web Hooks" %h3.page-title CI Web hooks @@ -20,17 +21,18 @@ -if @web_hooks.any? %h4 Activated web hooks (#{@web_hooks.count}) - %table.table - - @web_hooks.each do |hook| - %tr - %td - .clearfix - %span.monospace= hook.url - %td - .pull-right - - if @ci_project.commits.any? - = link_to 'Test Hook', test_namespace_project_ci_web_hook_path(@project.namespace, @project, hook), class: "btn btn-sm btn-grouped" - = link_to 'Remove', namespace_project_ci_web_hook_path(@project.namespace, @project, hook), data: { confirm: 'Are you sure?'}, method: :delete, class: "btn btn-remove btn-sm btn-grouped" + .table-holder + %table.table + - @web_hooks.each do |hook| + %tr + %td + .clearfix + %span.monospace= hook.url + %td + .pull-right + - if @ci_project.commits.any? + = link_to 'Test Hook', test_namespace_project_ci_web_hook_path(@project.namespace, @project, hook), class: "btn btn-sm btn-grouped" + = link_to 'Remove', namespace_project_ci_web_hook_path(@project.namespace, @project, hook), data: { confirm: 'Are you sure?'}, method: :delete, class: "btn btn-remove btn-sm btn-grouped" %h4 Web Hook data example diff --git a/app/views/projects/commit/_ci_menu.html.haml b/app/views/projects/commit/_ci_menu.html.haml index a634ae5dfd..c73ba74f5e 100644 --- a/app/views/projects/commit/_ci_menu.html.haml +++ b/app/views/projects/commit/_ci_menu.html.haml @@ -2,6 +2,8 @@ = nav_link(path: 'commit#show') do = link_to namespace_project_commit_path(@project.namespace, @project, @commit.id) do Changes - = nav_link(path: 'commit#ci') do - = link_to ci_namespace_project_commit_path(@project.namespace, @project, @commit.id) do + %span.badge= @diffs.count + = nav_link(path: 'commit#builds') do + = link_to builds_namespace_project_commit_path(@project.namespace, @project, @commit.id) do Builds + %span.badge= @builds.count(:id) diff --git a/app/views/projects/commit/_commit_box.html.haml b/app/views/projects/commit/_commit_box.html.haml index fbf0a9ec0c..776768537d 100644 --- a/app/views/projects/commit/_commit_box.html.haml +++ b/app/views/projects/commit/_commit_box.html.haml @@ -19,7 +19,7 @@ %p %span.light Commit - = link_to @commit.id, namespace_project_commit_path(@project.namespace, @project, @commit) + = link_to @commit.id, namespace_project_commit_path(@project.namespace, @project, @commit), class: "monospace" .commit-info-row %span.light Authored by %strong @@ -36,7 +36,7 @@ .commit-info-row %span.cgray= pluralize(@commit.parents.count, "parent") - @commit.parents.each do |parent| - = link_to parent.short_id, namespace_project_commit_path(@project.namespace, @project, parent) + = link_to parent.short_id, namespace_project_commit_path(@project.namespace, @project, parent), class: "monospace" - if @ci_commit .pull-right @@ -55,5 +55,5 @@ %pre.commit-description = preserve(gfm(escape_once(@commit.description))) -:coffeescript - $(".commit-info-row.branches").load("#{branches_namespace_project_commit_path(@project.namespace, @project, @commit.id)}") +:javascript + $(".commit-info-row.branches").load("#{branches_namespace_project_commit_path(@project.namespace, @project, @commit.id)}"); diff --git a/app/views/projects/commit/builds.html.haml b/app/views/projects/commit/builds.html.haml new file mode 100644 index 0000000000..00cf9c7610 --- /dev/null +++ b/app/views/projects/commit/builds.html.haml @@ -0,0 +1,72 @@ +- page_title "Builds", "#{@commit.title} (#{@commit.short_id})", "Commits" += render "projects/commits/header_title" += render "commit_box" += render "ci_menu" + + +- if @ci_commit.yaml_errors.present? + .bs-callout.bs-callout-danger + %h4 Found errors in your .gitlab-ci.yml: + %ul + - @ci_commit.yaml_errors.split(",").each do |error| + %li= error + +- unless @ci_commit.ci_yaml_file + .bs-callout.bs-callout-warning + \.gitlab-ci.yml not found in this commit + +.gray-content-block.second-block + Latest builds + + .pull-right + - if @ci_commit.duration > 0 + %i.fa.fa-time + #{time_interval_in_words @ci_commit.duration} + +   + + - if @ci_project && current_user && can?(current_user, :manage_builds, @project) + - if @ci_commit.builds.latest.failed.any?(&:retryable?) + = link_to "Retry failed", retry_builds_namespace_project_commit_path(@project.namespace, @project, @commit.sha), class: 'btn btn-xs btn-primary', method: :post + + - if @ci_commit.builds.running_or_pending.any? + = link_to "Cancel running", cancel_builds_namespace_project_commit_path(@project.namespace, @project, @commit.sha), class: 'btn btn-xs btn-danger', method: :post + +.table-holder + %table.table.builds + %thead + %tr + %th Status + %th Build ID + %th Ref + %th Stage + %th Name + %th Duration + %th Finished at + - if @ci_project && @ci_project.coverage_enabled? + %th Coverage + %th + - @ci_commit.refs.each do |ref| + = render partial: "projects/commit_statuses/commit_status", collection: @ci_commit.statuses.for_ref(ref).latest.ordered, + locals: { coverage: @ci_project.try(:coverage_enabled?), stage: true, allow_retry: true } + +- if @ci_commit.retried.any? + .gray-content-block.second-block + Retried builds + + .table-holder + %table.table.builds + %thead + %tr + %th Status + %th Build ID + %th Ref + %th Stage + %th Name + %th Duration + %th Finished at + - if @ci_project && @ci_project.coverage_enabled? + %th Coverage + %th + = render partial: "projects/commit_statuses/commit_status", collection: @ci_commit.retried, + locals: { coverage: @ci_project.try(:coverage_enabled?), stage: true } diff --git a/app/views/projects/commit/ci.html.haml b/app/views/projects/commit/ci.html.haml deleted file mode 100644 index ca71a91af1..0000000000 --- a/app/views/projects/commit/ci.html.haml +++ /dev/null @@ -1,67 +0,0 @@ -- page_title "#{@commit.title} (#{@commit.short_id})", "Commits" -= render "projects/commits/header_title" -= render "commit_box" -= render "ci_menu" - - -- if @ci_commit.yaml_errors.present? - .bs-callout.bs-callout-danger - %h4 Found errors in your .gitlab-ci.yml: - %ul - - @ci_commit.yaml_errors.split(",").each do |error| - %li= error - -- unless @ci_commit.ci_yaml_file - .bs-callout.bs-callout-warning - \.gitlab-ci.yml not found in this commit - -.gray-content-block.second-block - Latest builds - - .pull-right - - if @ci_commit.duration > 0 - %i.fa.fa-time - #{time_interval_in_words @ci_commit.duration} - -   - - - if @ci_project && current_user && can?(current_user, :manage_builds, @project) - - if @ci_commit.builds.running_or_pending.any? - = link_to "Cancel all", cancel_builds_namespace_project_commit_path(@project.namespace, @project, @commit.sha), class: 'btn btn-xs btn-danger' - -%table.table.builds - %thead - %tr - %th Status - %th Build ID - %th Ref - %th Stage - %th Name - %th Duration - %th Finished at - - if @ci_project && @ci_project.coverage_enabled? - %th Coverage - %th - - @ci_commit.refs.each do |ref| - = render partial: "projects/commit_statuses/commit_status", collection: @ci_commit.statuses.for_ref(ref).latest.ordered, - locals: { coverage: @ci_project.try(:coverage_enabled?), allow_retry: true } - -- if @ci_commit.retried.any? - .gray-content-block.second-block - Retried builds - - %table.table.builds - %thead - %tr - %th Status - %th Build ID - %th Ref - %th Stage - %th Name - %th Duration - %th Finished at - - if @ci_project && @ci_project.coverage_enabled? - %th Coverage - %th - = render partial: "projects/commit_statuses/commit_status", collection: @ci_commit.retried, - locals: { coverage: @ci_project.try(:coverage_enabled?) } diff --git a/app/views/projects/commit/show.html.haml b/app/views/projects/commit/show.html.haml index 30a3973828..85e203cbe5 100644 --- a/app/views/projects/commit/show.html.haml +++ b/app/views/projects/commit/show.html.haml @@ -3,4 +3,4 @@ = render "commit_box" = render "ci_menu" if @ci_commit = render "projects/diffs/diffs", diffs: @diffs, project: @project -= render "projects/notes/notes_with_form", view: params[:view] += render "projects/notes/notes_with_form" diff --git a/app/views/projects/commit_statuses/_commit_status.html.haml b/app/views/projects/commit_statuses/_commit_status.html.haml index 637154f56a..9a0e7bff3f 100644 --- a/app/views/projects/commit_statuses/_commit_status.html.haml +++ b/app/views/projects/commit_statuses/_commit_status.html.haml @@ -12,14 +12,30 @@ - if commit_status.show_warning? %i.fa.fa-warning.text-warning - %td - = commit_status.ref + - if defined?(commit_sha) && commit_sha + %td + = link_to commit_status.short_sha, namespace_project_commit_path(@project.namespace, @project, commit_status.sha), class: "monospace" %td - = commit_status.stage + - if commit_status.ref + = link_to commit_status.ref, namespace_project_commits_path(@project.namespace, @project, commit_status.ref) + - else + .light none + + - if defined?(runner) && runner + %td + - if commit_status.try(:runner) + = runner_link(commit_status.runner) + - else + .light none + + - if defined?(stage) && stage + %td + = commit_status.stage %td = commit_status.name + .pull-right - if commit_status.tags.any? - commit_status.tags.each do |tag| @@ -36,7 +52,7 @@ %td.timestamp - if commit_status.finished_at - %span #{time_ago_in_words commit_status.finished_at} ago + %span #{time_ago_with_tooltip(commit_status.finished_at)} - if defined?(coverage) && coverage %td.coverage @@ -45,10 +61,14 @@ %td .pull-right + - if current_user && can?(current_user, :download_build_artifacts, @project) && commit_status.download_url + = link_to commit_status.download_url, title: 'Download artifacts' do + %i.fa.fa-download - if current_user && can?(current_user, :manage_builds, commit_status.gl_project) - - if commit_status.cancel_url - = link_to commit_status.cancel_url, title: 'Cancel' do - %i.fa.fa-remove.cred + - if commit_status.active? + - if commit_status.cancel_url + = link_to commit_status.cancel_url, method: :post, title: 'Cancel' do + %i.fa.fa-remove.cred - elsif defined?(allow_retry) && allow_retry && commit_status.retry_url = link_to commit_status.retry_url, method: :post, title: 'Retry' do %i.fa.fa-repeat diff --git a/app/views/projects/commits/_commit.html.haml b/app/views/projects/commits/_commit.html.haml index cddd5aa3a8..805be332e6 100644 --- a/app/views/projects/commits/_commit.html.haml +++ b/app/views/projects/commits/_commit.html.haml @@ -18,10 +18,10 @@ .pull-right - if ci_commit - = link_to ci_status_path(ci_commit), class: "c#{ci_status_color(ci_commit)}" do - = ci_status_icon(ci_commit) + = render_ci_status(ci_commit)   - = link_to commit.short_id, namespace_project_commit_path(project.namespace, project, commit), class: "commit_short_id" + = clipboard_button + = link_to commit.short_id, namespace_project_commit_path(project.namespace, project, commit), class: "commit_short_id", data: {clipboard_text: commit.id} .notes_count - if note_count > 0 diff --git a/app/views/projects/commits/_head.html.haml b/app/views/projects/commits/_head.html.haml index a849bf8469..f11a41cfd7 100644 --- a/app/views/projects/commits/_head.html.haml +++ b/app/views/projects/commits/_head.html.haml @@ -12,7 +12,7 @@ Branches %span.badge.js-totalbranch-count= @repository.branches.size - = nav_link(controller: :tags) do + = nav_link(controller: [:tags, :releases]) do = link_to namespace_project_tags_path(@project.namespace, @project) do Tags %span.badge.js-totaltags-count= @repository.tags.length diff --git a/app/views/projects/commits/show.atom.builder b/app/views/projects/commits/show.atom.builder index 3854ad5d61..268b9b815e 100644 --- a/app/views/projects/commits/show.atom.builder +++ b/app/views/projects/commits/show.atom.builder @@ -12,7 +12,7 @@ xml.feed "xmlns" => "http://www.w3.org/2005/Atom", "xmlns:media" => "http://sear xml.link href: namespace_project_commit_url(@project.namespace, @project, id: commit.id) xml.title truncate(commit.title, length: 80) xml.updated commit.committed_date.strftime("%Y-%m-%dT%H:%M:%SZ") - xml.media :thumbnail, width: "40", height: "40", url: avatar_icon(commit.author_email) + xml.media :thumbnail, width: "40", height: "40", url: image_url(avatar_icon(commit.author_email)) xml.author do |author| xml.name commit.author_name xml.email commit.author_email diff --git a/app/views/projects/diffs/_diffs.html.haml b/app/views/projects/diffs/_diffs.html.haml index 56b51f038b..416fb4da07 100644 --- a/app/views/projects/diffs/_diffs.html.haml +++ b/app/views/projects/diffs/_diffs.html.haml @@ -1,9 +1,9 @@ -- if params[:view] == 'parallel' +- if diff_view == 'parallel' - fluid_layout true - diff_files = safe_diff_files(diffs) -.gray-content-block.second-block +.gray-content-block.second-block.oneline-block .inline-parallel-buttons .btn-group = inline_diff_btn diff --git a/app/views/projects/diffs/_file.html.haml b/app/views/projects/diffs/_file.html.haml index 410ff6abb4..c745b4e69b 100644 --- a/app/views/projects/diffs/_file.html.haml +++ b/app/views/projects/diffs/_file.html.haml @@ -33,7 +33,7 @@ -# Skipp all non non-supported blobs - return unless blob.respond_to?('text?') - if blob.text? - - if params[:view] == 'parallel' + - if diff_view == 'parallel' = render "projects/diffs/parallel_view", diff_file: diff_file, project: project, blob: blob, index: i - else = render "projects/diffs/text_file", diff_file: diff_file, index: i @@ -42,4 +42,3 @@ = render "projects/diffs/image", diff_file: diff_file, old_file: old_file, file: blob, index: i - else .nothing-here-block No preview for this file type - diff --git a/app/views/projects/edit.html.haml b/app/views/projects/edit.html.haml index 1882a82fba..3ebc175648 100644 --- a/app/views/projects/edit.html.haml +++ b/app/views/projects/edit.html.haml @@ -57,7 +57,16 @@ = f.check_box :merge_requests_enabled %strong Merge Requests %br - %span.descr Submit changes to be merged upstream. + %span.descr Submit changes to be merged upstream + + .form-group + .col-sm-offset-2.col-sm-10 + .checkbox + = f.label :builds_enabled do + = f.check_box :builds_enabled + %strong Builds + %br + %span.descr Test and deploy your changes before merge .form-group .col-sm-offset-2.col-sm-10 @@ -189,6 +198,21 @@ - else .nothing-here-block Only the project owner can transfer a project + - if @project.forked? + - if can?(current_user, :remove_fork_project, @project) + = form_for([@project.namespace.becomes(Namespace), @project], url: remove_fork_namespace_project_path(@project.namespace, @project), method: :delete, remote: true, html: { class: 'transfer-project form-horizontal' }) do |f| + .panel.panel-default.panel.panel-danger + .panel-heading Remove fork relationship + .panel-body + %p + This will remove the fork relationship to source project + #{link_to @project.forked_from_project.name_with_namespace, project_path(@project.forked_from_project)}. + %br + %strong Once removed, the fork relationship cannot be restored and you will no longer be able to send merge requests to the source. + = button_to 'Remove fork relationship', '#', class: "btn btn-remove js-confirm-danger", data: { "confirm-danger-message" => remove_fork_project_message(@project) } + - else + .nothing-here-block Only the project owner can remove the fork relationship. + - if can?(current_user, :remove_project, @project) .panel.panel-default.panel.panel-danger .panel-heading Remove project @@ -201,7 +225,8 @@ = button_to 'Remove project', '#', class: "btn btn-remove js-confirm-danger", data: { "confirm-danger-message" => remove_project_message(@project) } - else - .nothing-here-block Only project owner can remove a project + .nothing-here-block Only the project owner can remove a project. + .save-project-loader.hide .center diff --git a/app/views/projects/graphs/_head.html.haml b/app/views/projects/graphs/_head.html.haml index bbfaf422a8..03d0733f91 100644 --- a/app/views/projects/graphs/_head.html.haml +++ b/app/views/projects/graphs/_head.html.haml @@ -1,9 +1,9 @@ -%ul.nav.nav-tabs +%ul.center-top-menu = nav_link(action: :show) do = link_to 'Contributors', namespace_project_graph_path = nav_link(action: :commits) do = link_to 'Commits', commits_namespace_project_graph_path - - if @project.gitlab_ci? + - if @project.builds_enabled? = nav_link(action: :ci) do = link_to ci_namespace_project_graph_path do Continuous Integration diff --git a/app/views/projects/graphs/ci.html.haml b/app/views/projects/graphs/ci.html.haml index 4f69cc64f7..6fa77cc10c 100644 --- a/app/views/projects/graphs/ci.html.haml +++ b/app/views/projects/graphs/ci.html.haml @@ -1,7 +1,16 @@ - page_title "Continuous Integration", "Graphs" = render "header_title" = render 'head' +.gray-content-block.append-bottom-default + .oneline + A collection of graphs for Continuous Integration + #charts.ci-charts + .row + .col-md-6 + = render 'projects/graphs/ci/overall' + .col-md-6 + = render 'projects/graphs/ci/build_times' + + %hr = render 'projects/graphs/ci/builds' - = render 'projects/graphs/ci/build_times' -= render 'projects/graphs/ci/overall' diff --git a/app/views/projects/graphs/ci/_build_times.haml b/app/views/projects/graphs/ci/_build_times.haml index c3c2f57241..c58223fd39 100644 --- a/app/views/projects/graphs/ci/_build_times.haml +++ b/app/views/projects/graphs/ci/_build_times.haml @@ -1,21 +1,22 @@ -%fieldset - %legend +%div + %p.light Commit duration in minutes for last 30 commits - %canvas#build_timesChart.padded{width: 800, height: 300} + %canvas#build_timesChart{height: 200} :javascript var data = { labels : #{@charts[:build_times].labels.to_json}, datasets : [ { - fillColor : "#4A3", - strokeColor : "rgba(151,187,205,1)", - pointColor : "rgba(151,187,205,1)", - pointStrokeColor : "#fff", + fillColor : "rgba(220,220,220,0.5)", + strokeColor : "rgba(220,220,220,1)", + barStrokeWidth: 1, + barValueSpacing: 1, + barDatasetSpacing: 1, data : #{@charts[:build_times].build_times.to_json} } ] } var ctx = $("#build_timesChart").get(0).getContext("2d"); - new Chart(ctx).Line(data,{"scaleOverlay": true}); + new Chart(ctx).Bar(data,{"scaleOverlay": true, responsive: true, maintainAspectRatio: false}); diff --git a/app/views/projects/graphs/ci/_builds.haml b/app/views/projects/graphs/ci/_builds.haml index 1b0039fb83..8fca07114f 100644 --- a/app/views/projects/graphs/ci/_builds.haml +++ b/app/views/projects/graphs/ci/_builds.haml @@ -1,20 +1,30 @@ -%fieldset - %legend - Builds chart for last week +%h4 Build charts +%p +   + %span.cgreen + = icon("circle") + success +   + %span.cgray + = icon("circle") + all + +.prepend-top-default + %p.light + Builds for last week (#{date_from_to(Date.today - 7.days, Date.today)}) + %canvas#weekChart{height: 200} - %canvas#weekChart.padded{width: 800, height: 200} - -%fieldset - %legend - Builds chart for last month +.prepend-top-default + %p.light + Builds for last month (#{date_from_to(Date.today - 30.days, Date.today)}) + %canvas#monthChart{height: 200} - %canvas#monthChart.padded{width: 800, height: 300} - -%fieldset - %legend Builds chart for last year - %canvas#yearChart.padded{width: 800, height: 400} +.prepend-top-default + %p.light + Builds for last year + %canvas#yearChart.padded{height: 250} - [:week, :month, :year].each do |scope| :javascript @@ -22,20 +32,20 @@ labels : #{@charts[scope].labels.to_json}, datasets : [ { - fillColor : "rgba(220,220,220,0.5)", - strokeColor : "rgba(220,220,220,1)", - pointColor : "rgba(220,220,220,1)", + fillColor : "#7f8fa4", + strokeColor : "#7f8fa4", + pointColor : "#7f8fa4", pointStrokeColor : "#EEE", data : #{@charts[scope].total.to_json} }, { - fillColor : "#4A3", - strokeColor : "rgba(151,187,205,1)", - pointColor : "rgba(151,187,205,1)", + fillColor : "#44aa22", + strokeColor : "#44aa22", + pointColor : "#44aa22", pointStrokeColor : "#fff", data : #{@charts[scope].success.to_json} } ] } var ctx = $("##{scope}Chart").get(0).getContext("2d"); - new Chart(ctx).Line(data,{"scaleOverlay": true}); + new Chart(ctx).Line(data,{"scaleOverlay": true, responsive: true, maintainAspectRatio: false}); diff --git a/app/views/projects/graphs/ci/_overall.haml b/app/views/projects/graphs/ci/_overall.haml index 9550d71947..cf4285a267 100644 --- a/app/views/projects/graphs/ci/_overall.haml +++ b/app/views/projects/graphs/ci/_overall.haml @@ -1,22 +1,20 @@ - ci_project = @project.gitlab_ci_project -%fieldset - %legend Overall - %p +%h4 Overall stats +%ul + %li Total: %strong= pluralize ci_project.builds.count(:all), 'build' - %p + %li Successful: %strong= pluralize ci_project.builds.success.count(:all), 'build' - %p + %li Failed: %strong= pluralize ci_project.builds.failed.count(:all), 'build' - - %p + %li Success ratio: %strong #{success_ratio(ci_project.builds.success, ci_project.builds.failed)}% - - %p + %li Commits covered: %strong = ci_project.commits.count(:all) diff --git a/app/views/projects/graphs/commits.html.haml b/app/views/projects/graphs/commits.html.haml index 112be875b6..fc465ab273 100644 --- a/app/views/projects/graphs/commits.html.haml +++ b/app/views/projects/graphs/commits.html.haml @@ -1,9 +1,13 @@ - page_title "Commits", "Graphs" = render "header_title" -.tree-ref-holder - = render 'shared/ref_switcher', destination: 'graphs_commits' = render 'head' +.gray-content-block.append-bottom-default + .tree-ref-holder + = render 'shared/ref_switcher', destination: 'graphs_commits' + %ul.breadcrumb.repo-breadcrumb + = commits_breadcrumbs + %p.lead Commit statistics for %strong #{@ref} @@ -45,26 +49,24 @@ Commits per weekday %canvas#weekday-chart -:coffeescript - responsiveChart = (selector, data) -> - options = { "scaleOverlay": true, responsive: true, pointHitDetectionRadius: 2, maintainAspectRatio: false } +:javascript + var responsiveChart = function (selector, data) { + var options = { "scaleOverlay": true, responsive: true, pointHitDetectionRadius: 2, maintainAspectRatio: false }; + // get selector by context + var ctx = selector.get(0).getContext("2d"); + // pointing parent container to make chart.js inherit its width + var container = $(selector).parent(); + var generateChart = function() { + selector.attr('width', $(container).width()); + return new Chart(ctx).Bar(data, options); + }; + // enabling auto-resizing + $(window).resize(generateChart); + return generateChart(); + }; - # get selector by context - ctx = selector.get(0).getContext("2d") - # pointing parent container to make chart.js inherit its width - container = $(selector).parent() - - generateChart = -> - selector.attr('width', $(container).width()) - new Chart(ctx).Bar(data, options) - - # enabling auto-resizing - $(window).resize( generateChart ) - - generateChart() - - chartData = (keys, values) -> - data = { + var chartData = function (keys, values) { + var data = { labels : keys, datasets : [{ fillColor : "rgba(220,220,220,0.5)", @@ -74,13 +76,15 @@ barDatasetSpacing: 1, data : values }] - } + }; + return data; + }; - hourData = chartData(#{@commits_per_time.keys.to_json}, #{@commits_per_time.values.to_json}) - responsiveChart($('#hour-chart'), hourData) + var hourData = chartData(#{@commits_per_time.keys.to_json}, #{@commits_per_time.values.to_json}); + responsiveChart($('#hour-chart'), hourData); - dayData = chartData(#{@commits_per_week_days.keys.to_json}, #{@commits_per_week_days.values.to_json}) - responsiveChart($('#weekday-chart'), dayData) + var dayData = chartData(#{@commits_per_week_days.keys.to_json}, #{@commits_per_week_days.values.to_json}); + responsiveChart($('#weekday-chart'), dayData); - monthData = chartData(#{@commits_per_month.keys.to_json}, #{@commits_per_month.values.to_json}) - responsiveChart($('#month-chart'), monthData) + var monthData = chartData(#{@commits_per_month.keys.to_json}, #{@commits_per_month.values.to_json}); + responsiveChart($('#month-chart'), monthData); diff --git a/app/views/projects/graphs/show.html.haml b/app/views/projects/graphs/show.html.haml index bd342911e4..882e7d6b6e 100644 --- a/app/views/projects/graphs/show.html.haml +++ b/app/views/projects/graphs/show.html.haml @@ -1,9 +1,13 @@ - page_title "Contributors", "Graphs" = render "header_title" -.tree-ref-holder - = render 'shared/ref_switcher', destination: 'graphs' = render 'head' +.gray-content-block.append-bottom-default + .tree-ref-holder + = render 'shared/ref_switcher', destination: 'graphs' + %ul.breadcrumb.repo-breadcrumb + = commits_breadcrumbs + .loading-graph .center %h3.page-title @@ -24,18 +28,21 @@ -:coffeescript - $.ajax +:javascript + $.ajax({ type: "GET", url: location.href, - success: (data) -> - graph = new ContributorsStatGraph() - graph.init(data) + dataType: "json", + success: function (data) { + var graph = new ContributorsStatGraph(); + graph.init(data); - $("#brush_change").change -> - graph.change_date_header() - graph.redraw_authors() + $("#brush_change").change(function(){ + graph.change_date_header(); + graph.redraw_authors(); + }); $(".stat-graph").fadeIn(); $(".loading-graph").hide(); - dataType: "json" + } + }); diff --git a/app/views/projects/hooks/index.html.haml b/app/views/projects/hooks/index.html.haml index 85dbfd6786..3702aeaecb 100644 --- a/app/views/projects/hooks/index.html.haml +++ b/app/views/projects/hooks/index.html.haml @@ -19,7 +19,7 @@ = f.text_field :url, class: "form-control", placeholder: 'http://example.com/trigger-ci.json' .form-group = f.label :url, "Trigger", class: 'control-label' - .col-sm-10 + .col-sm-10.prepend-top-10 %div = f.check_box :push_events, class: 'pull-left' .prepend-left-20 diff --git a/app/views/projects/imports/new.html.haml b/app/views/projects/imports/new.html.haml index 92a87690c5..6027fb2336 100644 --- a/app/views/projects/imports/new.html.haml +++ b/app/views/projects/imports/new.html.haml @@ -1,22 +1,19 @@ - page_title "Import repository" %h3.page-title - - if @project.import_failed? - Import failed. Retry? - - else - Import repository + Import repository %hr +- if @project.import_failed? + .panel.panel-danger + .panel-heading The repository could not be imported. + .panel-body + %pre + :preserve + #{@project.import_error.try(:strip)} + = form_for @project, url: namespace_project_import_path(@project.namespace, @project), method: :post, html: { class: 'form-horizontal' } do |f| - .form-group.import-url-data - = f.label :import_url, class: 'control-label' do - %span Import existing git repo - .col-sm-10 - = f.text_field :import_url, class: 'form-control', placeholder: 'https://github.com/randx/six.git' - .well.prepend-top-20 - This URL must be publicly accessible or you can add a username and password like this: https://username:password@gitlab.com/company/project.git. - %br - The import will time out after 4 minutes. For big repositories, use a clone/push combination. - For SVN repositories, check #{link_to "this migrating from SVN doc.", "http://doc.gitlab.com/ce/workflow/importing/migrating_from_svn.html"} + = render "shared/import_form", f: f + .form-actions = f.submit 'Start import', class: "btn btn-create", tabindex: 4 diff --git a/app/views/projects/imports/show.html.haml b/app/views/projects/imports/show.html.haml index 06886d215a..c0d1ce0d12 100644 --- a/app/views/projects/imports/show.html.haml +++ b/app/views/projects/imports/show.html.haml @@ -8,7 +8,7 @@ - else Import in progress. - unless @project.forked? - %p.monospace git clone --bare #{hidden_pass_url(@project.import_url)} + %p.monospace git clone --bare #{@project.safe_import_url} %p Please wait while we import the repository for you. Refresh at will. :javascript new ProjectImport(); diff --git a/app/views/projects/issues/_discussion.html.haml b/app/views/projects/issues/_discussion.html.haml index d4a98eca47..020952dd00 100644 --- a/app/views/projects/issues/_discussion.html.haml +++ b/app/views/projects/issues/_discussion.html.haml @@ -7,7 +7,7 @@ = render 'shared/show_aside' -.gray-content-block.second-block +.gray-content-block.second-block.oneline-block .row .col-md-9 .votes-holder.pull-right @@ -17,8 +17,10 @@ - @participants.each do |participant| = link_to_member(@project, participant, name: false, size: 24) .col-md-3 - %span.slead.has_tooltip{title: 'Cross-project reference'} - = cross_project_reference(@project, @issue) + .input-group.cross-project-reference + %span.slead.has_tooltip{title: 'Cross-project reference'} + = cross_project_reference(@project, @issue) + = clipboard_button .row %section.col-md-9 diff --git a/app/views/projects/issues/_issue.html.haml b/app/views/projects/issues/_issue.html.haml index 55ce912829..d7657ee7e4 100644 --- a/app/views/projects/issues/_issue.html.haml +++ b/app/views/projects/issues/_issue.html.haml @@ -29,8 +29,6 @@ .issue-info = "#{issue.to_reference} opened #{time_ago_with_tooltip(issue.created_at, placement: 'bottom')} by #{link_to_member(@project, issue.author, avatar: false)}".html_safe - - if issue.votes_count > 0 - = render 'votes/votes_inline', votable: issue - if issue.milestone   %span diff --git a/app/views/projects/issues/_issues.html.haml b/app/views/projects/issues/_issues.html.haml index a3399c57aa..ca5b1a8386 100644 --- a/app/views/projects/issues/_issues.html.haml +++ b/app/views/projects/issues/_issues.html.haml @@ -5,8 +5,9 @@ .nothing-here-block No issues to show - if @issues.present? - .pull-right - %span.issue_counter #{@issues.total_count} - issues for this filter + .issuable-filter-count + %span.pull-right + = @issues.total_count + issues for this filter = paginate @issues, theme: "gitlab" diff --git a/app/views/projects/labels/destroy.js.haml b/app/views/projects/labels/destroy.js.haml index 1b4c83ab09..d59563b122 100644 --- a/app/views/projects/labels/destroy.js.haml +++ b/app/views/projects/labels/destroy.js.haml @@ -1,2 +1,2 @@ - if @project.labels.size == 0 - $('.labels').load(document.URL + ' .light-well').hide().fadeIn(1000) + $('.labels').load(document.URL + ' .nothing-here-block').hide().fadeIn(1000) diff --git a/app/views/projects/labels/index.html.haml b/app/views/projects/labels/index.html.haml index 97175f8232..fb784ee5f4 100644 --- a/app/views/projects/labels/index.html.haml +++ b/app/views/projects/labels/index.html.haml @@ -14,8 +14,8 @@ = render @labels = paginate @labels, theme: 'gitlab' - else - .light-well + .nothing-here-block - if can? current_user, :admin_label, @project - .nothing-here-block Create first label or #{link_to 'generate', generate_namespace_project_labels_path(@project.namespace, @project), method: :post} default set of labels + Create first label or #{link_to 'generate', generate_namespace_project_labels_path(@project.namespace, @project), method: :post} default set of labels - else - .nothing-here-block No labels created + No labels created diff --git a/app/views/projects/merge_requests/_discussion.html.haml b/app/views/projects/merge_requests/_discussion.html.haml index 38e66c3828..cb75bd8c5b 100644 --- a/app/views/projects/merge_requests/_discussion.html.haml +++ b/app/views/projects/merge_requests/_discussion.html.haml @@ -7,15 +7,17 @@ = render 'shared/show_aside' -.gray-content-block.second-block +.gray-content-block.second-block.oneline-block .row .col-md-9 .votes-holder.pull-right #votes= render 'votes/votes_block', votable: @merge_request = render "projects/merge_requests/show/participants" .col-md-3 - %span.slead.has_tooltip{:"data-original-title" => 'Cross-project reference'} - = cross_project_reference(@project, @merge_request) + .input-group.cross-project-reference + %span.slead.has_tooltip{title: 'Cross-project reference'} + = cross_project_reference(@project, @merge_request) + = clipboard_button .row %section.col-md-9 diff --git a/app/views/projects/merge_requests/_merge_request.html.haml b/app/views/projects/merge_requests/_merge_request.html.haml index 25e4e8ba80..83e8ad1198 100644 --- a/app/views/projects/merge_requests/_merge_request.html.haml +++ b/app/views/projects/merge_requests/_merge_request.html.haml @@ -1,3 +1,4 @@ +- ci_commit = merge_request.ci_commit %li{ class: mr_css_classes(merge_request) } .merge-request-title %span.merge-request-title-text @@ -6,6 +7,8 @@ - merge_request.labels.each do |label| = link_to_label(label, project: merge_request.project) .pull-right.light + - if ci_commit + = render_ci_status(ci_commit) - if merge_request.merged? %span %i.fa.fa-check @@ -31,13 +34,16 @@ .merge-request-info = "##{merge_request.iid} opened #{time_ago_with_tooltip(merge_request.created_at, placement: 'bottom')} by #{link_to_member(@project, merge_request.author, avatar: false)}".html_safe - - if merge_request.votes_count > 0 - = render 'votes/votes_inline', votable: merge_request - if merge_request.milestone_id?   %span %i.fa.fa-clock-o = merge_request.milestone.title + - if merge_request.target_project.default_branch != merge_request.target_branch +   + %span + %i.fa.fa-code-fork + = merge_request.target_branch - if merge_request.tasks? %span.task-status = merge_request.task_status diff --git a/app/views/projects/merge_requests/_merge_requests.html.haml b/app/views/projects/merge_requests/_merge_requests.html.haml index d86707b3d9..0af970e4b9 100644 --- a/app/views/projects/merge_requests/_merge_requests.html.haml +++ b/app/views/projects/merge_requests/_merge_requests.html.haml @@ -5,8 +5,10 @@ .nothing-here-block No merge requests to show - if @merge_requests.present? - .pull-right - %span.cgray.pull-right #{@merge_requests.total_count} merge requests for this filter + .issuable-filter-count + %span.pull-right + = @merge_requests.total_count + merge requests for this filter = paginate @merge_requests, theme: "gitlab" diff --git a/app/views/projects/merge_requests/_new_compare.html.haml b/app/views/projects/merge_requests/_new_compare.html.haml index 452006162d..d9eff1f932 100644 --- a/app/views/projects/merge_requests/_new_compare.html.haml +++ b/app/views/projects/merge_requests/_new_compare.html.haml @@ -77,12 +77,13 @@ }); -:coffeescript - - $(".merge-request-form").on 'submit', -> - if $("#merge_request_source_branch").val() is "" or $('#merge_request_target_branch').val() is "" - $(".mr-compare-errors").html("You must select source and target branch to proceed") - $(".mr-compare-errors").fadeIn() - event.preventDefault() - return +:javascript + $(".merge-request-form").on('submit', function () { + if ($("#merge_request_source_branch").val() === "" || $('#merge_request_target_branch').val() === "") { + $(".mr-compare-errors").html("You must select source and target branch to proceed"); + $(".mr-compare-errors").fadeIn(); + event.preventDefault(); + return; + } + }); diff --git a/app/views/projects/merge_requests/show/_commits.html.haml b/app/views/projects/merge_requests/show/_commits.html.haml index a71b181a6a..478054db51 100644 --- a/app/views/projects/merge_requests/show/_commits.html.haml +++ b/app/views/projects/merge_requests/show/_commits.html.haml @@ -1 +1,5 @@ +.gray-content-block.second-block.oneline-block + = icon("sort-amount-desc") + Most recent commits displayed first + = render "projects/commits/commits", project: @merge_request.project diff --git a/app/views/projects/merge_requests/show/_diffs.html.haml b/app/views/projects/merge_requests/show/_diffs.html.haml index 626970f39b..d9cfc3d7ae 100644 --- a/app/views/projects/merge_requests/show/_diffs.html.haml +++ b/app/views/projects/merge_requests/show/_diffs.html.haml @@ -1,5 +1,5 @@ - if @merge_request_diff.collected? - = render "projects/diffs/diffs", diffs: @merge_request.diffs, project: @merge_request.project + = render "projects/diffs/diffs", diffs: params[:w] == '1' ? @merge_request.diffs_no_whitespace : @merge_request.diffs, project: @merge_request.project - elsif @merge_request_diff.empty? .nothing-here-block Nothing to merge from #{@merge_request.source_branch} into #{@merge_request.target_branch} - else diff --git a/app/views/projects/merge_requests/show/_how_to_merge.html.haml b/app/views/projects/merge_requests/show/_how_to_merge.html.haml index f18cf96c17..98f0357ce4 100644 --- a/app/views/projects/merge_requests/show/_how_to_merge.html.haml +++ b/app/views/projects/merge_requests/show/_how_to_merge.html.haml @@ -3,11 +3,12 @@ .modal-content .modal-header %a.close{href: "#", "data-dismiss" => "modal"} × - %h3 Check out, review and merge locally + %h3 Check out, review, and merge locally .modal-body %p - %strong Step 1. + %strong Step 1. Fetch and check out the branch for this merge request + = clipboard_button %pre.dark - if @merge_request.for_fork? :preserve @@ -24,6 +25,7 @@ %p %strong Step 3. Merge the branch and fix any conflicts that come up + = clipboard_button %pre.dark - if @merge_request.for_fork? :preserve @@ -36,6 +38,7 @@ %p %strong Step 4. Push the result of the merge to GitLab + = clipboard_button %pre.dark :preserve git push origin #{h @merge_request.target_branch} diff --git a/app/views/projects/merge_requests/widget/_heading.html.haml b/app/views/projects/merge_requests/widget/_heading.html.haml index 10efb81193..ba5ad22bca 100644 --- a/app/views/projects/merge_requests/widget/_heading.html.haml +++ b/app/views/projects/merge_requests/widget/_heading.html.haml @@ -1,4 +1,4 @@ -- ci_commit = @merge_request.source_project.ci_commit(@merge_request.source_sha) +- ci_commit = @merge_request.ci_commit - if ci_commit - status = ci_commit.status .mr-widget-heading @@ -38,6 +38,7 @@ = icon("times-circle") Could not connect to the CI server. Please check your settings and try again. - :coffeescript - $ -> - merge_request_widget.getCiStatus() + :javascript + $(function() { + merge_request_widget.getCiStatus(); + }); diff --git a/app/views/projects/merge_requests/widget/_merged.html.haml b/app/views/projects/merge_requests/widget/_merged.html.haml index f223f687de..a788fcea23 100644 --- a/app/views/projects/merge_requests/widget/_merged.html.haml +++ b/app/views/projects/merge_requests/widget/_merged.html.haml @@ -15,7 +15,7 @@ - elsif can_remove_branch?(@merge_request.source_project, @merge_request.source_branch) .remove_source_branch_widget - %p + %p = succeed '.' do The changes were merged into %span.label-branch= @merge_request.target_branch @@ -25,7 +25,7 @@ Remove Source Branch .remove_source_branch_widget.failed.hide - %p + %p Failed to remove source branch '#{@merge_request.source_branch}'. .remove_source_branch_in_progress.hide @@ -33,17 +33,20 @@ = icon('spinner spin') Removing source branch '#{@merge_request.source_branch}'. Please wait. This page will be automatically reload. - :coffeescript - $('.remove_source_branch').on 'click', -> - $('.remove_source_branch_widget').hide() - $('.remove_source_branch_in_progress').show() + :javascript + $('.remove_source_branch').on('click', function() { + $('.remove_source_branch_widget').hide(); + $('.remove_source_branch_in_progress').show(); + }); - $(".remove_source_branch").on "ajax:success", (e, data, status, xhr) -> - location.reload() + $(".remove_source_branch").on("ajax:success", function (e, data, status, xhr) { + location.reload(); + }); - $(".remove_source_branch").on "ajax:error", (e, data, status, xhr) -> - $('.remove_source_branch_widget').hide() - $('.remove_source_branch_in_progress').hide() - $('.remove_source_branch_widget.failed').show() + $(".remove_source_branch").on("ajax:error", function (e, data, status, xhr) { + $('.remove_source_branch_widget').hide(); + $('.remove_source_branch_in_progress').hide(); + $('.remove_source_branch_widget.failed').show(); + }); diff --git a/app/views/projects/merge_requests/widget/open/_accept.html.haml b/app/views/projects/merge_requests/widget/open/_accept.html.haml index 613525437a..9b31014b58 100644 --- a/app/views/projects/merge_requests/widget/open/_accept.html.haml +++ b/app/views/projects/merge_requests/widget/open/_accept.html.haml @@ -1,8 +1,10 @@ +- status_class = @merge_request.ci_commit ? " ci-#{@merge_request.ci_commit.status}" : nil + = form_for [:merge, @project.namespace.becomes(Namespace), @project, @merge_request], remote: true, method: :post, html: { class: 'accept-mr-form js-requires-input' } do |f| = hidden_field_tag :authenticity_token, form_authenticity_token .accept-merge-holder.clearfix.js-toggle-container .accept-action - = f.button class: "btn btn-create accept_merge_request" do + = f.button class: "btn btn-create accept_merge_request#{status_class}" do Accept Merge Request - if can_remove_branch?(@merge_request.source_project, @merge_request.source_branch) && !@merge_request.for_fork? .accept-control.checkbox @@ -18,8 +20,9 @@ text: @merge_request.merge_commit_message, rows: 14, hint: true - :coffeescript - $('.accept-mr-form').on 'ajax:before', -> - btn = $('.accept_merge_request') - btn.disable() - btn.html(" Merge in progress") + :javascript + $('.accept-mr-form').on('ajax:before', function() { + var btn = $('.accept_merge_request'); + btn.disable(); + btn.html(" Merge in progress"); + }); diff --git a/app/views/projects/merge_requests/widget/open/_check.html.haml b/app/views/projects/merge_requests/widget/open/_check.html.haml index b6b8974297..e16878ba51 100644 --- a/app/views/projects/merge_requests/widget/open/_check.html.haml +++ b/app/views/projects/merge_requests/widget/open/_check.html.haml @@ -2,6 +2,8 @@ = icon("spinner spin") Checking ability to merge automatically… -:coffeescript - $ -> - merge_request_widget.getMergeStatus() +:javascript + $(function() { + merge_request_widget.getMergeStatus(); + }); + diff --git a/app/views/projects/milestones/_form.html.haml b/app/views/projects/milestones/_form.html.haml index 255ddab479..24879b19d2 100644 --- a/app/views/projects/milestones/_form.html.haml +++ b/app/views/projects/milestones/_form.html.haml @@ -23,9 +23,7 @@ .col-sm-10 = render layout: 'projects/md_preview', locals: { preview_class: "md-preview" } do = render 'projects/zen', f: f, attr: :description, classes: 'description form-control js-quick-submit' - .hint - .pull-left Milestones are parsed with #{link_to "GitLab Flavored Markdown", help_page_path("markdown", "markdown"), target: '_blank'}. - .pull-left Attach files by dragging & dropping or #{link_to "selecting them", '#', class: 'markdown-selector' }. + = render 'projects/notes/hints' .clearfix .error-alert .col-md-6 @@ -45,7 +43,7 @@ :javascript - $( ".datepicker" ).datepicker({ + $(".datepicker").datepicker({ dateFormat: "yy-mm-dd", onSelect: function(dateText, inst) { $("#milestone_due_date").val(dateText) } }).datepicker("setDate", $.datepicker.parseDate('yy-mm-dd', $('#milestone_due_date').val())); diff --git a/app/views/projects/new.html.haml b/app/views/projects/new.html.haml index daab2326bc..c9d1fc3da2 100644 --- a/app/views/projects/new.html.haml +++ b/app/views/projects/new.html.haml @@ -23,7 +23,6 @@ = f.select :namespace_id, namespaces_options(params[:namespace_id] || :current_user), {}, {class: 'select2', tabindex: 2} - if import_sources_enabled? - .project-import.js-toggle-container .form-group %label.control-label Import project from @@ -82,19 +81,7 @@ %span Any repo by URL .js-toggle-content.hide - .form-group.import-url-data - = f.label :import_url, class: 'control-label' do - %span Git repository URL - .col-sm-10 - = f.text_field :import_url, class: 'form-control', placeholder: 'https://username:password@gitlab.company.com/group/project.git' - .well.prepend-top-20 - %ul - %li - The repository must be accessible over HTTP(S). If it is not publicly accessible, you can add authentication information to the URL: https://username:password@gitlab.company.com/group/project.git. - %li - The import will time out after 4 minutes. For big repositories, use a clone/push combination. - %li - To migrate an SVN repository, check out #{link_to "this document", "http://doc.gitlab.com/ce/workflow/importing/migrating_from_svn.html"}. + = render "shared/import_form", f: f .prepend-botton-10 @@ -124,9 +111,11 @@ Creating project & repository. %p Please wait a moment, this page will automatically refresh when ready. -:coffeescript - $('.how_to_import_link').bind 'click', (e) -> - e.preventDefault() - import_modal = $(this).next(".modal").show() - $('.modal-header .close').bind 'click', -> - $(".modal").hide() +:javascript + $('.how_to_import_link').bind('click', function (e) { + e.preventDefault(); + var import_modal = $(this).next(".modal").show(); + }); + $('.modal-header .close').bind('click', function() { + $(".modal").hide(); + }); diff --git a/app/views/projects/notes/_form.html.haml b/app/views/projects/notes/_form.html.haml index 13dfa0a1bb..5dd84317e3 100644 --- a/app/views/projects/notes/_form.html.haml +++ b/app/views/projects/notes/_form.html.haml @@ -1,5 +1,5 @@ = form_for [@project.namespace.becomes(Namespace), @project, @note], remote: true, html: { :'data-type' => 'json', multipart: true, id: nil, class: "new_note js-new-note-form common-note-form gfm-form" }, authenticity_token: true do |f| - = hidden_field_tag :view, params[:view] + = hidden_field_tag :view, diff_view = hidden_field_tag :line_type = note_target_fields(@note) = f.hidden_field :commit_id diff --git a/app/views/projects/notes/_note.html.haml b/app/views/projects/notes/_note.html.haml index 5d18473079..dd0abc8c74 100644 --- a/app/views/projects/notes/_note.html.haml +++ b/app/views/projects/notes/_note.html.haml @@ -2,7 +2,7 @@ .timeline-entry-inner .timeline-icon %a{href: user_path(note.author)} - %img.avatar.s40{src: avatar_icon(note.author), alt: ''} + = image_tag avatar_icon(note.author), alt: '', class: 'avatar s40' .timeline-content .note-header - if note_editable?(note) @@ -35,32 +35,11 @@ - if note.updated_by && note.updated_by != note.author by #{link_to_member(note.project, note.updated_by, avatar: false, author_class: nil)} - - if note.superceded?(@notes) - - if note.upvote? - %span.vote.upvote.label.label-gray.strikethrough - = icon('thumbs-up') - \+1 - - if note.downvote? - %span.vote.downvote.label.label-gray.strikethrough - = icon('thumbs-down') - \-1 - - else - - if note.upvote? - %span.vote.upvote.label.label-success - = icon('thumbs-up') - \+1 - - if note.downvote? - %span.vote.downvote.label.label-danger - = icon('thumbs-down') - \-1 - - .note-body{class: note_editable?(note) ? 'js-task-list-container' : ''} .note-text = preserve do = markdown(note.note, {no_header_anchors: true}) - - unless note.system? - -# System notes can't be edited + - if note_editable?(note) = render 'projects/notes/edit_form', note: note - if note.attachment.url diff --git a/app/views/projects/notes/_notes_with_form.html.haml b/app/views/projects/notes/_notes_with_form.html.haml index 04222b8f7c..99c1b0fa43 100644 --- a/app/views/projects/notes/_notes_with_form.html.haml +++ b/app/views/projects/notes/_notes_with_form.html.haml @@ -4,7 +4,7 @@ .js-main-target-form - if can? current_user, :create_note, @project - = render "projects/notes/form", view: params[:view] + = render "projects/notes/form", view: diff_view :javascript - new Notes("#{namespace_project_notes_path(namespace_id: @project.namespace, target_id: @noteable.id, target_type: @noteable.class.name.underscore)}", #{@notes.map(&:id).to_json}, #{Time.now.to_i}, "#{params[:view]}") + new Notes("#{namespace_project_notes_path(namespace_id: @project.namespace, target_id: @noteable.id, target_type: @noteable.class.name.underscore)}", #{@notes.map(&:id).to_json}, #{Time.now.to_i}, "#{diff_view}") diff --git a/app/views/projects/project_members/_project_member.html.haml b/app/views/projects/project_members/_project_member.html.haml index 76c46d1d80..f07cd97e63 100644 --- a/app/views/projects/project_members/_project_member.html.haml +++ b/app/views/projects/project_members/_project_member.html.haml @@ -24,18 +24,19 @@ = link_to member.created_by.name, user_path(member.created_by) = time_ago_with_tooltip(member.created_at) - - if current_user_can_admin_project + - if can?(current_user, :admin_project_member, @project) = link_to resend_invite_namespace_project_project_member_path(@project.namespace, @project, member), method: :post, class: "btn-xs btn", title: 'Resend invite' do Resend invite - - if current_user_can_admin_project - - unless @project.personal? && user == current_user - .pull-right - %strong= member.human_access + - if can?(current_user, :admin_project_member, @project) + .pull-right + %strong= member.human_access + - if can?(current_user, :update_project_member, member) = button_tag class: "btn-xs btn js-toggle-button", title: 'Edit access level', type: 'button' do %i.fa.fa-pencil-square-o + - if can?(current_user, :destroy_project_member, member)   - if current_user == user = link_to leave_namespace_project_project_members_path(@project.namespace, @project), data: { confirm: leave_project_message(@project) }, method: :delete, class: "btn-xs btn btn-remove", title: 'Leave project' do diff --git a/app/views/projects/project_members/_team.html.haml b/app/views/projects/project_members/_team.html.haml index 615c425e59..b807fb2cc9 100644 --- a/app/views/projects/project_members/_team.html.haml +++ b/app/views/projects/project_members/_team.html.haml @@ -1,5 +1,3 @@ -- can_admin_project = can?(current_user, :admin_project, @project) - .panel.panel-default.prepend-top-20 .panel-heading %strong #{@project.name} @@ -8,4 +6,4 @@ (#{members.count}) %ul.well-list - members.each do |project_member| - = render 'project_member', member: project_member, current_user_can_admin_project: can_admin_project + = render 'project_member', member: project_member diff --git a/app/views/projects/project_members/index.html.haml b/app/views/projects/project_members/index.html.haml index 82809bec5b..9fc4be583c 100644 --- a/app/views/projects/project_members/index.html.haml +++ b/app/views/projects/project_members/index.html.haml @@ -29,7 +29,8 @@ - if @group = render "group_members", members: @group_members -:coffeescript - $('form.member-search-form').on 'submit', (event) -> - event.preventDefault() - Turbolinks.visit @.action + '?' + $(@).serialize() +:javascript + $('form.member-search-form').on('submit', function (event) { + event.preventDefault(); + Turbolinks.visit(this.action + '?' + $(this).serialize()); + }); diff --git a/app/views/projects/project_members/update.js.haml b/app/views/projects/project_members/update.js.haml index 811b185882..2fb3a41d54 100644 --- a/app/views/projects/project_members/update.js.haml +++ b/app/views/projects/project_members/update.js.haml @@ -1,3 +1,2 @@ -- can_admin_project = can?(current_user, :admin_project, @project) :plain - $("##{dom_id(@project_member)}").replaceWith('#{escape_javascript(render("project_member", member: @project_member, current_user_can_admin_project: can_admin_project))}'); + $("##{dom_id(@project_member)}").replaceWith('#{escape_javascript(render("project_member", member: @project_member))}'); diff --git a/app/views/projects/protected_branches/_branches_list.html.haml b/app/views/projects/protected_branches/_branches_list.html.haml index bb49f4de87..f68449b186 100644 --- a/app/views/projects/protected_branches/_branches_list.html.haml +++ b/app/views/projects/protected_branches/_branches_list.html.haml @@ -1,34 +1,35 @@ - unless @branches.empty? %br %h4 Already Protected: - %table.table.protected-branches-list - %thead - %tr.no-border - %th Branch - %th Developers can push - %th Last commit - %th + .table-holder + %table.table.protected-branches-list + %thead + %tr.no-border + %th Branch + %th Developers can push + %th Last commit + %th - %tbody - - @branches.each do |branch| - - @url = namespace_project_protected_branch_path(@project.namespace, @project, branch) - %tr - %td - = link_to namespace_project_commits_path(@project.namespace, @project, branch.name) do - %strong= branch.name - - if @project.root_ref?(branch.name) - %span.label.label-info default + %tbody + - @branches.each do |branch| + - @url = namespace_project_protected_branch_path(@project.namespace, @project, branch) + %tr %td - = check_box_tag "developers_can_push", branch.id, branch.developers_can_push, "data-url" => @url - %td - - if commit = branch.commit - = link_to namespace_project_commit_path(@project.namespace, @project, commit.id), class: 'commit_short_id' do - = commit.short_id - · - #{time_ago_with_tooltip(commit.committed_date)} - - else - (branch was removed from repository) - %td - .pull-right - - if can? current_user, :admin_project, @project - = link_to 'Unprotect', [@project.namespace.becomes(Namespace), @project, branch], data: { confirm: 'Branch will be writable for developers. Are you sure?' }, method: :delete, class: "btn btn-remove btn-sm" + = link_to namespace_project_commits_path(@project.namespace, @project, branch.name) do + %strong= branch.name + - if @project.root_ref?(branch.name) + %span.label.label-info default + %td + = check_box_tag "developers_can_push", branch.id, branch.developers_can_push, "data-url" => @url + %td + - if commit = branch.commit + = link_to namespace_project_commit_path(@project.namespace, @project, commit.id), class: 'commit_short_id' do + = commit.short_id + · + #{time_ago_with_tooltip(commit.committed_date)} + - else + (branch was removed from repository) + %td + .pull-right + - if can? current_user, :admin_project, @project + = link_to 'Unprotect', [@project.namespace.becomes(Namespace), @project, branch], data: { confirm: 'Branch will be writable for developers. Are you sure?' }, method: :delete, class: "btn btn-remove btn-sm" diff --git a/app/views/projects/releases/edit.html.haml b/app/views/projects/releases/edit.html.haml new file mode 100644 index 0000000000..f516b65ecd --- /dev/null +++ b/app/views/projects/releases/edit.html.haml @@ -0,0 +1,19 @@ +- page_title "Edit", @tag.name, "Tags" += render "projects/commits/header_title" += render "projects/commits/head" + +.gray-content-block + .oneline + .title + Release notes for tag + %strong #{@tag.name} + +.prepend-top-default + = form_for(@release, method: :put, url: namespace_project_tag_release_path(@project.namespace, @project, @tag.name), html: { class: 'form-horizontal gfm-form release-form' }) do |f| + = render layout: 'projects/md_preview', locals: { preview_class: "md-preview", referenced_users: true } do + = render 'projects/zen', f: f, attr: :description, classes: 'description js-quick-submit form-control' + = render 'projects/notes/hints' + .error-alert + .prepend-top-default + = f.submit 'Save changes', class: 'btn btn-save' + = link_to "Cancel", namespace_project_tag_path(@project.namespace, @project, @tag.name), class: "btn btn-default btn-cancel" diff --git a/app/views/projects/remove_fork.js.haml b/app/views/projects/remove_fork.js.haml new file mode 100644 index 0000000000..17b9fecfeb --- /dev/null +++ b/app/views/projects/remove_fork.js.haml @@ -0,0 +1,2 @@ +:plain + location.href = "#{edit_namespace_project_path(@project.namespace, @project)}"; diff --git a/app/views/projects/runners/edit.html.haml b/app/views/projects/runners/edit.html.haml index 66851d3831..dde9e448cb 100644 --- a/app/views/projects/runners/edit.html.haml +++ b/app/views/projects/runners/edit.html.haml @@ -1,3 +1,5 @@ +- page_title "Edit", "#{@runner.description} ##{@runner.id}", "Runners" + %h4 Runner ##{@runner.id} %hr = form_for @runner, url: runner_path(@runner), html: { class: 'form-horizontal' } do |f| diff --git a/app/views/projects/runners/index.html.haml b/app/views/projects/runners/index.html.haml index 529fb9c296..315afe4a76 100644 --- a/app/views/projects/runners/index.html.haml +++ b/app/views/projects/runners/index.html.haml @@ -1,3 +1,4 @@ +- page_title "Runners" .light %p A 'runner' is a process which runs a build. diff --git a/app/views/projects/runners/show.html.haml b/app/views/projects/runners/show.html.haml index ffec495f85..5bf4c09ca2 100644 --- a/app/views/projects/runners/show.html.haml +++ b/app/views/projects/runners/show.html.haml @@ -1,64 +1,66 @@ -= content_for :title do - %h3.project-title - Runner ##{@runner.id} - .pull-right - - if @runner.shared? - %span.runner-state.runner-state-shared - Shared - - else - %span.runner-state.runner-state-specific - Specific +- page_title "#{@runner.description} ##{@runner.id}", "Runners" -%table.table - %thead +%h3.page-title + Runner ##{@runner.id} + .pull-right + - if @runner.shared? + %span.runner-state.runner-state-shared + Shared + - else + %span.runner-state.runner-state-specific + Specific + +.table-holder + %table.table + %thead + %tr + %th Property Name + %th Value %tr - %th Property Name - %th Value - %tr - %td - Tags - %td - - @runner.tag_list.each do |tag| - %span.label.label-primary - = tag - %tr - %td - Name - %td - = @runner.name - %tr - %td - Version - %td - = @runner.version - %tr - %td - Revision - %td - = @runner.revision - %tr - %td - Platform - %td - = @runner.platform - %tr - %td - Architecture - %td - = @runner.architecture - %tr - %td - Description - %td - = @runner.description - %tr - %td - Last contact - %td - - if @runner.contacted_at - #{time_ago_in_words(@runner.contacted_at)} ago - - else - Never + %td + Tags + %td + - @runner.tag_list.each do |tag| + %span.label.label-primary + = tag + %tr + %td + Name + %td + = @runner.name + %tr + %td + Version + %td + = @runner.version + %tr + %td + Revision + %td + = @runner.revision + %tr + %td + Platform + %td + = @runner.platform + %tr + %td + Architecture + %td + = @runner.architecture + %tr + %td + Description + %td + = @runner.description + %tr + %td + Last contact + %td + - if @runner.contacted_at + #{time_ago_in_words(@runner.contacted_at)} ago + - else + Never - + diff --git a/app/views/projects/services/index.html.haml b/app/views/projects/services/index.html.haml index 1065def693..c1356f6db0 100644 --- a/app/views/projects/services/index.html.haml +++ b/app/views/projects/services/index.html.haml @@ -2,22 +2,23 @@ %h3.page-title Project services %p.light Project services allow you to integrate GitLab with other applications -%table.table - %thead - %tr - %th - %th Service - %th Description - %th Last edit - - @services.sort_by(&:title).each do |service| - %tr - %td - = boolean_to_icon service.activated? - %td - = link_to edit_namespace_project_service_path(@project.namespace, @project, service.to_param) do - %strong= service.title - %td - = service.description - %td.light - = time_ago_in_words service.updated_at - ago +.table-holder + %table.table + %thead + %tr + %th + %th Service + %th Description + %th Last edit + - @services.sort_by(&:title).each do |service| + %tr + %td + = boolean_to_icon service.activated? + %td + = link_to edit_namespace_project_service_path(@project.namespace, @project, service.to_param) do + %strong= service.title + %td + = service.description + %td.light + = time_ago_in_words service.updated_at + ago diff --git a/app/views/projects/show.atom.builder b/app/views/projects/show.atom.builder index 242684e5c7..15c4976755 100644 --- a/app/views/projects/show.atom.builder +++ b/app/views/projects/show.atom.builder @@ -4,7 +4,7 @@ xml.feed "xmlns" => "http://www.w3.org/2005/Atom", "xmlns:media" => "http://sear xml.link href: namespace_project_url(@project.namespace, @project, format: :atom, private_token: current_user.try(:private_token)), rel: "self", type: "application/atom+xml" xml.link href: namespace_project_url(@project.namespace, @project), rel: "alternate", type: "text/html" xml.id namespace_project_url(@project.namespace, @project) - xml.updated @events.maximum(:updated_at).strftime("%Y-%m-%dT%H:%M:%SZ") if @events.any? + xml.updated @events.latest_update_time.strftime("%Y-%m-%dT%H:%M:%SZ") if @events.any? @events.each do |event| event_to_atom(xml, event) diff --git a/app/views/projects/show.html.haml b/app/views/projects/show.html.haml index e95d987d74..585caf674c 100644 --- a/app/views/projects/show.html.haml +++ b/app/views/projects/show.html.haml @@ -7,8 +7,7 @@ = render 'shared/no_ssh' = render 'shared/no_password' -- if prefer_readme? - = render 'projects/last_push' += render 'projects/last_push' = render "home_panel" @@ -28,7 +27,7 @@ = link_to project_files_path(@project) do = repository_size - - if !prefer_readme? && @repository.readme + - if default_project_view != 'readme' && @repository.readme %li = link_to 'Readme', readme_path(@project) @@ -64,14 +63,12 @@ = icon("exclamation-triangle fw") Archived project! Repository is read-only -%section - - if prefer_readme? - .project-show-readme - = render 'projects/readme' - - else - .project-show-activity - = render 'projects/activity' +- if @repository.commit + .content-block.second-block.white + = render 'projects/last_commit', commit: @repository.commit, project: @project +%div{class: "project-show-#{default_project_view}"} + = render default_project_view - if current_user - access = user_max_access_in_project(current_user, @project) diff --git a/app/views/projects/snippets/_actions.html.haml b/app/views/projects/snippets/_actions.html.haml new file mode 100644 index 0000000000..4a51546942 --- /dev/null +++ b/app/views/projects/snippets/_actions.html.haml @@ -0,0 +1,11 @@ += link_to new_namespace_project_snippet_path(@project.namespace, @project), class: 'btn btn-grouped new-snippet-link', title: "New Snippet" do + = icon('plus') + New Snippet +- if can?(current_user, :admin_project_snippet, @snippet) + = link_to namespace_project_snippet_path(@project.namespace, @project, @snippet), method: :delete, data: { confirm: "Are you sure?" }, class: "btn btn-grouped btn-remove", title: 'Delete Snippet' do + = icon('trash-o') + Delete +- if can?(current_user, :update_project_snippet, @snippet) + = link_to edit_namespace_project_snippet_path(@project.namespace, @project, @snippet), class: "btn btn-grouped snippable-edit" do + = icon('pencil-square-o') + Edit diff --git a/app/views/projects/snippets/index.html.haml b/app/views/projects/snippets/index.html.haml index 3fed2c9949..4af963e14d 100644 --- a/app/views/projects/snippets/index.html.haml +++ b/app/views/projects/snippets/index.html.haml @@ -1,17 +1,13 @@ - page_title "Snippets" = render "header_title" -%h3.page-title - Snippets - - if can? current_user, :create_project_snippet, @project - = link_to new_namespace_project_snippet_path(@project.namespace, @project), class: "btn btn-new pull-right", title: "New Snippet" do - Add new snippet +.gray-content-block.top-block + .pull-right + = link_to new_namespace_project_snippet_path(@project.namespace, @project), class: "btn btn-new", title: "New Snippet" do + = icon('plus') + New Snippet -%p.light - Share code pastes with others out of git repository + .oneline + Share code pastes with others out of git repository -%ul.bordered-list - = render partial: "shared/snippets/snippet", collection: @snippets - - if @snippets.empty? - %li - .nothing-here-block Nothing here. += render 'snippets/snippets' diff --git a/app/views/projects/snippets/show.html.haml b/app/views/projects/snippets/show.html.haml index be7d4d486f..5d706942f2 100644 --- a/app/views/projects/snippets/show.html.haml +++ b/app/views/projects/snippets/show.html.haml @@ -1,40 +1,18 @@ - page_title @snippet.title, "Snippets" = render "header_title" -%h3.page-title - = @snippet.title +.snippet-holder + = render 'shared/snippets/header' - .pull-right - = link_to new_namespace_project_snippet_path(@project.namespace, @project), class: "btn btn-new", title: "New Snippet" do - Add new snippet + %article.file-holder + .file-title + = blob_icon 0, @snippet.file_name + %strong + = @snippet.file_name + .file-actions.hidden-xs + .btn-group.tree-btn-group + = link_to 'Raw', raw_namespace_project_snippet_path(@project.namespace, @project, @snippet), class: "btn btn-sm", target: "_blank" -%hr + = render 'shared/snippets/blob' -.append-bottom-20 - .pull-right - = "##{@snippet.id}" - %span.light - by - = link_to user_path(@snippet.author) do - = image_tag avatar_icon(@snippet.author_email), class: "avatar avatar-inline s16" - = @snippet.author_name - - .back-link - = link_to namespace_project_snippets_path(@project.namespace, @project) do - ← project snippets - -.file-holder - .file-title - %i.fa.fa-file - %strong - = @snippet.file_name - .file-actions - .btn-group - - if can?(current_user, :update_project_snippet, @snippet) - = link_to "edit", edit_namespace_project_snippet_path(@project.namespace, @project, @snippet), class: "btn btn-sm", title: 'Edit Snippet' - = link_to "raw", raw_namespace_project_snippet_path(@project.namespace, @project, @snippet), class: "btn btn-sm", target: "_blank" - - if can?(current_user, :admin_project_snippet, @snippet) - = link_to "remove", namespace_project_snippet_path(@project.namespace, @project, @snippet), method: :delete, data: { confirm: "Are you sure?" }, class: "btn btn-sm btn-remove", title: 'Delete Snippet' - = render 'shared/snippets/blob' - -%div#notes= render "projects/notes/notes_with_form" + %div#notes= render "projects/notes/notes_with_form" diff --git a/app/views/projects/tags/_download.html.haml b/app/views/projects/tags/_download.html.haml new file mode 100644 index 0000000000..667057ef2d --- /dev/null +++ b/app/views/projects/tags/_download.html.haml @@ -0,0 +1,17 @@ +%span.btn-group.btn-grouped + = link_to archive_namespace_project_repository_path(project.namespace, project, ref: ref, format: 'zip'), class: 'btn btn-default', rel: 'nofollow' do + %i.fa.fa-download + %span source code + %a.btn.btn-default.dropdown-toggle{ 'data-toggle' => 'dropdown' } + %span.caret + %span.sr-only + Select Archive Format + %ul.col-xs-10.dropdown-menu{ role: 'menu' } + %li + = link_to archive_namespace_project_repository_path(project.namespace, project, ref: ref, format: 'zip'), rel: 'nofollow' do + %i.fa.fa-download + %span Download zip + %li + = link_to archive_namespace_project_repository_path(project.namespace, project, ref: ref, format: 'tar.gz'), rel: 'nofollow' do + %i.fa.fa-download + %span Download tar.gz diff --git a/app/views/projects/tags/_tag.html.haml b/app/views/projects/tags/_tag.html.haml index 2ca295fc5f..e2c5178185 100644 --- a/app/views/projects/tags/_tag.html.haml +++ b/app/views/projects/tags/_tag.html.haml @@ -1,22 +1,28 @@ - commit = @repository.commit(tag.target) +- release = @releases.find { |release| release.tag == tag.name } %li %div - = link_to namespace_project_commits_path(@project.namespace, @project, tag.name), class: "" do + = link_to namespace_project_tag_path(@project.namespace, @project, tag.name) do %strong - %i.fa.fa-tag + = icon('tag') = tag.name - if tag.message.present?   = strip_gpg_signature(tag.message) + .controls + = link_to edit_namespace_project_tag_release_path(@project.namespace, @project, tag.name), class: 'btn-grouped btn' do + = icon("pencil") - if can? current_user, :download_code, @project - = render 'projects/repositories/download_archive', ref: tag.name, btn_class: 'btn-grouped btn-group-xs' - - if can?(current_user, :admin_project, @project) - = link_to namespace_project_tag_path(@project.namespace, @project, tag.name), class: 'btn btn-xs btn-remove remove-row grouped', method: :delete, data: { confirm: 'Removed tag cannot be restored. Are you sure?'}, remote: true do - %i.fa.fa-trash-o + = render 'projects/tags/download', ref: tag.name, project: @project - if commit = render 'projects/branches/commit', commit: commit, project: @project - else %p Cant find HEAD commit for this tag + - if release && release.description.present? + .description.prepend-top-default + .wiki + = preserve do + = markdown release.description diff --git a/app/views/projects/tags/destroy.js.haml b/app/views/projects/tags/destroy.js.haml deleted file mode 100644 index ada6710f94..0000000000 --- a/app/views/projects/tags/destroy.js.haml +++ /dev/null @@ -1,3 +0,0 @@ -$('.js-totaltags-count').html("#{@repository.tags.size}") -- if @repository.tags.size == 0 - $('.tags').load(document.URL + ' .nothing-here-block').hide().fadeIn(1000) diff --git a/app/views/projects/tags/new.html.haml b/app/views/projects/tags/new.html.haml index 9f5c1be125..86aa15dc5b 100644 --- a/app/views/projects/tags/new.html.haml +++ b/app/views/projects/tags/new.html.haml @@ -5,10 +5,12 @@ .alert.alert-danger %button{ type: "button", class: "close", "data-dismiss" => "alert"} × = @error + %h3.page-title - %i.fa.fa-code-fork - New tag -= form_tag namespace_project_tags_path, method: :post, id: "new-tag-form", class: "form-horizontal" do + New git tag +%hr + += form_tag namespace_project_tags_path, method: :post, id: "new-tag-form", class: "form-horizontal gfm-form tag-form" do .form-group = label_tag :tag_name, 'Name for new tag', class: 'control-label' .col-sm-10 @@ -17,12 +19,20 @@ = label_tag :ref, 'Create from', class: 'control-label' .col-sm-10 = text_field_tag :ref, params[:ref], placeholder: 'master', required: true, tabindex: 2, class: 'form-control' - .light Branch name or commit SHA + .help-block Branch name or commit SHA .form-group = label_tag :message, 'Message', class: 'control-label' .col-sm-10 = text_field_tag :message, nil, placeholder: 'Enter message.', required: false, tabindex: 3, class: 'form-control' - .light (Optional) Entering a message will create an annotated tag. + .help-block (Optional) Entering a message will create an annotated tag. + %hr + .form-group + = label_tag :release_description, 'Release notes', class: 'control-label' + .col-sm-10 + = render layout: 'projects/md_preview', locals: { preview_class: "md-preview", referenced_users: true } do + = render 'projects/zen', attr: :release_description, classes: 'description js-quick-submit form-control' + = render 'projects/notes/hints' + .help-block (Optional) You can add release notes to your tag. It will be stored in the GitLab database and shown on the tags page .form-actions = button_tag 'Create tag', class: 'btn btn-create', tabindex: 3 = link_to 'Cancel', namespace_project_tags_path(@project.namespace, @project), class: 'btn btn-cancel' diff --git a/app/views/projects/tags/show.html.haml b/app/views/projects/tags/show.html.haml new file mode 100644 index 0000000000..ebe3718afc --- /dev/null +++ b/app/views/projects/tags/show.html.haml @@ -0,0 +1,39 @@ +- page_title @tag.name, "Tags" += render "projects/commits/header_title" += render "projects/commits/head" + +.gray-content-block + .pull-right + - if can?(current_user, :push_code, @project) + = link_to edit_namespace_project_tag_release_path(@project.namespace, @project, @tag.name), class: 'btn-grouped btn', title: 'Edit release notes' do + = icon("pencil") + = link_to namespace_project_tree_path(@project.namespace, @project, @tag.name), class: 'btn btn-grouped', title: 'Browse source code' do + = icon('files-o') + = link_to namespace_project_commits_path(@project.namespace, @project, @tag.name), class: 'btn btn-grouped', title: 'Browse commits' do + = icon('history') + - if can? current_user, :download_code, @project + = render 'projects/tags/download', ref: @tag.name, project: @project + - if can?(current_user, :admin_project, @project) + .pull-right + = link_to namespace_project_tag_path(@project.namespace, @project, @tag.name), class: 'btn btn-remove remove-row grouped', method: :delete, data: { confirm: 'Removed tag cannot be restored. Are you sure?'} do + %i.fa.fa-trash-o + .title + %strong= @tag.name + - if @tag.message.present? + %span.light +   + = strip_gpg_signature(@tag.message) + - if @commit + = render 'projects/branches/commit', commit: @commit, project: @project + - else + Cant find HEAD commit for this tag + + +.append-bottom-default.prepend-top-default + - if @release.description.present? + .description + .wiki + = preserve do + = markdown @release.description + - else + This tag has no release notes. diff --git a/app/views/projects/tree/_blob_item.html.haml b/app/views/projects/tree/_blob_item.html.haml index 02ecbade21..2ddc5d504f 100644 --- a/app/views/projects/tree/_blob_item.html.haml +++ b/app/views/projects/tree/_blob_item.html.haml @@ -4,5 +4,5 @@ %span.str-truncated = link_to blob_item.name, namespace_project_blob_path(@project.namespace, @project, tree_join(@id || @commit.id, blob_item.name)) %td.tree_time_ago.cgray - = render 'spinner' + = render 'projects/tree/spinner' %td.hidden-xs.tree_commit diff --git a/app/views/projects/tree/_readme.html.haml b/app/views/projects/tree/_readme.html.haml index 7e9af19c8b..3c5edf4b03 100644 --- a/app/views/projects/tree/_readme.html.haml +++ b/app/views/projects/tree/_readme.html.haml @@ -1,8 +1,8 @@ -%article.file-holder.readme-holder#README +%article.file-holder.readme-holder .file-title - = link_to '#README' do + = blob_icon readme.mode, readme.name + = link_to namespace_project_blob_path(@project.namespace, @project, tree_join(@repository.root_ref, readme.name)) do %strong - %i.fa.fa-file = readme.name .file-content.wiki = render_readme(readme) diff --git a/app/views/projects/tree/_tree.html.haml b/app/views/projects/tree/_tree.html.haml deleted file mode 100644 index 7ff48e32e6..0000000000 --- a/app/views/projects/tree/_tree.html.haml +++ /dev/null @@ -1,73 +0,0 @@ -.gray-content-block - %ul.breadcrumb.repo-breadcrumb - %li - = link_to namespace_project_tree_path(@project.namespace, @project, @ref) do - = @project.path - - tree_breadcrumbs(tree, 6) do |title, path| - %li - - if path - = link_to truncate(title, length: 40), namespace_project_tree_path(@project.namespace, @project, path) - - else - = link_to title, '#' - - if allowed_tree_edit? - %li - %span.dropdown - %a.dropdown-toggle.btn.add-to-tree{href: '#', "data-toggle" => "dropdown"} - = icon('plus') - %ul.dropdown-menu - %li - = link_to namespace_project_new_blob_path(@project.namespace, @project, @id), title: 'Create file', id: 'new-file-link' do - = icon('pencil fw') - Create file - %li - = link_to '#modal-upload-blob', { 'data-target' => '#modal-upload-blob', 'data-toggle' => 'modal'} do - = icon('file fw') - Upload file - %li.divider - %li - = link_to '#modal-create-new-dir', { 'data-target' => '#modal-create-new-dir', 'data-toggle' => 'modal'} do - = icon('folder fw') - New directory - -%div#tree-content-holder.tree-content-holder - .tree-table-holder - %table.table#tree-slider{class: "table_#{@hex_path} tree-table table-striped" } - %thead - %tr - %th Name - %th Last Update - %th.hidden-xs - .pull-left Last Commit - .last-commit.hidden-sm.pull-left -   - %i.fa.fa-angle-right -   - %small.light - = link_to @commit.short_id, namespace_project_commit_path(@project.namespace, @project, @commit) - – - = truncate(@commit.title, length: 50) - = link_to 'History', namespace_project_commits_path(@project.namespace, @project, @id), class: 'pull-right' - - - if @path.present? - %tr.tree-item - %td.tree-item-file-name - = link_to "..", namespace_project_tree_path(@project.namespace, @project, up_dir_path), class: 'prepend-left-10' - %td - %td.hidden-xs - - = render_tree(tree) - - - if tree.readme - = render "projects/tree/readme", readme: tree.readme - -%div.tree_progress - -- if allowed_tree_edit? - = render 'projects/blob/upload', title: 'Upload', placeholder: 'Upload new file', button_title: 'Upload file', form_path: namespace_project_create_blob_path(@project.namespace, @project, @id), method: :post - = render 'projects/blob/new_dir' - -:javascript - // Load last commit log for each file in tree - $('#tree-slider').waitForImages(function() { - ajaxGet("#{escape_javascript(@logs_path)}"); - }); diff --git a/app/views/projects/tree/_tree_content.html.haml b/app/views/projects/tree/_tree_content.html.haml new file mode 100644 index 0000000000..c64e684df2 --- /dev/null +++ b/app/views/projects/tree/_tree_content.html.haml @@ -0,0 +1,40 @@ +%div.tree-content-holder + .table-holder + %table.table#tree-slider{class: "table_#{@hex_path} tree-table table-striped" } + %thead + %tr + %th Name + %th Last Update + %th.hidden-xs + .pull-left Last Commit + .last-commit.hidden-sm.pull-left +   + %i.fa.fa-angle-right +   + %small.light + = link_to @commit.short_id, namespace_project_commit_path(@project.namespace, @project, @commit) + – + = truncate(@commit.title, length: 50) + = link_to 'History', namespace_project_commits_path(@project.namespace, @project, @id), class: 'pull-right' + + - if @path.present? + %tr.tree-item + %td.tree-item-file-name + = link_to "..", namespace_project_tree_path(@project.namespace, @project, up_dir_path), class: 'prepend-left-10' + %td + %td.hidden-xs + + = render_tree(tree) + + - if tree.readme + = render "projects/tree/readme", readme: tree.readme + +- if allowed_tree_edit? + = render 'projects/blob/upload', title: 'Upload New File', placeholder: 'Upload new file', button_title: 'Upload file', form_path: namespace_project_create_blob_path(@project.namespace, @project, @id), method: :post + = render 'projects/blob/new_dir' + +:javascript + // Load last commit log for each file in tree + $('#tree-slider').waitForImages(function() { + ajaxGet("#{escape_javascript(@logs_path)}"); + }); diff --git a/app/views/projects/tree/_tree_header.html.haml b/app/views/projects/tree/_tree_header.html.haml new file mode 100644 index 0000000000..1115ca6b4c --- /dev/null +++ b/app/views/projects/tree/_tree_header.html.haml @@ -0,0 +1,32 @@ +.tree-ref-holder + = render 'shared/ref_switcher', destination: 'tree', path: @path + +%ul.breadcrumb.repo-breadcrumb + %li + = link_to namespace_project_tree_path(@project.namespace, @project, @ref) do + = @project.path + - tree_breadcrumbs(tree, 6) do |title, path| + %li + - if path + = link_to truncate(title, length: 40), namespace_project_tree_path(@project.namespace, @project, path) + - else + = link_to title, '#' + - if allowed_tree_edit? + %li + %span.dropdown + %a.dropdown-toggle.btn.add-to-tree{href: '#', "data-toggle" => "dropdown"} + = icon('plus') + %ul.dropdown-menu + %li + = link_to namespace_project_new_blob_path(@project.namespace, @project, @id), title: 'Create file', id: 'new-file-link' do + = icon('pencil fw') + Create file + %li + = link_to '#modal-upload-blob', { 'data-target' => '#modal-upload-blob', 'data-toggle' => 'modal'} do + = icon('file fw') + Upload file + %li.divider + %li + = link_to '#modal-create-new-dir', { 'data-target' => '#modal-create-new-dir', 'data-toggle' => 'modal'} do + = icon('folder fw') + New directory diff --git a/app/views/projects/tree/_tree_item.html.haml b/app/views/projects/tree/_tree_item.html.haml index e87138bf98..cf65057e70 100644 --- a/app/views/projects/tree/_tree_item.html.haml +++ b/app/views/projects/tree/_tree_item.html.haml @@ -5,5 +5,5 @@ - path = flatten_tree(tree_item) = link_to path, namespace_project_tree_path(@project.namespace, @project, tree_join(@id || @commit.id, path)) %td.tree_time_ago.cgray - = render 'spinner' + = render 'projects/tree/spinner' %td.hidden-xs.tree_commit diff --git a/app/views/projects/tree/show.html.haml b/app/views/projects/tree/show.html.haml index dec4677f83..ec14bd7f65 100644 --- a/app/views/projects/tree/show.html.haml +++ b/app/views/projects/tree/show.html.haml @@ -6,12 +6,12 @@ = render 'projects/last_push' -.tree-ref-holder - = render 'shared/ref_switcher', destination: 'tree', path: @path - - if can? current_user, :download_code, @project .tree-download-holder = render 'projects/repositories/download_archive', ref: @ref, btn_class: 'btn-group pull-right hidden-xs hidden-sm', split_button: true #tree-holder.tree-holder.clearfix - = render "tree", tree: @tree + .gray-content-block.top-block + = render 'projects/tree/tree_header', tree: @tree + + = render 'projects/tree/tree_content', tree: @tree diff --git a/app/views/projects/triggers/index.html.haml b/app/views/projects/triggers/index.html.haml index 17dcb78e25..b3ad79a200 100644 --- a/app/views/projects/triggers/index.html.haml +++ b/app/views/projects/triggers/index.html.haml @@ -1,3 +1,4 @@ +- page_title "Triggers" %h3.page-title Triggers @@ -7,12 +8,13 @@ %hr.clearfix -if @triggers.any? - %table.table - %thead - %th Token - %th Last used - %th - = render partial: 'trigger', collection: @triggers, as: :trigger + .table-holder + %table.table + %thead + %th Token + %th Last used + %th + = render partial: 'trigger', collection: @triggers, as: :trigger - else %h4 No triggers diff --git a/app/views/projects/variables/show.html.haml b/app/views/projects/variables/show.html.haml index 29416a94ff..e052da1ac4 100644 --- a/app/views/projects/variables/show.html.haml +++ b/app/views/projects/variables/show.html.haml @@ -1,3 +1,4 @@ +- page_title "Variables" %h3.page-title Secret Variables diff --git a/app/views/projects/wikis/_form.html.haml b/app/views/projects/wikis/_form.html.haml index 261d4a92d7..9c94c43e74 100644 --- a/app/views/projects/wikis/_form.html.haml +++ b/app/views/projects/wikis/_form.html.haml @@ -23,9 +23,7 @@ .col-sm-10 = render layout: 'projects/md_preview', locals: { preview_class: "md-preview" } do = render 'projects/zen', f: f, attr: :content, classes: 'description form-control js-quick-submit' - .col-sm-12.hint - .pull-left Wiki content is parsed with #{link_to "GitLab Flavored Markdown", help_page_path("markdown", "markdown"), target: '_blank'} - .pull-right Attach files by dragging & dropping or #{link_to "selecting them", '#', class: 'markdown-selector' }. + = render 'projects/notes/hints' .clearfix .error-alert diff --git a/app/views/projects/wikis/history.html.haml b/app/views/projects/wikis/history.html.haml index bfbef823b3..4322146ce3 100644 --- a/app/views/projects/wikis/history.html.haml +++ b/app/views/projects/wikis/history.html.haml @@ -7,28 +7,29 @@ %span.light History for = link_to @page.title, namespace_project_wiki_path(@project.namespace, @project, @page) -%table.table - %thead - %tr - %th Page version - %th Author - %th Commit Message - %th Last updated - %th Format - %tbody - - @page.versions.each_with_index do |version, index| - - commit = version +.table-holder + %table.table + %thead %tr - %td - = link_to project_wiki_path_with_version(@project, @page, - commit.id, index == 0) do - = truncate_sha(commit.id) - %td - = commit.author.name - %td - = commit.message - %td - #{time_ago_with_tooltip(version.authored_date)} - %td - %strong - = @page.page.wiki.page(@page.page.name, commit.id).try(:format) + %th Page version + %th Author + %th Commit Message + %th Last updated + %th Format + %tbody + - @page.versions.each_with_index do |version, index| + - commit = version + %tr + %td + = link_to project_wiki_path_with_version(@project, @page, + commit.id, index == 0) do + = truncate_sha(commit.id) + %td + = commit.author.name + %td + = commit.message + %td + #{time_ago_with_tooltip(version.authored_date)} + %td + %strong + = @page.page.wiki.page(@page.page.name, commit.id).try(:format) diff --git a/app/views/search/_category.html.haml b/app/views/search/_category.html.haml index d637abfa76..481451edb2 100644 --- a/app/views/search/_category.html.haml +++ b/app/views/search/_category.html.haml @@ -42,6 +42,13 @@ Wiki %span.badge = @search_results.wiki_blobs_count + %li{class: ("active" if @scope == 'commits')} + = link_to search_filter_path(scope: 'commits') do + = icon('history fw') + %span + Commits + %span.badge + = @search_results.commits_count - elsif @show_snippets %li{class: ("active" if @scope == 'snippet_blobs')} diff --git a/app/views/search/results/_commit.html.haml b/app/views/search/results/_commit.html.haml new file mode 100644 index 0000000000..4e6c3965dc --- /dev/null +++ b/app/views/search/results/_commit.html.haml @@ -0,0 +1,2 @@ +.search-result-row + = render 'projects/commits/commit', project: @project, commit: commit diff --git a/app/views/shared/_clone_panel.html.haml b/app/views/shared/_clone_panel.html.haml index 2e4aab3630..8bcb24ae9d 100644 --- a/app/views/shared/_clone_panel.html.haml +++ b/app/views/shared/_clone_panel.html.haml @@ -21,7 +21,6 @@ = gitlab_config.protocol.upcase = text_field_tag :project_clone, default_url_to_repo(project), class: "js-select-on-focus form-control", readonly: true - if project.kind_of?(Project) - .input-group-addon - .visibility-level-label.has_tooltip{'data-title' => "#{visibility_level_label(project.visibility_level)} project" } + .input-group-addon.has_tooltip{title: "#{visibility_level_label(project.visibility_level)} project", data: { container: "body" } } + .visibility-level-label = visibility_level_icon(project.visibility_level) - diff --git a/app/views/shared/_commit_message_container.html.haml b/app/views/shared/_commit_message_container.html.haml index cc3f1268f8..7c57924277 100644 --- a/app/views/shared/_commit_message_container.html.haml +++ b/app/views/shared/_commit_message_container.html.haml @@ -1,13 +1,15 @@ .form-group.commit_message-group - = label_tag 'commit_message', class: 'control-label' do + - nonce = SecureRandom.hex + = label_tag "commit_message-#{nonce}", class: 'control-label' do Commit message .col-sm-10 .commit-message-container .max-width-marker = text_area_tag 'commit_message', (params[:commit_message] || local_assigns[:text]), - class: 'form-control js-quick-submit', placeholder: local_assigns[:placeholder], - required: true, rows: (local_assigns[:rows] || 3) + class: 'form-control js-commit-message js-quick-submit', placeholder: local_assigns[:placeholder], + required: true, rows: (local_assigns[:rows] || 3), + id: "commit_message-#{nonce}" - if local_assigns[:hint] %p.hint Try to keep the first line under 52 characters diff --git a/app/views/shared/_import_form.html.haml b/app/views/shared/_import_form.html.haml new file mode 100644 index 0000000000..285af56ad7 --- /dev/null +++ b/app/views/shared/_import_form.html.haml @@ -0,0 +1,16 @@ +.form-group.import-url-data + = f.label :import_url, class: 'control-label' do + %span Git repository URL + .col-sm-10 + = f.text_field :import_url, class: 'form-control', placeholder: 'https://username:password@gitlab.company.com/group/project.git' + + .well.prepend-top-20 + %ul + %li + The repository must be accessible over http://, https:// or git://. + %li + If your HTTP repository is not publicly accessible, add authentication information to the URL: https://username:password@gitlab.company.com/group/project.git. + %li + The import will time out after 4 minutes. For big repositories, use a clone/push combination. + %li + To migrate an SVN repository, check out #{link_to "this document", "http://doc.gitlab.com/ce/workflow/importing/migrating_from_svn.html"}. diff --git a/app/views/shared/_new_commit_form.html.haml b/app/views/shared/_new_commit_form.html.haml new file mode 100644 index 0000000000..8636341c60 --- /dev/null +++ b/app/views/shared/_new_commit_form.html.haml @@ -0,0 +1,18 @@ += render 'shared/commit_message_container', placeholder: placeholder + +- unless @project.empty_repo? + .form-group.branch + = label_tag 'branch', class: 'control-label' do + Branch + .col-sm-10 + = text_field_tag 'new_branch', @new_branch || @ref, class: "form-control js-new-branch" + + .form-group.js-create-merge-request-form-group + .col-sm-offset-2.col-sm-10 + .checkbox + - nonce = SecureRandom.hex + = label_tag "create_merge_request-#{nonce}" do + = check_box_tag 'create_merge_request', 1, true, class: 'js-create-merge-request', id: "create_merge_request-#{nonce}" + Start a new merge request with this commit + + = hidden_field_tag 'original_branch', @ref, class: 'js-original-branch' diff --git a/app/views/shared/issuable/_context.html.haml b/app/views/shared/issuable/_context.html.haml index cba18c1456..be66256c7b 100644 --- a/app/views/shared/issuable/_context.html.haml +++ b/app/views/shared/issuable/_context.html.haml @@ -45,6 +45,6 @@ .description-block.subscribed{class: ( 'hidden' unless subscribed )} You're receiving notifications because you're subscribed to this thread. -:coffeescript - new Subscription("#{toggle_subscription_path(issuable)}") - new IssuableContext() +:javascript + new Subscription("#{toggle_subscription_path(issuable)}"); + new IssuableContext(); diff --git a/app/views/shared/issuable/_filter.html.haml b/app/views/shared/issuable/_filter.html.haml index 0e4e9c0987..d1231438ee 100644 --- a/app/views/shared/issuable/_filter.html.haml +++ b/app/views/shared/issuable/_filter.html.haml @@ -60,9 +60,9 @@ = hidden_field_tag :state_event, params[:state_event] = button_tag "Update issues", class: "btn update_selected_issues btn-save" -:coffeescript - new UsersSelect() - - $('form.filter-form').on 'submit', (event) -> - event.preventDefault() - Turbolinks.visit @.action + '&' + $(@).serialize() +:javascript + new UsersSelect(); + $('form.filter-form').on('submit', function (event) { + event.preventDefault(); + Turbolinks.visit(this.action + '&' + $(this).serialize()); + }); diff --git a/app/views/shared/issuable/_form.html.haml b/app/views/shared/issuable/_form.html.haml index 594e54f404..0fc74d7d2b 100644 --- a/app/views/shared/issuable/_form.html.haml +++ b/app/views/shared/issuable/_form.html.haml @@ -27,14 +27,7 @@ = render layout: 'projects/md_preview', locals: { preview_class: "md-preview", referenced_users: true } do = render 'projects/zen', f: f, attr: :description, classes: 'description form-control js-quick-submit' - .col-sm-12.hint - .pull-left - Parsed with - #{link_to 'GitLab Flavored Markdown', help_page_path('markdown', 'markdown'), target: '_blank'}. - .pull-right - Attach files by dragging & dropping - or #{link_to 'selecting them', '#', class: 'markdown-selector' }. - + = render 'projects/notes/hints' .clearfix .error-alert %hr diff --git a/app/views/shared/projects/_list.html.haml b/app/views/shared/projects/_list.html.haml index 357cfd6a37..e5ffe1e29a 100644 --- a/app/views/shared/projects/_list.html.haml +++ b/app/views/shared/projects/_list.html.haml @@ -17,5 +17,5 @@ = link_to '#', class: 'js-expand' do Show all -:coffeescript - new ProjectsList() +:javascript + new ProjectsList(); diff --git a/app/views/shared/projects/_project.html.haml b/app/views/shared/projects/_project.html.haml index aee839b44e..c36995b94d 100644 --- a/app/views/shared/projects/_project.html.haml +++ b/app/views/shared/projects/_project.html.haml @@ -21,9 +21,7 @@ .project-controls - if ci && !project.empty_repo? && project.commit - if ci_commit = project.ci_commit(project.commit.sha) - = link_to ci_status_path(ci_commit), class: "c#{ci_status_color(ci_commit)}", - title: "Build status: #{ci_commit.status}", data: {toggle: 'tooltip', placement: 'left'} do - = ci_status_icon(ci_commit) + = render_ci_status(ci_commit)   - if stars %span diff --git a/app/views/shared/snippets/_header.html.haml b/app/views/shared/snippets/_header.html.haml new file mode 100644 index 0000000000..0a4a790ec5 --- /dev/null +++ b/app/views/shared/snippets/_header.html.haml @@ -0,0 +1,24 @@ +.snippet-details + .page-title + .snippet-box{class: visibility_level_color(@snippet.visibility_level)} + = visibility_level_icon(@snippet.visibility_level) + = visibility_level_label(@snippet.visibility_level) + %span.snippet-id Snippet ##{@snippet.id} + %span.creator + · created by #{link_to_member(@project, @snippet.author, size: 24)} + · + = time_ago_with_tooltip(@snippet.created_at, placement: 'bottom', html_class: 'snippet_updated_ago') + - if @snippet.updated_at != @snippet.created_at + %span + · + = icon('edit', title: 'edited') + = time_ago_with_tooltip(@snippet.updated_at, placement: 'bottom', html_class: 'snippet_edited_ago') + + .pull-right + - if @snippet.project_id? + = render "projects/snippets/actions" + - else + = render "snippets/actions" + .gray-content-block.middle-block + %h2.snippet-title + = gfm escape_once(@snippet.title) diff --git a/app/views/shared/snippets/_snippet.html.haml b/app/views/shared/snippets/_snippet.html.haml index 69a713ad9a..c6294caddc 100644 --- a/app/views/shared/snippets/_snippet.html.haml +++ b/app/views/shared/snippets/_snippet.html.haml @@ -18,4 +18,3 @@ = image_tag avatar_icon(snippet.author_email), class: "avatar s24", alt: '' = snippet.author_name authored #{time_ago_with_tooltip(snippet.created_at)} - diff --git a/app/views/sherlock/file_samples/show.html.haml b/app/views/sherlock/file_samples/show.html.haml new file mode 100644 index 0000000000..cfd11e45b6 --- /dev/null +++ b/app/views/sherlock/file_samples/show.html.haml @@ -0,0 +1,55 @@ +- page_title t('sherlock.title'), t('sherlock.transaction'), + t('sherlock.file_sample') + +- header_title t('sherlock.title'), sherlock_transactions_path + +.gray-content-block + .pull-right + = link_to(sherlock_transaction_path(@transaction), class: 'btn') do + %i.fa.fa-arrow-left + = t('sherlock.transaction') + .oneline + = t('sherlock.file_sample') + = @file_sample.id + +.prepend-top-default + %p + %span.light + #{t('sherlock.time')}: + %strong + = @file_sample.duration.round(2) + = t('sherlock.milliseconds') + %p + %span.light + #{t('sherlock.events')}: + %strong + = @file_sample.events + +%article.file-holder + .file-title + %i.fa.fa-file-text-o.fa-fw + %strong + = @file_sample.file + .code.file-content.js-syntax-highlight + .line-numbers + %table.sherlock-line-samples-table + %thead + %tr + %th= t('sherlock.line_capitalized') + %th= t('sherlock.events') + %th= t('sherlock.time') + %th= t('sherlock.percent') + %tbody + - @file_sample.line_samples.each_with_index do |sample, index| + %tr{class: sample.majority_of?(@file_sample.duration) ? 'slow' : ''} + %td= index + 1 + %td= sample.events + %td + = sample.duration.round(2) + = t('sherlock.milliseconds') + %td + = sample.percentage_of(@file_sample.duration).round + = t('sherlock.percent') + + .sherlock-file-sample + = highlight(@file_sample.file, @file_sample.source) diff --git a/app/views/sherlock/queries/_backtrace.html.haml b/app/views/sherlock/queries/_backtrace.html.haml new file mode 100644 index 0000000000..5c9294c0ab --- /dev/null +++ b/app/views/sherlock/queries/_backtrace.html.haml @@ -0,0 +1,27 @@ +.prepend-top-default + .panel.panel-default + .panel-heading + %strong + = t('sherlock.application_backtrace') + %ul.well-list + - @query.application_backtrace.each do |location| + %li + = location.path + %small.light + = t('sherlock.line') + = location.line + + .panel.panel-default + .panel-heading + %strong + = t('sherlock.full_backtrace') + %ul.well-list + - @query.backtrace.each do |location| + %li + - if location.application? + %strong= location.path + - else + = location.path + %small.light + = t('sherlock.line') + = location.line diff --git a/app/views/sherlock/queries/_general.html.haml b/app/views/sherlock/queries/_general.html.haml new file mode 100644 index 0000000000..549b47430e --- /dev/null +++ b/app/views/sherlock/queries/_general.html.haml @@ -0,0 +1,50 @@ +.prepend-top-default + .panel.panel-default + .panel-heading + %strong + = t('sherlock.general') + %ul.well-list + %li + %span.light + #{t('sherlock.time')}: + %strong + = @query.duration.round(4) + = t('sherlock.milliseconds') + %li + %span.light + #{t('sherlock.origin')}: + %strong + = @query.last_application_frame.path + %small.light + = t('sherlock.line') + = @query.last_application_frame.line + + .panel.panel-default + .panel-heading + .pull-right + %button.js-clipboard-trigger.btn.btn-xs{title: t('sherlock.copy_to_clipboard'), type: :button} + %i.fa.fa-clipboard + %pre.hidden + = @query.formatted_query + %strong + = t('sherlock.query') + %ul.well-list + %li + .code.js-syntax-highlight.sherlock-code + :preserve + #{highlight("#{@query.id}.sql", @query.formatted_query)} + + .panel.panel-default + .panel-heading + .pull-right + %button.js-clipboard-trigger.btn.btn-xs{title: t('sherlock.copy_to_clipboard'), type: :button} + %i.fa.fa-clipboard + %pre.hidden + = @query.explain + %strong + = t('sherlock.query_plan') + %ul.well-list + %li + .code.js-syntax-highlight.sherlock-code + %pre + %code= @query.explain diff --git a/app/views/sherlock/queries/show.html.haml b/app/views/sherlock/queries/show.html.haml new file mode 100644 index 0000000000..4a84348ac8 --- /dev/null +++ b/app/views/sherlock/queries/show.html.haml @@ -0,0 +1,26 @@ +- page_title t('sherlock.title'), t('sherlock.transaction'), t('sherlock.query') +- header_title t('sherlock.title'), sherlock_transactions_path + +%ul.center-top-menu + %li.active + %a(href="#tab-general" data-toggle="tab") + = t('sherlock.general') + %li + %a(href="#tab-backtrace" data-toggle="tab") + = t('sherlock.backtrace') + +.gray-content-block + .pull-right + = link_to(sherlock_transaction_path(@transaction), class: 'btn') do + %i.fa.fa-arrow-left + = t('sherlock.transaction') + .oneline + = t('sherlock.query') + = @query.id + +.tab-content + .tab-pane.active#tab-general + = render(partial: 'general') + + .tab-pane#tab-backtrace + = render(partial: 'backtrace') diff --git a/app/views/sherlock/transactions/_file_samples.html.haml b/app/views/sherlock/transactions/_file_samples.html.haml new file mode 100644 index 0000000000..4349c9b7ac --- /dev/null +++ b/app/views/sherlock/transactions/_file_samples.html.haml @@ -0,0 +1,24 @@ +- if @transaction.file_samples.empty? + .nothing-here-block + = t('sherlock.no_file_samples') +- else + .table-holder + %table.table + %thead + %tr + %th= t('sherlock.time_inclusive') + %th= t('sherlock.count') + %th= t('sherlock.path') + %th + %tbody + - @transaction.sorted_file_samples.each do |sample| + %tr + %td + = sample.duration.round(2) + = t('sherlock.milliseconds') + %td= @transaction.view_counts.fetch(sample.file, 1) + %td= sample.relative_path + %td + = link_to(t('sherlock.view'), + sherlock_transaction_file_sample_path(@transaction, sample), + class: 'btn btn-xs') diff --git a/app/views/sherlock/transactions/_general.html.haml b/app/views/sherlock/transactions/_general.html.haml new file mode 100644 index 0000000000..4287a0c320 --- /dev/null +++ b/app/views/sherlock/transactions/_general.html.haml @@ -0,0 +1,33 @@ +.prepend-top-default + .panel.panel-default + .panel-heading + %strong + = t('sherlock.general') + %ul.well-list + %li + %span.light + #{t('sherlock.id')}: + %strong + = @transaction.id + %li + %span.light + #{t('sherlock.type')}: + %strong + = @transaction.type + %li + %span.light + #{t('sherlock.path')}: + %strong + = @transaction.path + %li + %span.light + #{t('sherlock.time')}: + %strong + = @transaction.duration.round(2) + = t('sherlock.seconds') + %li + %span.light + #{t('sherlock.finished_at')}: + %strong + = time_ago_in_words(@transaction.finished_at) + = t('sherlock.ago') diff --git a/app/views/sherlock/transactions/_queries.html.haml b/app/views/sherlock/transactions/_queries.html.haml new file mode 100644 index 0000000000..b7e0162e80 --- /dev/null +++ b/app/views/sherlock/transactions/_queries.html.haml @@ -0,0 +1,24 @@ +- if @transaction.queries.empty? + .nothing-here-block + = t('sherlock.no_queries') +- else + .table-holder + %table.table#sherlock-queries + %thead + %tr + %th= t('sherlock.time') + %th= t('sherlock.query') + %td + %tbody + - @transaction.sorted_queries.each do |query| + %tr + %td + = query.duration.round(2) + = t('sherlock.milliseconds') + %td + .code.js-syntax-highlight.sherlock-code + = highlight("#{query.id}.sql", query.formatted_query) + %td + = link_to(t('sherlock.view'), + sherlock_transaction_query_path(@transaction, query), + class: 'btn btn-xs') diff --git a/app/views/sherlock/transactions/index.html.haml b/app/views/sherlock/transactions/index.html.haml new file mode 100644 index 0000000000..010e1a2a90 --- /dev/null +++ b/app/views/sherlock/transactions/index.html.haml @@ -0,0 +1,42 @@ +- page_title t('sherlock.title') +- header_title t('sherlock.title'), sherlock_transactions_path + +.gray-content-block + .pull-right + = link_to(destroy_all_sherlock_transactions_path, + class: 'btn btn-danger', + method: :delete) do + %i.fa.fa-trash + = t('sherlock.delete_all_transactions') + .oneline= t('sherlock.introduction') + +- if @transactions.empty? + .nothing-here-block= t('sherlock.no_transactions') +- else + .table-holder + %table.table + %thead + %tr + %th= t('sherlock.type') + %th= t('sherlock.path') + %th= t('sherlock.time') + %th= t('sherlock.queries') + %th= t('sherlock.finished_at') + %th + %tbody + - @transactions.each do |trans| + %tr + %td= trans.type + %td + %span{title: trans.path} + = truncate(trans.path, length: 70) + %td + = trans.duration.round(2) + = t('sherlock.seconds') + %td= trans.queries.length + %td + = time_ago_in_words(trans.finished_at) + = t('sherlock.ago') + %td + = link_to(sherlock_transaction_path(trans), class: 'btn btn-xs') do + = t('sherlock.view') diff --git a/app/views/sherlock/transactions/show.html.haml b/app/views/sherlock/transactions/show.html.haml new file mode 100644 index 0000000000..3c8ffb0664 --- /dev/null +++ b/app/views/sherlock/transactions/show.html.haml @@ -0,0 +1,36 @@ +- page_title t('sherlock.title'), t('sherlock.transaction') +- header_title t('sherlock.title'), sherlock_transactions_path + +%ul.center-top-menu + %li.active + %a(href="#tab-general" data-toggle="tab") + = t('sherlock.general') + %li + %a(href="#tab-queries" data-toggle="tab") + = t('sherlock.queries') + %span.badge + #{@transaction.queries.length} + %li + %a(href="#tab-file-samples" data-toggle="tab") + = t('sherlock.file_samples') + %span.badge + #{@transaction.file_samples.length} + +.gray-content-block + .pull-right + = link_to(sherlock_transactions_path, class: 'btn') do + %i.fa.fa-arrow-left + = t('sherlock.all_transactions') + .oneline + = t('sherlock.transaction') + = @transaction.id + +.tab-content + .tab-pane.active#tab-general + = render(partial: 'general') + + .tab-pane#tab-queries + = render(partial: 'queries') + + .tab-pane#tab-file-samples + = render(partial: 'file_samples') diff --git a/app/views/snippets/_actions.html.haml b/app/views/snippets/_actions.html.haml new file mode 100644 index 0000000000..1979ae6d5b --- /dev/null +++ b/app/views/snippets/_actions.html.haml @@ -0,0 +1,11 @@ += link_to new_snippet_path, class: 'btn btn-grouped new-snippet-link', title: "New Snippet" do + = icon('plus') + New Snippet +- if can?(current_user, :update_personal_snippet, @snippet) + = link_to edit_snippet_path(@snippet), class: "btn btn-grouped snippable-edit" do + = icon('pencil-square-o') + Edit +- if can?(current_user, :admin_personal_snippet, @snippet) + = link_to snippet_path(@snippet), method: :delete, data: { confirm: "Are you sure?" }, class: "btn btn-grouped btn-remove", title: 'Delete Snippet' do + = icon('trash-o') + Delete diff --git a/app/views/snippets/show.html.haml b/app/views/snippets/show.html.haml index 97374e073d..69d8899d4c 100644 --- a/app/views/snippets/show.html.haml +++ b/app/views/snippets/show.html.haml @@ -1,41 +1,14 @@ - page_title @snippet.title, "Snippets" -%h4.page-title - = @snippet.title - - if @snippet.private? - %span.label.label-success - %i.fa.fa-lock - private +.snippet-holder + = render 'shared/snippets/header' - .pull-right - = link_to new_snippet_path, class: "btn btn-new btn-sm", title: "New Snippet" do - Add new snippet - -.append-bottom-10.prepend-top-10 - .pull-right - %span.light - created by - = link_to user_snippets_path(@snippet.author) do - = @snippet.author_name - - .back-link - - if @snippet.author == current_user - = link_to dashboard_snippets_path do - ← your snippets - - else - = link_to explore_snippets_path do - ← explore snippets - -.file-holder - .file-title - %i.fa.fa-file - %strong - = @snippet.file_name - .file-actions - .btn-group - - if can?(current_user, :update_personal_snippet, @snippet) - = link_to "edit", edit_snippet_path(@snippet), class: "btn btn-sm", title: 'Edit Snippet' - = link_to "raw", raw_snippet_path(@snippet), class: "btn btn-sm", target: "_blank" - - if can?(current_user, :admin_personal_snippet, @snippet) - = link_to "remove", snippet_path(@snippet), method: :delete, data: { confirm: "Are you sure?" }, class: "btn btn-sm btn-remove", title: 'Delete Snippet' - = render 'shared/snippets/blob' + %article.file-holder + .file-title + = blob_icon 0, @snippet.file_name + %strong + = @snippet.file_name + .file-actions.hidden-xs + .btn-group.tree-btn-group + = link_to 'Raw', raw_snippet_path(@snippet), class: "btn btn-sm", target: "_blank" + = render 'shared/snippets/blob' diff --git a/app/views/users/_projects.html.haml b/app/views/users/_projects.html.haml deleted file mode 100644 index a126a858ea..0000000000 --- a/app/views/users/_projects.html.haml +++ /dev/null @@ -1,13 +0,0 @@ -- if local_assigns.has_key?(:contributed_projects) && contributed_projects.present? - .panel.panel-default.contributed-projects - .panel-heading Projects contributed to - = render 'shared/projects/list', - projects: contributed_projects.sort_by(&:star_count).reverse, - projects_limit: 5, stars: true, avatar: false - -- if local_assigns.has_key?(:projects) && projects.present? - .panel.panel-default - .panel-heading Personal projects - = render 'shared/projects/list', - projects: projects.sort_by(&:star_count).reverse, - projects_limit: 10, stars: true, avatar: false diff --git a/app/views/users/calendar.html.haml b/app/views/users/calendar.html.haml index 922b0c6ceb..7f29918dba 100644 --- a/app/views/users/calendar.html.haml +++ b/app/views/users/calendar.html.haml @@ -1,7 +1,3 @@ -%h4 - Contributions calendar - .pull-right - %small Issues, merge requests and push events #cal-heatmap.calendar :javascript new Calendar( @@ -10,3 +6,5 @@ #{@starting_month}, '#{user_calendar_activities_path}' ); + +.calendar-hint Summary of issues, merge requests and push events diff --git a/app/views/users/show.atom.builder b/app/views/users/show.atom.builder index 50232dc718..2fe5b7fac8 100644 --- a/app/views/users/show.atom.builder +++ b/app/views/users/show.atom.builder @@ -4,7 +4,7 @@ xml.feed "xmlns" => "http://www.w3.org/2005/Atom", "xmlns:media" => "http://sear xml.link href: user_url(@user, :atom), rel: "self", type: "application/atom+xml" xml.link href: user_url(@user), rel: "alternate", type: "text/html" xml.id user_url(@user) - xml.updated @events.maximum(:updated_at).strftime("%Y-%m-%dT%H:%M:%SZ") if @events.any? + xml.updated @events.latest_update_time.strftime("%Y-%m-%dT%H:%M:%SZ") if @events.any? @events.each do |event| event_to_atom(xml, event) diff --git a/app/views/users/show.html.haml b/app/views/users/show.html.haml index 2a64708d07..d5a92cb816 100644 --- a/app/views/users/show.html.haml +++ b/app/views/users/show.html.haml @@ -6,61 +6,114 @@ = render 'shared/show_aside' -.row - %section.col-md-7 - .header-with-avatar - = link_to avatar_icon(@user, 400), target: '_blank' do - = image_tag avatar_icon(@user, 90), class: "avatar avatar-tile s90", alt: '' - %h3 - = @user.name - - if @user == current_user - .pull-right.hidden-xs - = link_to profile_path, class: 'btn btn-sm' do - = icon('user') - Profile settings - - elsif current_user - .report_abuse.pull-right - - if @user.abuse_report - %span#report_abuse_btn.light.btn.btn-sm.btn-close{title: 'Already reported for abuse', data: {toggle: 'tooltip', placement: 'right', container: 'body'}} - = icon('exclamation-circle') - - else - %a.light.btn.btn-sm{href: new_abuse_report_path(user_id: @user.id), title: 'Report abuse', data: {toggle: 'tooltip', placement: 'right', container: 'body'}} - = icon('exclamation-circle') +.cover-block + .avatar-holder + = link_to avatar_icon(@user, 400), target: '_blank' do + = image_tag avatar_icon(@user, 90), class: "avatar s90", alt: '' + .cover-title + = @user.name - .username - @#{@user.username} - .description - - if @user.bio.present? - = @user.bio + .cover-desc + %span + @#{@user.username}. + - if @user.bio.present? + %span + #{@user.bio}. + %span + Member since #{@user.created_at.stamp("Aug 21, 2011")} - .clearfix + .cover-desc + - unless @user.public_email.blank? + .profile-link-holder + = link_to @user.public_email, "mailto:#{@user.public_email}" + - unless @user.skype.blank? + .profile-link-holder + = link_to "skype:#{@user.skype}", title: "Skype" do + = icon('skype') + - unless @user.linkedin.blank? + .profile-link-holder + = link_to "https://www.linkedin.com/in/#{@user.linkedin}", title: "LinkedIn" do + = icon('linkedin-square') + - unless @user.twitter.blank? + .profile-link-holder + = link_to "https://twitter.com/#{@user.twitter}", title: "Twitter" do + = icon('twitter-square') + - unless @user.website_url.blank? + .profile-link-holder + = link_to @user.short_website_url, @user.full_website_url + - unless @user.location.blank? + .profile-link-holder + = icon('map-marker') + = @user.location - - if @groups.any? - .prepend-top-20 - %h4 Groups - = render 'groups', groups: @groups - %hr - .hidden-xs - .user-calendar - %h4.center.light - %i.fa.fa-spinner.fa-spin - .user-calendar-activities - %hr - %h4 - User Activity + .cover-controls + - if @user == current_user + = link_to profile_path, class: 'btn btn-gray' do + = icon('pencil') + - elsif current_user + %span.report-abuse + - if @user.abuse_report + %button.btn.btn-danger{ title: 'Already reported for abuse', + data: { toggle: 'tooltip', placement: 'left', container: 'body' }} + = icon('exclamation-circle') + - else + = link_to new_abuse_report_path(user_id: @user.id), class: 'btn btn-gray', + title: 'Report abuse', data: {toggle: 'tooltip', placement: 'left', container: 'body'} do + = icon('exclamation-circle') + - if current_user +   + = link_to user_path(@user, :atom, { private_token: current_user.private_token }), class: 'btn btn-gray' do + = icon('rss') - - if current_user - %span.rss-icon.pull-right - = link_to user_path(@user, :atom, { private_token: current_user.private_token }) do - %strong - %i.fa.fa-rss +.gray-content-block.second-block + .user-calendar + %h4.center.light + %i.fa.fa-spinner.fa-spin + .user-calendar-activities + +%ul.center-middle-menu + %li.active + = link_to "#activity", 'data-toggle' => 'tab' do + Activity + - if @groups.any? + %li + = link_to "#groups", 'data-toggle' => 'tab' do + Groups + - if @contributed_projects.present? + %li + = link_to "#contributed", 'data-toggle' => 'tab' do + Contributed projects + - if @projects.present? + %li + = link_to "#personal", 'data-toggle' => 'tab' do + Personal projects + +.tab-content + .tab-pane.active#activity .content_list = spinner - %aside.col-md-5 - = render 'profile', user: @user - = render 'projects', projects: @projects, contributed_projects: @contributed_projects -:coffeescript - $(".user-calendar").load("#{user_calendar_path}") + - if @groups.any? + .tab-pane#groups + %ul.content-list + - @groups.each do |group| + = render 'shared/groups/group', group: group + + - if @contributed_projects.present? + .tab-pane#contributed + .contributed-projects + = render 'shared/projects/list', + projects: @contributed_projects.sort_by(&:star_count).reverse, + projects_limit: 5, stars: true, avatar: true + + - if @projects.present? + .tab-pane#personal + .personal-projects + = render 'shared/projects/list', + projects: @projects.sort_by(&:star_count).reverse, + projects_limit: 10, stars: true, avatar: true + +:javascript + $(".user-calendar").load("#{user_calendar_path}"); diff --git a/app/views/votes/_votes_block.html.haml b/app/views/votes/_votes_block.html.haml index 36ea674206..7eb27c12d3 100644 --- a/app/views/votes/_votes_block.html.haml +++ b/app/views/votes/_votes_block.html.haml @@ -1,10 +1,32 @@ -.votes.votes-block - .btn-group - - unless votable.upvotes.zero? - .btn.btn-sm.disabled.cgreen - %i.fa.fa-thumbs-up - = votable.upvotes - - unless votable.downvotes.zero? - .btn.btn-sm.disabled.cred - %i.fa.fa-thumbs-down - = votable.downvotes +.awards.votes-block + - votable.notes.awards.grouped_awards.each do |emoji, notes| + .award{class: (note_active_class(notes, current_user)), title: emoji_author_list(notes, current_user)} + .icon{"data-emoji" => "#{emoji}"} + = image_tag url_to_emoji(emoji), height: "20px", width: "20px" + .counter + = notes.count + + - if current_user + .dropdown.awards-controls + %a.add-award{"data-toggle" => "dropdown", "data-target" => "#", "href" => "#"} + = icon('smile-o') + %ul.dropdown-menu.awards-menu + - emoji_list.each do |emoji| + %li{"data-emoji" => "#{emoji}"}= image_tag url_to_emoji(emoji), height: "20px", width: "20px" + +- if current_user + :coffeescript + post_emoji_url = "#{award_toggle_namespace_project_notes_path(@project.namespace, @project)}" + noteable_type = "#{votable.class.name.underscore}" + noteable_id = "#{votable.id}" + window.awards_handler = new AwardsHandler(post_emoji_url, noteable_type, noteable_id) + + $(".awards-menu li").click (e)-> + emoji = $(this).data("emoji") + awards_handler.addAward(emoji) + + $(".awards").on "click", ".award", (e)-> + emoji = $(this).find(".icon").data("emoji") + awards_handler.addAward(emoji) + + $(".award").tooltip() diff --git a/app/views/votes/_votes_inline.html.haml b/app/views/votes/_votes_inline.html.haml deleted file mode 100644 index 2cb3ae04e1..0000000000 --- a/app/views/votes/_votes_inline.html.haml +++ /dev/null @@ -1,9 +0,0 @@ -.votes.votes-inline - - unless votable.upvotes.zero? - %span.upvotes.cgreen - + #{votable.upvotes} - - unless votable.downvotes.zero? - \/ - - unless votable.downvotes.zero? - %span.downvotes.cred - \- #{votable.downvotes} diff --git a/app/workers/repository_fork_worker.rb b/app/workers/repository_fork_worker.rb index acd1c43f06..2f991c5233 100644 --- a/app/workers/repository_fork_worker.rb +++ b/app/workers/repository_fork_worker.rb @@ -13,22 +13,20 @@ class RepositoryForkWorker end result = gitlab_shell.fork_repository(source_path, target_path) - unless result logger.error("Unable to fork project #{project_id} for repository #{source_path} -> #{target_path}") + project.update(import_error: "The project could not be forked.") project.import_fail - project.save return end - if project.valid_repo? - ProjectCacheWorker.perform_async(project.id) - project.import_finish - else - project.import_fail + unless project.valid_repo? logger.error("Project #{id} had an invalid repository after fork") + project.update(import_error: "The forked repository is invalid.") + project.import_fail + return end - project.save + project.import_finish end end diff --git a/app/workers/repository_import_worker.rb b/app/workers/repository_import_worker.rb index ea2808045e..d18c0706b3 100644 --- a/app/workers/repository_import_worker.rb +++ b/app/workers/repository_import_worker.rb @@ -7,37 +7,49 @@ class RepositoryImportWorker def perform(project_id) project = Project.find(project_id) - unless project.import_url == Project::UNKNOWN_IMPORT_URL - import_result = gitlab_shell.send(:import_repository, - project.path_with_namespace, - project.import_url) - return project.import_fail unless import_result - else + if project.import_url == Project::UNKNOWN_IMPORT_URL + # In this case, we only want to import issues, not a repository. unless project.create_repository - return project.import_fail + project.update(import_error: "The repository could not be created.") + project.import_fail + return + end + else + begin + gitlab_shell.import_repository(project.path_with_namespace, project.import_url) + rescue Gitlab::Shell::Error => e + project.update(import_error: e.message) + project.import_fail + return end end - data_import_result = case project.import_type - when 'github' - Gitlab::GithubImport::Importer.new(project).execute - when 'gitlab' - Gitlab::GitlabImport::Importer.new(project).execute - when 'bitbucket' - Gitlab::BitbucketImport::Importer.new(project).execute - when 'google_code' - Gitlab::GoogleCodeImport::Importer.new(project).execute - when 'fogbugz' - Gitlab::FogbugzImport::Importer.new(project).execute - else - true - end - return project.import_fail unless data_import_result + data_import_result = + case project.import_type + when 'github' + Gitlab::GithubImport::Importer.new(project).execute + when 'gitlab' + Gitlab::GitlabImport::Importer.new(project).execute + when 'bitbucket' + Gitlab::BitbucketImport::Importer.new(project).execute + when 'google_code' + Gitlab::GoogleCodeImport::Importer.new(project).execute + when 'fogbugz' + Gitlab::FogbugzImport::Importer.new(project).execute + else + true + end - Gitlab::BitbucketImport::KeyDeleter.new(project).execute if project.import_type == 'bitbucket' + unless data_import_result + project.update(import_error: "The remote issue data could not be imported.") + project.import_fail + return + end + + if project.import_type == 'bitbucket' + Gitlab::BitbucketImport::KeyDeleter.new(project).execute + end project.import_finish - project.save - ProjectCacheWorker.perform_async(project.id) end end diff --git a/app/workers/stuck_ci_builds_worker.rb b/app/workers/stuck_ci_builds_worker.rb new file mode 100644 index 0000000000..4e5eddbaba --- /dev/null +++ b/app/workers/stuck_ci_builds_worker.rb @@ -0,0 +1,21 @@ +class StuckCiBuildsWorker + include Sidekiq::Worker + include Sidetiq::Schedulable + + BUILD_STUCK_TIMEOUT = 1.day + + recurrence { daily } + + def perform + Rails.logger.info 'Cleaning stuck builds' + + builds = Ci::Build.running_or_pending.where('updated_at < ?', BUILD_STUCK_TIMEOUT.ago) + builds.find_each(batch_size: 50).each do |build| + Rails.logger.debug "Dropping stuck #{build.status} build #{build.id} for runner #{build.runner_id}" + build.drop + end + + # Update builds that failed to drop + builds.update_all(status: 'failed') + end +end diff --git a/config/environments/test.rb b/config/environments/test.rb index 2d5e7addcd..955540837d 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -30,4 +30,6 @@ Gitlab::Application.configure do config.active_support.deprecation = :stderr config.eager_load = false + + config.cache_store = :null_store end diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example index 8b85981497..1da42ab38f 100644 --- a/config/gitlab.yml.example +++ b/config/gitlab.yml.example @@ -84,6 +84,7 @@ production: &base merge_requests: true wiki: true snippets: false + builds: true ## Webhook settings # Number of seconds to wait for HTTP response after sending webhook HTTP POST request (default: 10) @@ -123,6 +124,18 @@ production: &base # The mailbox where incoming mail will end up. Usually "inbox". mailbox: "inbox" + ## Build Artifacts + artifacts: + enabled: true + # The location where build artifacts are stored (default: shared/artifacts). + # path: shared/artifacts + + ## Git LFS + lfs: + enabled: true + # The location where LFS objects are stored (default: shared/lfs-objects). + # storage_path: shared/lfs-objects + ## Gravatar ## For Libravatar see: http://doc.gitlab.com/ce/customization/libravatar.html gravatar: @@ -274,27 +287,28 @@ production: &base # arguments, followed by optional 'args' which can be either a hash or an array. # Documentation for this is available at http://doc.gitlab.com/ce/integration/omniauth.html providers: - # - { name: 'google_oauth2', - # label: 'Google', - # app_id: 'YOUR_APP_ID', - # app_secret: 'YOUR_APP_SECRET', - # args: { access_type: 'offline', approval_prompt: '' } } - # - { name: 'twitter', - # app_id: 'YOUR_APP_ID', - # app_secret: 'YOUR_APP_SECRET' } # - { name: 'github', - # label: 'GitHub', # app_id: 'YOUR_APP_ID', # app_secret: 'YOUR_APP_SECRET', # args: { scope: 'user:email' } } - # - { name: 'gitlab', - # label: 'GitLab.com', - # app_id: 'YOUR_APP_ID', - # app_secret: 'YOUR_APP_SECRET', - # args: { scope: 'api' } } # - { name: 'bitbucket', # app_id: 'YOUR_APP_ID', # app_secret: 'YOUR_APP_SECRET' } + # - { name: 'gitlab', + # app_id: 'YOUR_APP_ID', + # app_secret: 'YOUR_APP_SECRET', + # args: { scope: 'api' } } + # - { name: 'google_oauth2', + # app_id: 'YOUR_APP_ID', + # app_secret: 'YOUR_APP_SECRET', + # args: { access_type: 'offline', approval_prompt: '' } } + # - { name: 'facebook', + # app_id: 'YOUR_APP_ID', + # app_secret: 'YOUR_APP_SECRET' } + # - { name: 'twitter', + # app_id: 'YOUR_APP_ID', + # app_secret: 'YOUR_APP_SECRET' } + # # - { name: 'saml', # label: 'Our SAML Provider', # args: { @@ -310,7 +324,9 @@ production: &base # application_name: 'YOUR_APP_NAME', # application_password: 'YOUR_APP_PASSWORD' } } - + # Shared file storage settings + shared: + # path: /mnt/gitlab # Default: shared # @@ -318,10 +334,12 @@ production: &base # ========================== # GitLab Satellites + # + # Note for maintainers: keep the satellites.path setting until GitLab 9.0 at + # least. This setting is fed to 'rm -rf' in + # db/migrate/20151023144219_remove_satellites.rb satellites: - # Relative paths are relative to Rails.root (default: tmp/repo_satellites/) path: /home/git/gitlab-satellites/ - timeout: 30 ## Backup settings backup: @@ -411,6 +429,8 @@ test: <<: *base gravatar: enabled: true + lfs: + enabled: false gitlab: host: localhost port: 80 diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb index d5493ca038..b162b8a83f 100644 --- a/config/initializers/1_settings.rb +++ b/config/initializers/1_settings.rb @@ -125,6 +125,9 @@ Settings.omniauth['auto_link_ldap_user'] = false if Settings.omniauth['auto_link Settings.omniauth['providers'] ||= [] +Settings['shared'] ||= Settingslogic.new({}) +Settings.shared['path'] = File.expand_path(Settings.shared['path'] || "shared", Rails.root) + Settings['issues_tracker'] ||= {} # @@ -168,8 +171,9 @@ Settings.gitlab.default_projects_features['issues'] = true if Settings.g Settings.gitlab.default_projects_features['merge_requests'] = true if Settings.gitlab.default_projects_features['merge_requests'].nil? Settings.gitlab.default_projects_features['wiki'] = true if Settings.gitlab.default_projects_features['wiki'].nil? Settings.gitlab.default_projects_features['snippets'] = false if Settings.gitlab.default_projects_features['snippets'].nil? +Settings.gitlab.default_projects_features['builds'] = true if Settings.gitlab.default_projects_features['builds'].nil? Settings.gitlab.default_projects_features['visibility_level'] = Settings.send(:verify_constant, Gitlab::VisibilityLevel, Settings.gitlab.default_projects_features['visibility_level'], Gitlab::VisibilityLevel::PRIVATE) -Settings.gitlab['repository_downloads_path'] = File.absolute_path(Settings.gitlab['repository_downloads_path'] || 'tmp/repositories', Rails.root) +Settings.gitlab['repository_downloads_path'] = File.join(Settings.shared['path'], 'cache/archive') if Settings.gitlab['repository_downloads_path'].nil? Settings.gitlab['restricted_signup_domains'] ||= [] Settings.gitlab['import_sources'] ||= ['github','bitbucket','gitlab','gitorious','google_code','fogbugz','git'] @@ -178,10 +182,11 @@ Settings.gitlab['import_sources'] ||= ['github','bitbucket','gitlab','gitorious' # CI # Settings['gitlab_ci'] ||= Settingslogic.new({}) -Settings.gitlab_ci['all_broken_builds'] = true if Settings.gitlab_ci['all_broken_builds'].nil? -Settings.gitlab_ci['add_pusher'] = false if Settings.gitlab_ci['add_pusher'].nil? -Settings.gitlab_ci['url'] ||= Settings.send(:build_gitlab_ci_url) -Settings.gitlab_ci['builds_path'] = File.expand_path(Settings.gitlab_ci['builds_path'] || "builds/", Rails.root) +Settings.gitlab_ci['shared_runners_enabled'] = true if Settings.gitlab_ci['shared_runners_enabled'].nil? +Settings.gitlab_ci['all_broken_builds'] = true if Settings.gitlab_ci['all_broken_builds'].nil? +Settings.gitlab_ci['add_pusher'] = false if Settings.gitlab_ci['add_pusher'].nil? +Settings.gitlab_ci['url'] ||= Settings.send(:build_gitlab_ci_url) +Settings.gitlab_ci['builds_path'] = File.expand_path(Settings.gitlab_ci['builds_path'] || "builds/", Rails.root) # # Reply by email @@ -189,10 +194,25 @@ Settings.gitlab_ci['builds_path'] = File.expand_path(Settings.gitlab_ci[ Settings['incoming_email'] ||= Settingslogic.new({}) Settings.incoming_email['enabled'] = false if Settings.incoming_email['enabled'].nil? Settings.incoming_email['port'] = 143 if Settings.incoming_email['port'].nil? -Settings.incoming_email['ssl'] = 143 if Settings.incoming_email['ssl'].nil? -Settings.incoming_email['start_tls'] = 143 if Settings.incoming_email['start_tls'].nil? +Settings.incoming_email['ssl'] = false if Settings.incoming_email['ssl'].nil? +Settings.incoming_email['start_tls'] = false if Settings.incoming_email['start_tls'].nil? Settings.incoming_email['mailbox'] = "inbox" if Settings.incoming_email['mailbox'].nil? +# +# Build Artifacts +# +Settings['artifacts'] ||= Settingslogic.new({}) +Settings.artifacts['enabled'] = true if Settings.artifacts['enabled'].nil? +Settings.artifacts['path'] = File.expand_path(Settings.artifacts['path'] || File.join(Settings.shared['path'], "artifacts"), Rails.root) +Settings.artifacts['max_size'] ||= 100 # in megabytes + +# +# Git LFS +# +Settings['lfs'] ||= Settingslogic.new({}) +Settings.lfs['enabled'] = true if Settings.lfs['enabled'].nil? +Settings.lfs['storage_path'] = File.expand_path(Settings.lfs['storage_path'] || File.join(Settings.shared['path'], "lfs-objects"), Rails.root) + # # Gravatar # @@ -242,9 +262,12 @@ Settings.git['max_size'] ||= 20971520 # 20.megabytes Settings.git['bin_path'] ||= '/usr/bin/git' Settings.git['timeout'] ||= 10 +# Important: keep the satellites.path setting until GitLab 9.0 at +# least. This setting is fed to 'rm -rf' in +# db/migrate/20151023144219_remove_satellites.rb Settings['satellites'] ||= Settingslogic.new({}) Settings.satellites['path'] = File.expand_path(Settings.satellites['path'] || "tmp/repo_satellites/", Rails.root) -Settings.satellites['timeout'] ||= 30 + # # Extra customization diff --git a/config/initializers/2_app.rb b/config/initializers/2_app.rb index 688cdf5f4b..35b150c992 100644 --- a/config/initializers/2_app.rb +++ b/config/initializers/2_app.rb @@ -1,8 +1,8 @@ module Gitlab - VERSION = File.read(Rails.root.join("VERSION")).strip - REVISION = Gitlab::Popen.popen(%W(git log --pretty=format:%h -n 1)).first.chomp - def self.config Settings end + + VERSION = File.read(Rails.root.join("VERSION")).strip + REVISION = Gitlab::Popen.popen(%W(#{config.git.bin_path} log --pretty=format:%h -n 1)).first.chomp end diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb index 5d46ece1e1..9e8b0131f8 100644 --- a/config/initializers/inflections.rb +++ b/config/initializers/inflections.rb @@ -8,24 +8,3 @@ # inflect.irregular 'person', 'people' # inflect.uncountable %w( fish sheep ) # end - -# Mark "commits" as uncountable. -# -# Without this change, the routes -# -# resources :commit, only: [:show], constraints: {id: /[[:alnum:]]{6,40}/} -# resources :commits, only: [:show], constraints: {id: /.+/} -# -# would generate identical route helper methods (`project_commit_path`), resulting -# in one of them not getting a helper method at all. -# -# After this change, the helper methods are: -# -# project_commit_path(@project, @project.commit) -# # => "/gitlabhq/commit/bcf03b5de6c33f3869ef70d68cf06e679d1d7f9a -# -# project_commits_path(@project, 'stable/README.md') -# # => "/gitlabhq/commits/stable/README.md" -ActiveSupport::Inflector.inflections do |inflect| - inflect.uncountable %w(commits) -end diff --git a/config/initializers/rack_profiler.rb b/config/initializers/rack_profiler.rb deleted file mode 100644 index 7710eeac45..0000000000 --- a/config/initializers/rack_profiler.rb +++ /dev/null @@ -1,10 +0,0 @@ -if Rails.env.development? - require 'rack-mini-profiler' - - # initialization is skipped so trigger it - Rack::MiniProfilerRails.initialize!(Gitlab::Application) - - Rack::MiniProfiler.config.position = 'right' - Rack::MiniProfiler.config.start_hidden = false - Rack::MiniProfiler.config.skip_paths << '/teaspoon' -end diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb index 04ed9e90df..f30178ff71 100644 --- a/config/initializers/session_store.rb +++ b/config/initializers/session_store.rb @@ -3,18 +3,21 @@ require 'gitlab/current_settings' include Gitlab::CurrentSettings -# allow it to fail: it may to do so when create_from_defaults is executed before migrations are actually done +# allow it to fail: it may do so when create_from_defaults is executed before migrations are actually done begin - Settings.gitlab['session_expire_delay'] = current_application_settings.session_expire_delay + Settings.gitlab['session_expire_delay'] = current_application_settings.session_expire_delay || 10080 rescue + Settings.gitlab['session_expire_delay'] ||= 10080 end -Gitlab::Application.config.session_store( - :redis_store, # Using the cookie_store would enable session replay attacks. - servers: Gitlab::Application.config.cache_store[1].merge(namespace: 'session:gitlab'), # re-use the Redis config from the Rails cache store - key: '_gitlab_session', - secure: Gitlab.config.gitlab.https, - httponly: true, - expire_after: Settings.gitlab['session_expire_delay'] * 60, - path: (Gitlab::Application.config.relative_url_root.nil?) ? '/' : Gitlab::Application.config.relative_url_root -) +unless Rails.env.test? + Gitlab::Application.config.session_store( + :redis_store, # Using the cookie_store would enable session replay attacks. + servers: Gitlab::Application.config.cache_store[1].merge(namespace: 'session:gitlab'), # re-use the Redis config from the Rails cache store + key: '_gitlab_session', + secure: Gitlab.config.gitlab.https, + httponly: true, + expire_after: Settings.gitlab['session_expire_delay'] * 60, + path: (Gitlab::Application.config.relative_url_root.nil?) ? '/' : Gitlab::Application.config.relative_url_root + ) +end diff --git a/config/initializers/sherlock.rb b/config/initializers/sherlock.rb new file mode 100644 index 0000000000..42b0d78c85 --- /dev/null +++ b/config/initializers/sherlock.rb @@ -0,0 +1,5 @@ +if Gitlab::Sherlock.enabled? + Gitlab::Application.configure do |config| + config.middleware.use(Gitlab::Sherlock::Middleware) + end +end diff --git a/config/initializers/state_machine_patch.rb b/config/initializers/state_machine_patch.rb deleted file mode 100644 index 72d010fa5d..0000000000 --- a/config/initializers/state_machine_patch.rb +++ /dev/null @@ -1,9 +0,0 @@ -# This is a patch to address the issue in https://github.com/pluginaweek/state_machine/issues/251 -# where gem 'state_machine' was not working for Rails 4.1 -module StateMachine - module Integrations - module ActiveModel - public :around_validation - end - end -end diff --git a/config/locales/sherlock.en.yml b/config/locales/sherlock.en.yml new file mode 100644 index 0000000000..683b09dc32 --- /dev/null +++ b/config/locales/sherlock.en.yml @@ -0,0 +1,37 @@ +en: + sherlock: + title: Sherlock + delete_all_transactions: Delete All Transactions + introduction: > + Below is a list of all transactions recorded by Sherlock. Requests to + Sherlock's own routes are ignored. + no_transactions: No transactions to show + no_queries: No queries to show + no_file_samples: No file samples to show + all_transactions: All Transactions + transaction: Transaction + query: Query + file_sample: File Sample + type: Type + path: Path + time: Time + queries: Queries + finished_at: Finished at + ago: ago + view: View + seconds: seconds + milliseconds: ms + general: General + id: ID + time_inclusive: Time (inclusive) + backtrace: Backtrace + application_backtrace: Application Backtrace + full_backtrace: Full Backtrace + origin: Origin + line: line + line_capitalized: Line + copy_to_clipboard: Copy to clipboard + query_plan: Query Plan + events: Events + percent: '%' + count: Count diff --git a/config/routes.rb b/config/routes.rb index 3dbe2c4dfc..ac81a2aac7 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,6 +2,19 @@ require 'sidekiq/web' require 'api/api' Gitlab::Application.routes.draw do + if Gitlab::Sherlock.enabled? + namespace :sherlock do + resources :transactions, only: [:index, :show] do + resources :queries, only: [:show] + resources :file_samples, only: [:show] + + collection do + delete :destroy_all + end + end + end + end + namespace :ci do # CI API Ci::API::API.logger Rails.logger @@ -19,12 +32,9 @@ Gitlab::Application.routes.draw do get :status, to: 'projects#badge' get :integration post :toggle_shared_runners - get :dumped_yaml end resources :runner_projects, only: [:create, :destroy] - - resources :events, only: [:index] end resource :user_sessions do @@ -83,7 +93,7 @@ Gitlab::Application.routes.draw do end # Enable Grack support - mount Grack::AuthSpawner, at: '/', constraints: lambda { |request| /[-\/\w\.]+\.git\//.match(request.path_info) }, via: [:get, :post] + mount Grack::AuthSpawner, at: '/', constraints: lambda { |request| /[-\/\w\.]+\.git\//.match(request.path_info) }, via: [:get, :post, :put] # Help get 'help' => 'help#index' @@ -212,6 +222,8 @@ Gitlab::Application.routes.draw do resources :keys, only: [:show, :destroy] resources :identities, only: [:index, :edit, :update, :destroy] + delete 'stop_impersonation' => 'impersonation#destroy', on: :collection + member do get :projects get :keys @@ -221,7 +233,7 @@ Gitlab::Application.routes.draw do put :unblock put :unlock put :confirm - post :login_as + post 'impersonate' => 'impersonation#create' patch :disable_two_factor delete 'remove/:email_id', action: 'remove_email', as: 'remove_email' end @@ -356,7 +368,7 @@ Gitlab::Application.routes.draw do end resource :avatar, only: [:destroy] - resources :milestones, only: [:index, :show, :update] + resources :milestones, only: [:index, :show, :update, :new, :create] end end @@ -378,6 +390,7 @@ Gitlab::Application.routes.draw do [:new, :create, :index], path: "/") do member do put :transfer + delete :remove_fork post :archive post :unarchive post :toggle_star @@ -473,8 +486,9 @@ Gitlab::Application.routes.draw do resources :commit, only: [:show], constraints: { id: /[[:alnum:]]{6,40}/ } do member do get :branches - get :ci - get :cancel_builds + get :builds + post :cancel_builds + post :retry_builds end end @@ -570,7 +584,10 @@ Gitlab::Application.routes.draw do end resources :branches, only: [:index, :new, :create, :destroy], constraints: { id: Gitlab::Regex.git_reference_regex } - resources :tags, only: [:index, :new, :create, :destroy], constraints: { id: Gitlab::Regex.git_reference_regex } + resources :tags, only: [:index, :show, :new, :create, :destroy], constraints: { id: Gitlab::Regex.git_reference_regex } do + resource :release, only: [:edit, :update] + end + resources :protected_branches, only: [:index, :create, :update, :destroy], constraints: { id: Gitlab::Regex.git_reference_regex } resource :variables, only: [:show, :update] resources :triggers, only: [:index, :create, :destroy] @@ -589,12 +606,13 @@ Gitlab::Application.routes.draw do resources :builds, only: [:index, :show] do collection do - get :cancel_all + post :cancel_all end member do - get :cancel get :status + post :cancel + get :download post :retry end end @@ -646,6 +664,10 @@ Gitlab::Application.routes.draw do member do delete :delete_attachment end + + collection do + post :award_toggle + end end resources :uploads, only: [:create] do diff --git a/db/migrate/20151013092124_add_artifacts_file_to_builds.rb b/db/migrate/20151013092124_add_artifacts_file_to_builds.rb new file mode 100644 index 0000000000..5a299f7b26 --- /dev/null +++ b/db/migrate/20151013092124_add_artifacts_file_to_builds.rb @@ -0,0 +1,5 @@ +class AddArtifactsFileToBuilds < ActiveRecord::Migration + def change + add_column :ci_builds, :artifacts_file, :text + end +end diff --git a/db/migrate/20151019111551_fix_build_tags.rb b/db/migrate/20151019111551_fix_build_tags.rb index 84b142183f..299a24b0a7 100644 --- a/db/migrate/20151019111551_fix_build_tags.rb +++ b/db/migrate/20151019111551_fix_build_tags.rb @@ -1,5 +1,9 @@ class FixBuildTags < ActiveRecord::Migration - def change + def up execute("UPDATE taggings SET taggable_type='CommitStatus' WHERE taggable_type='Ci::Build'") end + + def down + execute("UPDATE taggings SET taggable_type='Ci::Build' WHERE taggable_type='CommitStatus'") + end end diff --git a/db/migrate/20151019111703_fail_build_without_names.rb b/db/migrate/20151019111703_fail_build_without_names.rb index 546b03d812..dcdb5d1b25 100644 --- a/db/migrate/20151019111703_fail_build_without_names.rb +++ b/db/migrate/20151019111703_fail_build_without_names.rb @@ -1,5 +1,8 @@ class FailBuildWithoutNames < ActiveRecord::Migration - def change + def up execute("UPDATE ci_builds SET status='failed' WHERE name IS NULL AND status='pending'") end + + def down + end end diff --git a/db/migrate/20151020145526_add_services_template_index.rb b/db/migrate/20151020145526_add_services_template_index.rb new file mode 100644 index 0000000000..1b04f31356 --- /dev/null +++ b/db/migrate/20151020145526_add_services_template_index.rb @@ -0,0 +1,5 @@ +class AddServicesTemplateIndex < ActiveRecord::Migration + def change + add_index :services, :template + end +end diff --git a/db/migrate/20151023112551_fail_build_with_empty_name.rb b/db/migrate/20151023112551_fail_build_with_empty_name.rb new file mode 100644 index 0000000000..41c0f0649c --- /dev/null +++ b/db/migrate/20151023112551_fail_build_with_empty_name.rb @@ -0,0 +1,8 @@ +class FailBuildWithEmptyName < ActiveRecord::Migration + def up + execute("UPDATE ci_builds SET status='failed' WHERE (name IS NULL OR name='') AND status='pending'") + end + + def down + end +end diff --git a/db/migrate/20151023144219_remove_satellites.rb b/db/migrate/20151023144219_remove_satellites.rb new file mode 100644 index 0000000000..e73f300028 --- /dev/null +++ b/db/migrate/20151023144219_remove_satellites.rb @@ -0,0 +1,17 @@ +require 'fileutils' + +class RemoveSatellites < ActiveRecord::Migration + def up + satellites = Gitlab.config['satellites'] + return if satellites.nil? + + satellites_path = satellites['path'] + return if satellites_path.nil? + + FileUtils.rm_rf(satellites_path) + end + + def down + # Do nothing + end +end diff --git a/db/migrate/20151026182941_add_project_path_index.rb b/db/migrate/20151026182941_add_project_path_index.rb new file mode 100644 index 0000000000..a62fe199d7 --- /dev/null +++ b/db/migrate/20151026182941_add_project_path_index.rb @@ -0,0 +1,9 @@ +class AddProjectPathIndex < ActiveRecord::Migration + def up + add_index :projects, :path + end + + def down + remove_index :projects, :path + end +end diff --git a/db/migrate/20151103001141_add_public_to_group.rb b/db/migrate/20151103001141_add_public_to_group.rb new file mode 100644 index 0000000000..635346300c --- /dev/null +++ b/db/migrate/20151103001141_add_public_to_group.rb @@ -0,0 +1,5 @@ +class AddPublicToGroup < ActiveRecord::Migration + def change + add_column :namespaces, :public, :boolean, default: false + end +end diff --git a/db/migrate/20151103133339_add_shared_runners_setting.rb b/db/migrate/20151103133339_add_shared_runners_setting.rb new file mode 100644 index 0000000000..4231dfd5c2 --- /dev/null +++ b/db/migrate/20151103133339_add_shared_runners_setting.rb @@ -0,0 +1,5 @@ +class AddSharedRunnersSetting < ActiveRecord::Migration + def up + add_column :application_settings, :shared_runners_enabled, :boolean, default: true, null: false + end +end diff --git a/db/migrate/20151103134857_create_lfs_objects.rb b/db/migrate/20151103134857_create_lfs_objects.rb new file mode 100644 index 0000000000..2d04c170a8 --- /dev/null +++ b/db/migrate/20151103134857_create_lfs_objects.rb @@ -0,0 +1,10 @@ +class CreateLfsObjects < ActiveRecord::Migration + def change + create_table :lfs_objects do |t| + t.string :oid, null: false, unique: true + t.integer :size, null: false + + t.timestamps + end + end +end diff --git a/db/migrate/20151103134958_create_lfs_objects_projects.rb b/db/migrate/20151103134958_create_lfs_objects_projects.rb new file mode 100644 index 0000000000..f3f58b931e --- /dev/null +++ b/db/migrate/20151103134958_create_lfs_objects_projects.rb @@ -0,0 +1,12 @@ +class CreateLfsObjectsProjects < ActiveRecord::Migration + def change + create_table :lfs_objects_projects do |t| + t.integer :lfs_object_id, null: false + t.integer :project_id, null: false + + t.timestamps + end + + add_index :lfs_objects_projects, :project_id + end +end diff --git a/db/migrate/20151104105513_add_file_to_lfs_objects.rb b/db/migrate/20151104105513_add_file_to_lfs_objects.rb new file mode 100644 index 0000000000..7c57f3f0df --- /dev/null +++ b/db/migrate/20151104105513_add_file_to_lfs_objects.rb @@ -0,0 +1,5 @@ +class AddFileToLfsObjects < ActiveRecord::Migration + def change + add_column :lfs_objects, :file, :string + end +end diff --git a/db/migrate/20151105094515_create_releases.rb b/db/migrate/20151105094515_create_releases.rb new file mode 100644 index 0000000000..fe4608c666 --- /dev/null +++ b/db/migrate/20151105094515_create_releases.rb @@ -0,0 +1,14 @@ +class CreateReleases < ActiveRecord::Migration + def change + create_table :releases do |t| + t.string :tag + t.text :description + t.integer :project_id + + t.timestamps + end + + add_index :releases, :project_id + add_index :releases, [:project_id, :tag] + end +end diff --git a/db/migrate/20151106000015_add_is_award_to_notes.rb b/db/migrate/20151106000015_add_is_award_to_notes.rb new file mode 100644 index 0000000000..02b271637e --- /dev/null +++ b/db/migrate/20151106000015_add_is_award_to_notes.rb @@ -0,0 +1,6 @@ +class AddIsAwardToNotes < ActiveRecord::Migration + def change + add_column :notes, :is_award, :boolean, default: false, null: false + add_index :notes, :is_award + end +end diff --git a/db/migrate/20151109100728_add_max_artifacts_size_to_application_settings.rb b/db/migrate/20151109100728_add_max_artifacts_size_to_application_settings.rb new file mode 100644 index 0000000000..01d8c0f043 --- /dev/null +++ b/db/migrate/20151109100728_add_max_artifacts_size_to_application_settings.rb @@ -0,0 +1,5 @@ +class AddMaxArtifactsSizeToApplicationSettings < ActiveRecord::Migration + def change + add_column :application_settings, :max_artifacts_size, :integer, default: 100, null: false + end +end diff --git a/db/migrate/20151110125604_add_import_error_to_project.rb b/db/migrate/20151110125604_add_import_error_to_project.rb new file mode 100644 index 0000000000..7fc990f8d0 --- /dev/null +++ b/db/migrate/20151110125604_add_import_error_to_project.rb @@ -0,0 +1,5 @@ +class AddImportErrorToProject < ActiveRecord::Migration + def change + add_column :projects, :import_error, :text + end +end diff --git a/db/migrate/20151114113410_add_index_for_lfs_oid_and_size.rb b/db/migrate/20151114113410_add_index_for_lfs_oid_and_size.rb new file mode 100644 index 0000000000..d10f1f6e60 --- /dev/null +++ b/db/migrate/20151114113410_add_index_for_lfs_oid_and_size.rb @@ -0,0 +1,6 @@ +class AddIndexForLfsOidAndSize < ActiveRecord::Migration + def change + add_index :lfs_objects, :oid + add_index :lfs_objects, [:oid, :size] + end +end diff --git a/db/migrate/20151116144118_add_unique_for_lfs_oid_index.rb b/db/migrate/20151116144118_add_unique_for_lfs_oid_index.rb new file mode 100644 index 0000000000..41b93da0a8 --- /dev/null +++ b/db/migrate/20151116144118_add_unique_for_lfs_oid_index.rb @@ -0,0 +1,7 @@ +class AddUniqueForLfsOidIndex < ActiveRecord::Migration + def change + remove_index :lfs_objects, :oid + remove_index :lfs_objects, [:oid, :size] + add_index :lfs_objects, :oid, unique: true + end +end diff --git a/db/migrate/20151118162244_add_projects_public_index.rb b/db/migrate/20151118162244_add_projects_public_index.rb new file mode 100644 index 0000000000..fded70e3c0 --- /dev/null +++ b/db/migrate/20151118162244_add_projects_public_index.rb @@ -0,0 +1,5 @@ +class AddProjectsPublicIndex < ActiveRecord::Migration + def change + add_index :namespaces, :public + end +end diff --git a/db/schema.rb b/db/schema.rb index 0fec00ebf8..80e9405f6f 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20151020173906) do +ActiveRecord::Schema.define(version: 20151118162244) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -47,6 +47,8 @@ ActiveRecord::Schema.define(version: 20151020173906) do t.text "import_sources" t.text "help_page_text" t.string "admin_notification_email" + t.boolean "shared_runners_enabled", default: true, null: false + t.integer "max_artifacts_size", default: 100, null: false end create_table "audit_events", force: true do |t| @@ -107,6 +109,7 @@ ActiveRecord::Schema.define(version: 20151020173906) do t.string "type" t.string "target_url" t.string "description" + t.text "artifacts_file" end add_index "ci_builds", ["commit_id", "stage_idx", "created_at"], name: "index_ci_builds_on_commit_id_and_stage_idx_and_created_at", using: :btree @@ -419,6 +422,25 @@ ActiveRecord::Schema.define(version: 20151020173906) do add_index "labels", ["project_id"], name: "index_labels_on_project_id", using: :btree + create_table "lfs_objects", force: true do |t| + t.string "oid", null: false + t.integer "size", null: false + t.datetime "created_at" + t.datetime "updated_at" + t.string "file" + end + + add_index "lfs_objects", ["oid"], name: "index_lfs_objects_on_oid", unique: true, using: :btree + + create_table "lfs_objects_projects", force: true do |t| + t.integer "lfs_object_id", null: false + t.integer "project_id", null: false + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "lfs_objects_projects", ["project_id"], name: "index_lfs_objects_projects_on_project_id", using: :btree + create_table "members", force: true do |t| t.integer "access_level", null: false t.integer "source_id", null: false @@ -501,20 +523,22 @@ ActiveRecord::Schema.define(version: 20151020173906) do add_index "milestones", ["project_id"], name: "index_milestones_on_project_id", using: :btree create_table "namespaces", force: true do |t| - t.string "name", null: false - t.string "path", null: false + t.string "name", null: false + t.string "path", null: false t.integer "owner_id" t.datetime "created_at" t.datetime "updated_at" t.string "type" - t.string "description", default: "", null: false + t.string "description", default: "", null: false t.string "avatar" + t.boolean "public", default: false end add_index "namespaces", ["created_at", "id"], name: "index_namespaces_on_created_at_and_id", using: :btree add_index "namespaces", ["name"], name: "index_namespaces_on_name", unique: true, using: :btree add_index "namespaces", ["owner_id"], name: "index_namespaces_on_owner_id", using: :btree add_index "namespaces", ["path"], name: "index_namespaces_on_path", unique: true, using: :btree + add_index "namespaces", ["public"], name: "index_namespaces_on_public", using: :btree add_index "namespaces", ["type"], name: "index_namespaces_on_type", using: :btree create_table "notes", force: true do |t| @@ -531,12 +555,14 @@ ActiveRecord::Schema.define(version: 20151020173906) do t.boolean "system", default: false, null: false t.text "st_diff" t.integer "updated_by_id" + t.boolean "is_award", default: false, null: false end add_index "notes", ["author_id"], name: "index_notes_on_author_id", using: :btree add_index "notes", ["commit_id"], name: "index_notes_on_commit_id", using: :btree add_index "notes", ["created_at", "id"], name: "index_notes_on_created_at_and_id", using: :btree add_index "notes", ["created_at"], name: "index_notes_on_created_at", using: :btree + add_index "notes", ["is_award"], name: "index_notes_on_is_award", using: :btree add_index "notes", ["line_code"], name: "index_notes_on_line_code", using: :btree add_index "notes", ["noteable_id", "noteable_type"], name: "index_notes_on_noteable_id_and_noteable_type", using: :btree add_index "notes", ["noteable_type"], name: "index_notes_on_noteable_type", using: :btree @@ -617,13 +643,17 @@ ActiveRecord::Schema.define(version: 20151020173906) do t.integer "star_count", default: 0, null: false t.string "import_type" t.string "import_source" - t.integer "commit_count", default: 0 + t.integer "commit_count", default: 0 + t.boolean "merge_requests_ff_only_enabled", default: false + t.text "issues_template" + t.text "import_error" end add_index "projects", ["created_at", "id"], name: "index_projects_on_created_at_and_id", using: :btree add_index "projects", ["creator_id"], name: "index_projects_on_creator_id", using: :btree add_index "projects", ["last_activity_at"], name: "index_projects_on_last_activity_at", using: :btree add_index "projects", ["namespace_id"], name: "index_projects_on_namespace_id", using: :btree + add_index "projects", ["path"], name: "index_projects_on_path", using: :btree add_index "projects", ["star_count"], name: "index_projects_on_star_count", using: :btree create_table "protected_branches", force: true do |t| @@ -636,6 +666,17 @@ ActiveRecord::Schema.define(version: 20151020173906) do add_index "protected_branches", ["project_id"], name: "index_protected_branches_on_project_id", using: :btree + create_table "releases", force: true do |t| + t.string "tag" + t.text "description" + t.integer "project_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "releases", ["project_id", "tag"], name: "index_releases_on_project_id_and_tag", using: :btree + add_index "releases", ["project_id"], name: "index_releases_on_project_id", using: :btree + create_table "sent_notifications", force: true do |t| t.integer "project_id" t.integer "noteable_id" @@ -666,6 +707,7 @@ ActiveRecord::Schema.define(version: 20151020173906) do add_index "services", ["created_at", "id"], name: "index_services_on_created_at_and_id", using: :btree add_index "services", ["project_id"], name: "index_services_on_project_id", using: :btree + add_index "services", ["template"], name: "index_services_on_template", using: :btree create_table "snippets", force: true do |t| t.string "title" diff --git a/doc/README.md b/doc/README.md index a0ff856ebb..58ab5dd08e 100644 --- a/doc/README.md +++ b/doc/README.md @@ -17,20 +17,22 @@ ## CI Documentation -+ [Quick Start](ci/quick_start/README.md) -+ [Configuring project (.gitlab-ci.yml)](ci/yaml/README.md) -+ [Configuring runner](ci/runners/README.md) -+ [Configuring deployment](ci/deployment/README.md) -+ [Using Docker Images](ci/docker/using_docker_images.md) -+ [Using Docker Build](ci/docker/using_docker_build.md) -+ [Using Variables](ci/variables/README.md) +- [Quick Start](ci/quick_start/README.md) +- [Configuring project (.gitlab-ci.yml)](ci/yaml/README.md) +- [Configuring runner](ci/runners/README.md) +- [Configuring deployment](ci/deployment/README.md) +- [Using Docker Images](ci/docker/using_docker_images.md) +- [Using Docker Build](ci/docker/using_docker_build.md) +- [Using Variables](ci/variables/README.md) +- [User permissions](ci/permissions/README.md) +- [API](ci/api/README.md) ### CI Examples -+ [Test and deploy Ruby applications to Heroku](ci/examples/test-and-deploy-ruby-application-to-heroku.md) -+ [Test and deploy Python applications to Heroku](ci/examples/test-and-deploy-python-application-to-heroku.md) -+ [Test Clojure applications](ci/examples/test-clojure-application.md) -+ Help your favorite programming language and GitLab by sending a merge request with a guide for that language. +- [Test and deploy Ruby applications to Heroku](ci/examples/test-and-deploy-ruby-application-to-heroku.md) +- [Test and deploy Python applications to Heroku](ci/examples/test-and-deploy-python-application-to-heroku.md) +- [Test Clojure applications](ci/examples/test-clojure-application.md) +- Help your favorite programming language and GitLab by sending a merge request with a guide for that language. ## Administrator documentation @@ -48,11 +50,7 @@ - [Welcome message](customization/welcome_message.md) Add a custom welcome message to the sign-in page. - [Reply by email](incoming_email/README.md) Allow users to comment on issues and merge requests by replying to notification emails. - [Migrate GitLab CI to CE/EE](migrate_ci_to_ce/README.md) Follow this guide to migrate your existing GitLab CI data to GitLab CE/EE. - -### Administrator documentation - -+ [User permissions](permissions/permissions.md) -+ [API](api/README.md) +- [Git LFS configuration](workflow/lfs/lfs_administration.md) ## Contributor documentation diff --git a/doc/api/README.md b/doc/api/README.md index 6b8528de50..25a31b235c 100644 --- a/doc/api/README.md +++ b/doc/api/README.md @@ -10,6 +10,7 @@ - [Repositories](repositories.md) - [Repository Files](repository_files.md) - [Commits](commits.md) +- [Tags](tags.md) - [Branches](branches.md) - [Merge Requests](merge_requests.md) - [Issues](issues.md) diff --git a/doc/api/commits.md b/doc/api/commits.md index 9f72adc6ed..93d62b751e 100644 --- a/doc/api/commits.md +++ b/doc/api/commits.md @@ -22,7 +22,8 @@ Parameters: "author_name": "Dmitriy Zaporozhets", "author_email": "dzaporozhets@sphereconsultinginc.com", "created_at": "2012-09-20T11:50:22+03:00", - "message": "Replace sanitize with escape once" + "message": "Replace sanitize with escape once", + "allow_failure": false }, { "id": "6104942438c14ec7bd21c6cd5bd995272b3faff6", @@ -31,7 +32,8 @@ Parameters: "author_name": "randx", "author_email": "dmitriy.zaporozhets@gmail.com", "created_at": "2012-09-20T09:06:12+03:00", - "message": "Sanitize for network graph" + "message": "Sanitize for network graph", + "allow_failure": false } ] ``` @@ -186,7 +188,7 @@ Parameters: "target_url": "http://jenkins/project/url", "description": "Jenkins success", "created_at": "2015-10-12T09:47:16.250Z", - "started_at": "2015-10-12T09:47:16.250Z"", + "started_at": "2015-10-12T09:47:16.250Z", "finished_at": "2015-10-12T09:47:16.262Z", "author": { "id": 1, @@ -226,7 +228,7 @@ POST /projects/:id/statuses/:sha "target_url": "http://jenkins/project/url", "description": "Jenkins success", "created_at": "2015-10-12T09:47:16.250Z", - "started_at": "2015-10-12T09:47:16.250Z"", + "started_at": "2015-10-12T09:47:16.250Z", "finished_at": "2015-10-12T09:47:16.262Z", "author": { "id": 1, diff --git a/doc/api/merge_requests.md b/doc/api/merge_requests.md index ffa7f2cdf1..0cef09d5b2 100644 --- a/doc/api/merge_requests.md +++ b/doc/api/merge_requests.md @@ -3,8 +3,9 @@ ## List merge requests Get all merge requests for this project. -The `state` parameter can be used to get only merge requests with a given state (`opened`, `closed`, or `merged`) or all of them (`all`). -The pagination parameters `page` and `per_page` can be used to restrict the list of merge requests. +The `state` parameter can be used to get only merge requests with a given state (`opened`, `closed`, or `merged`) or all of them (`all`). +The pagination parameters `page` and `per_page` can be used to restrict the list of merge requests. With GitLab 8.2 the return fields `upvotes` and +`downvotes` are deprecated and always return `0`. ``` GET /projects/:id/merge_requests @@ -57,7 +58,7 @@ Parameters: ## Get single MR -Shows information about a single merge request. +Shows information about a single merge request. With GitLab 8.2 the return fields `upvotes` and `downvotes` are deprecated and always return `0`. ``` GET /projects/:id/merge_request/:merge_request_id @@ -102,7 +103,9 @@ Parameters: ## Get single MR changes -Shows information about the merge request including its files and changes +Shows information about the merge request including its files and changes. +With GitLab 8.2 the return fields `upvotes` and `downvotes` are deprecated and +always return `0`. ``` GET /projects/:id/merge_request/:merge_request_id/changes @@ -173,7 +176,8 @@ Parameters: ## Create MR -Creates a new merge request. +Creates a new merge request. With GitLab 8.2 the return fields `upvotes` and ` +downvotes` are deprecated and always return `0`. ``` POST /projects/:id/merge_requests @@ -225,7 +229,8 @@ If an error occurs, an error number and a message explaining the reason is retur ## Update MR -Updates an existing merge request. You can change the target branch, title, or even close the MR. +Updates an existing merge request. You can change the target branch, title, or even close the MR. With GitLab 8.2 the return fields `upvotes` and `downvotes` +are deprecated and always return `0`. ``` PUT /projects/:id/merge_request/:merge_request_id @@ -276,7 +281,8 @@ If an error occurs, an error number and a message explaining the reason is retur ## Accept MR -Merge changes submitted with MR using this API. +Merge changes submitted with MR using this API. With GitLab 8.2 the return +fields `upvotes` and `downvotes` are deprecated and always return `0`. If merge success you get `200 OK`. diff --git a/doc/api/notes.md b/doc/api/notes.md index c683cb883d..e7f299c099 100644 --- a/doc/api/notes.md +++ b/doc/api/notes.md @@ -6,7 +6,8 @@ Notes are comments on snippets, issues or merge requests. ### List project issue notes -Gets a list of all notes for a single issue. +Gets a list of all notes for a single issue. With GitLab 8.2 the return fields +`upvote` and `downvote` are deprecated and always return `false`. ``` GET /projects/:id/issues/:issue_id/notes @@ -49,7 +50,7 @@ Parameters: "created_at": "2013-09-30T13:46:01Z" }, "created_at": "2013-10-02T09:56:03Z", - "system": false, + "system": true, "upvote": false, "downvote": false } diff --git a/doc/api/projects.md b/doc/api/projects.md index 9648585703..755cc6525c 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -60,6 +60,7 @@ Parameters: "path_with_namespace": "diaspora/diaspora-client", "issues_enabled": true, "merge_requests_enabled": true, + "builds_enabled": true, "wiki_enabled": true, "snippets_enabled": false, "created_at": "2013-09-30T13: 46: 02Z", @@ -101,6 +102,7 @@ Parameters: "path_with_namespace": "brightbox/puppet", "issues_enabled": true, "merge_requests_enabled": true, + "builds_enabled": true, "wiki_enabled": true, "snippets_enabled": false, "created_at": "2013-09-30T13:46:02Z", @@ -191,6 +193,7 @@ Parameters: "path_with_namespace": "diaspora/diaspora-project-site", "issues_enabled": true, "merge_requests_enabled": true, + "builds_enabled": true, "wiki_enabled": true, "snippets_enabled": false, "created_at": "2013-09-30T13: 46: 02Z", @@ -312,6 +315,7 @@ Parameters: - `description` (optional) - short project description - `issues_enabled` (optional) - `merge_requests_enabled` (optional) +- `builds_enabled` (optional) - `wiki_enabled` (optional) - `snippets_enabled` (optional) - `public` (optional) - if `true` same as setting visibility_level = 20 @@ -334,6 +338,7 @@ Parameters: - `default_branch` (optional) - 'master' by default - `issues_enabled` (optional) - `merge_requests_enabled` (optional) +- `builds_enabled` (optional) - `wiki_enabled` (optional) - `snippets_enabled` (optional) - `public` (optional) - if `true` same as setting visibility_level = 20 @@ -357,6 +362,7 @@ Parameters: - `default_branch` (optional) - `issues_enabled` (optional) - `merge_requests_enabled` (optional) +- `builds_enabled` (optional) - `wiki_enabled` (optional) - `snippets_enabled` (optional) - `public` (optional) - if `true` same as setting visibility_level = 20 diff --git a/doc/api/repositories.md b/doc/api/repositories.md index 3316745380..b6cca5d4e2 100644 --- a/doc/api/repositories.md +++ b/doc/api/repositories.md @@ -1,79 +1,5 @@ # Repositories -## List project repository tags - -Get a list of repository tags from a project, sorted by name in reverse alphabetical order. - -``` -GET /projects/:id/repository/tags -``` - -Parameters: - -- `id` (required) - The ID of a project - -```json -[ - { - "commit": { - "author_name": "John Smith", - "author_email": "john@example.com", - "authored_date": "2012-05-28T04:42:42-07:00", - "committed_date": "2012-05-28T04:42:42-07:00", - "committer_name": "Jack Smith", - "committer_email": "jack@example.com", - "id": "2695effb5807a22ff3d138d593fd856244e155e7", - "message": "Initial commit", - "parents_ids": [ - "2a4b78934375d7f53875269ffd4f45fd83a84ebe" - ] - }, - "name": "v1.0.0", - "message": null - } -] -``` - -## Create a new tag - -Creates new tag in the repository that points to the supplied ref. - -``` -POST /projects/:id/repository/tags -``` - -Parameters: - -- `id` (required) - The ID of a project -- `tag_name` (required) - The name of a tag -- `ref` (required) - Create tag using commit SHA, another tag name, or branch name. -- `message` (optional) - Creates annotated tag. - -```json -{ - "commit": { - "author_name": "John Smith", - "author_email": "john@example.com", - "authored_date": "2012-05-28T04:42:42-07:00", - "committed_date": "2012-05-28T04:42:42-07:00", - "committer_name": "Jack Smith", - "committer_email": "jack@example.com", - "id": "2695effb5807a22ff3d138d593fd856244e155e7", - "message": "Initial commit", - "parents_ids": [ - "2a4b78934375d7f53875269ffd4f45fd83a84ebe" - ] - }, - "name": "v1.0.0", - "message": null -} -``` -The message will be `nil` when creating a lightweight tag otherwise -it will contain the annotation. - -It returns 200 if the operation succeed. In case of an error, -405 with an explaining error message is returned. - ## List repository tree Get a list of repository files and directories in a project. diff --git a/doc/api/repository_files.md b/doc/api/repository_files.md index 25311b0710..623063f357 100644 --- a/doc/api/repository_files.md +++ b/doc/api/repository_files.md @@ -23,7 +23,8 @@ Example response: "content": "IyA9PSBTY2hlbWEgSW5mb3...", "ref": "master", "blob_id": "79f7bbd25901e8334750839545a9bd021f0e4c83", - "commit_id": "d5a3ff139356ce33e37e73add446f16869741b50" + "commit_id": "d5a3ff139356ce33e37e73add446f16869741b50", + "last_commit_id": "570e7b2abdd848b95f2f578043fc23bd6f6fd24d" } ``` diff --git a/doc/api/tags.md b/doc/api/tags.md new file mode 100644 index 0000000000..085d387e82 --- /dev/null +++ b/doc/api/tags.md @@ -0,0 +1,131 @@ +# Tags + +## List project repository tags + +Get a list of repository tags from a project, sorted by name in reverse alphabetical order. + +``` +GET /projects/:id/repository/tags +``` + +Parameters: + +- `id` (required) - The ID of a project + +```json +[ + { + "commit": { + "author_name": "John Smith", + "author_email": "john@example.com", + "authored_date": "2012-05-28T04:42:42-07:00", + "committed_date": "2012-05-28T04:42:42-07:00", + "committer_name": "Jack Smith", + "committer_email": "jack@example.com", + "id": "2695effb5807a22ff3d138d593fd856244e155e7", + "message": "Initial commit", + "parents_ids": [ + "2a4b78934375d7f53875269ffd4f45fd83a84ebe" + ] + }, + "release": { + "tag_name": "1.0.0", + "description": "Amazing release. Wow" + }, + "name": "v1.0.0", + "message": null + } +] +``` + +## Create a new tag + +Creates a new tag in the repository that points to the supplied ref. + +``` +POST /projects/:id/repository/tags +``` + +Parameters: + +- `id` (required) - The ID of a project +- `tag_name` (required) - The name of a tag +- `ref` (required) - Create tag using commit SHA, another tag name, or branch name. +- `message` (optional) - Creates annotated tag. +- `release_description` (optional) - Add release notes to the git tag and store it in the GitLab database. + +```json +{ + "commit": { + "author_name": "John Smith", + "author_email": "john@example.com", + "authored_date": "2012-05-28T04:42:42-07:00", + "committed_date": "2012-05-28T04:42:42-07:00", + "committer_name": "Jack Smith", + "committer_email": "jack@example.com", + "id": "2695effb5807a22ff3d138d593fd856244e155e7", + "message": "Initial commit", + "parents_ids": [ + "2a4b78934375d7f53875269ffd4f45fd83a84ebe" + ] + }, + "release": { + "tag_name": "1.0.0", + "description": "Amazing release. Wow" + }, + "name": "v1.0.0", + "message": null +} +``` +The message will be `nil` when creating a lightweight tag otherwise +it will contain the annotation. + +It returns 200 if the operation succeed. In case of an error, +405 with an explaining error message is returned. + + +## Create a new release + +Add release notes to the existing git tag. It returns 201 if the release is +created successfully. If the tag does not exist, 404 is returned. If there +already exists a release for the given tag, 409 is returned. + +``` +POST /projects/:id/repository/tags/:tag_name/release +``` + +Parameters: + +- `id` (required) - The ID of a project +- `tag_name` (required) - The name of a tag +- `description` (required) - Release notes with markdown support + +```json +{ + "tag_name": "1.0.0", + "description": "Amazing release. Wow" +} +``` + +## Update a release + +Updates the release notes of a given release. It returns 200 if the release is +successfully updated. If the tag or the release does not exist, it returns 404 +with a proper error message. + +``` +PUT /projects/:id/repository/tags/:tag_name/release +``` + +Parameters: + +- `id` (required) - The ID of a project +- `tag_name` (required) - The name of a tag +- `description` (required) - Release notes with markdown support + +```json +{ + "tag_name": "1.0.0", + "description": "Amazing release. Wow" +} +``` \ No newline at end of file diff --git a/doc/ci/api/README.md b/doc/ci/api/README.md index 33c5b172e9..cf9710ede5 100644 --- a/doc/ci/api/README.md +++ b/doc/ci/api/README.md @@ -25,7 +25,7 @@ GitLab CI API has 4 authentication methods: Authentication is done by sending the `private-token` of a valid user and the `url` of an -authorized Gitlab instance via a query string along with the API +authorized GitLab instance via a query string along with the API request: GET http://gitlab.example.com/ci/api/v1/projects?private_token=QVy1PB7sTxfy4pqfZM1U&url=http://demo.gitlab.com/ diff --git a/doc/ci/api/projects.md b/doc/ci/api/projects.md index 5585191e82..74a4c64d00 100644 --- a/doc/ci/api/projects.md +++ b/doc/ci/api/projects.md @@ -1,7 +1,7 @@ # Projects API This API is intended to aid in the setup and configuration of -projects on Gitlab CI. +projects on GitLab CI. __Authentication is done by GitLab user token & GitLab url__ @@ -88,23 +88,23 @@ authorized. Parameters: - * `id` (required) - The ID of the Gitlab CI project + * `id` (required) - The ID of the GitLab CI project ### Create Project -Creates a Gitlab CI project using Gitlab project details. +Creates a GitLab CI project using GitLab project details. POST /ci/projects Parameters: * `name` (required) - The name of the project - * `gitlab_id` (required) - The ID of the project on the Gitlab instance + * `gitlab_id` (required) - The ID of the project on the GitLab instance * `default_ref` (optional) - The branch to run on (default to `master`) ### Update Project -Updates a Gitlab CI project using Gitlab project details that the +Updates a GitLab CI project using GitLab project details that the authenticated user has access to. PUT /ci/projects/:id @@ -116,13 +116,13 @@ Parameters: ### Remove Project -Removes a Gitlab CI project that the authenticated user has access to. +Removes a GitLab CI project that the authenticated user has access to. DELETE /ci/projects/:id Parameters: - * `id` (required) - The ID of the Gitlab CI project + * `id` (required) - The ID of the GitLab CI project ### Link Project to Runner @@ -133,8 +133,8 @@ authorized user). Parameters: - * `id` (required) - The ID of the Gitlab CI project - * `runner_id` (required) - The ID of the Gitlab CI runner + * `id` (required) - The ID of the GitLab CI project + * `runner_id` (required) - The ID of the GitLab CI runner ### Remove Project from Runner @@ -145,5 +145,5 @@ via authorized user). Parameters: - * `id` (required) - The ID of the Gitlab CI project - * `runner_id` (required) - The ID of the Gitlab CI runner \ No newline at end of file + * `id` (required) - The ID of the GitLab CI project + * `runner_id` (required) - The ID of the GitLab CI runner \ No newline at end of file diff --git a/doc/ci/api/runners.md b/doc/ci/api/runners.md index e9f88ee066..c383dc4bcc 100644 --- a/doc/ci/api/runners.md +++ b/doc/ci/api/runners.md @@ -6,7 +6,7 @@ __Authentication is done by GitLab user token & GitLab url__ -Used to get information about all runners registered on the Gitlab CI +Used to get information about all runners registered on the GitLab CI instance. GET /ci/runners @@ -31,7 +31,7 @@ Returns: __Authentication is done with a Shared runner registration token or a project Specific runner registration token__ -Used to make Gitlab CI aware of available runners. +Used to make GitLab CI aware of available runners. POST /ci/runners/register diff --git a/doc/ci/docker/using_docker_build.md b/doc/ci/docker/using_docker_build.md index 5af27470d2..4b1788a9af 100644 --- a/doc/ci/docker/using_docker_build.md +++ b/doc/ci/docker/using_docker_build.md @@ -35,7 +35,7 @@ GitLab Runner then executes build scripts as `gitlab-runner` user. ```bash $ sudo gitlab-runner register -n \ - --url http://gitlab.com/ci \ + --url https://gitlab.com/ci \ --token RUNNER_TOKEN \ --executor shell --description "My Runner" @@ -84,7 +84,7 @@ In order to do that follow the steps: ```bash $ sudo gitlab-runner register -n \ - --url http://gitlab.com/ci \ + --url https://gitlab.com/ci \ --token RUNNER_TOKEN \ --executor docker \ --description "My Docker Runner" \ diff --git a/doc/ci/docker/using_docker_images.md b/doc/ci/docker/using_docker_images.md index 191e3a8144..ef8a7ec1e8 100644 --- a/doc/ci/docker/using_docker_images.md +++ b/doc/ci/docker/using_docker_images.md @@ -90,7 +90,7 @@ you need to set MYSQL_ALLOW_EMPTY_PASSWORD. - mysql variables: - MYSQL_ALLOW_EMPTY_PASSWORD: yes + MYSQL_ALLOW_EMPTY_PASSWORD: "yes" ``` For other possible configuration variables check the diff --git a/doc/ci/examples/README.md b/doc/ci/examples/README.md index e0b9fa0e25..1cf41aea39 100644 --- a/doc/ci/examples/README.md +++ b/doc/ci/examples/README.md @@ -1,5 +1,5 @@ # Build script examples -+ [Test and deploy Ruby Application to Heroku](test-and-deploy-ruby-application-to-heroku.md) -+ [Test and deploy Python Application to Heroku](test-and-deploy-python-application-to-heroku.md) -+ [Test Clojure applications](examples/test-clojure-application.md) ++ [Test and deploy a Ruby application to Heroku](test-and-deploy-ruby-application-to-heroku.md) ++ [Test and deploy a Python application to Heroku](test-and-deploy-python-application-to-heroku.md) ++ [Test a Clojure application](test-clojure-application.md) diff --git a/doc/ci/examples/test-and-deploy-python-application-to-heroku.md b/doc/ci/examples/test-and-deploy-python-application-to-heroku.md index 036b03dd6b..a236da53fe 100644 --- a/doc/ci/examples/test-and-deploy-python-application-to-heroku.md +++ b/doc/ci/examples/test-and-deploy-python-application-to-heroku.md @@ -1,7 +1,7 @@ ## Test and Deploy a python application This example will guide you how to run tests in your Python application and deploy it automatically as Heroku application. -You can checkout the example [source](https://gitlab.com/ayufan/python-getting-started) and check [CI status](https://ci.gitlab.com/projects/4080). +You can checkout the example [source](https://gitlab.com/ayufan/python-getting-started) and check [CI status](https://gitlab.com/ayufan/python-getting-started/builds?scope=all). ### Configure project This is what the `.gitlab-ci.yml` file looks like for this project: diff --git a/doc/ci/examples/test-and-deploy-ruby-application-to-heroku.md b/doc/ci/examples/test-and-deploy-ruby-application-to-heroku.md index d2a872f193..e52e154746 100644 --- a/doc/ci/examples/test-and-deploy-ruby-application-to-heroku.md +++ b/doc/ci/examples/test-and-deploy-ruby-application-to-heroku.md @@ -1,7 +1,7 @@ ## Test and Deploy a ruby application This example will guide you how to run tests in your Ruby application and deploy it automatiacally as Heroku application. -You can checkout the example [source](https://gitlab.com/ayufan/ruby-getting-started) and check [CI status](https://ci.gitlab.com/projects/4050). +You can checkout the example [source](https://gitlab.com/ayufan/ruby-getting-started) and check [CI status](https://gitlab.com/ayufan/ruby-getting-started/builds?scope=all). ### Configure project This is what the `.gitlab-ci.yml` file looks like for this project: @@ -64,4 +64,4 @@ gitlab-ci-multi-runner register \ With the command above, you create a runner that uses [ruby:2.1](https://registry.hub.docker.com/u/library/ruby/) image and uses [postgres](https://registry.hub.docker.com/u/library/postgres/) database. -To access PostgreSQL database you need to connect to `host: postgres` as user `postgres` without password. \ No newline at end of file +To access PostgreSQL database you need to connect to `host: postgres` as user `postgres` without password. diff --git a/doc/ci/examples/test-clojure-application.md b/doc/ci/examples/test-clojure-application.md index eaee94a10f..56b746ce02 100644 --- a/doc/ci/examples/test-clojure-application.md +++ b/doc/ci/examples/test-clojure-application.md @@ -1,8 +1,8 @@ -## Test Clojure applications +## Test a Clojure application This example will guide you how to run tests in your Clojure application. -You can checkout the example [source](https://gitlab.com/dzaporozhets/clojure-web-application) and check [CI status](https://ci.gitlab.com/projects/6306). +You can checkout the example [source](https://gitlab.com/dzaporozhets/clojure-web-application) and check [CI status](https://gitlab.com/dzaporozhets/clojure-web-application/builds?scope=all). ### Configure project diff --git a/doc/ci/quick_start/README.md b/doc/ci/quick_start/README.md index a87a1f806f..d69064a91f 100644 --- a/doc/ci/quick_start/README.md +++ b/doc/ci/quick_start/README.md @@ -6,7 +6,7 @@ To start building projects with GitLab CI a few steps needs to be done. First you need to have a working GitLab and GitLab CI instance. -You can omit this step if you use [GitLab.com](http://GitLab.com/). +You can omit this step if you use [GitLab.com](https://GitLab.com/). ## 2. Create repository on GitLab @@ -16,7 +16,7 @@ Push your application to that repository. ## 3. Add project to CI The next part is to login to GitLab CI. -Point your browser to the URL you have set GitLab or use [gitlab.com/ci](http://gitlab.com/ci/). +Point your browser to the URL you have set GitLab or use [gitlab.com/ci](https://gitlab.com/ci/). On the first screen you will see a list of GitLab's projects that you have access to: @@ -97,7 +97,7 @@ If you do it correctly your runner should be shown under **Runners activated for ### Shared runners -If you use [gitlab.com/ci](http://gitlab.com/ci/) you can use **Shared runners** provided by GitLab Inc. +If you use [gitlab.com/ci](https://gitlab.com/ci/) you can use **Shared runners** provided by GitLab Inc. These are special virtual machines that are run on GitLab's infrastructure that can build any project. To enable **Shared runners** you have to go to **Runners** and click **Enable shared runners** for this project. diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md index ea8f72bc13..3e6071a2ee 100644 --- a/doc/ci/yaml/README.md +++ b/doc/ci/yaml/README.md @@ -56,6 +56,7 @@ There are a few `keywords` that can't be used as job names: | types | optional | Alias for `stages` | | before_script | optional | Define commands prepended for each job's script | | variables | optional | Define build variables | +| cache | optional | Define list of files that should be cached between subsequent runs | ### image and services This allows to specify a custom Docker image and a list of services that can be used for time of the build. @@ -110,6 +111,19 @@ These variables can be later used in all executed commands and scripts. The YAML-defined variables are also set to all created service containers, thus allowing to fine tune them. +### cache +`cache` is used to specify list of files and directories which should be cached between builds. + +**The global setting allows to specify default cached files for all jobs.** + +To cache all git untracked files and files in `binaries`: +``` +cache: + untracked: true + paths: + - binaries/ +``` + ## Jobs `.gitlab-ci.yml` allows you to specify an unlimited number of jobs. Each job has to have a unique `job_name`, which is not one of the keywords mentioned above. @@ -141,6 +155,8 @@ job_name: | tags | optional | Defines a list of tags which are used to select runner | | allow_failure | optional | Allow build to fail. Failed build doesn't contribute to commit status | | when | optional | Define when to run build. Can be `on_success`, `on_failure` or `always` | +| artifacts | optional | Define list build artifacts | +| cache | optional | Define list of files that should be cached between subsequent runs | ### script `script` is a shell script which is executed by runner. The shell script is prepended with `before_script`. @@ -169,7 +185,7 @@ This are two parameters that allow for setting a refs policy to limit when jobs There are a few rules that apply to usage of refs policy: -1. `only` and `except` are exclusive. If both `only` and `except` are defined in job specification only `only` is taken into account. +1. `only` and `except` are inclusive. If both `only` and `except` are defined in job specification the ref is filtered by `only` and `except`. 1. `only` and `except` allow for using the regexp expressions. 1. `only` and `except` allow for using special keywords: `branches` and `tags`. These names can be used for example to exclude all tags and all branches. @@ -182,6 +198,18 @@ job: - branches # use special keyword ``` +1. `only` and `except` allow for specify repository path to filter jobs for forks. +The repository path can be used to have jobs executed only for parent repository. + +```yaml +job: + only: + - branches@gitlab-org/gitlab-ce + except: + - master@gitlab-org/gitlab-ce +``` +The above will run `job` for all branches on `gitlab-org/gitlab-ce`, except master . + ### tags `tags` is used to select specific runners from the list of all runners that are allowed to run this project. @@ -246,6 +274,86 @@ The above script will: 1. Execute `cleanup_build` only when the `build` failed, 2. Always execute `cleanup` as the last step in pipeline. +### artifacts +`artifacts` is used to specify list of files and directories which should be attached to build after success. + +1. Send all files in `binaries` and `.config`: +``` +artifacts: + paths: + - binaries/ + - .config +``` + +2. Send all git untracked files: +``` +artifacts: + untracked: true +``` + +3. Send all git untracked files and files in `binaries`: +``` +artifacts: + untracked: true + paths: + - binaries/ +``` + +The artifacts will be send after the build success to GitLab and will be accessible in GitLab interface to download. + +This feature requires GitLab Runner v0.7.0 or higher. + +### cache +`cache` is used to specify list of files and directories which should be cached between builds. + +1. Cache all files in `binaries` and `.config`: +``` +rspec: + script: test + cache: + paths: + - binaries/ + - .config +``` + +2. Cache all git untracked files: +``` +rspec: + script: test + cache: + untracked: true +``` + +3. Cache all git untracked files and files in `binaries`: +``` +rspec: + script: test + cache: + untracked: true + paths: + - binaries/ +``` + +4. Locally defined cache overwrites globally defined options. This will cache only `binaries/`: + +``` +cache: + paths: + - my/files + +rspec: + script: test + cache: + paths: + - binaries/ +``` + +The cache is provided on best effort basis, so don't expect that cache will be present. +For implementation details please check GitLab Runner. + +This feature requires GitLab Runner v0.7.0 or higher. + + ## Validate the .gitlab-ci.yml Each instance of GitLab CI has an embedded debug tool called Lint. You can find the link to the Lint in the project's settings page or use short url `/lint`. diff --git a/doc/customization/libravatar.md b/doc/customization/libravatar.md index 54c1780c3a..bd2c242afc 100644 --- a/doc/customization/libravatar.md +++ b/doc/customization/libravatar.md @@ -2,7 +2,7 @@ GitLab by default supports [Gravatar](https://gravatar.com) avatar service. Libravatar is a service which delivers your avatar (profile picture) to other websites and their API is -[heavily based on gravatar](http://wiki.libravatar.org/api/). +[heavily based on gravatar](https://wiki.libravatar.org/api/). This means that it is not complicated to switch to Libravatar avatar service or even self hosted Libravatar server. @@ -31,7 +31,7 @@ the configuration options as follows: ## Self-hosted -If you are [running your own libravatar service](http://wiki.libravatar.org/running_your_own/) the URL will be different in the configuration +If you are [running your own libravatar service](https://wiki.libravatar.org/running_your_own/) the URL will be different in the configuration but the important part is to provide the same placeholders so GitLab can parse the URL correctly. For example, you host a service on `http://libravatar.example.com` the `plain_url` you need to supply in `gitlab.yml` is @@ -63,7 +63,7 @@ Run `sudo gitlab-ctl reconfigure` for changes to take effect. ## Default URL for missing images -[Libravatar supports different sets](http://wiki.libravatar.org/api/) of `missing images` for emails not found on the Libravatar service. +[Libravatar supports different sets](https://wiki.libravatar.org/api/) of `missing images` for emails not found on the Libravatar service. In order to use a different set other than `identicon`, replace `&d=identicon` portion of the URL with another supported set. For example, you can use `retro` set in which case the URL would look like: `plain_url: "http://cdn.libravatar.org/avatar/%{hash}?s=%{size}&d=retro"` diff --git a/doc/development/architecture.md b/doc/development/architecture.md index c00d290371..6101a71a8d 100644 --- a/doc/development/architecture.md +++ b/doc/development/architecture.md @@ -146,7 +146,7 @@ nginx Apache httpd -- [Explanation of Apache logs](http://httpd.apache.org/docs/2.2/logs.html). +- [Explanation of Apache logs](https://httpd.apache.org/docs/2.2/logs.html). - `/var/log/apache2/` contains error and output logs (on Ubuntu). - `/var/log/httpd/` contains error and output logs (on RHEL). diff --git a/doc/development/profiling.md b/doc/development/profiling.md index 80c86ef921..e244ad4e88 100644 --- a/doc/development/profiling.md +++ b/doc/development/profiling.md @@ -4,11 +4,15 @@ To make it easier to track down performance problems GitLab comes with a set of profiling tools, some of these are available by default while others need to be explicitly enabled. -## rack-mini-profiler +## Sherlock -This Gem is enabled by default in development only. It allows you to see the -timings of the various components that made up a web request (e.g. the SQL -queries executed and their execution timings). +Sherlock is a custom profiling tool built into GitLab. Sherlock is _only_ +available when running GitLab in development mode _and_ when setting the +environment variable `ENABLE_SHERLOCK` to a non empty value. For example: + + ENABLE_SHERLOCK=1 bundle exec rails s + +Recorded transactions can be found by navigating to `/sherlock/transactions`. ## Bullet @@ -21,36 +25,3 @@ starting GitLab. For example: Bullet will log query problems to both the Rails log as well as the Chrome console. - -## ActiveRecord Query Trace - -This Gem adds backtraces for every ActiveRecord query in the Rails console. This -can be useful to track down where a query was executed. Because this Gem adds -quite a bit of noise (5-10 extra lines per ActiveRecord query) it's disabled by -default. To use this Gem you'll need to set `ENABLE_QUERY_TRACE` to a non empty -file before starting GitLab. For example: - - ENABLE_QUERY_TRACE=true bundle exec rails s - -## rack-lineprof - -This is a Gem that can trace the execution time of code on a per line basis. -Because this Gem can add quite a bit of overhead it's disabled by default. To -enable it, set the environment variable `ENABLE_LINEPROF` to a non-empty value. -For example: - - ENABLE_LINEPROF=true bundle exec rails s - -Once enabled you'll need to add a query string parameter to a request to -actually profile code execution. The name of the parameter is `lineprof` and -should be set to a regular expression (minus the starting/ending slash) used to -select what files to profile. To profile all files containing "foo" somewhere in -the path you'd use the following parameter: - - ?lineprof=foo - -Or when filtering for files containing "foo" and "bar" in their path: - - ?lineprof=foo|bar - -Once set the profiling output will be displayed in your terminal. diff --git a/doc/development/rake_tasks.md b/doc/development/rake_tasks.md index a4a980cf0e..9f3fd69fc4 100644 --- a/doc/development/rake_tasks.md +++ b/doc/development/rake_tasks.md @@ -9,7 +9,7 @@ bundle exec rake setup ``` The `setup` task is a alias for `gitlab:setup`. -This tasks calls `db:setup` to create the database, calls `add_limits_mysql` that adds limits to the database schema in case of a MySQL database and fianlly it calls `db:seed_fu` to seed the database. +This tasks calls `db:setup` to create the database, calls `add_limits_mysql` that adds limits to the database schema in case of a MySQL database and finally it calls `db:seed_fu` to seed the database. Note: `db:setup` calls `db:seed` but this does nothing. ## Run tests diff --git a/doc/development/shared_files.md b/doc/development/shared_files.md new file mode 100644 index 0000000000..fcd905b54a --- /dev/null +++ b/doc/development/shared_files.md @@ -0,0 +1,33 @@ +# Shared files + +Historically, GitLab has been storing shared files in many different +directories: `public/uploads`, `builds`, `tmp/repositories`, `tmp/rebase` (EE), +etc. Having so many shared directories makes it difficult to deploy GitLab on +shared storage (e.g. NFS). Working towards GitLab 9.0 we are consolidating +these different directories under the `shared` directory. + +This means that if GitLab will start storing puppies in some future version +then we should put them in `shared/puppies`. Temporary puppy files should be +stored in `shared/tmp`. + +In the GitLab application code you can get the full path to the `shared` +directory with `Gitlab.config.shared.path`. + +## What is not a 'shared file' + +Files that belong to only one process, or on only one server, should not go in +`shared`. Examples include PID files and sockets. + +## Temporary files and shared storage + +Sometimes you create a temporary file on disk with the intention of it becoming +'official'. For example you might be first streaming an upload from a user to +disk in a temporary file so you can perform some checks on it. When the checks +pass, you make the file official. In scenarios like this please follow these +rules: + +- Store the temporary file under `shared/tmp`, i.e. on the same filesystem you + want the official file to be on. +- Use move/rename operations when operating on the file instead of copy + operations where possible, because renaming a file is much faster than + copying it. diff --git a/doc/development/shell_commands.md b/doc/development/shell_commands.md index 2d1d0fb415..65cdd74bdb 100644 --- a/doc/development/shell_commands.md +++ b/doc/development/shell_commands.md @@ -35,6 +35,16 @@ Gitlab::Popen.popen(%W(find /some/path -not -path /some/path -mmin +120 -delete) This coding style could have prevented CVE-2013-4490. +## Always use the configurable git binary path for git commands + +```ruby +# Wrong +system(*%W(git branch -d -- #{branch_name})) + +# Correct +system(*%W(#{Gitlab.config.git.bin_path} branch -d -- #{branch_name})) +``` + ## Bypass the shell by splitting commands into separate tokens When we pass shell commands as a single string to Ruby, Ruby will let `/bin/sh` evaluate the entire string. Essentially, we are asking the shell to evaluate a one-line script. This creates a risk for shell injection attacks. It is better to split the shell command into tokens ourselves. Sometimes we use the scripting capabilities of the shell to change the working directory or set environment variables. All of this can also be achieved securely straight from Ruby @@ -81,9 +91,9 @@ In the GitLab codebase, we avoid the option/argument ambiguity by _always_ using ```ruby # Wrong -system(*%W(git branch -d #{branch_name})) +system(*%W(#{Gitlab.config.git.bin_path} branch -d #{branch_name})) # Correct -system(*%W(git branch -d -- #{branch_name})) +system(*%W(#{Gitlab.config.git.bin_path} branch -d -- #{branch_name})) ``` This coding style could have prevented CVE-2013-4582. @@ -94,9 +104,9 @@ Capturing the output of shell commands with backticks reads nicely, but you are ```ruby # Wrong -logs = `cd #{repo_dir} && git log` +logs = `cd #{repo_dir} && #{Gitlab.config.git.bin_path} log` # Correct -logs, exit_status = Gitlab::Popen.popen(%W(git log), repo_dir) +logs, exit_status = Gitlab::Popen.popen(%W(#{Gitlab.config.git.bin_path} log), repo_dir) # Wrong user = `whoami` @@ -108,7 +118,7 @@ In other repositories, such as gitlab-shell you can also use `IO.popen`. ```ruby # Safe IO.popen example -logs = IO.popen(%W(git log), chdir: repo_dir) { |p| p.read } +logs = IO.popen(%W(#{Gitlab.config.git.bin_path} log), chdir: repo_dir) { |p| p.read } ``` Note that unlike `Gitlab::Popen.popen`, `IO.popen` does not capture standard error. diff --git a/doc/hooks/custom_hooks.md b/doc/hooks/custom_hooks.md index 548c484bc0..0f2665a3bf 100644 --- a/doc/hooks/custom_hooks.md +++ b/doc/hooks/custom_hooks.md @@ -7,7 +7,7 @@ Please explore webhooks as an option if you do not have filesystem access. For a Git natively supports hooks that are executed on different actions. Examples of server-side git hooks include pre-receive, post-receive, and update. See -[Git SCM Server-Side Hooks](http://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks#Server-Side-Hooks) +[Git SCM Server-Side Hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks#Server-Side-Hooks) for more information about each hook type. As of gitlab-shell version 2.2.0 (which requires GitLab 7.5+), GitLab diff --git a/doc/install/database_mysql.md b/doc/install/database_mysql.md index c565e90da2..513ad69ec2 100644 --- a/doc/install/database_mysql.md +++ b/doc/install/database_mysql.md @@ -2,7 +2,7 @@ ## Note -We do not recommend using MySQL due to various issues. For example, case [(in)sensitivity](https://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html) and [problems](http://bugs.mysql.com/bug.php?id=65830) that [suggested](http://bugs.mysql.com/bug.php?id=50909) [fixes](http://bugs.mysql.com/bug.php?id=65830) [have](http://bugs.mysql.com/bug.php?id=63164). +We do not recommend using MySQL due to various issues. For example, case [(in)sensitivity](https://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html) and [problems](https://bugs.mysql.com/bug.php?id=65830) that [suggested](https://bugs.mysql.com/bug.php?id=50909) [fixes](https://bugs.mysql.com/bug.php?id=65830) [have](https://bugs.mysql.com/bug.php?id=63164). ## MySQL diff --git a/doc/install/installation.md b/doc/install/installation.md index 2e9ac7393e..a88ba8eeb5 100644 --- a/doc/install/installation.md +++ b/doc/install/installation.md @@ -106,7 +106,7 @@ Then select 'Internet Site' and press enter to confirm the hostname. ## 2. Ruby -The use of Ruby version managers such as [RVM](http://rvm.io/), [rbenv](https://github.com/sstephenson/rbenv) or [chruby](https://github.com/postmodern/chruby) with GitLab in production frequently leads to hard to diagnose problems. For example, GitLab Shell is called from OpenSSH and having a version manager can prevent pushing and pulling over SSH. Version managers are not supported and we strongly advise everyone to follow the instructions below to use a system Ruby. +The use of Ruby version managers such as [RVM](https://rvm.io/), [rbenv](https://github.com/sstephenson/rbenv) or [chruby](https://github.com/postmodern/chruby) with GitLab in production frequently leads to hard to diagnose problems. For example, GitLab Shell is called from OpenSSH and having a version manager can prevent pushing and pulling over SSH. Version managers are not supported and we strongly advise everyone to follow the instructions below to use a system Ruby. Remove the old Ruby 1.8 if present @@ -128,11 +128,10 @@ Install the Bundler Gem: ## 3. Go -Since GitLab 8.0, Git HTTP requests are handled by gitlab-git-http-server. -This is a small daemon written in Go. -To install gitlab-git-http-server we need a Go compiler. -The instructions below assume you use 64-bit Linux. You can find -downloads for other platforms at the [Go download +Since GitLab 8.0, Git HTTP requests are handled by gitlab-workhorse (formerly +gitlab-git-http-server). This is a small daemon written in Go. To install +gitlab-workhorse we need a Go compiler. The instructions below assume you +use 64-bit Linux. You can find downloads for other platforms at the [Go download page](https://golang.org/dl). curl -O --progress https://storage.googleapis.com/golang/go1.5.1.linux-amd64.tar.gz @@ -211,9 +210,9 @@ We recommend using a PostgreSQL database. For MySQL check [MySQL setup guide](da ### Clone the Source # Clone GitLab repository - sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 8-1-stable gitlab + sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 8-2-stable gitlab -**Note:** You can change `8-1-stable` to `master` if you want the *bleeding edge* version, but never install master on a production server! +**Note:** You can change `8-2-stable` to `master` if you want the *bleeding edge* version, but never install master on a production server! ### Configure It @@ -246,6 +245,9 @@ We recommend using a PostgreSQL database. For MySQL check [MySQL setup guide](da # Change the permissions of the directory where CI build traces are stored sudo chmod -R u+rwX builds/ + # Change the permissions of the directory where CI artifacts are stored + sudo chmod -R u+rwX shared/artifacts/ + # Copy the example Unicorn config sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb @@ -253,8 +255,8 @@ We recommend using a PostgreSQL database. For MySQL check [MySQL setup guide](da nproc # Enable cluster mode if you expect to have a high load instance - # Ex. change amount of workers to 3 for 2GB RAM server # Set the number of workers to at least the number of cores + # Ex. change amount of workers to 3 for 2GB RAM server sudo -u git -H editor config/unicorn.rb # Copy the example Rack attack config @@ -295,7 +297,7 @@ We recommend using a PostgreSQL database. For MySQL check [MySQL setup guide](da ### Install Gems -**Note:** As of bundler 1.5.2, you can invoke `bundle install -jN` (where `N` the number of your processor cores) and enjoy the parallel gems installation with measurable difference in completion time (~60% faster). Check the number of your cores with `nproc`. For more information check this [post](http://robots.thoughtbot.com/parallel-gem-installing-using-bundler). First make sure you have bundler >= 1.5.2 (run `bundle -v`) as it addresses some [issues](https://devcenter.heroku.com/changelog-items/411) that were [fixed](https://github.com/bundler/bundler/pull/2817) in 1.5.2. +**Note:** As of bundler 1.5.2, you can invoke `bundle install -jN` (where `N` the number of your processor cores) and enjoy the parallel gems installation with measurable difference in completion time (~60% faster). Check the number of your cores with `nproc`. For more information check this [post](https://robots.thoughtbot.com/parallel-gem-installing-using-bundler). First make sure you have bundler >= 1.5.2 (run `bundle -v`) as it addresses some [issues](https://devcenter.heroku.com/changelog-items/411) that were [fixed](https://github.com/bundler/bundler/pull/2817) in 1.5.2. # For PostgreSQL (note, the option says "without ... mysql") sudo -u git -H bundle install --deployment --without development test mysql aws kerberos @@ -310,7 +312,7 @@ We recommend using a PostgreSQL database. For MySQL check [MySQL setup guide](da GitLab Shell is an SSH access and repository management software developed specially for GitLab. # Run the installation task for gitlab-shell (replace `REDIS_URL` if needed): - sudo -u git -H bundle exec rake gitlab:shell:install[v2.6.5] REDIS_URL=unix:/var/run/redis/redis.sock RAILS_ENV=production + sudo -u git -H bundle exec rake gitlab:shell:install[v2.6.7] REDIS_URL=unix:/var/run/redis/redis.sock RAILS_ENV=production # By default, the gitlab-shell config is generated from your main GitLab config. # You can review (and modify) the gitlab-shell config as follows: @@ -320,16 +322,20 @@ GitLab Shell is an SSH access and repository management software developed speci **Note:** Make sure your hostname can be resolved on the machine itself by either a proper DNS record or an additional line in /etc/hosts ("127.0.0.1 hostname"). This might be necessary for example if you set up gitlab behind a reverse proxy. If the hostname cannot be resolved, the final installation check will fail with "Check GitLab API access: FAILED. code: 401" and pushing commits will be rejected with "[remote rejected] master -> master (hook declined)". -### Install gitlab-git-http-server +### Install gitlab-workhorse cd /home/git - sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-git-http-server.git - cd gitlab-git-http-server - sudo -u git -H git checkout 0.3.0 + sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-workhorse.git + cd gitlab-workhorse + sudo -u git -H git checkout 0.4.2 sudo -u git -H make ### Initialize Database and Activate Advanced Features + # Go to GitLab installation folder + + cd /home/git/gitlab + sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production # Type 'yes' to create the database tables. @@ -346,11 +352,6 @@ The `secrets.yml` file stores encryption keys for sessions and secure variables. Backup `secrets.yml` someplace safe, but don't store it in the same place as your database backups. Otherwise your secrets are exposed if one of your backups is compromised. -### Install schedules - - # Setup schedules - sudo -u gitlab_ci -H bundle exec whenever -w RAILS_ENV=production - ### Install Init Script Download the init script (will be `/etc/init.d/gitlab`): @@ -494,7 +495,7 @@ See the [omniauth integration document](../integration/omniauth.md) ### Build your projects GitLab can build your projects. To enable that feature you need GitLab Runners to do that for you. -Checkout the [Gitlab Runner section](https://about.gitlab.com/gitlab-ci/#gitlab-runner) to install it +Checkout the [GitLab Runner section](https://about.gitlab.com/gitlab-ci/#gitlab-runner) to install it ### Custom Redis Connection diff --git a/doc/install/requirements.md b/doc/install/requirements.md index aa0d03b75b..c0ccdd3745 100644 --- a/doc/install/requirements.md +++ b/doc/install/requirements.md @@ -109,8 +109,4 @@ On a very active server (10,000 active users) the Sidekiq process can use 1GB+ o - Firefox (Latest released version and [latest ESR version](https://www.mozilla.org/en-US/firefox/organizations/)) - Safari 7+ (known problem: required fields in html5 do not work) - Opera (Latest released version) -- IE 10+ - -### Common UI problems with IE - -If you experience UI issues with Internet Explorer, please make sure that you have the `Compatibility View` mode disabled. \ No newline at end of file +- Internet Explorer (IE) 10+ but please make sure that you have the `Compatibility View` mode disabled. \ No newline at end of file diff --git a/doc/integration/facebook.md b/doc/integration/facebook.md new file mode 100644 index 0000000000..bc1f167308 --- /dev/null +++ b/doc/integration/facebook.md @@ -0,0 +1,97 @@ +# Facebook OAuth2 OmniAuth Provider + +To enable the Facebook OmniAuth provider you must register your application with Facebook. Facebook will generate an app ID and secret key for you to use. + +1. Sign in to the [Facebook Developer Platform](https://developers.facebook.com/). + +1. Choose "My Apps" > "Add a New App" + +1. Select the type "Website" + +1. Enter a name for your app. This can be anything. Consider something like "<Organization>'s GitLab" or "<Your Name>'s GitLab" or +something else descriptive. + +1. Choose "Create New Facebook App ID" + +1. Select a Category, for example "Productivity" + +1. Choose "Create App ID" + +1. Enter the address of your GitLab installation at the bottom of the package + + ![Facebook Website URL](facebook_website_url.png) + +1. Choose "Next" + +1. Choose "Skip Quick Start" in the upper right corner + +1. Choose "Settings" in the menu on the left + +1. Fill in a contact email for your app + + ![Facebook App Settings](facebook_app_settings.png) + +1. Choose "Save Changes" + +1. Choose "Status & Review" in the menu on the left + +1. Change the switch on the right from No to Yes + +1. Choose "Confirm" when prompted to make the app public + +1. Choose "Dashboard" in the menu on the left + +1. Choose "Show" next to the hidden "App Secret" + +1. You should now see an app key and app secret (see screenshot). Keep this page open as you continue configuration. + + ![Facebook API Keys](facebook_api_keys.png) + +1. On your GitLab server, open the configuration file. + + For omnibus package: + + ```sh + sudo editor /etc/gitlab/gitlab.rb + ``` + + For installations from source: + + ```sh + cd /home/git/gitlab + + sudo -u git -H editor config/gitlab.yml + ``` + +1. See [Initial OmniAuth Configuration](omniauth.md#initial-omniauth-configuration) for initial settings. + +1. Add the provider configuration: + + For omnibus package: + + ```ruby + gitlab_rails['omniauth_providers'] = [ + { + "name" => "facebook", + "app_id" => "YOUR_APP_ID", + "app_secret" => "YOUR_APP_SECRET" + } + ] + ``` + + For installations from source: + + ``` + - { name: 'facebook', app_id: 'YOUR_APP_ID', + app_secret: 'YOUR_APP_SECRET' } + ``` + +1. Change 'YOUR_APP_ID' to the API key from Facebook page in step 10. + +1. Change 'YOUR_APP_SECRET' to the API secret from the Facebook page in step 10. + +1. Save the configuration file. + +1. Restart GitLab for the changes to take effect. + +On the sign in page there should now be a Facebook icon below the regular sign in form. Click the icon to begin the authentication process. Facebook will ask the user to sign in and authorize the GitLab application. If everything goes well the user will be returned to GitLab and will be signed in. diff --git a/doc/integration/facebook_api_keys.png b/doc/integration/facebook_api_keys.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c44ac0f117feebe69adb17abc31312688a76eb GIT binary patch literal 125921 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
    Xgd&ZEA;!Z@-keQ(hUxt8h_2iO(!fO}dh` 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 literal 0 HcmV?d00001 diff --git a/doc/workflow/merge_requests/merge_request_diff_without_whitespace.png b/doc/workflow/merge_requests/merge_request_diff_without_whitespace.png new file mode 100644 index 0000000000000000000000000000000000000000..67d67a64d122ffa00c76a34a095f56b6f48adb01 GIT binary patch literal 98887 zcmeFZcT`i&_cw}IP(-kyB27g>M2J$QMnOTO_YNYx_ZA?as3=ktgwP`(y+o;k2~km6 zfB*p^Er1XLgwR3~l8|tDzU6tJKkoa_UF*Gf-L-zRR!+`2nKRild-k3^dw=$MZEUD> zg8L#j2M5Oq-G}#0IXDi_a&R0xaP-Ljoy4TG0{dSFLQHiuIqC+4miI3XdE7I&$HDPA z?f9Da{`wr~3aD`9;MgnGy?@U<(s31WEXHEAm1eZQ!CsGEkDgJb zIIeHB!)Q3FrQPJD3V+ibpU;`zLGf3(UtPMydFA@Evmbd*nVpc$mc7t;@7alN^P?wS z#ZM(1Ix73>^o{42pB{R6_SOUeS*WmzplT3TLu7+bgJ;0)>e1HGBm@>mh}Ed-#sV!gm&xE> zW=`gSSX(QRUqlpYn@uRWltOn^8%J!9+ZVWfSvg)~1l|(oSdPk5fs<;Z!ltT{RSeA% z9o->v%ptr*EF%+TJz4FA6bX}Q`=7@CXUzU*YW$Bl{g2l8|D$pQmMaE33jyb`=txFG zc35FBVn~MYTijUD5(k~~_;{-8v{&TUJ7nl)^`PolVC#nyUSc7iFF!x2dGtSrPv3)2 zlDaP!j9;s_Epiz6Y#`QXl83&34f^`byDd#0Tp?RuDBji`v65g)w0Kda;gF_;#*c&t z3xe@(Z8cSPnPw|qW-XN+b};j<$Gt1~#Zi4CtA~XOTlqb*Sz)CNpgHr5)&#EFd@XnURKq-2`t!gt>Z$K9l$Isx8569sK}(EjimF4!eZ-b<(a{D z0fneaQs3=rm2FU~;s2tMCqK~wY4x(4!XDJ#t%BrP$<@*l75`Wvrr^0=2w>wW+Kp!Yv8aoHDqEy$jZ$}arWGO47&Y87y z_~IHB4H=ikQL1;GWo&&uqHkmw8vtl=LiiyVO}NiFZ4~gY7r!m-^?k-_ij07)_o*W4 z-2a?Rl&p}>XU{k%K8KX^q`e!RKtD6G3k@-NjuX3}DTj|zEVU+qb;exSZyWf2CslEDoFbkv-yl^yj^Vj)9 z`*z&l<;2qv?Eyih8YdVioTw)It|!ZdXlgmZSwFF%0tr)I4;)uiP#87$tEoE$)7-Q* zbC5QN!IR6Yqb9CHa=c6|{mZk+QrPO|A+qUL4V)#S7Y{G6O0*0hW@6mn^*D`Co7NN? z_bei5JGcSZWN%~#n^PG9?;B*PC>!E-wTgseT{EQD%{`ZBLTu&Q?Mx9|Ug*hSkPiG! z;r_{q1afCeo?@43y`ODj^R!H&R-|~#zCoR4+=9P zc-fnD)Dz0Y)27}iN)CSU!fIQetlWA}*C}5yw%l`rJVg^Xw^FdrKS{HdjoTG7sU6%X z&0e%|Wb^Mi$$g6wUz^e;D*6_^KpkHyNz+^Y=sAfgH+sXe?&2@8^;mB?5%7(x z+_57U4?iWEU-h$(tg;th8`Y5F5r|MbD%Vd;F4hl>rd+(oKWGcobOMG&g&}Yn+iHC6X&fT|YZ&6Q?iFm20RyKB_UzFkX}~05 z8S78+ovFfl0q{-n(Xp`=g`q&)7ca6n{jD(o@;>;bm$@=N0Gy#^R?bcp0ab{qZ+vsv z{&5`R)t9XgV$&tJr$S(ZpPT`hZ%>iMBI+-POVTu?4(@b`TFo){Po-n2<3Wv)o542a z2tY=4Rn+a;5EG-@0b_YsBqLGPWqV~1&r+d8{q)RwW7TT#rzVR~T~+0Y$vQn@xy7a8 z#MDu-1;4aBFZ3~~w_%%1z?HTG5IT0vXNTGm(Up%HH!ID`%`X6GMJu0aB!H?5=ME+~ z0keCfeDskVtn8O;Yd&Pzi?;;9{n!3tDwXdUgsjoR$wW(Hxx1q0)pz_5ZskUC?NwmBO1gnJ+$5K?nSFbxs=x5)x zYXN^qyXPx*QAJ(dLFA1Jz@dB`2*?N{vj@5l(3SjfHvu)r!CGz}9$lGf0`ZGQ&lC*> z49pZQm*|XPYs%HfM!YE^1zOSDz72!f%$na1&9se*%Dl?l+m5^xS3l2@o233;4kVAi z8mVPq$KWKm9QJ6DVt*K{f?;lMT0z7_7eW1EOBJKyif8M zJX=KZW&xN*R1TeqRbMU#lJ1x27!;ZOa7MFo3uE1{P}cXJt+F(nfB5XP9xx=9##1Ju zURbOn8k;1ttQao>S~|vfK+up6oP7u|qR`x^C29AJP&FerJnC(%cKqe>Br6Mvfa*-< zP#8C&-hB@=Vb|$b)S?>n=TLtx@`X3@3ZvuQqukA}1&uKzoe|ov{>I9sOX|0tNH@iS z4yVK-vdfT&%rV%^U5Oip#-o)tR7!~^%nhPB(}d~Q!PR>he?VgEeU8R8z~ZY@VoQm@ z-OC1rYBuIFH?oMzEGs0(r`JR(N`*pQHX^t0yly8G(B(8-w2?w#iT!U^bOw>Yb&f|s z_IVwW4Qe9~s4f>quN6V}b_rXQRMoW)#JaDkFZo1eW)2Am2!v8bt?c~1bt(fs7k077 z;ZbH&9EI3DYRfoiAhF9IL~6n=sMJYGa$_p?b&@|4dhb`;1+%umlTFCg)1TK)x7DyN z*;-dw-I4q#uTwx<6dEP+Tl~ryL6Ay=r%V05nz?^w=AZDWrW()v7?-a>BSsWUi~%P? zvZy!pO9mFLRXt2MZ4i&lav_T(S~^O_%+_(C=j!K~2J@!!x90{#v}4!&^aie2ym&u^ zkapq#iineRE31@s!N__ov%L}8 zX3<%xS?4gFrQ`bpiV=vk%)Gh1azR}&p38Ii@4&G-a3L=yqP0!^uu_yhN_@*0$n-TCP2^ zuD(^~;Bb!Fb-x-AG=(4fG-?k0@OZSHQV|E+Q^PH}p9j}fdR$UkI`Pr!BYV^z(+Ah| zJWSh^7bTBZUS$ANQXWcM2u~Qjh*FjhN!pq69plscw|v+t{<3J2cf~3TG|H)s@N_Mg zd8i?$5S6*?n8PM{GZx2;hMZuGByjWRT(Es))>c~V<;0J=S)~`4o}J526Nz zTSqdpM2dGu1uHwyBBh1}Oj9M^nXlWWTq3Iv_`*TSZQ&%ss3e{>L9bEw>*+FW-+6I_ zST%{6Y*DSQRkP7uwjnMzgsl7tMAO9Z3ZW|_9wW?Ow59e_#HB)K;<5y~u9TSwE5j2t zit6i2-b0bvi$A7tWlC_5rK!pM)2akboKK`JN-+Pl;6|vM#kCW{D&|Lq_9r@wr_`+& zjfZcIg@X$6Y1x(FdM#S9jqfu8D zVt-zEH`>NYXg>5_}?ktI!={qmy;qAGV@3-yB5C;V= zxHIS*C$=#~KFeKNV}mYdxR*y)X_fP{LK6rNJ`3~ww>DAch11&Mndi?~6rUpTs{tUd z55B{IqVPQ#+p7)e-VOTaE|CnadN`Xwbi|jno7HQmOFKqIHw`$#uu&LqT;5_V%8%vu z<)%~qwCGxyv|aOHs<5gjzBkj{dZ$oLH!9zLV5EpJDvN`toNJ1clU^ZEg2%l;{yQO| zwCM;`h@e{Jty;SlLtZ5^o#5ft-5yS|1+7$;FVI6S1UMoBp~MWPDQ3lbm;6WKPcR?Y zU+%oUJ9SlQVVh1SsFOGf=VUimUVXfg#yIqB<4Nxhng z;-xix{>WDfzefyICg=$9p6e`0zg2l;T`TGo;&9YtbjUNwxG9F_Rhe=STf&6j#EW-& zQry6It~fWzJ++L7n0T_-6(xVo&-oe6 zONbL{{;ifTbtjcL4La5A zB(Yt4Y#5!xk9sw>bW{cqWj^RL1$Q*nXJAFJexN~I^X%0oy2Ih79`$>1DtlL1zt(}} z%x3UCDEJ%?sbtnSaG~3&x5$JCfZXLK;ShG{Ux^Jro^kSj3sE<*@k1ACd3DPHh8=** z_giq`07~?etLoq9;WUAJeClei3S-07QUu7{wGJpPFK97A=c7p?G^`|gog}lbch;h^ z*AV4W({XzxZD1!EH1n2nO|MRqy`@Zb@R5};g-=E{Exm4t*v=mBG>FyUr=Gke)C6p4 zmu{;PVQ612CgEwm7%jh4dIjXW%N)VK;A~r`8*Dc?`z+NJ`7D*AYswmJ)`wpH3C`UF zr3yX3|9s88e!-meNCABSuJ&O;&FjTF0z^q4$X7OdiK*K%ketzv!2}&e#xlcgKRx;XQg>j*?WPiZie{bh2S2I=iiN+KB+b>x4(t+d<|8co^rR=H@43W0W>XV5Fp3j zUWx~P%{sEl2s~nX=cfCT;Q7sG8$TNLmYCn2xS!0v1zKyfvIiw@G-2iaIRFz1Ypqou zZYl208ecUyv1ewdzrV_Nubl))_7n|y9hVe$tkRn8K`0a)$ei_bd}-Y^-+D_@o_3Fe?_YE3ZUKEos?BHKi_t*0*p_IOSdOa`XF%{COYD9R&y_BZ<+cc;A#AYJ zve6>+BTUz5aL+n0ovjA-Y!(sz^9JCe6*(a91d=Qe*MC?NG~XH3P8qXnd;SEKMf3Xe z6S9Owf^BlMsKqzCN?c<~6Ms4130RoAoda(s0~p482V9m0RM*S%0(M{XEQk_WH`OOx zZcT@x61Eou;&eKof<}B(GkMJcGxvyNeji0=#$Wp*@EV_MBv{*PPTe>%kU6e3z{nWl zugE)f{j{`P+loOaP2;x#3yiR69Q81F49aB(etGuNNV52y9Pneg1nC0~aBfHo0N3GD zLp}v7`l?SWgi23uZhPCdG}&uhg)}Usr=O;u=dNR<`0ez3vBr*ZxkdxIreh>#+()M)=`oZ|9y3PoonklRkZIEvWi3JB<#A_C?(tJejm6mSmYy2@I}mp}hgCTr>GkLS%1C7f&n%ftb{h=n4HOI# z5FrI<#S=#VFSn`o_uSNOGT#d{p0FdEIoQACiM7{oOTDjsOpmNh&vqaV8}vc@kc84`LCzeW(%ukv&$6XVG& z`pWy@4<+gScX!@jJmGKkXM5&V`RI5zGo&xinRnADA~VUB&9 zu%M_-#wkkyUHTMsp$=zNj)?El7c?F6avscm|2;i9;a67p*+fVU`z^L+;=2Z0Qn2Mt zR?wX5Kw{qQG}+qQi}Np;a&NkUVl*e6(G!O@{=FiMWK!@>#xrTJ*xt_9Sh{P+7$Lml zGaC2&g7<}XtG!qesVW(b(2H6U5dO9Y8@=DaR|s+W8FvZZ^BUN-(R9%x{EiG-Xe~Plb^ONRfxfZ^{_#qC$w}=kLLs~Gi$xlFA z*hyEuoq-YyzMZd78!b{|U6CkX6y!$L!0`E|rqG=YXJyMc8=IUdNDD9u2j-PNxRU`Y zS6hOE)Fqwp!Jm`)R_UkE(Q~R?14bJ3tLi(m38CbEB^1|N$0&T}?X6(m>VtFb6-?LC zs+rY}$+*YukJw4y_-w;kAAjexZT1zYbwWC_hd=pXWf-#we4Y<*+!JkK)!4V0a6ptJ z+^7U;v~E%8QK|+IF?Dpj}EC3{@i0Xy#LR1j_r zdiRqAu30wT=vFxVo51rtM@lr+c;EvS*I}sYaki5>471hi@VD#=w;_xl6MgCJY0VMP zqHA~Y>V#OJJ%2a{z_9#|T}(H_<(nDFwi{atW>!)E5PyJ7ouUqopg)PTl_fzy! zTWF^(9OOQze%m5DGfVMBaFWzWkR@c;lvmH?S%3qQXFj;%*4wuXN*~Vp(df$aWzRWZ z_p1;5*y*e_u7qhsP) zGC?uN-;Dn5YZ|@wzQYBNE;KL;el&9XjY|*uEPi$5#-hq$Efro$FgNjZow&x{N^y=n zs3vyZ+-$ki*se3*Bht~nYy0#291n-I-M(2TtL_lghvfX2;k3&qNAR|`G?xdL@i%W4 zm3UY@Xwo6$na)L{m&XOzmgk37KQFUc9-V!>htfIe*puJmn{Zh9ISmWJj~=e3b*vGC z&(r!rhV>33oKX(LbjMFCFqvEf7feWnH8A_Tkd?3J>fL4^6*t$#BO*IFp9Usa@1+*y zeiG7K-PIf!XL(-{g}zC&Mci36JVWwWLv!C4Xy9DRrX}A2vv2z)wW5E1&RiVoH1?qU zMweR;WG%dkHXEtU{oc`38zZ_&D2f!VJY3os6y6py10t;K*ry1lPh#)9CM%=R+b7pu z$jN-iS`20Z`Cp_TOqVqDh_*S}+cC3Uqk{!ninK;A#dG~jH+-n`g;kaA1=vWlmUkbG zcN8R0VbaF)h&{UM69GQ;jv{!rmHMpFFf?fyiDKq!)Ui#+zS|U@@JQK3AihL?bu?Al zcfg7<@Bp2jOTQnhu(zZLZ)^Irl&jwhR6@;y1Ho7$@VyxpE^M2$Zm$PCg=v|I0>(18 z1U)y*N<4>tl*&i=%cO|Ny^}5X7)lgfD}uzSXV&ekg>5^{wB`DLnKNu#sS?CjPo(t# ze^uikd){NjRde@736~$CV+$#-vjj*Ce5(yJwbwhYpecP#w6!oei&WZ$;r1K}(D>kZ zW~Ll><|pxa?MPT(G>B)15=xUJE?n4%P%AL%G8!55@IViLcIook{PQbxWA>g!d6QF< zXqdhq{P=em{70b@rg+vNV)|Nw7jGVEur->tw!P88*Y&%}#|kw2lxxWY$jq6-jbzpc zeb{5ukPsyvKDl{%JFvgw*T#hnp?1NUxV>20ChtrasJkPAK_Ecp{TNh|UMyq#-B#YW znhfF#k1F&a0U9SF#`R~2une2$C=?YEgb`G@Rxsu0w*kE?E4g2`Kr&Vk4vp~0EXI)y zMUTp=NX0PZ_URS4F?RUu0r(V^IYPzVYc$?lPW^qme=X)%lYtbKbD&}O6IL&v%sEPD zxn}J^obIH?d&vFsJKDqpPECpDdJ{i&GLLf}rnSF6kiGNC0`dKgB=-50)VGiR9DROu zGmERDv`XtmkjM{PyIco-q0ViDRRP+Zz<%dvXUXW7Y?o4BobUb+Ej}LA1eYlyTFv<6Mnc<8Xf9t1 zI6o<~5{rl66%EUOul%AM-K&_@oDuu(AW>&#sQQDbrHA=T9N`hJcE3c@66e*$CS}SD z1+fIPqeF_jC5DE5fVw(A3iJA|W5XWz>!7Kwo@za9LSkQtwE|1-P$2C(!Z{UXB&36$yzSGuf53#EbD^XM}LAAoar z!QZ{wyxmGGE?iKhA86a1#16*A5}Dg2f^nKwjfvybP`#37N*wMqkEagw!}!de%f8BhE?50bMY2G zO*qnPb;evrIbzM8UmwNTjV(B-3Q6*61uDa`$Uz&5LKR4w<7Gq(UR}Ad@7yM%kY|RT zNf>QB{|&O5{#2b$uVb>BRSCk=ms!=Us#sJMBDH1TZ}^I5PBmgpzbjSvgs()o8~wMU zETOnJC$=gW2f|r;az^r!90ETS=FkNNK0!5N#q0K0*lWVypbmN+GM`1;t15blXOs^a zJgb?Szln7LVMC0VUk=3lF`f~4j!NumF1knEP)?qL2#mS&xiurM%HxG=FgFh%`6G-S%ocUSa{l_dtsN|I@LZ53R`~VY`kp-y!=UyZVzPpnq1rMNo{-UYiaX|p5^P~A>t%=$s=0JYDWI{GWRm6a1OJ3piRY>x1? zqfdlcnK`@rX4@ita{DwK{61v0f^`e7YC8AXN?QQiF&6T1=v9Z?%p2k&NRK1p{xHc3Q^>}_arhe8rJs)_J+kUcF zF$9sO`Mt3O;Xt$KtG`buiM!DET0l>qW&LYq9Sar>;zd5{}3JaAJvPCe*Z9c#`n6eUgT-eA?EU?2Bq{fqX!ggnn5 zJCNl;QTAPchkj{wU3(6DlQ{EnJ%#}4EuirVs~JDSlp_sE{=2tX1SNJJIM711ZE+%x z1;T4Y*{-LBn6$=a6y#2sFLRHS{0N6o`n}^?Le;0~+h70ks#TIVMz=S9OUpkVwgl~1 zdH>FdPK0IfIpNt^+g73NuxQMp&@Ugs zu*dx7Cf{M3_&2EYS<#4)^$6Zd`V;KPM&R`_i5(Bev_OnheoF>L?|}pV?(qZ2LSu4} zg;5$l??Kc=u7+4w9Pru-+n5TP(Yz*G6KAB6o!M1DAZ4~`G&m{OuJElPHIHmy9HR}W z+k~Lm5CWPOz$+8bbP7P&s&VSnkZ1xH5=gs#QVW~p&)SDKFl7kwgVd@jOc0)8FEh@e zu{c+Kg!dCb_f3>_Ma)s+ho)2NJDR`e+fkq3ayh)4B5JtZ{)VuV0-_No9re8+cYXwX zwL;{J+`pX@k&d7XD#a5pep)o~m9>C|8SZH}z_9+rh4#n0CoR8nHGe;K_LqeG^QYff z@jvc3`x`v?tfd|nOW$|-(naRW z=%b@#Q_g(riarU`F(oaZ36qvmbRYh`J^tP*_*GR^^=qAC$x~gAv1cZ6-cH97-Cyss zis689r7n9PY`UqsQJr-qQ0NpEAZbr~csgwBc4S<^<5T{89?Vx+$GA3*tqb4t`z11w zUDDZ&J_(h^bp^v|`hE(+Hyj_yVY+&YoL33v_ciWPYVNd0&VBvXTDu>HOnaNI%{`m* ziu_uW{ov&;>M-vzrJc@YLvKaXY?fe8U89p&UAJSbx&Pj}B?6Q7rV(uUCY#8tiNHbj zS8jfI2rS|)6~+jeW^hi%JrrUd4Uc zyb&K~w3sFim7i$6=FtTFvZWKsIzd_n?vc3}FE>zPU zHZs(b$UQ==vMSeN=J&&Uydy|B9iTv)Ca-kIW#;-=MVxP}36tNTe_9850bxUpQJQ1c z8r7yBfPe0igAKhrA-IqxPSuDRjS=Ke4*BA{aL@!Zb<$nAoLX*3zZ|p2X5lYv>`I)r ze|OVk^jZr)ri_>3y<&+cF=AP)hL{hI1yAu3uCEa8q>IWtCuXdt$ORn{7TTg2aL#9829Ps!x7*5_3wl?U9BWrxoCC? zJ`WJet#;9IY$l)a+rui54@P5jQRlA>Q_m2tteMzuwhRDa{P+J5p7Pv58TrnW{A zV-3!%%S|;W3vgbK5n4gaiY9VvxV+TRJx5@w1r=<;h1UhxYM&>y+FO1AH+n=Cz}9&q z2$zso>rTY3pRCqnIJuREz|cA`R3y}h^GrKIG$jP_#}DPVXf2{*WflE(O$sXu-JoB+ z%ihT~_*Ggw4fp9JTuv=9uL)ss*m?ZDE?9lxQuSC))YwZ>2~aoM`?7tOwfy4-BX^Bb z2Wp3Y06Oe@9OY?OS*#@T_PtUOrUN_fNvbH&aK1AIqSg0h7N7rX>-YNR>|Z9-+F9v_ zM+IJO^%Lu0n6yJINqReOZ^msKwnv3-v#P=OXZF?wmxuSF53|U8>;g6($buvR4-3LoF2?D*PEZNni*89jiBRdV@7f# z_Wc+ZcvuzgF775Ihh+;>saD?yA)Nqk3JcVQbc46H&&vkX*4AbM1BKMVxog7gIw2Zs z?4A^2mbG|5YN`1EvV5iwWTx?E8)L+0Ly%5=THe3;3ag0c$N$`VwiUeDyCn}egTccu zBe#M-A4o))i5tD^7z#AnR9%OgOMg!rFSr8b1@Xe3O$+{!^{_wUv zHgkE6S9sx;iknWa>q#`9LifNxmdhWqmRA6h6>bZ6eGUJ@j$%@JVmBM#rzJ%1$Ew+@ zHW4$y{w{2VH-I~P%bIFY>JYsf@qhvY5B$!lI@STUBLc%om)bs(ZuP2GWm)jMzj9g9ax4?A!(8z{ zDT6MN>&KNyDd*~ROxU`h&GzFvr$i6oT3^lIatjXibbzuzKab5mDDV>S>EST|gg=Vv z@GsLN-JX?t#^+qhqQAE*7UAvTlf2o}|6yo%<1X>jLV_)(o|3>ns&$5RNhMw``^=l; zA)d}XCgbzjm9^K)guwB|4sWAzss|OU2CpAIoW&%ERNlAu2$S*V*_myv07X7b@+E%H ziaxicOi1@S9mZR1-=^##)0}wDJ-MuLily>6giq

    !Zn}kl#=#>N^LaqhdtCvCcje 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 literal 0 HcmV?d00001 diff --git a/doc/workflow/milestones.md b/doc/workflow/milestones.md new file mode 100644 index 0000000000..dff36899ae --- /dev/null +++ b/doc/workflow/milestones.md @@ -0,0 +1,13 @@ +# Milestones + +Milestones allow you to organize issues and merge requests into a cohesive group, optionally setting a due date. +A common use is keeping track of an upcoming software version. Milestones are created per-project. + +![milestone form](milestones/form.png) + +## Groups and milestones + +You can create a milestone for several projects in the same group simultaneously. +On the group's milestones page, you will be able to see the status of that milestone across all of the selected projects. + +![group milestone form](milestones/group_form.png) diff --git a/doc/workflow/milestones/form.png b/doc/workflow/milestones/form.png new file mode 100644 index 0000000000000000000000000000000000000000..de44c1ffc1a44c21e7d6eff77ff8752d84b6ea8f GIT binary patch literal 88591 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

    7chsg28F&v6Qs`*;tr3Ve?{d?nB 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 literal 0 HcmV?d00001 diff --git a/doc/workflow/milestones/group_form.png b/doc/workflow/milestones/group_form.png new file mode 100644 index 0000000000000000000000000000000000000000..38862dcca6895c28a09c6173fc8a2d7b1552b528 GIT binary patch literal 77087 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

    hub?d7kLqUFo_P#LClu2 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

    AZ-_IvsYe~ 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 IAzhvEA5O_fNB{r; literal 0 HcmV?d00001 diff --git a/doc/workflow/releases.md b/doc/workflow/releases.md new file mode 100644 index 0000000000..6176784fc5 --- /dev/null +++ b/doc/workflow/releases.md @@ -0,0 +1,20 @@ +# Releases + +You can turn any git tag into a release, by adding a note to it. +Release notes behave like any other markdown form in GitLab so you can write text and drag-n-drop files to it. +Release notes are stored in the database of GitLab. + +There are several ways to add release notes: + +* In the interface, when you create a new git tag with GitLab +* In the interface, by adding a note to an existing git tag +* with the GitLab API + +## New tag page with release notes text area + +![new_tag](releases/new_tag.png) + +## Tags page with button to add or edit release notes for existing git tag + +![tags](releases/tags.png) + diff --git a/doc/workflow/releases/new_tag.png b/doc/workflow/releases/new_tag.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b64bfe17fb95f221cbd57ec3da684b5e47ee39 GIT binary patch literal 154755 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 I8T-%w0YIRt+5i9m literal 0 HcmV?d00001 diff --git a/doc/workflow/releases/tags.png b/doc/workflow/releases/tags.png new file mode 100644 index 0000000000000000000000000000000000000000..aca91906c68a439d0987085db345cb82c04a51b4 GIT binary patch literal 165449 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 V$vjFuegOEVd&B5D;_B^~{|DQ49mfCw literal 0 HcmV?d00001 diff --git a/doc/workflow/voting_slider.png b/doc/workflow/voting_slider.png deleted file mode 100644 index 4c660ef95937c66924a2f01373cc4efed4eae831..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5329 zcmZX0WmHs;_Vx@6Fo=Y7s0`hV3_}gw-Q6W6C85-if~2GaNGP2GN_U8az#zf^(gR3? zf~4dhfA_xk-nHKI;jDf3v!7ib&a-26w3LbO(BA<70K}>)3VHwl@YV!yf$?wOvn8jz z0KlDU7kPOdRe5=cj<=_yi<<)gpc0EpCorJcq8{jaqY4G7#Du*b%Z7BQ5lT{SO)9D2 zM3UP<%D$)cQJD~NkMoAbL+(`LB{x8*-Qw+fJ7uZyo>}t7#0@cE?=1#x>;-HrgkCnL#Q zYRCr$gK?aJhx%i03eqk;vtqq9`9(}e^?$+WK%TbgqPcA=H<$Ns#9`yb6JN&^(^8oa zNR^G*&(YfxFx)j>wH!tmTJHMs4Qr{&Rbk1Sj5R80G_u+c3s;{g_&za$8ky%ASy#}i zV->Whh7SIYP2M3AmGvgwI$Xb?;R zqs!;R#^`c&{+t3Ay9q$~($q0HQ{B`i`O`LlTD)P76ZrlRWlb_TO~2OE?Fa)lxqt7g z9m(+Q_z-nitf1&IO;?w6KqG|RwuD{jICm^K9y5v|p9DH9o<`Aom6U`60A{=Zz8!x( z)lmatL9ZSh^1wzq8DeLkq|MzCU8j?7Jpa5zTp4f-$je3m8%~)FWVN9)!JB%4qXTM; z$j!sq#cRlWcpqO`mPZtCG+Z4^-%R*3LRkhMznkaLU8x8GaKt_tRe}7IWZ}nvH?mX7 zEI;u7$jIu5QWCJqd`SkU%2nnO>)bQIF_f9q!961KB}Wigh6m;m=rF=T9WOe&!5ZOo zAK2Z%U!xw_3f~7Se~QOG_UFnW+UU(*hBf0$fttEEu&(=-CiqJj+nZBT8E>pgZLA@>7kRd!xXO zr1;+A6{D3nuQo4qGl>OhHKRzx!0P0_qrWi{{5Jk;KMi*HAbQ{FplKiXOdAA~&9>3p zXZuW{5Gf(YwG3IlyG*@|XPZ!_0*4?dht=Op6N8*&^1su8RK*CbJD zLPdc(tK~BoGzNb=U|WBi1FtnA3P(A-=7UkbUcTaT`X>hZ6h|5R3F--Nm*RT+dWQPx zI0Z#{MW|x+3VokiUs_y89E+MS8&5G=@!ev(;umVhukld_LobJHM6zDp)23W zYUR^{!%c?Gi!GWh+`IRCV|r|hU~#n3bPEZ#R1Q?;C}-3fH;TK|@Ucdu%ixbk6K~8j zmEW9ZT06Ro+I=M-nT1!nOjVf{R@50v8sJq#RiG>U47RniJ|H|A&{);J%m7iV%~C1%!R8QmbxjKr6ac z`$#1)F;F#7{0MRU^0?vn#j)|0$hI^bLN7{RM7s;ygwYDYVF?2B&flMiIu||pEHEVW z1Rm(7A@p3t>WPItascGC;+*POJNKi6%k7C%mYtbPVDDYwIuVMjJ>i`&#s62=Go9|dBa$V!hnc?i;d&9?N)EgN=pY1 z-X>5}um{ZVfnRmds|!I=NzzW`+ySCSLUB}Z%vJxyxc*AOCm+o4jBA5&w8+ZdhUMnM zUg0jqn*Q=3#&}v}rskP%3V z2u7R=Y9Q$C0rt$jVEihQ3C&uf$B`3dnv;JUNgu^ed?j?3hML}p?nGjq8)@io43e}{ z{oE6il=3#koS9LPPFb}OQRwoGsF0yR*}mOg&F=9>AA92gt9bn+ivEVa)z!k)ofT#3 zGv4nlHa7VSpCY18spz>T4 zf1pO74?YtM(`u25>1+1Zntm~#X;E{UJU0xkoT;pwmT@JY z_N|^Y&+d9|le^SI=O;>@Mvu$l7Y19?GQ_RKZl=^}%sBxt+u5od0y|b!Q zp`5j;C^TsQB>lnr2T|fuyB4*FYUS=*ilC*0dJ)e<-P^HqO?+K!zS&SHF7@>QSa&!&7nb zT*g<%h|wxEzb8L`Ij_Hm@72@7dauo~Px2z9L5v=*FwY7PM`4-=K;Fl8AMe_3p=N7+Pu1DE&lST*LcKI;v%ANLg$7ewQSRt1BejZ?KWp3J2&uc+Q)mkI8zzosa2Lt-XgnR+5%U?onrfL_Y=SN<&$m4HyIy!3 zqB>dgF0t#30qf~# z`)GniwZ+6Po{*Z8>u!QM(p;8&7Hw%q$=sAYN&vO}@`iJ?& zY4@+B0m1%(J_|xWZ%Uc5$h1^|fAlCJMij6q0)%jBpa;`{n&{&+&~;+z`sSAp1bL0P zVS~>ApnO-cR{8?fLjZ<wIWz`#yO1E(P`2Ub0xxLs2h&BIpc4o43 zcGiTz?8*ZWQd;PBiu{<-n+tEg7gZ6}RnVTWo0w1l#ti3 zsRNPs^mc#<@x%EaF-zTnKp+y{j~x+u3QGT`-+oClJNx=RML?l`et!IZg8ZJ|PEY|c zF)`>P7!(HMyN%%U3Gnc>_2={OVfj~*|CdL>!N=a)<*BcWrw8P3URyiQXTFlm%zq30 z=lNHk4*o9xt>oeJ@3C$Ng#JaK0{oAl|H*wzmH6vL=(zYhxS1%pxI1|G+}4nS2?5xOw<1|;R63l{2$=oL<#8M{{Ls5e=X}D@9nmv?nprYvw5jI40f?t001nk zsvv9N58TTk(lMB(3zN3B?dv0;G`(j>jic2)&RIsQ?gS}vN0d0wev?wsKctt}ob{rQ zg_jF{%t~0#hwEX41oSVhNcfS^Iq;Ep`A8mD2Kor4XU>7SHHlr|ImI%m{M?ppafku$++vBVN zF3*;S$D+bS0RaS&VT`v3c7W9SB|qpha8Miqy3D*qq(jbNzDy7jnMEKIcHkB{JLt{G zCjxo_ev^QK((DkD?j**}yO!V>++;r)@R`6Z5^}lkuqoG#CFu#8I^`4(itz|)64!O1 z!I8rXQ-FmcYcH!UYI#i`x~vG}a8}Z+p2ie`34x4|JWWg%I?!w$0m%HZ)uEtu+xa^P zwgug)2~0l4ww|{k?VJlD$;fb4DKhCLP!3$f{WP=_Fx6|8F8% zbSe@={~*kg;@@3Tb($z*5nja&_CV%*8(}MFK`9(DhdChH=Fojya&eQDiln zoVj2iBa=Vzp16jV7P=XX7k}O)n;#_I5BIRqs;3# zPxiPB5G&pd_J&3u8u6@gb6xG{Ouv4e7#Rj7qkZyz>{aM_lKLRBIPxNXnzMoX&ynTM zMwye-V6_kfVNStwDQdAcO(4JUYo01bthtYqb741a+LyRI%gc_dT15Qh&i(AxRR*s2 z+K#_^#WrGvv%Q{-mWrQM%&q0|JS%){bbXJUiuR^Q z$E(Egl_vn2xSB_06P-M-3`k8-2k#t?o0<*+NA)A&U0){H*y_bUJ3v9mOc`x=Vg-JO ze&=S-PdN@RPo{jF&W!%P^&^2*bkFiubqv!L4`}IP z=io|-Y$4S<>QJ`9J{rjKlv(u(L_J}8T1f~3Rq8ZUz03dVOSzjfb1ck&j^?pd1-kG| z5GHA}{Xs2}RnOv2CM}$kY%o9yJ}B^kOUU1xK(;(7%hFja%C;a9@)wDrk&V=B<~N=g zWTl#ryU`ku{zjF?ah*5rn`^_S#2yV#Y=SoH^+%-P^l;ufrv$HuKHy4fLC9^XEB$xn z2lyV|TeONk9aDO{@RwGi1v%MpmXis|T!2+n4=ro~|o@wta$szuk zVC{m{DXaM-U%xw8{u(97e-L}M9dI<#hkd=T<9Uw)$BN^T!%v(|seY>L!X1)X9y7v` zoUf0SQH>%aj%KXBhC;2FlkrN&;L;w`76b7>79lUvykdghZ;BwFPS5;}v4>BF&0?GV z?&+!vHa~wV{qA8sEO@P>PN~j%t1-$#<83vBol-|3VZj*^p zkt`Ma_FYc>kid;gJTKB9SAFIg7B5kxX(D8cvgYSpzFB&$Xg?iQbIeda**+IezO|Nd znkmm@&DERHM3StfS;e}n9%h;)Ath~h_ih|z5&b`-0~R~Z%k!gh!7xn1JXt8CBb6$= zYN@*=smj+}8f(2HTzLeE-Aw5_*-yBS@-V1479?61Wl8&GrD5a8X1QQ?_A4tSDORfA zdF3ZYz%+@al$vL|DsV1Q{?83ZT9p*hdJ^Z3v&!YR_Loa%K68@y-hbWieFtP|F7>a3o#SjzZRnRaM6;*pw5PhY%M7FTj=fc)rl_#F8bFgG&z8ZhV%3n{ z$|%*ycr4kz=B>mc4_ji4vy iioA<=W&^d$VMA?qMAQuh1Ihp1bE=A33e|Ep5&sA2n(G1p diff --git a/doc_styleguide.md b/doc_styleguide.md index 656bb1d17f..cceb449a85 100644 --- a/doc_styleguide.md +++ b/doc_styleguide.md @@ -15,6 +15,8 @@ For subtitles, use '##', '###' and so on. - Do not duplicate information. - Be brief and clear. - Whenever it applies, add documents in alphabetical order. +- Write in US English +- Use [single spaces](http://www.slate.com/articles/technology/technology/2011/01/space_invaders.html) instead of double spaces. ## Images diff --git a/features/groups.feature b/features/groups.feature index db37fa3b37..abf3769a84 100644 --- a/features/groups.feature +++ b/features/groups.feature @@ -59,6 +59,14 @@ Feature: Groups When I select "Mike" as "Reporter" Then I should see "Mike" in team list as "Reporter" + @javascript + Scenario: Ignore add user to group when is already Owner + Given gitlab user "Mike" + When I visit group "Owned" members page + And I click link "Add members" + When I select "Mike" as "Reporter" + Then I should see "Mike" in team list as "Owner" + @javascript Scenario: Invite user to group When I visit group "Owned" members page @@ -153,6 +161,13 @@ Feature: Groups Then I should see group milestone with descriptions and expiry date And I should see group milestone with all issues and MRs assigned to that milestone + Scenario: Create multiple milestones with one form + Given I visit group "Owned" milestones page + And I click new milestone button + And I fill milestone name + When I press create mileston button + Then milestone in each project should be created + # Group projects in settings Scenario: I should see all projects in the project list in settings Given Group "Owned" has archived project @@ -169,4 +184,4 @@ Feature: Groups When I visit group "Owned" page Then I should see group "Owned" Then I should see project "Public-project" - + diff --git a/features/profile/profile.feature b/features/profile/profile.feature index 27c0bde364..168d9d30b5 100644 --- a/features/profile/profile.feature +++ b/features/profile/profile.feature @@ -7,6 +7,7 @@ Feature: Profile Given I visit profile page Then I should see my profile info + @javascript Scenario: I can see groups I belong to Given I have group with projects When I visit profile page diff --git a/features/project/commits/tags.feature b/features/project/commits/tags.feature index 02f399f7ca..56ee091acc 100644 --- a/features/project/commits/tags.feature +++ b/features/project/commits/tags.feature @@ -12,6 +12,12 @@ Feature: Project Commits Tags And I submit new tag form Then I should see new tag created + Scenario: I create a tag with release notes + Given I click new tag link + And I submit new tag form with release notes + Then I should see new tag created + And I should see tag release notes + Scenario: I create a tag with invalid name And I click new tag link And I submit new tag form with invalid name @@ -27,15 +33,13 @@ Feature: Project Commits Tags And I submit new tag form with tag that already exists Then I should see new an error that tag already exists - @javascript Scenario: I delete a tag + Given I visit tag 'v1.1.0' page Given I delete tag 'v1.1.0' Then I should not see tag 'v1.1.0' - @javascript - Scenario: I delete all tags and see info message - Given I delete all tags - Then I should see tags info message - - # @wip - # Scenario: I can download project by tag + Scenario: I add release notes to the tag + Given I visit tag 'v1.1.0' page + When I click edit tag link + And I fill release notes and submit form + Then I should see tag release notes diff --git a/features/project/issues/award_emoji.feature b/features/project/issues/award_emoji.feature new file mode 100644 index 0000000000..a9bc8ffb9b --- /dev/null +++ b/features/project/issues/award_emoji.feature @@ -0,0 +1,14 @@ +Feature: Award Emoji + Background: + Given I sign in as a user + And I own project "Shop" + And project "Shop" has issue "Bugfix" + And I visit "Bugfix" issue page + + @javascript + Scenario: I add and remove award in the issue + Given I click to emoji-picker + And I click to emoji in the picker + Then I have award added + And I can remove it by clicking to icon + \ No newline at end of file diff --git a/features/project/merge_requests.feature b/features/project/merge_requests.feature index 83055188ba..6cd081c868 100644 --- a/features/project/merge_requests.feature +++ b/features/project/merge_requests.feature @@ -10,6 +10,21 @@ Feature: Project Merge Requests Then I should see "Bug NS-04" in merge requests And I should not see "Feature NS-03" in merge requests + Scenario: I should see CI status for merge requests + Given project "Shop" have "Bug NS-05" open merge request with diffs inside + Given "Bug NS-05" has CI status + When I visit project "Shop" merge requests page + Then I should see merge request "Bug NS-05" with CI status + + Scenario: I should not see target branch name when it is project's default branch + Then I should see "Bug NS-04" in merge requests + And I should not see "master" branch + + Scenario: I should see target branch when it is different from default + Given project "Shop" have "Bug NS-06" open merge request + When I visit project "Shop" merge requests page + Then I should see "other_branch" branch + Scenario: I should see rejected merge requests Given I click link "Closed" Then I should see "Feature NS-03" in merge requests diff --git a/features/project/project.feature b/features/project/project.feature index b3fb079454..1a53945eb0 100644 --- a/features/project/project.feature +++ b/features/project/project.feature @@ -31,6 +31,12 @@ Feature: Project And I visit project "Shop" page Then I should see project "Shop" README + Scenario: I should see last commit with CI + Given project "Shop" has CI enabled + Given project "Shop" has CI build + And I visit project "Shop" page + And I should see last commit with CI status + @javascript Scenario: I should see project activity When I visit project "Shop" activity page diff --git a/features/project/snippets.feature b/features/project/snippets.feature index 77e42a1a38..270557cbde 100644 --- a/features/project/snippets.feature +++ b/features/project/snippets.feature @@ -30,5 +30,5 @@ Feature: Project Snippets Scenario: I destroy "Snippet one" Given I visit snippet page "Snippet one" - And I click link "Remove Snippet" + And I click link "Delete" Then I should not see "Snippet one" in snippets diff --git a/features/project/source/browse_files.feature b/features/project/source/browse_files.feature index 6b0484b6a3..e545ea63ca 100644 --- a/features/project/source/browse_files.feature +++ b/features/project/source/browse_files.feature @@ -42,7 +42,7 @@ Feature: Project Source Browse Files And I fill the new branch name And I click on "Upload file" Then I can see the new text file - And I am redirected to the uploaded file on new branch + And I am redirected to the new merge request page And I can see the new commit message @javascript @@ -64,7 +64,7 @@ Feature: Project Source Browse Files And I fill the commit message And I fill the new branch name And I click on "Commit Changes" - Then I am redirected to the new file on new branch + Then I am redirected to the new merge request page And I should see its new content @javascript @@ -90,6 +90,16 @@ Feature: Project Source Browse Files Then I am on the new file page And I see a commit error message + @javascript + Scenario: I can create file with a directory name + Given I click on "New file" link in repo + And I fill the new file name with a new directory + And I edit code + And I fill the commit message + And I click on "Commit changes" + Then I am redirected to the new file with directory + And I should see its new content + @javascript Scenario: I can edit file Given I click on ".gitignore" file in repo @@ -124,7 +134,7 @@ Feature: Project Source Browse Files And I fill the commit message And I fill the new branch name And I click on "Commit Changes" - Then I am redirected to the ".gitignore" on new branch + Then I am redirected to the new merge request page And I should see its new content @javascript @wip @@ -144,7 +154,7 @@ Feature: Project Source Browse Files And I fill the commit message And I fill the new branch name And I click on "Create directory" - Then I am redirected to the new directory + Then I am redirected to the new merge request page @javascript Scenario: I attempt to create an existing directory @@ -164,12 +174,12 @@ Feature: Project Source Browse Files Then I see diff @javascript - Scenario: I can remove file and commit + Scenario: I can delete file and commit Given I click on ".gitignore" file in repo And I see the ".gitignore" - And I click on "Remove" + And I click on "Delete" And I fill the commit message - And I click on "Remove file" + And I click on "Delete file" Then I am redirected to the files URL And I don't see the ".gitignore" diff --git a/features/snippets/snippets.feature b/features/snippets/snippets.feature index 4f617b6bed..e15d7c7934 100644 --- a/features/snippets/snippets.feature +++ b/features/snippets/snippets.feature @@ -24,7 +24,7 @@ Feature: Snippets Scenario: I destroy "Personal snippet one" Given I visit snippet page "Personal snippet one" - And I click link "Destroy" + And I click link "Delete" Then I should not see "Personal snippet one" in snippets Scenario: I create new internal snippet diff --git a/features/steps/abuse_reports.rb b/features/steps/abuse_reports.rb index 56652ff6f0..499accb0b0 100644 --- a/features/steps/abuse_reports.rb +++ b/features/steps/abuse_reports.rb @@ -23,7 +23,7 @@ class Spinach::Features::AbuseReports < Spinach::FeatureSteps end step 'I should see a red "Report abuse" button' do - expect(find(:css, '.report_abuse')).to have_selector(:css, 'span.btn-close') + expect(page).to have_button("Already reported for abuse") end def user_mike diff --git a/features/steps/dashboard/new_project.rb b/features/steps/dashboard/new_project.rb index 44a4aa9844..a0aad66184 100644 --- a/features/steps/dashboard/new_project.rb +++ b/features/steps/dashboard/new_project.rb @@ -44,7 +44,6 @@ class Spinach::Features::NewProject < Spinach::FeatureSteps git_import_instructions = first('.js-toggle-content') expect(git_import_instructions).to be_visible expect(git_import_instructions).to have_content "Git repository URL" - expect(git_import_instructions).to have_content "The repository must be accessible over HTTP(S). If it is not publicly accessible, you can add authentication information to the URL:" end step 'I click on "Google Code"' do diff --git a/features/steps/groups.rb b/features/steps/groups.rb index 69ddfa42c0..9c0313537b 100644 --- a/features/steps/groups.rb +++ b/features/steps/groups.rb @@ -6,7 +6,7 @@ class Spinach::Features::Groups < Spinach::FeatureSteps include Select2Helper step 'I should see back to dashboard button' do - expect(page).to have_content 'Back to dashboard' + expect(page).to have_content 'Go to dashboard' end step 'gitlab user "Mike"' do @@ -48,6 +48,17 @@ class Spinach::Features::Groups < Spinach::FeatureSteps click_button "Add users to group" end + step 'I select "Mike" as "Master"' do + user = User.find_by(name: "Mike") + + page.within ".users-group-form" do + select2(user.id, from: "#user_ids", multiple: true) + select "Master", from: "access_level" + end + + click_button "Add users to group" + end + step 'I should see "Mike" in team list as "Reporter"' do page.within '.well-list' do expect(page).to have_content('Mike') @@ -55,6 +66,13 @@ class Spinach::Features::Groups < Spinach::FeatureSteps end end + step 'I should see "Mike" in team list as "Owner"' do + page.within '.well-list' do + expect(page).to have_content('Mike') + expect(page).to have_content('Owner') + end + end + step 'I select "sjobs@apple.com" as "Reporter"' do page.within ".users-group-form" do select2("sjobs@apple.com", from: "#user_ids", multiple: true) @@ -255,6 +273,28 @@ class Spinach::Features::Groups < Spinach::FeatureSteps expect(page).to have_xpath("//span[@class='label label-warning']", text: 'archived') end + step 'I fill milestone name' do + fill_in 'milestone_title', with: 'v2.9.0' + end + + step 'I click new milestone button' do + click_link "New Milestone" + end + + step 'I press create mileston button' do + click_button "Create Milestone" + end + + step 'milestone in each project should be created' do + group = Group.find_by(name: 'Owned') + expect(page).to have_content "Milestone v2.9.0" + expect(group.projects).to be_present + + group.projects.each do |project| + expect(page).to have_content project.name + end + end + protected def assigned_to_me(key) diff --git a/features/steps/profile/profile.rb b/features/steps/profile/profile.rb index 8cf24705a5..40b2aa7c35 100644 --- a/features/steps/profile/profile.rb +++ b/features/steps/profile/profile.rb @@ -59,7 +59,7 @@ class Spinach::Features::Profile < Spinach::FeatureSteps step 'I should not see the "Remove avatar" button' do expect(page).not_to have_link("Remove avatar") end - + step 'I should see the gravatar host link' do expect(page).to have_link("gravatar.com") end @@ -159,10 +159,9 @@ class Spinach::Features::Profile < Spinach::FeatureSteps end step 'I should see my user page' do - expect(page).to have_content "User Activity" - - page.within '.navbar-gitlab' do + page.within ".cover-block" do expect(page).to have_content current_user.name + expect(page).to have_content current_user.username end end @@ -176,7 +175,13 @@ class Spinach::Features::Profile < Spinach::FeatureSteps end step 'I should see groups I belong to' do - expect(page).to have_css('.profile-groups-avatars', visible: true) + page.within ".content" do + click_link "Groups" + end + + page.within "#groups" do + expect(page).to have_content @group.name + end end step 'I click on new application button' do diff --git a/features/steps/project/commits/tags.rb b/features/steps/project/commits/tags.rb index e6f8faf50f..eff4234a44 100644 --- a/features/steps/project/commits/tags.rb +++ b/features/steps/project/commits/tags.rb @@ -18,6 +18,18 @@ class Spinach::Features::ProjectCommitsTags < Spinach::FeatureSteps click_button 'Create tag' end + step 'I submit new tag form with release notes' do + fill_in 'tag_name', with: 'v7.0' + fill_in 'ref', with: 'master' + fill_in 'release_description', with: 'Awesome release notes' + click_button 'Create tag' + end + + step 'I fill release notes and submit form' do + fill_in 'release_description', with: 'Awesome release notes' + click_button 'Save changes' + end + step 'I submit new tag form with invalid name' do fill_in 'tag_name', with: 'v 1.0' fill_in 'ref', with: 'master' @@ -52,31 +64,27 @@ class Spinach::Features::ProjectCommitsTags < Spinach::FeatureSteps expect(page).to have_content 'Tag already exists' end + step "I visit tag 'v1.1.0' page" do + click_link 'v1.1.0' + end + step "I delete tag 'v1.1.0'" do - page.within '.tags' do + page.within('.content') do first('.btn-remove').click - sleep 0.05 end end step "I should not see tag 'v1.1.0'" do page.within '.tags' do - expect(page.all(visible: true)).not_to have_content 'v1.1.0' + expect(page).not_to have_link 'v1.1.0' end end - step 'I delete all tags' do - page.within '.tags' do - page.all('.btn-remove').each do |remove| - remove.click - sleep 0.05 - end - end + step 'I click edit tag link' do + click_link 'Edit release notes' end - step 'I should see tags info message' do - page.within '.tags' do - expect(page).to have_content 'Repository has no tags yet.' - end + step 'I should see tag release notes' do + expect(page).to have_content 'Awesome release notes' end end diff --git a/features/steps/project/graph.rb b/features/steps/project/graph.rb index 4abd5288d5..98f31f3b76 100644 --- a/features/steps/project/graph.rb +++ b/features/steps/project/graph.rb @@ -25,9 +25,9 @@ class Spinach::Features::ProjectGraph < Spinach::FeatureSteps step 'page should have CI graphs' do expect(page).to have_content 'Overall' - expect(page).to have_content 'Builds chart for last week' - expect(page).to have_content 'Builds chart for last month' - expect(page).to have_content 'Builds chart for last year' + expect(page).to have_content 'Builds for last week' + expect(page).to have_content 'Builds for last month' + expect(page).to have_content 'Builds for last year' expect(page).to have_content 'Commit duration in minutes for last 30 commits' end diff --git a/features/steps/project/issues/award_emoji.rb b/features/steps/project/issues/award_emoji.rb new file mode 100644 index 0000000000..8f7a45dec0 --- /dev/null +++ b/features/steps/project/issues/award_emoji.rb @@ -0,0 +1,41 @@ +class Spinach::Features::AwardEmoji < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths + include Select2Helper + + step 'I visit "Bugfix" issue page' do + visit namespace_project_issue_path(@project.namespace, @project, @issue) + end + + step 'I click to emoji-picker' do + page.within ".awards-controls" do + page.find(".add-award").click + end + end + + step 'I click to emoji in the picker' do + page.within ".awards-menu" do + page.first("img").click + end + end + + step 'I can remove it by clicking to icon' do + page.within ".awards" do + page.first(".award").click + expect(page).to_not have_selector ".award" + end + end + + step 'I have award added' do + page.within ".awards" do + expect(page).to have_selector ".award" + expect(page.find(".award .counter")).to have_content "1" + end + end + + step 'project "Shop" has issue "Bugfix"' do + @project = Project.find_by(name: "Shop") + @issue = create(:issue, title: "Bugfix", project: project) + end +end diff --git a/features/steps/project/merge_requests.rb b/features/steps/project/merge_requests.rb index 875bf6c467..d5f2c4209a 100644 --- a/features/steps/project/merge_requests.rb +++ b/features/steps/project/merge_requests.rb @@ -40,6 +40,14 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps expect(page).to have_content "Bug NS-04" end + step 'I should not see "master" branch' do + expect(page).not_to have_content "master" + end + + step 'I should see "other_branch" branch' do + expect(page).to have_content "other_branch" + end + step 'I should see "Bug NS-04" in merge requests' do expect(page).to have_content "Bug NS-04" end @@ -93,6 +101,18 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps ) end + step 'project "Shop" have "Bug NS-06" open merge request' do + create(:merge_request, + title: "Bug NS-06", + source_project: project, + target_project: project, + source_branch: 'fix', + target_branch: 'other_branch', + author: project.users.first, + description: "# Description header" + ) + end + step 'project "Shop" have "Bug NS-05" open merge request with diffs inside' do create(:merge_request_with_diffs, title: "Bug NS-05", @@ -338,6 +358,19 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps expect(page).to have_content('diff --git') end + step '"Bug NS-05" has CI status' do + project = merge_request.source_project + project.enable_ci + ci_commit = create :ci_commit, gl_project: project, sha: merge_request.last_commit.id + create :ci_build, commit: ci_commit + end + + step 'I should see merge request "Bug NS-05" with CI status' do + page.within ".mr-list" do + expect(page).to have_link "Build status: pending" + end + end + def merge_request @merge_request ||= MergeRequest.find_by!(title: "Bug NS-05") end diff --git a/features/steps/project/project.rb b/features/steps/project/project.rb index 15f77734cb..9ca7c8ebbc 100644 --- a/features/steps/project/project.rb +++ b/features/steps/project/project.rb @@ -86,13 +86,13 @@ class Spinach::Features::Project < Spinach::FeatureSteps end step 'I should see project "Forum" README' do - page.within('#README') do + page.within('.readme-holder') do expect(page).to have_content 'Sample repo for testing gitlab features' end end step 'I should see project "Shop" README' do - page.within('#README') do + page.within('.readme-holder') do expect(page).to have_content 'testme' end end @@ -124,11 +124,11 @@ class Spinach::Features::Project < Spinach::FeatureSteps end step 'I should see back to dashboard button' do - expect(page).to have_content 'Back to dashboard' + expect(page).to have_content 'Go to dashboard' end step 'I should see back to group button' do - expect(page).to have_content 'Back to group' + expect(page).to have_content 'Go to group' end step 'I click notifications drop down button' do diff --git a/features/steps/project/snippets.rb b/features/steps/project/snippets.rb index db8ad08bb9..a3aef9bf8c 100644 --- a/features/steps/project/snippets.rb +++ b/features/steps/project/snippets.rb @@ -22,7 +22,7 @@ class Spinach::Features::ProjectSnippets < Spinach::FeatureSteps end step 'I click link "New Snippet"' do - click_link "Add new snippet" + click_link "New Snippet" end step 'I click link "Snippet one"' do @@ -42,13 +42,13 @@ class Spinach::Features::ProjectSnippets < Spinach::FeatureSteps end step 'I click link "Edit"' do - page.within ".file-title" do + page.within ".page-title" do click_link "Edit" end end - step 'I click link "Remove Snippet"' do - click_link "remove" + step 'I click link "Delete"' do + click_link "Delete" end step 'I submit new snippet "Snippet three"' do diff --git a/features/steps/project/source/browse_files.rb b/features/steps/project/source/browse_files.rb index 1b27500497..f40e0f0d52 100644 --- a/features/steps/project/source/browse_files.rb +++ b/features/steps/project/source/browse_files.rb @@ -78,6 +78,10 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps fill_in :file_name, with: 'Spaces Not Allowed' end + step 'I fill the new file name with a new directory' do + fill_in :file_name, with: new_file_name_with_directory + end + step 'I fill the commit message' do fill_in :commit_message, with: 'Not yet a commit message.', visible: true end @@ -94,12 +98,12 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps click_button 'Create directory' end - step 'I click on "Remove"' do - click_button 'Remove' + step 'I click on "Delete"' do + click_button 'Delete' end - step 'I click on "Remove file"' do - click_button 'Remove file' + step 'I click on "Delete file"' do + click_button 'Delete file' end step 'I click on "Replace"' do @@ -138,7 +142,7 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps end step 'I can see new file page' do - expect(page).to have_content "new file" + expect(page).to have_content "Create New File" expect(page).to have_content "Commit message" end @@ -221,10 +225,6 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps expect(current_path).to eq(namespace_project_blob_path(@project.namespace, @project, 'master/.gitignore')) end - step 'I am redirected to the ".gitignore" on new branch' do - expect(current_path).to eq(namespace_project_blob_path(@project.namespace, @project, 'new_branch_name/.gitignore')) - end - step 'I am redirected to the permalink URL' do expect(current_path).to( eq(namespace_project_blob_path(@project.namespace, @project, @@ -238,20 +238,13 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps @project.namespace, @project, 'master/' + new_file_name)) end - step 'I am redirected to the new file on new branch' do + step 'I am redirected to the new file with directory' do expect(current_path).to eq(namespace_project_blob_path( - @project.namespace, @project, 'new_branch_name/' + new_file_name)) + @project.namespace, @project, 'master/' + new_file_name_with_directory)) end - step 'I am redirected to the uploaded file on new branch' do - expect(current_path).to eq(namespace_project_blob_path( - @project.namespace, @project, - 'new_branch_name/' + File.basename(test_text_file))) - end - - step 'I am redirected to the new directory' do - expect(current_path).to eq(namespace_project_tree_path( - @project.namespace, @project, 'new_branch_name/' + new_dir_name)) + step 'I am redirected to the new merge request page' do + expect(current_path).to eq(new_namespace_project_merge_request_path(@project.namespace, @project)) end step 'I am redirected to the root directory' do @@ -335,6 +328,12 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps 'not_a_file.md' end + # Constant value that is a valid filename with directory and + # not a filename present at root of the seed repository. + def new_file_name_with_directory + 'foo/bar/baz.txt' + end + # Constant value that is a valid directory and # not a directory present at root of the seed repository. def new_dir_name diff --git a/features/steps/shared/paths.rb b/features/steps/shared/paths.rb index eb978620da..c74a5fd3bc 100644 --- a/features/steps/shared/paths.rb +++ b/features/steps/shared/paths.rb @@ -31,6 +31,10 @@ module SharedPaths visit merge_requests_group_path(Group.find_by(name: "Owned")) end + step 'I visit group "Owned" milestones page' do + visit group_milestones_path(Group.find_by(name: "Owned")) + end + step 'I visit group "Owned" members page' do visit group_group_members_path(Group.find_by(name: "Owned")) end diff --git a/features/steps/shared/project.rb b/features/steps/shared/project.rb index 5744e455eb..7021fac5fe 100644 --- a/features/steps/shared/project.rb +++ b/features/steps/shared/project.rb @@ -206,4 +206,11 @@ module SharedProject project = Project.find_by(name: "Shop") create :ci_commit, gl_project: project, sha: project.commit.sha end + + step 'I should see last commit with CI status' do + page.within ".project-last-commit" do + expect(page).to have_content(project.commit.sha[0..6]) + expect(page).to have_content("skipped") + end + end end diff --git a/features/steps/shared/project_tab.rb b/features/steps/shared/project_tab.rb index c67e5e4a06..33ff7084e3 100644 --- a/features/steps/shared/project_tab.rb +++ b/features/steps/shared/project_tab.rb @@ -46,7 +46,7 @@ module SharedProjectTab step 'the active main tab should be Settings' do page.within '.nav-sidebar' do - expect(page).to have_content('Back to project') + expect(page).to have_content('Go to project') end end diff --git a/features/steps/snippets/snippets.rb b/features/steps/snippets/snippets.rb index 6ff48e0c6b..80d1ddeef0 100644 --- a/features/steps/snippets/snippets.rb +++ b/features/steps/snippets/snippets.rb @@ -13,13 +13,13 @@ class Spinach::Features::Snippets < Spinach::FeatureSteps end step 'I click link "Edit"' do - page.within ".file-title" do + page.within ".page-title" do click_link "Edit" end end - step 'I click link "Destroy"' do - click_link "remove" + step 'I click link "Delete"' do + click_link "Delete" end step 'I submit new snippet "Personal snippet three"' do diff --git a/features/steps/snippets/user.rb b/features/steps/snippets/user.rb index dea3256229..997c605bce 100644 --- a/features/steps/snippets/user.rb +++ b/features/steps/snippets/user.rb @@ -32,19 +32,19 @@ class Spinach::Features::SnippetsUser < Spinach::FeatureSteps end step 'I click "Internal" filter' do - page.within('.nav-tabs') do + page.within('.snippet-scope-menu') do click_link "Internal" end end step 'I click "Private" filter' do - page.within('.nav-tabs') do + page.within('.snippet-scope-menu') do click_link "Private" end end step 'I click "Public" filter' do - page.within('.nav-tabs') do + page.within('.snippet-scope-menu') do click_link "Public" end end diff --git a/lib/api/api.rb b/lib/api/api.rb index afc0402f9e..fe1bf8a481 100644 --- a/lib/api/api.rb +++ b/lib/api/api.rb @@ -25,7 +25,7 @@ module API format :json content_type :txt, "text/plain" - helpers APIHelpers + helpers Helpers mount Groups mount GroupMembers @@ -52,5 +52,6 @@ module API mount Labels mount Settings mount Keys + mount Tags end end diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 883a5e14b1..9f337bc3cc 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -62,7 +62,7 @@ module API expose :owner, using: Entities::UserBasic, unless: ->(project, options) { project.group } expose :name, :name_with_namespace expose :path, :path_with_namespace - expose :issues_enabled, :merge_requests_enabled, :wiki_enabled, :snippets_enabled, :created_at, :last_activity_at + expose :issues_enabled, :merge_requests_enabled, :wiki_enabled, :builds_enabled, :snippets_enabled, :created_at, :last_activity_at expose :creator_id expose :namespace expose :forked_from_project, using: Entities::ForkedFromProject, if: lambda{ | project, options | project.forked? } @@ -95,25 +95,6 @@ module API end end - class RepoTag < Grape::Entity - expose :name - expose :message do |repo_obj, _options| - if repo_obj.respond_to?(:message) - repo_obj.message - else - nil - end - end - - expose :commit do |repo_obj, options| - if repo_obj.respond_to?(:commit) - repo_obj.commit - elsif options[:project] - options[:project].repository.commit(repo_obj.target) - end - end - end - class RepoObject < Grape::Entity expose :name @@ -181,7 +162,9 @@ module API end class MergeRequest < ProjectEntity - expose :target_branch, :source_branch, :upvotes, :downvotes + expose :target_branch, :source_branch + # deprecated, always returns 0 + expose :upvotes, :downvotes expose :author, :assignee, using: Entities::UserBasic expose :source_project_id, :target_project_id expose :label_names, as: :labels @@ -211,6 +194,7 @@ module API expose :author, using: Entities::UserBasic expose :created_at expose :system?, as: :system + # upvote? and downvote? are deprecated, always return false expose :upvote?, as: :upvote expose :downvote?, as: :downvote end @@ -231,7 +215,7 @@ module API class CommitStatus < Grape::Entity expose :id, :sha, :ref, :status, :name, :target_url, :description, - :created_at, :started_at, :finished_at + :created_at, :started_at, :finished_at, :allow_failure expose :author, using: Entities::UserBasic end @@ -341,5 +325,35 @@ module API expose :user_oauth_applications expose :after_sign_out_path end + + class Release < Grape::Entity + expose :tag, as: :tag_name + expose :description + end + + class RepoTag < Grape::Entity + expose :name + expose :message do |repo_obj, _options| + if repo_obj.respond_to?(:message) + repo_obj.message + else + nil + end + end + + expose :commit do |repo_obj, options| + if repo_obj.respond_to?(:commit) + repo_obj.commit + elsif options[:project] + options[:project].repository.commit(repo_obj.target) + end + end + + expose :release, using: Entities::Release do |repo_obj, options| + if options[:project] + options[:project].releases.find_by(tag: repo_obj.name) + end + end + end end end diff --git a/lib/api/files.rb b/lib/api/files.rb index 308c84dd13..a7a768f889 100644 --- a/lib/api/files.rb +++ b/lib/api/files.rb @@ -43,7 +43,8 @@ module API # "content": "IyA9PSBTY2hlbWEgSW5mb3...", # "ref": "master", # "blob_id": "79f7bbd25901e8334750839545a9bd021f0e4c83", - # "commit_id": "d5a3ff139356ce33e37e73add446f16869741b50" + # "commit_id": "d5a3ff139356ce33e37e73add446f16869741b50", + # "last_commit_id": "570e7b2abdd848b95f2f578043fc23bd6f6fd24d", # } # get ":id/repository/files" do @@ -71,6 +72,7 @@ module API ref: ref, blob_id: blob.id, commit_id: commit.id, + last_commit_id: user_project.repository.last_commit_for_path(commit.sha, file_path).id } else not_found! 'File' diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb index 549b1f9e9a..92540ccf2b 100644 --- a/lib/api/helpers.rb +++ b/lib/api/helpers.rb @@ -1,5 +1,5 @@ module API - module APIHelpers + module Helpers PRIVATE_TOKEN_HEADER = "HTTP_PRIVATE_TOKEN" PRIVATE_TOKEN_PARAM = :private_token SUDO_HEADER ="HTTP_SUDO" @@ -133,6 +133,12 @@ module API authorize! :admin_project, user_project end + def require_gitlab_workhorse! + unless env['HTTP_GITLAB_WORKHORSE'].present? + forbidden!('Request should be executed via GitLab Workhorse') + end + end + def can?(object, action, subject) abilities.allowed?(object, action, subject) end @@ -234,6 +240,10 @@ module API render_api_error!(message || '409 Conflict', 409) end + def file_to_large! + render_api_error!('413 Request Entity Too Large', 413) + end + def render_validation_error!(model) if model.errors.any? render_api_error!(model.errors.messages || '400 Bad Request', 400) @@ -282,6 +292,44 @@ module API end end + # file helpers + + def uploaded_file!(field, uploads_path) + if params[field] + bad_request!("#{field} is not a file") unless params[field].respond_to?(:filename) + return params[field] + end + + # sanitize file paths + # this requires all paths to exist + required_attributes! %W(#{field}.path) + uploads_path = File.realpath(uploads_path) + file_path = File.realpath(params["#{field}.path"]) + bad_request!('Bad file path') unless file_path.start_with?(uploads_path) + + UploadedFile.new( + file_path, + params["#{field}.name"], + params["#{field}.type"] || 'application/octet-stream', + ) + end + + def present_file!(path, filename, content_type = 'application/octet-stream') + filename ||= File.basename(path) + header['Content-Disposition'] = "attachment; filename=#{filename}" + header['Content-Transfer-Encoding'] = 'binary' + content_type content_type + + # Support download acceleration + case headers['X-Sendfile-Type'] + when 'X-Sendfile' + header['X-Sendfile'] = path + body + else + file FileStreamer.new(path) + end + end + private def add_pagination_headers(paginated, per_page) diff --git a/lib/api/projects.rb b/lib/api/projects.rb index c2fb36b414..2b4ada6e2e 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -75,6 +75,7 @@ module API # description (optional) - short project description # issues_enabled (optional) # merge_requests_enabled (optional) + # builds_enabled (optional) # wiki_enabled (optional) # snippets_enabled (optional) # namespace_id (optional) - defaults to user namespace @@ -90,6 +91,7 @@ module API :description, :issues_enabled, :merge_requests_enabled, + :builds_enabled, :wiki_enabled, :snippets_enabled, :namespace_id, @@ -117,6 +119,7 @@ module API # default_branch (optional) - 'master' by default # issues_enabled (optional) # merge_requests_enabled (optional) + # builds_enabled (optional) # wiki_enabled (optional) # snippets_enabled (optional) # public (optional) - if true same as setting visibility_level = 20 @@ -132,6 +135,7 @@ module API :default_branch, :issues_enabled, :merge_requests_enabled, + :builds_enabled, :wiki_enabled, :snippets_enabled, :public, @@ -172,6 +176,7 @@ module API # description (optional) - short project description # issues_enabled (optional) # merge_requests_enabled (optional) + # builds_enabled (optional) # wiki_enabled (optional) # snippets_enabled (optional) # public (optional) - if true same as setting visibility_level = 20 @@ -185,6 +190,7 @@ module API :default_branch, :issues_enabled, :merge_requests_enabled, + :builds_enabled, :wiki_enabled, :snippets_enabled, :public, @@ -246,8 +252,8 @@ module API # Example Request: # DELETE /projects/:id/fork delete ":id/fork" do - authenticated_as_admin! - unless user_project.forked_project_link.nil? + authorize! :remove_fork_project, user_project + if user_project.forked? user_project.forked_project_link.destroy end end diff --git a/lib/api/repositories.rb b/lib/api/repositories.rb index 20d568cf46..d7c48639eb 100644 --- a/lib/api/repositories.rb +++ b/lib/api/repositories.rb @@ -16,41 +16,6 @@ module API end end - # Get a project repository tags - # - # Parameters: - # id (required) - The ID of a project - # Example Request: - # GET /projects/:id/repository/tags - get ":id/repository/tags" do - present user_project.repo.tags.sort_by(&:name).reverse, - with: Entities::RepoTag, project: user_project - end - - # Create tag - # - # Parameters: - # id (required) - The ID of a project - # tag_name (required) - The name of the tag - # ref (required) - Create tag from commit sha or branch - # message (optional) - Specifying a message creates an annotated tag. - # Example Request: - # POST /projects/:id/repository/tags - post ':id/repository/tags' do - authorize_push_project - message = params[:message] || nil - result = CreateTagService.new(user_project, current_user). - execute(params[:tag_name], params[:ref], message) - - if result[:status] == :success - present result[:tag], - with: Entities::RepoTag, - project: user_project - else - render_api_error!(result[:message], 400) - end - end - # Get a project repository tree # # Parameters: diff --git a/lib/api/tags.rb b/lib/api/tags.rb new file mode 100644 index 0000000000..47621f443e --- /dev/null +++ b/lib/api/tags.rb @@ -0,0 +1,86 @@ +module API + # Git Tags API + class Tags < Grape::API + before { authenticate! } + before { authorize! :download_code, user_project } + + resource :projects do + # Get a project repository tags + # + # Parameters: + # id (required) - The ID of a project + # Example Request: + # GET /projects/:id/repository/tags + get ":id/repository/tags" do + present user_project.repo.tags.sort_by(&:name).reverse, + with: Entities::RepoTag, project: user_project + end + + # Create tag + # + # Parameters: + # id (required) - The ID of a project + # tag_name (required) - The name of the tag + # ref (required) - Create tag from commit sha or branch + # message (optional) - Specifying a message creates an annotated tag. + # Example Request: + # POST /projects/:id/repository/tags + post ':id/repository/tags' do + authorize_push_project + message = params[:message] || nil + result = CreateTagService.new(user_project, current_user). + execute(params[:tag_name], params[:ref], message, params[:release_description]) + + if result[:status] == :success + present result[:tag], + with: Entities::RepoTag, + project: user_project + else + render_api_error!(result[:message], 400) + end + end + + # Add release notes to tag + # + # Parameters: + # id (required) - The ID of a project + # tag_name (required) - The name of the tag + # description (required) - Release notes with markdown support + # Example Request: + # POST /projects/:id/repository/tags/:tag_name/release + post ':id/repository/tags/:tag_name/release', requirements: { tag_name: /.*/ } do + authorize_push_project + required_attributes! [:description] + result = CreateReleaseService.new(user_project, current_user). + execute(params[:tag_name], params[:description]) + + if result[:status] == :success + present result[:release], with: Entities::Release + else + render_api_error!(result[:message], result[:http_status]) + end + end + + # Updates a release notes of a tag + # + # Parameters: + # id (required) - The ID of a project + # tag_name (required) - The name of the tag + # description (required) - Release notes with markdown support + # Example Request: + # PUT /projects/:id/repository/tags/:tag_name/release + put ':id/repository/tags/:tag_name/release', requirements: { tag_name: /.*/ } do + authorize_push_project + required_attributes! [:description] + result = UpdateReleaseService.new(user_project, current_user). + execute(params[:tag_name], params[:description]) + + if result[:status] == :success + present result[:release], with: Entities::Release + else + render_api_error!(result[:message], result[:http_status]) + end + end + end + end +end diff --git a/lib/award_emoji.rb b/lib/award_emoji.rb new file mode 100644 index 0000000000..d58a196c4e --- /dev/null +++ b/lib/award_emoji.rb @@ -0,0 +1,12 @@ +class AwardEmoji + EMOJI_LIST = [ + "+1", "-1", "100", "blush", "heart", "smile", "rage", + "beers", "disappointed", "ok_hand", + "helicopter", "shit", "airplane", "alarm_clock", + "ambulance", "anguished", "two_hearts", "wink" + ] + + def self.path_to_emoji_image(name) + "emoji/#{Emoji.emoji_filename(name)}.png" + end +end diff --git a/lib/backup/artifacts.rb b/lib/backup/artifacts.rb new file mode 100644 index 0000000000..51fa3867e6 --- /dev/null +++ b/lib/backup/artifacts.rb @@ -0,0 +1,13 @@ +require 'backup/files' + +module Backup + class Artifacts < Files + def initialize + super('artifacts', ArtifactUploader.artifacts_path) + end + + def create_files_dir + Dir.mkdir(app_files_dir, 0700) + end + end +end diff --git a/lib/backup/builds.rb b/lib/backup/builds.rb index 6f56f680bb..635967f4bd 100644 --- a/lib/backup/builds.rb +++ b/lib/backup/builds.rb @@ -1,34 +1,13 @@ +require 'backup/files' + module Backup - class Builds - attr_reader :app_builds_dir, :backup_builds_dir, :backup_dir - + class Builds < Files def initialize - @app_builds_dir = Settings.gitlab_ci.builds_path - @backup_dir = Gitlab.config.backup.path - @backup_builds_dir = File.join(Gitlab.config.backup.path, 'builds') + super('builds', Settings.gitlab_ci.builds_path) end - # Copy builds from builds directory to backup/builds - def dump - FileUtils.rm_rf(backup_builds_dir) - # Ensure the parent dir of backup_builds_dir exists - FileUtils.mkdir_p(Gitlab.config.backup.path) - # Fail if somebody raced to create backup_builds_dir before us - FileUtils.mkdir(backup_builds_dir, mode: 0700) - FileUtils.cp_r(app_builds_dir, backup_dir) - end - - def restore - backup_existing_builds_dir - - FileUtils.cp_r(backup_builds_dir, app_builds_dir) - end - - def backup_existing_builds_dir - timestamped_builds_path = File.join(app_builds_dir, '..', "builds.#{Time.now.to_i}") - if File.exists?(app_builds_dir) - FileUtils.mv(app_builds_dir, File.expand_path(timestamped_builds_path)) - end + def create_files_dir + Dir.mkdir(app_files_dir, 0700) end end end diff --git a/lib/backup/database.rb b/lib/backup/database.rb index 959ac4b786..67b2a64bd1 100644 --- a/lib/backup/database.rb +++ b/lib/backup/database.rb @@ -2,26 +2,26 @@ require 'yaml' module Backup class Database - attr_reader :config, :db_dir + attr_reader :config, :db_file_name def initialize @config = YAML.load_file(File.join(Rails.root,'config','database.yml'))[Rails.env] - @db_dir = File.join(Gitlab.config.backup.path, 'db') + @db_file_name = File.join(Gitlab.config.backup.path, 'db', 'database.sql.gz') end def dump - FileUtils.rm_rf(@db_dir) - # Ensure the parent dir of @db_dir exists - FileUtils.mkdir_p(Gitlab.config.backup.path) - # Fail if somebody raced to create @db_dir before us - FileUtils.mkdir(@db_dir, mode: 0700) + FileUtils.mkdir_p(File.dirname(db_file_name)) + FileUtils.rm_f(db_file_name) + compress_rd, compress_wr = IO.pipe + compress_pid = spawn(*%W(gzip -1 -c), in: compress_rd, out: [db_file_name, 'w', 0600]) + compress_rd.close - success = case config["adapter"] + dump_pid = case config["adapter"] when /^mysql/ then $progress.print "Dumping MySQL database #{config['database']} ... " # Workaround warnings from MySQL 5.6 about passwords on cmd line ENV['MYSQL_PWD'] = config["password"].to_s if config["password"] - system('mysqldump', *mysql_args, config['database'], out: db_file_name) + spawn('mysqldump', *mysql_args, config['database'], out: compress_wr) when "postgresql" then $progress.print "Dumping PostgreSQL database #{config['database']} ... " pg_env @@ -30,48 +30,42 @@ module Backup pgsql_args << "-n" pgsql_args << Gitlab.config.backup.pg_schema end - system('pg_dump', *pgsql_args, config['database'], out: db_file_name) + spawn('pg_dump', *pgsql_args, config['database'], out: compress_wr) end + compress_wr.close + + success = [compress_pid, dump_pid].all? { |pid| Process.waitpid(pid); $?.success? } + report_success(success) abort 'Backup failed' unless success - - $progress.print 'Compressing database ... ' - success = system('gzip', db_file_name) - report_success(success) - abort 'Backup failed: compress error' unless success end def restore - $progress.print 'Decompressing database ... ' - success = system('gzip', '-d', db_file_name_gz) - report_success(success) - abort 'Restore failed: decompress error' unless success + decompress_rd, decompress_wr = IO.pipe + decompress_pid = spawn(*%W(gzip -cd), out: decompress_wr, in: db_file_name) + decompress_wr.close - success = case config["adapter"] + restore_pid = case config["adapter"] when /^mysql/ then $progress.print "Restoring MySQL database #{config['database']} ... " # Workaround warnings from MySQL 5.6 about passwords on cmd line ENV['MYSQL_PWD'] = config["password"].to_s if config["password"] - system('mysql', *mysql_args, config['database'], in: db_file_name) + spawn('mysql', *mysql_args, config['database'], in: decompress_rd) when "postgresql" then $progress.print "Restoring PostgreSQL database #{config['database']} ... " pg_env - system('psql', config['database'], '-f', db_file_name) + spawn('psql', config['database'], in: decompress_rd) end + decompress_rd.close + + success = [decompress_pid, restore_pid].all? { |pid| Process.waitpid(pid); $?.success? } + report_success(success) abort 'Restore failed' unless success end protected - def db_file_name - File.join(db_dir, 'database.sql') - end - - def db_file_name_gz - File.join(db_dir, 'database.sql.gz') - end - def mysql_args args = { 'host' => '--host', diff --git a/lib/backup/files.rb b/lib/backup/files.rb new file mode 100644 index 0000000000..654b4d1c89 --- /dev/null +++ b/lib/backup/files.rb @@ -0,0 +1,40 @@ +require 'open3' + +module Backup + class Files + attr_reader :name, :app_files_dir, :backup_tarball, :files_parent_dir + + def initialize(name, app_files_dir) + @name = name + @app_files_dir = File.realpath(app_files_dir) + @files_parent_dir = File.realpath(File.join(@app_files_dir, '..')) + @backup_tarball = File.join(Gitlab.config.backup.path, name + '.tar.gz') + end + + # Copy files from public/files to backup/files + def dump + FileUtils.mkdir_p(Gitlab.config.backup.path) + FileUtils.rm_f(backup_tarball) + run_pipeline!([%W(tar -C #{app_files_dir} -cf - .), %W(gzip -c -1)], out: [backup_tarball, 'w', 0600]) + end + + def restore + backup_existing_files_dir + create_files_dir + + run_pipeline!([%W(gzip -cd), %W(tar -C #{app_files_dir} -xf -)], in: backup_tarball) + end + + def backup_existing_files_dir + timestamped_files_path = File.join(files_parent_dir, "#{name}.#{Time.now.to_i}") + if File.exists?(app_files_dir) + FileUtils.mv(app_files_dir, File.expand_path(timestamped_files_path)) + end + end + + def run_pipeline!(cmd_list, options={}) + status_list = Open3.pipeline(*cmd_list, options) + abort 'Backup failed' unless status_list.compact.all?(&:success?) + end + end +end diff --git a/lib/backup/lfs.rb b/lib/backup/lfs.rb new file mode 100644 index 0000000000..4153467fbe --- /dev/null +++ b/lib/backup/lfs.rb @@ -0,0 +1,13 @@ +require 'backup/files' + +module Backup + class Lfs < Files + def initialize + super('lfs', Settings.lfs.storage_path) + end + + def create_files_dir + Dir.mkdir(app_files_dir, 0700) + end + end +end diff --git a/lib/backup/manager.rb b/lib/backup/manager.rb index 5c42f25f4a..099062eeb8 100644 --- a/lib/backup/manager.rb +++ b/lib/backup/manager.rb @@ -150,17 +150,15 @@ module Backup private def backup_contents - folders_to_backup + ["backup_information.yml"] + folders_to_backup + archives_to_backup + ["backup_information.yml"] + end + + def archives_to_backup + %w{uploads builds artifacts lfs}.map{ |name| (name + ".tar.gz") unless skipped?(name) }.compact end def folders_to_backup - folders = %w{repositories db uploads builds} - - if ENV["SKIP"] - return folders.reject{ |folder| ENV["SKIP"].include?(folder) } - end - - folders + %w{repositories db}.reject{ |name| skipped?(name) } end def settings diff --git a/lib/backup/repository.rb b/lib/backup/repository.rb index 4d70f7883d..a82a7e1f7b 100644 --- a/lib/backup/repository.rb +++ b/lib/backup/repository.rb @@ -35,7 +35,7 @@ module Backup if wiki.repository.empty? $progress.puts " [SKIPPED]".cyan else - cmd = %W(git --git-dir=#{path_to_repo(wiki)} bundle create #{path_to_bundle(wiki)} --all) + cmd = %W(#{Gitlab.config.git.bin_path} --git-dir=#{path_to_repo(wiki)} bundle create #{path_to_bundle(wiki)} --all) output, status = Gitlab::Popen.popen(cmd) if status.zero? $progress.puts " [DONE]".green @@ -67,7 +67,7 @@ module Backup FileUtils.mkdir_p(path_to_repo(project)) cmd = %W(tar -xf #{path_to_bundle(project)} -C #{path_to_repo(project)}) else - cmd = %W(git init --bare #{path_to_repo(project)}) + cmd = %W(#{Gitlab.config.git.bin_path} init --bare #{path_to_repo(project)}) end if system(*cmd, silent) @@ -87,7 +87,7 @@ module Backup # that was initialized with ProjectWiki.new() and then # try to restore with 'git clone --bare'. FileUtils.rm_rf(path_to_repo(wiki)) - cmd = %W(git clone --bare #{path_to_bundle(wiki)} #{path_to_repo(wiki)}) + cmd = %W(#{Gitlab.config.git.bin_path} clone --bare #{path_to_bundle(wiki)} #{path_to_repo(wiki)}) if system(*cmd, silent) $progress.puts " [DONE]".green diff --git a/lib/backup/uploads.rb b/lib/backup/uploads.rb index 1f9626644e..9261f77f3c 100644 --- a/lib/backup/uploads.rb +++ b/lib/backup/uploads.rb @@ -1,34 +1,14 @@ +require 'backup/files' + module Backup - class Uploads - attr_reader :app_uploads_dir, :backup_uploads_dir, :backup_dir + class Uploads < Files def initialize - @app_uploads_dir = File.realpath(Rails.root.join('public', 'uploads')) - @backup_dir = Gitlab.config.backup.path - @backup_uploads_dir = File.join(Gitlab.config.backup.path, 'uploads') + super('uploads', Rails.root.join('public/uploads')) end - # Copy uploads from public/uploads to backup/uploads - def dump - FileUtils.rm_rf(backup_uploads_dir) - # Ensure the parent dir of backup_uploads_dir exists - FileUtils.mkdir_p(Gitlab.config.backup.path) - # Fail if somebody raced to create backup_uploads_dir before us - FileUtils.mkdir(backup_uploads_dir, mode: 0700) - FileUtils.cp_r(app_uploads_dir, backup_dir) - end - - def restore - backup_existing_uploads_dir - - FileUtils.cp_r(backup_uploads_dir, app_uploads_dir) - end - - def backup_existing_uploads_dir - timestamped_uploads_path = File.join(app_uploads_dir, '..', "uploads.#{Time.now.to_i}") - if File.exists?(app_uploads_dir) - FileUtils.mv(app_uploads_dir, File.expand_path(timestamped_uploads_path)) - end + def create_files_dir + Dir.mkdir(app_files_dir) end end end diff --git a/lib/ci/api/api.rb b/lib/ci/api/api.rb index 218d8c3adc..07e68216d7 100644 --- a/lib/ci/api/api.rb +++ b/lib/ci/api/api.rb @@ -26,7 +26,8 @@ module Ci format :json helpers Helpers - helpers ::API::APIHelpers + helpers ::API::Helpers + helpers Gitlab::CurrentSettings mount Builds mount Commits diff --git a/lib/ci/api/builds.rb b/lib/ci/api/builds.rb index 83ca1e6481..15faa6edd8 100644 --- a/lib/ci/api/builds.rb +++ b/lib/ci/api/builds.rb @@ -47,6 +47,108 @@ module Ci build.drop end end + + # Authorize artifacts uploading for build - Runners only + # + # Parameters: + # id (required) - The ID of a build + # token (required) - The build authorization token + # filesize (optional) - the size of uploaded file + # Example Request: + # POST /builds/:id/artifacts/authorize + post ":id/artifacts/authorize" do + require_gitlab_workhorse! + not_allowed! unless Gitlab.config.artifacts.enabled + build = Ci::Build.find_by_id(params[:id]) + not_found! unless build + authenticate_build_token!(build) + forbidden!('build is not running') unless build.running? + + if params[:filesize] + file_size = params[:filesize].to_i + file_to_large! unless file_size < max_artifacts_size + end + + status 200 + { TempPath: ArtifactUploader.artifacts_upload_path } + end + + # Upload artifacts to build - Runners only + # + # Parameters: + # id (required) - The ID of a build + # token (required) - The build authorization token + # file (required) - The uploaded file + # Parameters (accelerated by GitLab Workhorse): + # file.path - path to locally stored body (generated by Workhorse) + # file.name - real filename as send in Content-Disposition + # file.type - real content type as send in Content-Type + # Headers: + # BUILD-TOKEN (required) - The build authorization token, the same as token + # Body: + # The file content + # + # Example Request: + # POST /builds/:id/artifacts + post ":id/artifacts" do + require_gitlab_workhorse! + not_allowed! unless Gitlab.config.artifacts.enabled + build = Ci::Build.find_by_id(params[:id]) + not_found! unless build + authenticate_build_token!(build) + forbidden!('build is not running') unless build.running? + + file = uploaded_file!(:file, ArtifactUploader.artifacts_upload_path) + file_to_large! unless file.size < max_artifacts_size + + if build.update_attributes(artifacts_file: file) + present build, with: Entities::Build + else + render_validation_error!(build) + end + end + + # Download the artifacts file from build - Runners only + # + # Parameters: + # id (required) - The ID of a build + # token (required) - The build authorization token + # Headers: + # BUILD-TOKEN (required) - The build authorization token, the same as token + # Example Request: + # GET /builds/:id/artifacts + get ":id/artifacts" do + build = Ci::Build.find_by_id(params[:id]) + not_found! unless build + authenticate_build_token!(build) + artifacts_file = build.artifacts_file + + unless artifacts_file.file_storage? + return redirect_to build.artifacts_file.url + end + + unless artifacts_file.exists? + not_found! + end + + present_file!(artifacts_file.path, artifacts_file.filename) + end + + # Remove the artifacts file from build + # + # Parameters: + # id (required) - The ID of a build + # token (required) - The build authorization token + # Headers: + # BUILD-TOKEN (required) - The build authorization token, the same as token + # Example Request: + # DELETE /builds/:id/artifacts + delete ":id/artifacts" do + build = Ci::Build.find_by_id(params[:id]) + not_found! unless build + authenticate_build_token!(build) + build.remove_artifacts_file! + end end end end diff --git a/lib/ci/api/entities.rb b/lib/ci/api/entities.rb index b80c0b8b27..750f421872 100644 --- a/lib/ci/api/entities.rb +++ b/lib/ci/api/entities.rb @@ -11,10 +11,16 @@ module Ci expose :builds end + class ArtifactFile < Grape::Entity + expose :filename, :size + end + class Build < Grape::Entity expose :id, :commands, :ref, :sha, :status, :project_id, :repo_url, :before_sha, :allow_git_fetch, :project_name + expose :name, :token, :stage + expose :options do |model| model.options end @@ -24,6 +30,7 @@ module Ci end expose :variables + expose :artifacts_file, using: ArtifactFile end class Runner < Grape::Entity diff --git a/lib/ci/api/helpers.rb b/lib/ci/api/helpers.rb index e602cda81d..0250233375 100644 --- a/lib/ci/api/helpers.rb +++ b/lib/ci/api/helpers.rb @@ -1,6 +1,8 @@ module Ci module API module Helpers + BUILD_TOKEN_HEADER = "HTTP_BUILD_TOKEN" + BUILD_TOKEN_PARAM = :token UPDATE_RUNNER_EVERY = 60 def authenticate_runners! @@ -15,8 +17,15 @@ module Ci forbidden! unless project.valid_token?(params[:project_token]) end + def authenticate_build_token!(build) + token = (params[BUILD_TOKEN_PARAM] || env[BUILD_TOKEN_HEADER]).to_s + forbidden! unless token && build.valid_token?(token) + end + def update_runner_last_contact - if current_runner.contacted_at.nil? || Time.now - current_runner.contacted_at >= UPDATE_RUNNER_EVERY + # Use a random threshold to prevent beating DB updates + contacted_at_max_age = UPDATE_RUNNER_EVERY + Random.rand(UPDATE_RUNNER_EVERY) + if current_runner.contacted_at.nil? || Time.now - current_runner.contacted_at >= contacted_at_max_age current_runner.update_attributes(contacted_at: Time.now) end end @@ -30,6 +39,10 @@ module Ci info = attributes_for_keys(["name", "version", "revision", "platform", "architecture"], params["info"]) current_runner.update(info) end + + def max_artifacts_size + current_application_settings.max_artifacts_size.megabytes.to_i + end end end end diff --git a/lib/ci/charts.rb b/lib/ci/charts.rb index 915a4f526a..5ff7407c6f 100644 --- a/lib/ci/charts.rb +++ b/lib/ci/charts.rb @@ -60,7 +60,8 @@ module Ci class BuildTime < Chart def collect - commits = project.commits.joins(:builds).where("#{Ci::Build.table_name}.finished_at is NOT NULL AND #{Ci::Build.table_name}.started_at is NOT NULL").last(30) + commits = project.commits.last(30) + commits.each do |commit| @labels << commit.short_sha @build_times << (commit.duration / 60) diff --git a/lib/ci/gitlab_ci_yaml_processor.rb b/lib/ci/gitlab_ci_yaml_processor.rb index 0da73e387e..3beafcad11 100644 --- a/lib/ci/gitlab_ci_yaml_processor.rb +++ b/lib/ci/gitlab_ci_yaml_processor.rb @@ -4,13 +4,14 @@ module Ci DEFAULT_STAGES = %w(build test deploy) DEFAULT_STAGE = 'test' - ALLOWED_YAML_KEYS = [:before_script, :image, :services, :types, :stages, :variables] - ALLOWED_JOB_KEYS = [:tags, :script, :only, :except, :type, :image, :services, :allow_failure, :type, :stage, :when] + ALLOWED_YAML_KEYS = [:before_script, :image, :services, :types, :stages, :variables, :cache] + ALLOWED_JOB_KEYS = [:tags, :script, :only, :except, :type, :image, :services, :allow_failure, :type, :stage, :when, :artifacts, :cache] - attr_reader :before_script, :image, :services, :variables + attr_reader :before_script, :image, :services, :variables, :path, :cache - def initialize(config) + def initialize(config, path = nil) @config = YAML.load(config) + @path = path unless @config.is_a? Hash raise ValidationError, "YAML should be a hash" @@ -45,6 +46,7 @@ module Ci @services = @config[:services] @stages = @config[:stages] || @config[:types] @variables = @config[:variables] || {} + @cache = @config[:cache] @config.except!(*ALLOWED_YAML_KEYS) # anything that doesn't have script is considered as unknown @@ -63,26 +65,6 @@ module Ci end end - def process?(only_params, except_params, ref, tag) - return true if only_params.nil? && except_params.nil? - - if only_params - return true if tag && only_params.include?("tags") - return true if !tag && only_params.include?("branches") - - only_params.find do |pattern| - match_ref?(pattern, ref) - end - else - return false if tag && except_params.include?("tags") - return false if !tag && except_params.include?("branches") - - except_params.each do |pattern| - return false if match_ref?(pattern, ref) - end - end - end - def build_job(name, job) { stage_idx: stages.index(job[:stage]), @@ -96,19 +78,13 @@ module Ci when: job[:when] || 'on_success', options: { image: job[:image] || @image, - services: job[:services] || @services + services: job[:services] || @services, + artifacts: job[:artifacts], + cache: job[:cache] || @cache, }.compact } end - def match_ref?(pattern, ref) - if pattern.first == "/" && pattern.last == "/" - Regexp.new(pattern[1...-1]) =~ ref - else - pattern == ref - end - end - def normalize_script(script) if script.is_a? Array script.join("\n") @@ -138,67 +114,140 @@ module Ci raise ValidationError, "variables should be a map of key-valued strings" end + if @cache + if @cache[:untracked] && !validate_boolean(@cache[:untracked]) + raise ValidationError, "cache:untracked parameter should be an boolean" + end + + if @cache[:paths] && !validate_array_of_strings(@cache[:paths]) + raise ValidationError, "cache:paths parameter should be an array of strings" + end + end + @jobs.each do |name, job| - validate_job!("#{name} job", job) + validate_job!(name, job) end true end def validate_job!(name, job) + if name.blank? || !validate_string(name) + raise ValidationError, "job name should be non-empty string" + end + job.keys.each do |key| unless ALLOWED_JOB_KEYS.include? key - raise ValidationError, "#{name}: unknown parameter #{key}" + raise ValidationError, "#{name} job: unknown parameter #{key}" end end - if !job[:script].is_a?(String) && !validate_array_of_strings(job[:script]) - raise ValidationError, "#{name}: script should be a string or an array of a strings" + if !validate_string(job[:script]) && !validate_array_of_strings(job[:script]) + raise ValidationError, "#{name} job: script should be a string or an array of a strings" end if job[:stage] unless job[:stage].is_a?(String) && job[:stage].in?(stages) - raise ValidationError, "#{name}: stage parameter should be #{stages.join(", ")}" + raise ValidationError, "#{name} job: stage parameter should be #{stages.join(", ")}" end end - if job[:image] && !job[:image].is_a?(String) - raise ValidationError, "#{name}: image should be a string" + if job[:image] && !validate_string(job[:image]) + raise ValidationError, "#{name} job: image should be a string" end if job[:services] && !validate_array_of_strings(job[:services]) - raise ValidationError, "#{name}: services should be an array of strings" + raise ValidationError, "#{name} job: services should be an array of strings" end if job[:tags] && !validate_array_of_strings(job[:tags]) - raise ValidationError, "#{name}: tags parameter should be an array of strings" + raise ValidationError, "#{name} job: tags parameter should be an array of strings" end if job[:only] && !validate_array_of_strings(job[:only]) - raise ValidationError, "#{name}: only parameter should be an array of strings" + raise ValidationError, "#{name} job: only parameter should be an array of strings" end if job[:except] && !validate_array_of_strings(job[:except]) - raise ValidationError, "#{name}: except parameter should be an array of strings" + raise ValidationError, "#{name} job: except parameter should be an array of strings" end - if job[:allow_failure] && !job[:allow_failure].in?([true, false]) - raise ValidationError, "#{name}: allow_failure parameter should be an boolean" + if job[:cache] + if job[:cache][:untracked] && !validate_boolean(job[:cache][:untracked]) + raise ValidationError, "#{name} job: cache:untracked parameter should be an boolean" + end + + if job[:cache][:paths] && !validate_array_of_strings(job[:cache][:paths]) + raise ValidationError, "#{name} job: cache:paths parameter should be an array of strings" + end + end + + if job[:artifacts] + if job[:artifacts][:untracked] && !validate_boolean(job[:artifacts][:untracked]) + raise ValidationError, "#{name} job: artifacts:untracked parameter should be an boolean" + end + + if job[:artifacts][:paths] && !validate_array_of_strings(job[:artifacts][:paths]) + raise ValidationError, "#{name} job: artifacts:paths parameter should be an array of strings" + end + end + + if job[:allow_failure] && !validate_boolean(job[:allow_failure]) + raise ValidationError, "#{name} job: allow_failure parameter should be an boolean" end if job[:when] && !job[:when].in?(%w(on_success on_failure always)) - raise ValidationError, "#{name}: when parameter should be on_success, on_failure or always" + raise ValidationError, "#{name} job: when parameter should be on_success, on_failure or always" end end private def validate_array_of_strings(values) - values.is_a?(Array) && values.all? {|tag| tag.is_a?(String)} + values.is_a?(Array) && values.all? { |value| validate_string(value) } end def validate_variables(variables) - variables.is_a?(Hash) && variables.all? {|key, value| key.is_a?(Symbol) && value.is_a?(String)} + variables.is_a?(Hash) && variables.all? { |key, value| validate_string(key) && validate_string(value) } + end + + def validate_string(value) + value.is_a?(String) || value.is_a?(Symbol) + end + + def validate_boolean(value) + value.in?([true, false]) + end + + def process?(only_params, except_params, ref, tag) + if only_params.present? + return false unless matching?(only_params, ref, tag) + end + + if except_params.present? + return false if matching?(except_params, ref, tag) + end + + true + end + + def matching?(patterns, ref, tag) + patterns.any? do |pattern| + match_ref?(pattern, ref, tag) + end + end + + def match_ref?(pattern, ref, tag) + pattern, path = pattern.split('@', 2) + return false if path && path != self.path + return true if tag && pattern == 'tags' + return true if !tag && pattern == 'branches' + + if pattern.first == "/" && pattern.last == "/" + Regexp.new(pattern[1...-1]) =~ ref + else + pattern == ref + end end end end diff --git a/lib/file_streamer.rb b/lib/file_streamer.rb new file mode 100644 index 0000000000..4e3c6d3c77 --- /dev/null +++ b/lib/file_streamer.rb @@ -0,0 +1,16 @@ +class FileStreamer #:nodoc: + attr_reader :to_path + + def initialize(path) + @to_path = path + end + + # Stream the file's contents if Rack::Sendfile isn't present. + def each + File.open(to_path, 'rb') do |file| + while chunk = file.read(16384) + yield chunk + end + end + end +end diff --git a/lib/gitlab/backend/grack_auth.rb b/lib/gitlab/backend/grack_auth.rb index 6830a916bc..0d156047ff 100644 --- a/lib/gitlab/backend/grack_auth.rb +++ b/lib/gitlab/backend/grack_auth.rb @@ -33,8 +33,11 @@ module Grack auth! + lfs_response = Gitlab::Lfs::Router.new(project, @user, @request).try_call + return lfs_response unless lfs_response.nil? + if project && authorized_request? - # Tell gitlab-git-http-server the request is OK, and what the GL_ID is + # Tell gitlab-workhorse the request is OK, and what the GL_ID is render_grack_auth_ok elsif @user.nil? && !@ci unauthorized @@ -72,7 +75,7 @@ module Grack matched_login = /(?^[a-zA-Z]*-ci)-token$/.match(login) if project && matched_login.present? && git_cmd == 'git-upload-pack' - underscored_service = matched_login['s'].underscore + underscored_service = matched_login['s'].underscore if Service.available_services_names.include?(underscored_service) service_method = "#{underscored_service}_service" @@ -193,12 +196,19 @@ module Grack end def render_grack_auth_ok + repo_path = + if @request.path_info =~ /^([\w\.\/-]+)\.wiki\.git/ + ProjectWiki.new(project).repository.path_to_repo + else + project.repository.path_to_repo + end + [ 200, { "Content-Type" => "application/json" }, [JSON.dump({ 'GL_ID' => Gitlab::ShellEnv.gl_id(@user), - 'RepoPath' => project.repository.path_to_repo, + 'RepoPath' => repo_path, })] ] end diff --git a/lib/gitlab/backend/shell.rb b/lib/gitlab/backend/shell.rb index 01b8bda05c..87ac30b5ff 100644 --- a/lib/gitlab/backend/shell.rb +++ b/lib/gitlab/backend/shell.rb @@ -1,6 +1,6 @@ module Gitlab class Shell - class AccessDenied < StandardError; end + class Error < StandardError; end class KeyAdder < Struct.new(:io) def add_key(id, key) @@ -36,8 +36,9 @@ module Gitlab # import_repository("gitlab/gitlab-ci", "https://github.com/randx/six.git") # def import_repository(name, url) - Gitlab::Utils.system_silent([gitlab_shell_projects_path, 'import-project', - "#{name}.git", url, '240']) + output, status = Popen::popen([gitlab_shell_projects_path, 'import-project', "#{name}.git", url, '240']) + raise Error, output unless status.zero? + true end # Move repository diff --git a/lib/gitlab/compare_result.rb b/lib/gitlab/compare_result.rb index d72391dade..0d696a1ee2 100644 --- a/lib/gitlab/compare_result.rb +++ b/lib/gitlab/compare_result.rb @@ -2,8 +2,8 @@ module Gitlab class CompareResult attr_reader :commits, :diffs - def initialize(compare) - @commits, @diffs = compare.commits, compare.diffs + def initialize(compare, diff_options = {}) + @commits, @diffs = compare.commits, compare.diffs(nil, diff_options) end end end diff --git a/lib/gitlab/current_settings.rb b/lib/gitlab/current_settings.rb index 0ea1b6a2f6..46a4ef0e31 100644 --- a/lib/gitlab/current_settings.rb +++ b/lib/gitlab/current_settings.rb @@ -23,7 +23,9 @@ module Gitlab restricted_visibility_levels: Settings.gitlab['restricted_visibility_levels'], max_attachment_size: Settings.gitlab['max_attachment_size'], session_expire_delay: Settings.gitlab['session_expire_delay'], - import_sources: Settings.gitlab['import_sources'] + import_sources: Settings.gitlab['import_sources'], + shared_runners_enabled: Settings.gitlab_ci['shared_runners_enabled'], + max_artifacts_size: Settings.artifacts['max_size'], ) end diff --git a/lib/gitlab/database.rb b/lib/gitlab/database.rb index 741a52714a..71f37f1fef 100644 --- a/lib/gitlab/database.rb +++ b/lib/gitlab/database.rb @@ -1,7 +1,7 @@ module Gitlab module Database def self.mysql? - ActiveRecord::Base.connection.adapter_name.downcase == 'mysql' + ActiveRecord::Base.connection.adapter_name.downcase == 'mysql2' end def self.postgresql? diff --git a/lib/gitlab/force_push_check.rb b/lib/gitlab/force_push_check.rb index fdb6a35c78..93c6a5bb7f 100644 --- a/lib/gitlab/force_push_check.rb +++ b/lib/gitlab/force_push_check.rb @@ -7,7 +7,7 @@ module Gitlab if Gitlab::Git.blank_ref?(oldrev) || Gitlab::Git.blank_ref?(newrev) false else - missed_refs, _ = Gitlab::Popen.popen(%W(git --git-dir=#{project.repository.path_to_repo} rev-list #{oldrev} ^#{newrev})) + missed_refs, _ = Gitlab::Popen.popen(%W(#{Gitlab.config.git.bin_path} --git-dir=#{project.repository.path_to_repo} rev-list #{oldrev} ^#{newrev})) missed_refs.split("\n").size > 0 end end diff --git a/lib/gitlab/git_access.rb b/lib/gitlab/git_access.rb index c90184d31c..3ed1eec517 100644 --- a/lib/gitlab/git_access.rb +++ b/lib/gitlab/git_access.rb @@ -13,7 +13,7 @@ module Gitlab def user return @user if defined?(@user) - @user = + @user = case actor when User actor @@ -125,7 +125,7 @@ module Gitlab def change_access_check(change) oldrev, newrev, ref = change.split(' ') - action = + action = if project.protected_branch?(branch_name(ref)) protected_branch_action(oldrev, newrev, branch_name(ref)) elsif protected_tag?(tag_name(ref)) @@ -148,7 +148,7 @@ module Gitlab build_status_object(false, "You are not allowed to change existing tags on this project.") else # :push_code build_status_object(false, "You are not allowed to push code to this project.") - end + end return status end diff --git a/lib/gitlab/git_ref_validator.rb b/lib/gitlab/git_ref_validator.rb index 39d17def93..4d83d8e72a 100644 --- a/lib/gitlab/git_ref_validator.rb +++ b/lib/gitlab/git_ref_validator.rb @@ -6,7 +6,7 @@ module Gitlab # Returns true for a valid reference name, false otherwise def validate(ref_name) Gitlab::Utils.system_silent( - %W(git check-ref-format refs/#{ref_name})) + %W(#{Gitlab.config.git.bin_path} check-ref-format refs/#{ref_name})) end end end diff --git a/lib/gitlab/google_code_import/importer.rb b/lib/gitlab/google_code_import/importer.rb index 03c410726a..87fee28dc0 100644 --- a/lib/gitlab/google_code_import/importer.rb +++ b/lib/gitlab/google_code_import/importer.rb @@ -30,7 +30,7 @@ module Gitlab def user_map @user_map ||= begin - user_map = Hash.new do |hash, user| + user_map = Hash.new do |hash, user| # Replace ... by \.\.\., so `johnsm...@gmail.com` isn't autolinked. Client.mask_email(user).sub("...", "\\.\\.\\.") end @@ -76,18 +76,7 @@ module Gitlab attachments = format_attachments(raw_issue["id"], 0, issue_comment["attachments"]) body = format_issue_body(author, date, content, attachments) - - labels = [] - raw_issue["labels"].each do |label| - name = nice_label_name(label) - labels << name - - unless @known_labels.include?(name) - create_label(name) - @known_labels << name - end - end - labels << nice_status_name(raw_issue["status"]) + labels = import_issue_labels(raw_issue) assignee_id = nil if raw_issue.has_key?("owner") @@ -110,6 +99,7 @@ module Gitlab assignee_id: assignee_id, state: raw_issue["state"] == "closed" ? "closed" : "opened" ) + issue.add_labels_by_names(labels) if issue.iid != raw_issue["id"] @@ -120,6 +110,23 @@ module Gitlab end end + def import_issue_labels(raw_issue) + labels = [] + + raw_issue["labels"].each do |label| + name = nice_label_name(label) + labels << name + + unless @known_labels.include?(name) + create_label(name) + @known_labels << name + end + end + + labels << nice_status_name(raw_issue["status"]) + labels + end + def import_issue_comments(issue, comments) Note.transaction do while raw_comment = comments.shift @@ -172,7 +179,7 @@ module Gitlab "#5cb85c" when "Status: Started" "#8e44ad" - + when "Priority: Critical" "#ffcfcf" when "Priority: High" @@ -181,7 +188,7 @@ module Gitlab "#fff5cc" when "Priority: Low" "#cfe9ff" - + when "Type: Defect" "#d9534f" when "Type: Enhancement" @@ -249,8 +256,8 @@ module Gitlab end if raw_updates.has_key?("cc") - cc = raw_updates["cc"].map do |l| - deleted = l.start_with?("-") + cc = raw_updates["cc"].map do |l| + deleted = l.start_with?("-") l = l[1..-1] if deleted l = user_map[l] l = "~~#{l}~~" if deleted @@ -261,8 +268,8 @@ module Gitlab end if raw_updates.has_key?("labels") - labels = raw_updates["labels"].map do |l| - deleted = l.start_with?("-") + labels = raw_updates["labels"].map do |l| + deleted = l.start_with?("-") l = l[1..-1] if deleted l = nice_label_name(l) l = "~~#{l}~~" if deleted @@ -278,45 +285,39 @@ module Gitlab if raw_updates.has_key?("blockedOn") blocked_ons = raw_updates["blockedOn"].map do |raw_blocked_on| - name, id = raw_blocked_on.split(":", 2) - - deleted = name.start_with?("-") - name = name[1..-1] if deleted - - text = - if name == project.import_source - "##{id}" - else - "#{project.namespace.path}/#{name}##{id}" - end - text = "~~#{text}~~" if deleted - text + format_blocking_updates(raw_blocked_on) end + updates << "*Blocked on: #{blocked_ons.join(", ")}*" end if raw_updates.has_key?("blocking") blockings = raw_updates["blocking"].map do |raw_blocked_on| - name, id = raw_blocked_on.split(":", 2) - - deleted = name.start_with?("-") - name = name[1..-1] if deleted - - text = - if name == project.import_source - "##{id}" - else - "#{project.namespace.path}/#{name}##{id}" - end - text = "~~#{text}~~" if deleted - text + format_blocking_updates(raw_blocked_on) end + updates << "*Blocking: #{blockings.join(", ")}*" end updates end + def format_blocking_updates(raw_blocked_on) + name, id = raw_blocked_on.split(":", 2) + + deleted = name.start_with?("-") + name = name[1..-1] if deleted + + text = + if name == project.import_source + "##{id}" + else + "#{project.namespace.path}/#{name}##{id}" + end + text = "~~#{text}~~" if deleted + text + end + def format_attachments(issue_id, comment_id, raw_attachments) return [] unless raw_attachments @@ -325,7 +326,7 @@ module Gitlab filename = attachment["fileName"] link = "https://storage.googleapis.com/google-code-attachments/#{@repo.name}/issue-#{issue_id}/comment-#{comment_id}/#{filename}" - + text = "[#{filename}](#{link})" text = "!#{text}" if filename =~ /\.(png|jpg|jpeg|gif|bmp|tiff)\z/i text diff --git a/lib/gitlab/inline_diff.rb b/lib/gitlab/inline_diff.rb index 99e7b529ba..44507bde25 100644 --- a/lib/gitlab/inline_diff.rb +++ b/lib/gitlab/inline_diff.rb @@ -11,50 +11,73 @@ module Gitlab indexes.each do |index| first_line = diff_arr[index+1] second_line = diff_arr[index+2] - max_length = [first_line.size, second_line.size].max # Skip inline diff if empty line was replaced with content next if first_line == "-\n" - first_the_same_symbols = 0 - (0..max_length + 1).each do |i| - first_the_same_symbols = i - 1 - if first_line[i] != second_line[i] && i > 0 - break - end - end + first_token = find_first_token(first_line, second_line) + apply_first_token(diff_arr, index, first_token) - first_token = first_line[0..first_the_same_symbols][1..-1] - start = first_token + START - - if first_token.empty? - # In case if we remove string of spaces in commit - diff_arr[index+1].sub!("-", "-" => "-#{START}") - diff_arr[index+2].sub!("+", "+" => "+#{START}") - else - diff_arr[index+1].sub!(first_token, first_token => start) - diff_arr[index+2].sub!(first_token, first_token => start) - end - - last_the_same_symbols = 0 - (1..max_length + 1).each do |i| - last_the_same_symbols = -i - shortest_line = second_line.size > first_line.size ? first_line : second_line - if ( first_line[-i] != second_line[-i] ) || "#{first_token}#{START}".size == shortest_line[1..-i].size - break - end - end - last_the_same_symbols += 1 - last_token = first_line[last_the_same_symbols..-1] - # This is tricky: escape backslashes so that `sub` doesn't interpret them - # as backreferences. Regexp.escape does NOT do the right thing. - replace_token = FINISH + last_token.gsub(/\\/, '\&\&') - diff_arr[index+1].sub!(/#{Regexp.escape(last_token)}$/, replace_token) - diff_arr[index+2].sub!(/#{Regexp.escape(last_token)}$/, replace_token) + last_token = find_last_token(first_line, second_line, first_token) + apply_last_token(diff_arr, index, last_token) end + diff_arr end + def apply_first_token(diff_arr, index, first_token) + start = first_token + START + + if first_token.empty? + # In case if we remove string of spaces in commit + diff_arr[index+1].sub!("-", "-" => "-#{START}") + diff_arr[index+2].sub!("+", "+" => "+#{START}") + else + diff_arr[index+1].sub!(first_token, first_token => start) + diff_arr[index+2].sub!(first_token, first_token => start) + end + end + + def apply_last_token(diff_arr, index, last_token) + # This is tricky: escape backslashes so that `sub` doesn't interpret them + # as backreferences. Regexp.escape does NOT do the right thing. + replace_token = FINISH + last_token.gsub(/\\/, '\&\&') + diff_arr[index+1].sub!(/#{Regexp.escape(last_token)}$/, replace_token) + diff_arr[index+2].sub!(/#{Regexp.escape(last_token)}$/, replace_token) + end + + def find_first_token(first_line, second_line) + max_length = [first_line.size, second_line.size].max + first_the_same_symbols = 0 + + (0..max_length + 1).each do |i| + first_the_same_symbols = i - 1 + + if first_line[i] != second_line[i] && i > 0 + break + end + end + + first_line[0..first_the_same_symbols][1..-1] + end + + def find_last_token(first_line, second_line, first_token) + max_length = [first_line.size, second_line.size].max + last_the_same_symbols = 0 + + (1..max_length + 1).each do |i| + last_the_same_symbols = -i + shortest_line = second_line.size > first_line.size ? first_line : second_line + + if (first_line[-i] != second_line[-i]) || "#{first_token}#{START}".size == shortest_line[1..-i].size + break + end + end + + last_the_same_symbols += 1 + first_line[last_the_same_symbols..-1] + end + def _indexes_of_changed_lines(diff_arr) chain_of_first_symbols = "" diff_arr.each_with_index do |line, i| diff --git a/lib/gitlab/lfs/response.rb b/lib/gitlab/lfs/response.rb new file mode 100644 index 0000000000..c18dfbd485 --- /dev/null +++ b/lib/gitlab/lfs/response.rb @@ -0,0 +1,327 @@ +module Gitlab + module Lfs + class Response + + def initialize(project, user, request) + @origin_project = project + @project = storage_project(project) + @user = user + @env = request.env + @request = request + end + + def render_download_object_response(oid) + render_response_to_download do + if check_download_sendfile_header? + render_lfs_sendfile(oid) + else + render_not_found + end + end + end + + def render_batch_operation_response + request_body = JSON.parse(@request.body.read) + case request_body["operation"] + when "download" + render_batch_download(request_body) + when "upload" + render_batch_upload(request_body) + else + render_not_found + end + end + + def render_storage_upload_authorize_response(oid, size) + render_response_to_push do + [ + 200, + { "Content-Type" => "application/json; charset=utf-8" }, + [JSON.dump({ + 'StoreLFSPath' => "#{Gitlab.config.lfs.storage_path}/tmp/upload", + 'LfsOid' => oid, + 'LfsSize' => size + })] + ] + end + end + + def render_storage_upload_store_response(oid, size, tmp_file_name) + render_response_to_push do + render_lfs_upload_ok(oid, size, tmp_file_name) + end + end + + def render_unsupported_deprecated_api + [ + 501, + { "Content-Type" => "application/json; charset=utf-8" }, + [JSON.dump({ + 'message' => 'Server supports batch API only, please update your Git LFS client to version 1.0.1 and up.', + 'documentation_url' => "#{Gitlab.config.gitlab.url}/help", + })] + ] + end + + private + + def render_not_enabled + [ + 501, + { + "Content-Type" => "application/json; charset=utf-8", + }, + [JSON.dump({ + 'message' => 'Git LFS is not enabled on this GitLab server, contact your admin.', + 'documentation_url' => "#{Gitlab.config.gitlab.url}/help", + })] + ] + end + + def render_unauthorized + [ + 401, + { + 'Content-Type' => 'text/plain' + }, + ['Unauthorized'] + ] + end + + def render_not_found + [ + 404, + { + "Content-Type" => "application/vnd.git-lfs+json" + }, + [JSON.dump({ + 'message' => 'Not found.', + 'documentation_url' => "#{Gitlab.config.gitlab.url}/help", + })] + ] + end + + def render_forbidden + [ + 403, + { + "Content-Type" => "application/vnd.git-lfs+json" + }, + [JSON.dump({ + 'message' => 'Access forbidden. Check your access level.', + 'documentation_url' => "#{Gitlab.config.gitlab.url}/help", + })] + ] + end + + def render_lfs_sendfile(oid) + return render_not_found unless oid.present? + + lfs_object = object_for_download(oid) + + if lfs_object && lfs_object.file.exists? + [ + 200, + { + # GitLab-workhorse will forward Content-Type header + "Content-Type" => "application/octet-stream", + "X-Sendfile" => lfs_object.file.path + }, + [] + ] + else + render_not_found + end + end + + def render_batch_upload(body) + return render_not_found if body.empty? || body['objects'].nil? + + render_response_to_push do + response = build_upload_batch_response(body['objects']) + [ + 200, + { + "Content-Type" => "application/json; charset=utf-8", + "Cache-Control" => "private", + }, + [JSON.dump(response)] + ] + end + end + + def render_batch_download(body) + return render_not_found if body.empty? || body['objects'].nil? + + render_response_to_download do + response = build_download_batch_response(body['objects']) + [ + 200, + { + "Content-Type" => "application/json; charset=utf-8", + "Cache-Control" => "private", + }, + [JSON.dump(response)] + ] + end + end + + def render_lfs_upload_ok(oid, size, tmp_file) + if store_file(oid, size, tmp_file) + [ + 200, + { + 'Content-Type' => 'text/plain', + 'Content-Length' => 0 + }, + [] + ] + else + [ + 422, + { 'Content-Type' => 'text/plain' }, + ["Unprocessable entity"] + ] + end + end + + def render_response_to_download + return render_not_enabled unless Gitlab.config.lfs.enabled + + unless @project.public? + return render_unauthorized unless @user + return render_forbidden unless user_can_fetch? + end + + yield + end + + def render_response_to_push + return render_not_enabled unless Gitlab.config.lfs.enabled + return render_unauthorized unless @user + return render_forbidden unless user_can_push? + + yield + end + + def check_download_sendfile_header? + @env['HTTP_X_SENDFILE_TYPE'].to_s == "X-Sendfile" + end + + def user_can_fetch? + # Check user access against the project they used to initiate the pull + @user.can?(:download_code, @origin_project) + end + + def user_can_push? + # Check user access against the project they used to initiate the push + @user.can?(:push_code, @origin_project) + end + + def storage_project(project) + if project.forked? + project.forked_from_project + else + project + end + end + + def store_file(oid, size, tmp_file) + tmp_file_path = File.join("#{Gitlab.config.lfs.storage_path}/tmp/upload", tmp_file) + + object = LfsObject.find_or_create_by(oid: oid, size: size) + if object.file.exists? + success = true + else + success = move_tmp_file_to_storage(object, tmp_file_path) + end + + if success + success = link_to_project(object) + end + + success + ensure + # Ensure that the tmp file is removed + FileUtils.rm_f(tmp_file_path) + end + + def object_for_download(oid) + @project.lfs_objects.find_by(oid: oid) + end + + def move_tmp_file_to_storage(object, path) + File.open(path) do |f| + object.file = f + end + + object.file.store! + object.save + end + + def link_to_project(object) + if object && !object.projects.exists?(@project) + object.projects << @project + object.save + end + end + + def select_existing_objects(objects) + objects_oids = objects.map { |o| o['oid'] } + @project.lfs_objects.where(oid: objects_oids).pluck(:oid).to_set + end + + def build_upload_batch_response(objects) + selected_objects = select_existing_objects(objects) + + upload_hypermedia_links(objects, selected_objects) + end + + def build_download_batch_response(objects) + selected_objects = select_existing_objects(objects) + + download_hypermedia_links(objects, selected_objects) + end + + def download_hypermedia_links(all_objects, existing_objects) + all_objects.each do |object| + if existing_objects.include?(object['oid']) + object['actions'] = { + 'download' => { + 'href' => "#{@origin_project.http_url_to_repo}/gitlab-lfs/objects/#{object['oid']}", + 'header' => { + 'Authorization' => @env['HTTP_AUTHORIZATION'] + }.compact + } + } + else + object['error'] = { + 'code' => 404, + 'message' => "Object does not exist on the server or you don't have permissions to access it", + } + end + end + + { 'objects' => all_objects } + end + + def upload_hypermedia_links(all_objects, existing_objects) + all_objects.each do |object| + # generate actions only for non-existing objects + next if existing_objects.include?(object['oid']) + + object['actions'] = { + 'upload' => { + 'href' => "#{@origin_project.http_url_to_repo}/gitlab-lfs/objects/#{object['oid']}/#{object['size']}", + 'header' => { + 'Authorization' => @env['HTTP_AUTHORIZATION'] + }.compact + } + } + end + + { 'objects' => all_objects } + end + end + end +end diff --git a/lib/gitlab/lfs/router.rb b/lib/gitlab/lfs/router.rb new file mode 100644 index 0000000000..78d0289110 --- /dev/null +++ b/lib/gitlab/lfs/router.rb @@ -0,0 +1,97 @@ +module Gitlab + module Lfs + class Router + def initialize(project, user, request) + @project = project + @user = user + @env = request.env + @request = request + end + + def try_call + return unless @request && @request.path.present? + + case @request.request_method + when 'GET' + get_response + when 'POST' + post_response + when 'PUT' + put_response + else + nil + end + end + + private + + def get_response + path_match = @request.path.match(/\/(info\/lfs|gitlab-lfs)\/objects\/([0-9a-f]{64})$/) + return nil unless path_match + + oid = path_match[2] + return nil unless oid + + case path_match[1] + when "info/lfs" + lfs.render_unsupported_deprecated_api + when "gitlab-lfs" + lfs.render_download_object_response(oid) + else + nil + end + end + + def post_response + post_path = @request.path.match(/\/info\/lfs\/objects(\/batch)?$/) + return nil unless post_path + + # Check for Batch API + if post_path[0].ends_with?("/info/lfs/objects/batch") + lfs.render_batch_operation_response + elsif post_path[0].ends_with?("/info/lfs/objects") + lfs.render_unsupported_deprecated_api + else + nil + end + end + + def put_response + object_match = @request.path.match(/\/gitlab-lfs\/objects\/([0-9a-f]{64})\/([0-9]+)(|\/authorize){1}$/) + return nil if object_match.nil? + + oid = object_match[1] + size = object_match[2].try(:to_i) + return nil if oid.nil? || size.nil? + + # GitLab-workhorse requests + # 1. Try to authorize the request + # 2. send a request with a header containing the name of the temporary file + if object_match[3] && object_match[3] == '/authorize' + lfs.render_storage_upload_authorize_response(oid, size) + else + tmp_file_name = sanitize_tmp_filename(@request.env['HTTP_X_GITLAB_LFS_TMP']) + return nil unless tmp_file_name + + lfs.render_storage_upload_store_response(oid, size, tmp_file_name) + end + end + + def lfs + return unless @project + + Gitlab::Lfs::Response.new(@project, @user, @request) + end + + def sanitize_tmp_filename(name) + if name.present? + name.gsub!(/^.*(\\|\/)/, '') + name = name.match(/[0-9a-f]{73}/) + name[0] if name + else + nil + end + end + end + end +end diff --git a/lib/gitlab/markdown/reference_filter.rb b/lib/gitlab/markdown/reference_filter.rb index adaca78ba2..a4c560f578 100644 --- a/lib/gitlab/markdown/reference_filter.rb +++ b/lib/gitlab/markdown/reference_filter.rb @@ -15,7 +15,7 @@ module Gitlab LazyReference = Struct.new(:klass, :ids) do def self.load(refs) lazy_references, values = refs.partition { |ref| ref.is_a?(self) } - + lazy_values = lazy_references.group_by(&:klass).flat_map do |klass, refs| ids = refs.flat_map(&:ids) klass.where(id: ids) @@ -107,10 +107,10 @@ module Gitlab return doc if project.nil? search_text_nodes(doc).each do |node| - content = node.to_html - - next unless content.match(pattern) next if ignored_ancestry?(node) + next unless node.text =~ pattern + + content = node.to_html html = yield content diff --git a/lib/gitlab/markdown/relative_link_filter.rb b/lib/gitlab/markdown/relative_link_filter.rb index 6ee3d1ce03..632be4d754 100644 --- a/lib/gitlab/markdown/relative_link_filter.rb +++ b/lib/gitlab/markdown/relative_link_filter.rb @@ -51,7 +51,7 @@ module Gitlab relative_url_root, context[:project].path_with_namespace, path_type(file_path), - ref || 'master', # assume that if no ref exists we can point to master + ref || context[:project].default_branch, # if no ref exists, point to the default branch file_path ].compact.join('/').squeeze('/').chomp('/') diff --git a/lib/gitlab/markdown/sanitization_filter.rb b/lib/gitlab/markdown/sanitization_filter.rb index e368de7d84..ffb9dc33b6 100644 --- a/lib/gitlab/markdown/sanitization_filter.rb +++ b/lib/gitlab/markdown/sanitization_filter.rb @@ -48,6 +48,12 @@ module Gitlab # Allow span elements whitelist[:elements].push('span') + # Allow any protocol in `a` elements... + whitelist[:protocols].delete('a') + + # ...but then remove links with the `javascript` protocol + whitelist[:transformers].push(remove_javascript_links) + # Remove `rel` attribute from `a` elements whitelist[:transformers].push(remove_rel) @@ -57,6 +63,19 @@ module Gitlab whitelist end + def remove_javascript_links + lambda do |env| + node = env[:node] + + return unless node.name == 'a' + return unless node.has_attribute?('href') + + if node['href'].start_with?('javascript', ':javascript') + node.remove_attribute('href') + end + end + end + def remove_rel lambda do |env| if env[:node_name] == 'a' diff --git a/lib/gitlab/o_auth/provider.rb b/lib/gitlab/o_auth/provider.rb index 90c3fe8da3..9ad7a38d50 100644 --- a/lib/gitlab/o_auth/provider.rb +++ b/lib/gitlab/o_auth/provider.rb @@ -1,6 +1,12 @@ module Gitlab module OAuth class Provider + LABELS = { + "github" => "GitHub", + "gitlab" => "GitLab.com", + "google_oauth2" => "Google" + }.freeze + def self.providers Devise.omniauth_providers end @@ -23,8 +29,9 @@ module Gitlab end def self.label_for(name) + name = name.to_s config = config_for(name) - (config && config['label']) || name.to_s.titleize + (config && config['label']) || LABELS[name] || name.titleize end end end diff --git a/lib/gitlab/project_search_results.rb b/lib/gitlab/project_search_results.rb index 0dab7bcfa4..70de6a74e7 100644 --- a/lib/gitlab/project_search_results.rb +++ b/lib/gitlab/project_search_results.rb @@ -9,7 +9,7 @@ module Gitlab else nil end - @query = Shellwords.shellescape(query) if query.present? + @query = query end def objects(scope, page = nil) @@ -20,6 +20,8 @@ module Gitlab Kaminari.paginate_array(blobs).page(page).per(per_page) when 'wiki_blobs' Kaminari.paginate_array(wiki_blobs).page(page).per(per_page) + when 'commits' + Kaminari.paginate_array(commits).page(page).per(per_page) else super end @@ -27,7 +29,7 @@ module Gitlab def total_count @total_count ||= issues_count + merge_requests_count + blobs_count + - notes_count + wiki_blobs_count + notes_count + wiki_blobs_count + commits_count end def blobs_count @@ -42,6 +44,10 @@ module Gitlab @wiki_blobs_count ||= wiki_blobs.count end + def commits_count + @commits_count ||= commits.count + end + private def blobs @@ -70,6 +76,14 @@ module Gitlab Note.where(project_id: limit_project_ids).user.search(query).order('updated_at DESC') end + def commits + if project.empty_repo? || query.blank? + [] + else + project.repository.find_commits_by_message(query).compact + end + end + def limit_project_ids [project.id] end diff --git a/lib/gitlab/push_data_builder.rb b/lib/gitlab/push_data_builder.rb index d010ade704..fa068d5076 100644 --- a/lib/gitlab/push_data_builder.rb +++ b/lib/gitlab/push_data_builder.rb @@ -18,7 +18,10 @@ module Gitlab # homepage: String, # }, # commits: Array, - # total_commits_count: Fixnum + # total_commits_count: Fixnum, + # added: ["CHANGELOG"], + # modified: [], + # removed: ["tmp/file.txt"] # } # def build(project, user, oldrev, newrev, ref, commits = [], message = nil) @@ -33,6 +36,8 @@ module Gitlab commit_attrs = commits_limited.map(&:hook_attrs) type = Gitlab::Git.tag_ref?(ref) ? "tag_push" : "push" + + repo_changes = repo_changes(project, newrev, oldrev) # Hash to be passed as post_receive_data data = { object_kind: type, @@ -55,7 +60,10 @@ module Gitlab visibility_level: project.visibility_level }, commits: commit_attrs, - total_commits_count: commits_count + total_commits_count: commits_count, + added: repo_changes[:added], + modified: repo_changes[:modified], + removed: repo_changes[:removed] } data @@ -86,6 +94,27 @@ module Gitlab newrev end end + + def repo_changes(project, newrev, oldrev) + changes = { added: [], modified: [], removed: [] } + compare_result = CompareService.new. + execute(project, newrev, project, oldrev) + + if compare_result + compare_result.diffs.each do |diff| + case true + when diff.deleted_file + changes[:removed] << diff.old_path + when diff.renamed_file, diff.new_file + changes[:added] << diff.new_path + else + changes[:modified] << diff.new_path + end + end + end + + changes + end end end end diff --git a/lib/gitlab/regex.rb b/lib/gitlab/regex.rb index 9f1adc860d..53ab2686b4 100644 --- a/lib/gitlab/regex.rb +++ b/lib/gitlab/regex.rb @@ -51,6 +51,23 @@ module Gitlab "can contain only letters, digits, '_', '-' and '.'. " end + def file_path_regex + @file_path_regex ||= /\A[a-zA-Z0-9_\-\.\/]*\z/.freeze + end + + def file_path_regex_message + "can contain only letters, digits, '_', '-' and '.'. Separate directories with a '/'. " + end + + + def directory_traversal_regex + @directory_traversal_regex ||= /\.{2}/.freeze + end + + def directory_traversal_regex_message + "cannot include directory traversal. " + end + def archive_formats_regex # |zip|tar| tar.gz | tar.bz2 | diff --git a/lib/gitlab/sherlock.rb b/lib/gitlab/sherlock.rb new file mode 100644 index 0000000000..6360527a7a --- /dev/null +++ b/lib/gitlab/sherlock.rb @@ -0,0 +1,19 @@ +require 'securerandom' + +module Gitlab + module Sherlock + @collection = Collection.new + + class << self + attr_reader :collection + end + + def self.enabled? + Rails.env.development? && !!ENV['ENABLE_SHERLOCK'] + end + + def self.enable_line_profiler? + RUBY_ENGINE == 'ruby' + end + end +end diff --git a/lib/gitlab/sherlock/collection.rb b/lib/gitlab/sherlock/collection.rb new file mode 100644 index 0000000000..66bd625852 --- /dev/null +++ b/lib/gitlab/sherlock/collection.rb @@ -0,0 +1,49 @@ +module Gitlab + module Sherlock + # A collection of transactions recorded by Sherlock. + # + # Method calls for this class are synchronized using a mutex to allow + # sharing of a single Collection instance between threads (e.g. when using + # Puma as a webserver). + class Collection + include Enumerable + + def initialize + @transactions = [] + @mutex = Mutex.new + end + + def add(transaction) + synchronize { @transactions << transaction } + end + + alias_method :<<, :add + + def each(&block) + synchronize { @transactions.each(&block) } + end + + def clear + synchronize { @transactions.clear } + end + + def empty? + synchronize { @transactions.empty? } + end + + def find_transaction(id) + find { |trans| trans.id == id } + end + + def newest_first + sort { |a, b| b.finished_at <=> a.finished_at } + end + + private + + def synchronize(&block) + @mutex.synchronize(&block) + end + end + end +end diff --git a/lib/gitlab/sherlock/file_sample.rb b/lib/gitlab/sherlock/file_sample.rb new file mode 100644 index 0000000000..8a3e1a5e5b --- /dev/null +++ b/lib/gitlab/sherlock/file_sample.rb @@ -0,0 +1,31 @@ +module Gitlab + module Sherlock + class FileSample + attr_reader :id, :file, :line_samples, :events, :duration + + # file - The full path to the file this sample belongs to. + # line_samples - An array of LineSample objects. + # duration - The total execution time in milliseconds. + # events - The total amount of events. + def initialize(file, line_samples, duration, events) + @id = SecureRandom.uuid + @file = file + @line_samples = line_samples + @duration = duration + @events = events + end + + def relative_path + @relative_path ||= @file.gsub(/^#{Rails.root.to_s}\/?/, '') + end + + def to_param + @id + end + + def source + @source ||= File.read(@file) + end + end + end +end diff --git a/lib/gitlab/sherlock/line_profiler.rb b/lib/gitlab/sherlock/line_profiler.rb new file mode 100644 index 0000000000..aa1468bff6 --- /dev/null +++ b/lib/gitlab/sherlock/line_profiler.rb @@ -0,0 +1,98 @@ +module Gitlab + module Sherlock + # Class for profiling code on a per line basis. + # + # The LineProfiler class can be used to profile code on per line basis + # without littering your code with Ruby implementation specific profiling + # methods. + # + # This profiler only includes samples taking longer than a given threshold + # and those that occur in the actual application (e.g. files from Gems are + # ignored). + class LineProfiler + # The minimum amount of time that has to be spent in a file for it to be + # included in a list of samples. + MINIMUM_DURATION = 10.0 + + # Profiles the given block. + # + # Example: + # + # profiler = LineProfiler.new + # + # retval, samples = profiler.profile do + # "cats are amazing" + # end + # + # retval # => "cats are amazing" + # samples # => [#, ...] + # + # Returns an Array containing the block's return value and an Array of + # FileSample objects. + def profile(&block) + if mri? + profile_mri(&block) + else + raise NotImplementedError, + 'Line profiling is not supported on this platform' + end + end + + # Profiles the given block using rblineprof (MRI only). + def profile_mri + require 'rblineprof' + + retval = nil + samples = lineprof(/^#{Rails.root.to_s}/) { retval = yield } + + file_samples = aggregate_rblineprof(samples) + + [retval, file_samples] + end + + # Returns an Array of file samples based on the output of rblineprof. + # + # lineprof_stats - A Hash containing rblineprof statistics on a per file + # basis. + # + # Returns an Array of FileSample objects. + def aggregate_rblineprof(lineprof_stats) + samples = [] + + lineprof_stats.each do |(file, stats)| + source_lines = File.read(file).each_line.to_a + line_samples = [] + + total_duration = microsec_to_millisec(stats[0][0]) + total_events = stats[0][2] + + next if total_duration <= MINIMUM_DURATION + + stats[1..-1].each_with_index do |data, index| + next unless source_lines[index] + + duration = microsec_to_millisec(data[0]) + events = data[2] + + line_samples << LineSample.new(duration, events) + end + + samples << FileSample. + new(file, line_samples, total_duration, total_events) + end + + samples + end + + private + + def microsec_to_millisec(microsec) + microsec / 1000.0 + end + + def mri? + RUBY_ENGINE == 'ruby' + end + end + end +end diff --git a/lib/gitlab/sherlock/line_sample.rb b/lib/gitlab/sherlock/line_sample.rb new file mode 100644 index 0000000000..eb1948eb6d --- /dev/null +++ b/lib/gitlab/sherlock/line_sample.rb @@ -0,0 +1,36 @@ +module Gitlab + module Sherlock + class LineSample + attr_reader :duration, :events + + # duration - The execution time in milliseconds. + # events - The amount of events. + def initialize(duration, events) + @duration = duration + @events = events + end + + # Returns the sample duration percentage relative to the given duration. + # + # Example: + # + # sample.duration # => 150 + # sample.percentage_of(1500) # => 10.0 + # + # total_duration - The total duration to compare with. + # + # Returns a float + def percentage_of(total_duration) + (duration.to_f / total_duration) * 100.0 + end + + # Returns true if the current sample takes up the majority of the given + # duration. + # + # total_duration - The total duration to compare with. + def majority_of?(total_duration) + percentage_of(total_duration) >= 30 + end + end + end +end diff --git a/lib/gitlab/sherlock/location.rb b/lib/gitlab/sherlock/location.rb new file mode 100644 index 0000000000..5ac265618a --- /dev/null +++ b/lib/gitlab/sherlock/location.rb @@ -0,0 +1,26 @@ +module Gitlab + module Sherlock + class Location + attr_reader :path, :line + + SHERLOCK_DIR = File.dirname(__FILE__) + + # Creates a new Location from a `Thread::Backtrace::Location`. + def self.from_ruby_location(location) + new(location.path, location.lineno) + end + + # path - The full path of the frame as a String. + # line - The line number of the frame as a Fixnum. + def initialize(path, line) + @path = path + @line = line + end + + # Returns true if the current frame originated from the application. + def application? + @path.start_with?(Rails.root.to_s) && !path.start_with?(SHERLOCK_DIR) + end + end + end +end diff --git a/lib/gitlab/sherlock/middleware.rb b/lib/gitlab/sherlock/middleware.rb new file mode 100644 index 0000000000..687332fc5f --- /dev/null +++ b/lib/gitlab/sherlock/middleware.rb @@ -0,0 +1,41 @@ +module Gitlab + module Sherlock + # Rack middleware used for tracking request metrics. + class Middleware + CONTENT_TYPES = /text\/html|application\/json/i + + IGNORE_PATHS = %r{^/sherlock} + + def initialize(app) + @app = app + end + + # env - A Hash containing Rack environment details. + def call(env) + if instrument?(env) + call_with_instrumentation(env) + else + @app.call(env) + end + end + + def call_with_instrumentation(env) + trans = transaction_from_env(env) + retval = trans.run { @app.call(env) } + + Sherlock.collection.add(trans) + + retval + end + + def instrument?(env) + !!(env['HTTP_ACCEPT'] =~ CONTENT_TYPES && + env['REQUEST_URI'] !~ IGNORE_PATHS) + end + + def transaction_from_env(env) + Transaction.new(env['REQUEST_METHOD'], env['REQUEST_URI']) + end + end + end +end diff --git a/lib/gitlab/sherlock/query.rb b/lib/gitlab/sherlock/query.rb new file mode 100644 index 0000000000..4917c4ae2a --- /dev/null +++ b/lib/gitlab/sherlock/query.rb @@ -0,0 +1,114 @@ +module Gitlab + module Sherlock + class Query + attr_reader :id, :query, :started_at, :finished_at, :backtrace + + # SQL identifiers that should be prefixed with newlines. + PREFIX_NEWLINE = / + \s+(FROM + |(LEFT|RIGHT)?INNER\s+JOIN + |(LEFT|RIGHT)?OUTER\s+JOIN + |WHERE + |AND + |GROUP\s+BY + |ORDER\s+BY + |LIMIT + |OFFSET)\s+/ix # Vim indent breaks when this is on a newline :< + + # Creates a new Query using a String and a separate Array of bindings. + # + # query - A String containing a SQL query, optionally with numeric + # placeholders (`$1`, `$2`, etc). + # + # bindings - An Array of ActiveRecord columns and their values. + # started_at - The start time of the query as a Time-like object. + # finished_at - The completion time of the query as a Time-like object. + # + # Returns a new Query object. + def self.new_with_bindings(query, bindings, started_at, finished_at) + bindings.each_with_index do |(_, value), index| + quoted_value = ActiveRecord::Base.connection.quote(value) + + query = query.gsub("$#{index + 1}", quoted_value) + end + + new(query, started_at, finished_at) + end + + # query - The SQL query as a String (without placeholders). + # started_at - The start time of the query as a Time-like object. + # finished_at - The completion time of the query as a Time-like object. + def initialize(query, started_at, finished_at) + @id = SecureRandom.uuid + @query = query + @started_at = started_at + @finished_at = finished_at + @backtrace = caller_locations.map do |loc| + Location.from_ruby_location(loc) + end + + unless @query.end_with?(';') + @query += ';' + end + end + + # Returns the query duration in milliseconds. + def duration + @duration ||= (@finished_at - @started_at) * 1000.0 + end + + def to_param + @id + end + + # Returns a human readable version of the query. + def formatted_query + @formatted_query ||= format_sql(@query) + end + + # Returns the last application frame of the backtrace. + def last_application_frame + @last_application_frame ||= @backtrace.find(&:application?) + end + + # Returns an Array of application frames (excluding Gems and the likes). + def application_backtrace + @application_backtrace ||= @backtrace.select(&:application?) + end + + # Returns the query plan as a String. + def explain + unless @explain + ActiveRecord::Base.connection.transaction do + @explain = raw_explain(@query).values.flatten.join("\n") + + # Roll back any queries that mutate data so we don't mess up + # anything when running explain on an INSERT, UPDATE, DELETE, etc. + raise ActiveRecord::Rollback + end + end + + @explain + end + + private + + def raw_explain(query) + if Gitlab::Database.postgresql? + explain = "EXPLAIN ANALYZE #{query};" + else + explain = "EXPLAIN #{query};" + end + + ActiveRecord::Base.connection.execute(explain) + end + + def format_sql(query) + query.each_line. + map { |line| line.strip }. + join("\n"). + gsub(PREFIX_NEWLINE) { "\n#{$1} " } + end + end + end +end diff --git a/lib/gitlab/sherlock/transaction.rb b/lib/gitlab/sherlock/transaction.rb new file mode 100644 index 0000000000..d87a4c9bb4 --- /dev/null +++ b/lib/gitlab/sherlock/transaction.rb @@ -0,0 +1,131 @@ +module Gitlab + module Sherlock + class Transaction + attr_reader :id, :type, :path, :queries, :file_samples, :started_at, + :finished_at, :view_counts + + # type - The type of transaction (e.g. "GET", "POST", etc) + # path - The path of the transaction (e.g. the HTTP request path) + def initialize(type, path) + @id = SecureRandom.uuid + @type = type + @path = path + @queries = [] + @file_samples = [] + @started_at = nil + @finished_at = nil + @thread = Thread.current + @view_counts = Hash.new(0) + end + + # Runs the transaction and returns the block's return value. + def run + @started_at = Time.now + + retval = with_subscriptions do + profile_lines { yield } + end + + @finished_at = Time.now + + retval + end + + # Returns the duration in seconds. + def duration + @duration ||= started_at && finished_at ? finished_at - started_at : 0 + end + + def to_param + @id + end + + # Returns the queries sorted in descending order by their durations. + def sorted_queries + @queries.sort { |a, b| b.duration <=> a.duration } + end + + # Returns the file samples sorted in descending order by their durations. + def sorted_file_samples + @file_samples.sort { |a, b| b.duration <=> a.duration } + end + + # Finds a query by the given ID. + # + # id - The query ID as a String. + # + # Returns a Query object if one could be found, nil otherwise. + def find_query(id) + @queries.find { |query| query.id == id } + end + + # Finds a file sample by the given ID. + # + # id - The query ID as a String. + # + # Returns a FileSample object if one could be found, nil otherwise. + def find_file_sample(id) + @file_samples.find { |sample| sample.id == id } + end + + def profile_lines + retval = nil + + if Sherlock.enable_line_profiler? + retval, @file_samples = LineProfiler.new.profile { yield } + else + retval = yield + end + + retval + end + + def subscribe_to_active_record + ActiveSupport::Notifications.subscribe('sql.active_record') do |_, start, finish, _, data| + next unless same_thread? + + track_query(data[:sql].strip, data[:binds], start, finish) + end + end + + def subscribe_to_action_view + regex = /render_(template|partial)\.action_view/ + + ActiveSupport::Notifications.subscribe(regex) do |_, start, finish, _, data| + next unless same_thread? + + track_view(data[:identifier]) + end + end + + private + + def track_query(query, bindings, start, finish) + @queries << Query.new_with_bindings(query, bindings, start, finish) + end + + def track_view(path) + @view_counts[path] += 1 + end + + def with_subscriptions + ar_subscriber = subscribe_to_active_record + av_subscriber = subscribe_to_action_view + + retval = yield + + ActiveSupport::Notifications.unsubscribe(ar_subscriber) + ActiveSupport::Notifications.unsubscribe(av_subscriber) + + retval + end + + # In case somebody uses a multi-threaded server locally (e.g. Puma) we + # _only_ want to track notifications that originate from the transaction + # thread. + def same_thread? + Thread.current == @thread + end + end + end +end diff --git a/lib/gitlab/sql/union.rb b/lib/gitlab/sql/union.rb new file mode 100644 index 0000000000..1cd89b3a9c --- /dev/null +++ b/lib/gitlab/sql/union.rb @@ -0,0 +1,34 @@ +module Gitlab + module SQL + # Class for building SQL UNION statements. + # + # ORDER BYs are dropped from the relations as the final sort order is not + # guaranteed any way. + # + # Example usage: + # + # union = Gitlab::SQL::Union.new(user.personal_projects, user.projects) + # sql = union.to_sql + # + # Project.where("id IN (#{sql})") + class Union + def initialize(relations) + @relations = relations + end + + def to_sql + # Some relations may include placeholders for prepared statements, these + # aren't incremented properly when joining relations together this way. + # By using "unprepared_statements" we remove the usage of placeholders + # (thus fixing this problem), at a slight performance cost. + fragments = ActiveRecord::Base.connection.unprepared_statement do + @relations.map do |rel| + rel.reorder(nil).to_sql + end + end + + fragments.join("\nUNION\n") + end + end + end +end diff --git a/lib/gitlab/upgrader.rb b/lib/gitlab/upgrader.rb index cf040971c6..f3567f3ef8 100644 --- a/lib/gitlab/upgrader.rb +++ b/lib/gitlab/upgrader.rb @@ -50,15 +50,15 @@ module Gitlab end def fetch_git_tags - remote_tags, _ = Gitlab::Popen.popen(%W(git ls-remote --tags https://gitlab.com/gitlab-org/gitlab-ce.git)) + remote_tags, _ = Gitlab::Popen.popen(%W(#{Gitlab.config.git.bin_path} ls-remote --tags https://gitlab.com/gitlab-org/gitlab-ce.git)) remote_tags.split("\n").grep(/tags\/v#{current_version.major}/) end def update_commands { - "Stash changed files" => %W(git stash), - "Get latest code" => %W(git fetch), - "Switch to new version" => %W(git checkout v#{latest_version}), + "Stash changed files" => %W(#{Gitlab.config.git.bin_path} stash), + "Get latest code" => %W(#{Gitlab.config.git.bin_path} fetch), + "Switch to new version" => %W(#{Gitlab.config.git.bin_path} checkout v#{latest_version}), "Install gems" => %W(bundle), "Migrate DB" => %W(bundle exec rake db:migrate), "Recompile assets" => %W(bundle exec rake assets:clean assets:precompile), diff --git a/lib/support/init.d/gitlab b/lib/support/init.d/gitlab index a80e7e7743..f0a6c2b30e 100755 --- a/lib/support/init.d/gitlab +++ b/lib/support/init.d/gitlab @@ -37,10 +37,9 @@ web_server_pid_path="$pid_path/unicorn.pid" sidekiq_pid_path="$pid_path/sidekiq.pid" mail_room_enabled=false mail_room_pid_path="$pid_path/mail_room.pid" -gitlab_git_http_server_pid_path="$pid_path/gitlab-git-http-server.pid" -gitlab_git_http_server_options="-listenUmask 0 -listenNetwork unix -listenAddr $socket_path/gitlab-git-http-server.socket -authBackend http://127.0.0.1:8080" -gitlab_git_http_server_repo_root='/home/git/repositories' -gitlab_git_http_server_log="$app_root/log/gitlab-git-http-server.log" +gitlab_workhorse_pid_path="$pid_path/gitlab-workhorse.pid" +gitlab_workhorse_options="-listenUmask 0 -listenNetwork unix -listenAddr $socket_path/gitlab-workhorse.socket -authBackend http://127.0.0.1:8080" +gitlab_workhorse_log="$app_root/log/gitlab-workhorse.log" shell_path="/bin/bash" # Read configuration variable file if it is present @@ -76,8 +75,8 @@ check_pids(){ else spid=0 fi - if [ -f "$gitlab_git_http_server_pid_path" ]; then - hpid=$(cat "$gitlab_git_http_server_pid_path") + if [ -f "$gitlab_workhorse_pid_path" ]; then + hpid=$(cat "$gitlab_workhorse_pid_path") else hpid=0 fi @@ -94,7 +93,7 @@ check_pids(){ wait_for_pids(){ # We are sleeping a bit here mostly because sidekiq is slow at writing it's pid i=0; - while [ ! -f $web_server_pid_path ] || [ ! -f $sidekiq_pid_path ] || [ ! -f $gitlab_git_http_server_pid_path ] || { [ "$mail_room_enabled" = true ] && [ ! -f $mail_room_pid_path ]; }; do + while [ ! -f $web_server_pid_path ] || [ ! -f $sidekiq_pid_path ] || [ ! -f $gitlab_workhorse_pid_path ] || { [ "$mail_room_enabled" = true ] && [ ! -f $mail_room_pid_path ]; }; do sleep 0.1; i=$((i+1)) if [ $((i%10)) = 0 ]; then @@ -131,9 +130,9 @@ check_status(){ fi if [ $hpid -ne 0 ]; then kill -0 "$hpid" 2>/dev/null - gitlab_git_http_server_status="$?" + gitlab_workhorse_status="$?" else - gitlab_git_http_server_status="-1" + gitlab_workhorse_status="-1" fi if [ "$mail_room_enabled" = true ]; then if [ $mpid -ne 0 ]; then @@ -143,7 +142,7 @@ check_status(){ mail_room_status="-1" fi fi - if [ $web_status = 0 ] && [ $sidekiq_status = 0 ] && [ $gitlab_git_http_server_status = 0 ] && { [ "$mail_room_enabled" != true ] || [ $mail_room_status = 0 ]; }; then + if [ $web_status = 0 ] && [ $sidekiq_status = 0 ] && [ $gitlab_workhorse_status = 0 ] && { [ "$mail_room_enabled" != true ] || [ $mail_room_status = 0 ]; }; then gitlab_status=0 else # http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptact.html @@ -171,9 +170,9 @@ check_stale_pids(){ exit 1 fi fi - if [ "$hpid" != "0" ] && [ "$gitlab_git_http_server_status" != "0" ]; then - echo "Removing stale gitlab-git-http-server pid. This is most likely caused by gitlab-git-http-server crashing the last time it ran." - if ! rm "$gitlab_git_http_server_pid_path"; then + if [ "$hpid" != "0" ] && [ "$gitlab_workhorse_status" != "0" ]; then + echo "Removing stale gitlab-workhorse pid. This is most likely caused by gitlab-workhorse crashing the last time it ran." + if ! rm "$gitlab_workhorse_pid_path"; then echo "Unable to remove stale pid, exiting" exit 1 fi @@ -190,7 +189,7 @@ check_stale_pids(){ ## If no parts of the service is running, bail out. exit_if_not_running(){ check_stale_pids - if [ "$web_status" != "0" ] && [ "$sidekiq_status" != "0" ] && [ "$gitlab_git_http_server_status" != "0" ] && { [ "$mail_room_enabled" != true ] || [ "$mail_room_status" != "0" ]; }; then + if [ "$web_status" != "0" ] && [ "$sidekiq_status" != "0" ] && [ "$gitlab_workhorse_status" != "0" ] && { [ "$mail_room_enabled" != true ] || [ "$mail_room_status" != "0" ]; }; then echo "GitLab is not running." exit fi @@ -206,8 +205,8 @@ start_gitlab() { if [ "$sidekiq_status" != "0" ]; then echo "Starting GitLab Sidekiq" fi - if [ "$gitlab_git_http_server_status" != "0" ]; then - echo "Starting gitlab-git-http-server" + if [ "$gitlab_workhorse_status" != "0" ]; then + echo "Starting gitlab-workhorse" fi if [ "$mail_room_enabled" = true ] && [ "$mail_room_status" != "0" ]; then echo "Starting GitLab MailRoom" @@ -230,15 +229,14 @@ start_gitlab() { RAILS_ENV=$RAILS_ENV bin/background_jobs start & fi - if [ "$gitlab_git_http_server_status" = "0" ]; then - echo "The gitlab-git-http-server is already running with pid $spid, not restarting" + if [ "$gitlab_workhorse_status" = "0" ]; then + echo "The gitlab-workhorse is already running with pid $spid, not restarting" else - # No need to remove a socket, gitlab-git-http-server does this itself - $app_root/bin/daemon_with_pidfile $gitlab_git_http_server_pid_path \ - $app_root/../gitlab-git-http-server/gitlab-git-http-server \ - $gitlab_git_http_server_options \ - $gitlab_git_http_server_repo_root \ - >> $gitlab_git_http_server_log 2>&1 & + # No need to remove a socket, gitlab-workhorse does this itself + $app_root/bin/daemon_with_pidfile $gitlab_workhorse_pid_path \ + $app_root/../gitlab-workhorse/gitlab-workhorse \ + $gitlab_workhorse_options \ + >> $gitlab_workhorse_log 2>&1 & fi if [ "$mail_room_enabled" = true ]; then @@ -268,9 +266,9 @@ stop_gitlab() { echo "Shutting down GitLab Sidekiq" RAILS_ENV=$RAILS_ENV bin/background_jobs stop fi - if [ "$gitlab_git_http_server_status" = "0" ]; then - echo "Shutting down gitlab-git-http-server" - kill -- $(cat $gitlab_git_http_server_pid_path) + if [ "$gitlab_workhorse_status" = "0" ]; then + echo "Shutting down gitlab-workhorse" + kill -- $(cat $gitlab_workhorse_pid_path) fi if [ "$mail_room_enabled" = true ] && [ "$mail_room_status" = "0" ]; then echo "Shutting down GitLab MailRoom" @@ -278,11 +276,11 @@ stop_gitlab() { fi # If something needs to be stopped, lets wait for it to stop. Never use SIGKILL in a script. - while [ "$web_status" = "0" ] || [ "$sidekiq_status" = "0" ] || [ "$gitlab_git_http_server_status" = "0" ] || { [ "$mail_room_enabled" = true ] && [ "$mail_room_status" = "0" ]; }; do + while [ "$web_status" = "0" ] || [ "$sidekiq_status" = "0" ] || [ "$gitlab_workhorse_status" = "0" ] || { [ "$mail_room_enabled" = true ] && [ "$mail_room_status" = "0" ]; }; do sleep 1 check_status printf "." - if [ "$web_status" != "0" ] && [ "$sidekiq_status" != "0" ] && [ "$gitlab_git_http_server_status" != "0" ] && { [ "$mail_room_enabled" != true ] || [ "$mail_room_status" != "0" ]; }; then + if [ "$web_status" != "0" ] && [ "$sidekiq_status" != "0" ] && [ "$gitlab_workhorse_status" != "0" ] && { [ "$mail_room_enabled" != true ] || [ "$mail_room_status" != "0" ]; }; then printf "\n" break fi @@ -292,7 +290,7 @@ stop_gitlab() { # Cleaning up unused pids rm "$web_server_pid_path" 2>/dev/null # rm "$sidekiq_pid_path" 2>/dev/null # Sidekiq seems to be cleaning up it's own pid. - rm -f "$gitlab_git_http_server_pid_path" + rm -f "$gitlab_workhorse_pid_path" if [ "$mail_room_enabled" = true ]; then rm "$mail_room_pid_path" 2>/dev/null fi @@ -303,7 +301,7 @@ stop_gitlab() { ## Prints the status of GitLab and it's components. print_status() { check_status - if [ "$web_status" != "0" ] && [ "$sidekiq_status" != "0" ] && [ "$gitlab_git_http_server_status" != "0" ] && { [ "$mail_room_enabled" != true ] || [ "$mail_room_status" != "0" ]; }; then + if [ "$web_status" != "0" ] && [ "$sidekiq_status" != "0" ] && [ "$gitlab_workhorse_status" != "0" ] && { [ "$mail_room_enabled" != true ] || [ "$mail_room_status" != "0" ]; }; then echo "GitLab is not running." return fi @@ -317,10 +315,10 @@ print_status() { else printf "The GitLab Sidekiq job dispatcher is \033[31mnot running\033[0m.\n" fi - if [ "$gitlab_git_http_server_status" = "0" ]; then - echo "The gitlab-git-http-server with pid $hpid is running." + if [ "$gitlab_workhorse_status" = "0" ]; then + echo "The gitlab-workhorse with pid $hpid is running." else - printf "The gitlab-git-http-server is \033[31mnot running\033[0m.\n" + printf "The gitlab-workhorse is \033[31mnot running\033[0m.\n" fi if [ "$mail_room_enabled" = true ]; then if [ "$mail_room_status" = "0" ]; then @@ -360,7 +358,7 @@ reload_gitlab(){ ## Restarts Sidekiq and Unicorn. restart_gitlab(){ check_status - if [ "$web_status" = "0" ] || [ "$sidekiq_status" = "0" ] || [ "$gitlab_git_http_server" = "0" ] || { [ "$mail_room_enabled" = true ] && [ "$mail_room_status" = "0" ]; }; then + if [ "$web_status" = "0" ] || [ "$sidekiq_status" = "0" ] || [ "$gitlab_workhorse" = "0" ] || { [ "$mail_room_enabled" = true ] && [ "$mail_room_status" = "0" ]; }; then stop_gitlab fi start_gitlab diff --git a/lib/support/init.d/gitlab.default.example b/lib/support/init.d/gitlab.default.example index aab5acaa72..79ae8e0ae5 100755 --- a/lib/support/init.d/gitlab.default.example +++ b/lib/support/init.d/gitlab.default.example @@ -30,15 +30,14 @@ web_server_pid_path="$pid_path/unicorn.pid" # The default is "$pid_path/sidekiq.pid" sidekiq_pid_path="$pid_path/sidekiq.pid" -gitlab_git_http_server_pid_path="$pid_path/gitlab-git-http-server.pid" -# The -listenXxx settings determine where gitlab-git-http-server +gitlab_workhorse_pid_path="$pid_path/gitlab-workhorse.pid" +# The -listenXxx settings determine where gitlab-workhorse # listens for connections from NGINX. To listen on localhost:8181, write # '-listenNetwork tcp -listenAddr localhost:8181'. -# The -authBackend setting tells gitlab-git-http-server where it can reach +# The -authBackend setting tells gitlab-workhorse where it can reach # Unicorn. -gitlab_git_http_server_options="-listenUmask 0 -listenNetwork unix -listenAddr $socket_path/gitlab-git-http-server.socket -authBackend http://127.0.0.1:8080" -gitlab_git_http_server_repo_root="/home/git/repositories" -gitlab_git_http_server_log="$app_root/log/gitlab-git-http-server.log" +gitlab_workhorse_options="-listenUmask 0 -listenNetwork unix -listenAddr $socket_path/gitlab-workhorse.socket -authBackend http://127.0.0.1:8080" +gitlab_workhorse_log="$app_root/log/gitlab-workhorse.log" # mail_room_enabled specifies whether mail_room, which is used to process incoming email, is enabled. # This is required for the Reply by email feature. diff --git a/lib/support/nginx/gitlab b/lib/support/nginx/gitlab index 1e55c5a048..0cf5292b29 100644 --- a/lib/support/nginx/gitlab +++ b/lib/support/nginx/gitlab @@ -38,13 +38,13 @@ upstream gitlab { server unix:/home/git/gitlab/tmp/sockets/gitlab.socket fail_timeout=0; } -upstream gitlab-git-http-server { - server unix:/home/git/gitlab/tmp/sockets/gitlab-git-http-server.socket fail_timeout=0; +upstream gitlab-workhorse { + server unix:/home/git/gitlab/tmp/sockets/gitlab-workhorse.socket fail_timeout=0; } ## Normal HTTP host server { - ## Either remove "default_server" from the listen line below, + ## Either remove "default_server" from the listen line below, ## or delete the /etc/nginx/sites-enabled/default file. This will cause gitlab ## to be served if you visit any address that your server responds to, eg. ## the ip address of the server (http://x.x.x.x/)n 0.0.0.0:80 default_server; @@ -67,7 +67,7 @@ server { location / { ## Serve static files from defined root folder. ## @gitlab is a named location for the upstream fallback, see below. - try_files $uri $uri/index.html $uri.html @gitlab; + try_files $uri /index.html $uri.html @gitlab; } ## We route uploads through GitLab to prevent XSS and enforce access control. @@ -113,25 +113,46 @@ server { proxy_pass http://gitlab; } + location ~ ^/[\w\.-]+/[\w\.-]+/gitlab-lfs/objects { + # 'Error' 418 is a hack to re-use the @gitlab-workhorse block + error_page 418 = @gitlab-workhorse; + return 418; + } + location ~ ^/[\w\.-]+/[\w\.-]+/(info/refs|git-upload-pack|git-receive-pack)$ { - # 'Error' 418 is a hack to re-use the @gitlab-git-http-server block - error_page 418 = @gitlab-git-http-server; + # 'Error' 418 is a hack to re-use the @gitlab-workhorse block + error_page 418 = @gitlab-workhorse; return 418; } location ~ ^/[\w\.-]+/[\w\.-]+/repository/archive { - # 'Error' 418 is a hack to re-use the @gitlab-git-http-server block - error_page 418 = @gitlab-git-http-server; + # 'Error' 418 is a hack to re-use the @gitlab-workhorse block + error_page 418 = @gitlab-workhorse; return 418; } location ~ ^/api/v3/projects/.*/repository/archive { - # 'Error' 418 is a hack to re-use the @gitlab-git-http-server block - error_page 418 = @gitlab-git-http-server; + # 'Error' 418 is a hack to re-use the @gitlab-workhorse block + error_page 418 = @gitlab-workhorse; return 418; } - location @gitlab-git-http-server { + # Build artifacts should be submitted to this location + location ~ ^/[\w\.-]+/[\w\.-]+/builds/download { + # 'Error' 418 is a hack to re-use the @gitlab-workhorse block + error_page 418 = @gitlab-workhorse; + return 418; + } + + # Build artifacts should be submitted to this location + location ~ /ci/api/v1/builds/[0-9]+/artifacts { + # 'Error' 418 is a hack to re-use the @gitlab-workhorse block + error_page 418 = @gitlab-workhorse; + return 418; + } + + location @gitlab-workhorse { + client_max_body_size 0; ## If you use HTTPS make sure you disable gzip compression ## to be safe against BREACH attack. # gzip off; @@ -147,7 +168,7 @@ server { # The following settings only work with NGINX 1.7.11 or newer # - # # Pass chunked request bodies to gitlab-git-http-server as-is + # # Pass chunked request bodies to gitlab-workhorse as-is # proxy_request_buffering off; # proxy_http_version 1.1; @@ -156,7 +177,7 @@ server { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://gitlab-git-http-server; + proxy_pass http://gitlab-workhorse; } ## Enable gzip compression as per rails guide: diff --git a/lib/support/nginx/gitlab-ssl b/lib/support/nginx/gitlab-ssl index 08641bbcc1..31a651c87f 100644 --- a/lib/support/nginx/gitlab-ssl +++ b/lib/support/nginx/gitlab-ssl @@ -42,13 +42,13 @@ upstream gitlab { server unix:/home/git/gitlab/tmp/sockets/gitlab.socket fail_timeout=0; } -upstream gitlab-git-http-server { - server unix:/home/git/gitlab/tmp/sockets/gitlab-git-http-server.socket fail_timeout=0; +upstream gitlab-workhorse { + server unix:/home/git/gitlab/tmp/sockets/gitlab-workhorse.socket fail_timeout=0; } ## Redirects all HTTP traffic to the HTTPS host server { - ## Either remove "default_server" from the listen line below, + ## Either remove "default_server" from the listen line below, ## or delete the /etc/nginx/sites-enabled/default file. This will cause gitlab ## to be served if you visit any address that your server responds to, eg. ## the ip address of the server (http://x.x.x.x/) @@ -112,7 +112,7 @@ server { location / { ## Serve static files from defined root folder. ## @gitlab is a named location for the upstream fallback, see below. - try_files $uri $uri/index.html $uri.html @gitlab; + try_files $uri /index.html $uri.html @gitlab; } ## We route uploads through GitLab to prevent XSS and enforce access control. @@ -160,25 +160,46 @@ server { proxy_pass http://gitlab; } + location ~ ^/[\w\.-]+/[\w\.-]+/gitlab-lfs/objects { + # 'Error' 418 is a hack to re-use the @gitlab-workhorse block + error_page 418 = @gitlab-workhorse; + return 418; + } + location ~ ^/[\w\.-]+/[\w\.-]+/(info/refs|git-upload-pack|git-receive-pack)$ { - # 'Error' 418 is a hack to re-use the @gitlab-git-http-server block - error_page 418 = @gitlab-git-http-server; + # 'Error' 418 is a hack to re-use the @gitlab-workhorse block + error_page 418 = @gitlab-workhorse; return 418; } location ~ ^/[\w\.-]+/[\w\.-]+/repository/archive { - # 'Error' 418 is a hack to re-use the @gitlab-git-http-server block - error_page 418 = @gitlab-git-http-server; + # 'Error' 418 is a hack to re-use the @gitlab-workhorse block + error_page 418 = @gitlab-workhorse; return 418; } location ~ ^/api/v3/projects/.*/repository/archive { - # 'Error' 418 is a hack to re-use the @gitlab-git-http-server block - error_page 418 = @gitlab-git-http-server; + # 'Error' 418 is a hack to re-use the @gitlab-workhorse block + error_page 418 = @gitlab-workhorse; return 418; } - location @gitlab-git-http-server { + # Build artifacts should be submitted to this location + location ~ ^/[\w\.-]+/[\w\.-]+/builds/download { + # 'Error' 418 is a hack to re-use the @gitlab-workhorse block + error_page 418 = @gitlab-workhorse; + return 418; + } + + # Build artifacts should be submitted to this location + location ~ /ci/api/v1/builds/[0-9]+/artifacts { + # 'Error' 418 is a hack to re-use the @gitlab-workhorse block + error_page 418 = @gitlab-workhorse; + return 418; + } + + location @gitlab-workhorse { + client_max_body_size 0; ## If you use HTTPS make sure you disable gzip compression ## to be safe against BREACH attack. gzip off; @@ -194,7 +215,7 @@ server { # The following settings only work with NGINX 1.7.11 or newer # - # # Pass chunked request bodies to gitlab-git-http-server as-is + # # Pass chunked request bodies to gitlab-workhorse as-is # proxy_request_buffering off; # proxy_http_version 1.1; @@ -203,7 +224,7 @@ server { proxy_set_header X-Forwarded-Ssl on; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://gitlab-git-http-server; + proxy_pass http://gitlab-workhorse; } ## Enable gzip compression as per rails guide: diff --git a/lib/tasks/flay.rake b/lib/tasks/flay.rake new file mode 100644 index 0000000000..dfb9df4772 --- /dev/null +++ b/lib/tasks/flay.rake @@ -0,0 +1,9 @@ +desc 'Code duplication analyze via flay' +task :flay do + output = %x(bundle exec flay --mass 30 app/ lib/gitlab/) + + if output.include? "Similar code found" + puts output + exit 1 + end +end diff --git a/lib/tasks/flog.rake b/lib/tasks/flog.rake new file mode 100644 index 0000000000..3bfe999ae7 --- /dev/null +++ b/lib/tasks/flog.rake @@ -0,0 +1,25 @@ +desc 'Code complexity analyze via flog' +task :flog do + output = %x(bundle exec flog -m app/ lib/gitlab) + exit_code = 0 + minimum_score = 70 + output = output.lines + + # Skip total complexity score + output.shift + + # Skip some trash info + output.shift + + output.each do |line| + score, method = line.split(" ") + score = score.to_i + + if score > minimum_score + exit_code = 1 + puts "High complexity in #{method}. Score: #{score}" + end + end + + exit exit_code +end diff --git a/lib/tasks/gitlab/backup.rake b/lib/tasks/gitlab/backup.rake index f20c7f71ba..cb4abe1379 100644 --- a/lib/tasks/gitlab/backup.rake +++ b/lib/tasks/gitlab/backup.rake @@ -12,6 +12,8 @@ namespace :gitlab do Rake::Task["gitlab:backup:repo:create"].invoke Rake::Task["gitlab:backup:uploads:create"].invoke Rake::Task["gitlab:backup:builds:create"].invoke + Rake::Task["gitlab:backup:artifacts:create"].invoke + Rake::Task["gitlab:backup:lfs:create"].invoke backup = Backup::Manager.new backup.pack @@ -32,6 +34,8 @@ namespace :gitlab do Rake::Task["gitlab:backup:repo:restore"].invoke unless backup.skipped?("repositories") Rake::Task["gitlab:backup:uploads:restore"].invoke unless backup.skipped?("uploads") Rake::Task["gitlab:backup:builds:restore"].invoke unless backup.skipped?("builds") + Rake::Task["gitlab:backup:artifacts:restore"].invoke unless backup.skipped?("artifacts") + Rake::Task["gitlab:backup:lfs:restore"].invoke unless backup.skipped?("lfs") Rake::Task["gitlab:shell:setup"].invoke backup.cleanup @@ -113,6 +117,44 @@ namespace :gitlab do end end + namespace :artifacts do + task create: :environment do + $progress.puts "Dumping artifacts ... ".blue + + if ENV["SKIP"] && ENV["SKIP"].include?("artifacts") + $progress.puts "[SKIPPED]".cyan + else + Backup::Artifacts.new.dump + $progress.puts "done".green + end + end + + task restore: :environment do + $progress.puts "Restoring artifacts ... ".blue + Backup::Artifacts.new.restore + $progress.puts "done".green + end + end + + namespace :lfs do + task create: :environment do + $progress.puts "Dumping lfs objects ... ".blue + + if ENV["SKIP"] && ENV["SKIP"].include?("lfs") + $progress.puts "[SKIPPED]".cyan + else + Backup::Lfs.new.dump + $progress.puts "done".green + end + end + + task restore: :environment do + $progress.puts "Restoring lfs objects ... ".blue + Backup::Lfs.new.restore + $progress.puts "done".green + end + end + def configure_cron_mode if ENV['CRON'] # We need an object we can say 'puts' and 'print' to; let's use a diff --git a/lib/tasks/gitlab/check.rake b/lib/tasks/gitlab/check.rake index 606bf241db..a25fac62cf 100644 --- a/lib/tasks/gitlab/check.rake +++ b/lib/tasks/gitlab/check.rake @@ -335,7 +335,7 @@ namespace :gitlab do print "Redis version >= #{min_redis_version}? ... " redis_version = run(%W(redis-cli --version)) - redis_version = redis_version.try(:match, /redis-cli (.*)/) + redis_version = redis_version.try(:match, /redis-cli (\d+\.\d+\.\d+)/) if redis_version && (Gem::Version.new(redis_version[1]) > Gem::Version.new(min_redis_version)) puts "yes".green @@ -824,7 +824,7 @@ namespace :gitlab do repo_dirs = Dir.glob(File.join(namespace_dir, '*')) repo_dirs.each do |dir| puts "\nChecking repo at #{dir}" - system(*%w(git fsck), chdir: dir) + system(*%W(#{Gitlab.config.git.bin_path} fsck), chdir: dir) end end end diff --git a/lib/tasks/gitlab/shell.rake b/lib/tasks/gitlab/shell.rake index 3c0cc763d1..dd61632e55 100644 --- a/lib/tasks/gitlab/shell.rake +++ b/lib/tasks/gitlab/shell.rake @@ -17,7 +17,7 @@ namespace :gitlab do # Clone if needed unless File.directory?(target_dir) - system(*%W(git clone -- #{args.repo} #{target_dir})) + system(*%W(#{Gitlab.config.git.bin_path} clone -- #{args.repo} #{target_dir})) end # Make sure we're on the right tag @@ -27,7 +27,7 @@ namespace :gitlab do reseted = reset_to_commit(args) unless reseted - system(*%W(git fetch origin)) + system(*%W(#{Gitlab.config.git.bin_path} fetch origin)) reset_to_commit(args) end @@ -128,14 +128,14 @@ namespace :gitlab do end def reset_to_commit(args) - tag, status = Gitlab::Popen.popen(%W(git describe -- #{args.tag})) + tag, status = Gitlab::Popen.popen(%W(#{Gitlab.config.git.bin_path} describe -- #{args.tag})) unless status.zero? - tag, status = Gitlab::Popen.popen(%W(git describe -- origin/#{args.tag})) + tag, status = Gitlab::Popen.popen(%W(#{Gitlab.config.git.bin_path} describe -- origin/#{args.tag})) end tag = tag.strip - system(*%W(git reset --hard #{tag})) + system(*%W(#{Gitlab.config.git.bin_path} reset --hard #{tag})) end end diff --git a/lib/tasks/grape.rake b/lib/tasks/grape.rake new file mode 100644 index 0000000000..9980e0b798 --- /dev/null +++ b/lib/tasks/grape.rake @@ -0,0 +1,8 @@ +namespace :grape do + desc 'Print compiled grape routes' + task routes: :environment do + API::API.routes.each do |route| + puts route + end + end +end diff --git a/lib/tasks/spinach.rake b/lib/tasks/spinach.rake index c8881be095..d5a96fd38f 100644 --- a/lib/tasks/spinach.rake +++ b/lib/tasks/spinach.rake @@ -5,7 +5,7 @@ namespace :spinach do task :project do cmds = [ %W(rake gitlab:setup), - %W(spinach --tags ~@admin,~@dashboard,~@profile,~@public,~@snippets), + %W(spinach --tags ~@admin,~@dashboard,~@profile,~@public,~@snippets,~@commits), ] run_commands(cmds) end @@ -14,7 +14,7 @@ namespace :spinach do task :other do cmds = [ %W(rake gitlab:setup), - %W(spinach --tags @admin,@dashboard,@profile,@public,@snippets), + %W(spinach --tags @admin,@dashboard,@profile,@public,@snippets,@commits), ] run_commands(cmds) end @@ -33,4 +33,4 @@ def run_commands(cmds) cmds.each do |cmd| system({'RAILS_ENV' => 'test', 'force' => 'yes'}, *cmd) or raise("#{cmd} failed!") end -end +end \ No newline at end of file diff --git a/lib/uploaded_file.rb b/lib/uploaded_file.rb new file mode 100644 index 0000000000..d4291f012d --- /dev/null +++ b/lib/uploaded_file.rb @@ -0,0 +1,37 @@ +require "tempfile" +require "fileutils" + +# Taken from: Rack::Test::UploadedFile +class UploadedFile + + # The filename, *not* including the path, of the "uploaded" file + attr_reader :original_filename + + # The tempfile + attr_reader :tempfile + + # The content type of the "uploaded" file + attr_accessor :content_type + + def initialize(path, filename, content_type = "text/plain") + raise "#{path} file does not exist" unless ::File.exist?(path) + + @content_type = content_type + @original_filename = filename || ::File.basename(path) + @tempfile = File.new(path, 'rb') + end + + def path + @tempfile.path + end + + alias_method :local_path, :path + + def method_missing(method_name, *args, &block) #:nodoc: + @tempfile.__send__(method_name, *args, &block) + end + + def respond_to?(method_name, include_private = false) #:nodoc: + @tempfile.respond_to?(method_name, include_private) || super + end +end diff --git a/shared/.gitkeep b/shared/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/shared/artifacts/.gitkeep b/shared/artifacts/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/shared/artifacts/tmp/cache/.gitkeep b/shared/artifacts/tmp/cache/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/shared/artifacts/tmp/uploads/.gitkeep b/shared/artifacts/tmp/uploads/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/spec/benchmarks/lib/gitlab/markdown/reference_filter_spec.rb b/spec/benchmarks/lib/gitlab/markdown/reference_filter_spec.rb new file mode 100644 index 0000000000..34cd9f7e4e --- /dev/null +++ b/spec/benchmarks/lib/gitlab/markdown/reference_filter_spec.rb @@ -0,0 +1,41 @@ +require 'spec_helper' + +describe Gitlab::Markdown::ReferenceFilter, benchmark: true do + let(:input) do + html = <<-EOF +

    Hello @alice and @bob, how are you doing today?

    +

    This is simple @dummy text to see how the @ReferenceFilter class performs +when @processing HTML.

    + EOF + + Nokogiri::HTML.fragment(html) + end + + let(:project) { create(:empty_project) } + + let(:filter) { described_class.new(input, project: project) } + + describe '#replace_text_nodes_matching' do + let(:iterations) { 6000 } + + describe 'with identical input and output HTML' do + benchmark_subject do + filter.replace_text_nodes_matching(User.reference_pattern) do |content| + content + end + end + + it { is_expected.to iterate_per_second(iterations) } + end + + describe 'with different input and output HTML' do + benchmark_subject do + filter.replace_text_nodes_matching(User.reference_pattern) do |content| + '@eve' + end + end + + it { is_expected.to iterate_per_second(iterations) } + end + end +end diff --git a/spec/benchmarks/models/milestone_spec.rb b/spec/benchmarks/models/milestone_spec.rb new file mode 100644 index 0000000000..a94afc4c40 --- /dev/null +++ b/spec/benchmarks/models/milestone_spec.rb @@ -0,0 +1,17 @@ +require 'spec_helper' + +describe Milestone, benchmark: true do + describe '#sort_issues' do + let(:milestone) { create(:milestone) } + + let(:issue1) { create(:issue, milestone: milestone) } + let(:issue2) { create(:issue, milestone: milestone) } + let(:issue3) { create(:issue, milestone: milestone) } + + let(:issue_ids) { [issue3.id, issue2.id, issue1.id] } + + benchmark_subject { milestone.sort_issues(issue_ids) } + + it { is_expected.to iterate_per_second(500) } + end +end diff --git a/spec/benchmarks/models/user_spec.rb b/spec/benchmarks/models/user_spec.rb index cc5c390419..1be7a8d3ed 100644 --- a/spec/benchmarks/models/user_spec.rb +++ b/spec/benchmarks/models/user_spec.rb @@ -1,6 +1,16 @@ require 'spec_helper' describe User, benchmark: true do + describe '.all' do + before do + 10.times { create(:user) } + end + + benchmark_subject { User.all.to_a } + + it { is_expected.to iterate_per_second(500) } + end + describe '.by_login' do before do %w{Alice Bob Eve}.each do |name| @@ -39,4 +49,30 @@ describe User, benchmark: true do it { is_expected.to iterate_per_second(iterations) } end end + + describe '.find_by_any_email' do + let(:user) { create(:user) } + + describe 'using a user with only a single Email address' do + let(:email) { user.email } + + benchmark_subject { User.find_by_any_email(email) } + + it { is_expected.to iterate_per_second(1000) } + end + + describe 'using a user with multiple Email addresses' do + let(:email) { user.emails.first.email } + + benchmark_subject { User.find_by_any_email(email) } + + before do + 10.times do + user.emails.create(email: FFaker::Internet.email) + end + end + + it { is_expected.to iterate_per_second(1000) } + end + end end diff --git a/spec/benchmarks/services/projects/create_service_spec.rb b/spec/benchmarks/services/projects/create_service_spec.rb new file mode 100644 index 0000000000..25ed48c34f --- /dev/null +++ b/spec/benchmarks/services/projects/create_service_spec.rb @@ -0,0 +1,28 @@ +require 'spec_helper' + +describe Projects::CreateService, benchmark: true do + describe '#execute' do + let(:user) { create(:user, :admin) } + + let(:group) do + group = create(:group) + + create(:group_member, group: group, user: user) + + group + end + + benchmark_subject do + name = SecureRandom.hex + service = described_class.new(user, + name: name, + path: name, + namespace_id: group.id, + visibility_level: Gitlab::VisibilityLevel::PUBLIC) + + service.execute + end + + it { is_expected.to iterate_per_second(0.5) } + end +end diff --git a/spec/controllers/admin/users_controller_spec.rb b/spec/controllers/admin/users_controller_spec.rb index fcbe62cace..8b7af4d3a0 100644 --- a/spec/controllers/admin/users_controller_spec.rb +++ b/spec/controllers/admin/users_controller_spec.rb @@ -7,21 +7,6 @@ describe Admin::UsersController do sign_in(admin) end - describe 'POST login_as' do - let(:user) { create(:user) } - - it 'logs admin as another user' do - expect(warden.authenticate(scope: :user)).not_to eq(user) - post :login_as, id: user.username - expect(warden.authenticate(scope: :user)).to eq(user) - end - - it 'redirects user to homepage' do - post :login_as, id: user.username - expect(response).to redirect_to(root_path) - end - end - describe 'DELETE #user with projects' do let(:user) { create(:user) } let(:project) { create(:project, namespace: user.namespace) } diff --git a/spec/controllers/projects/compare_controller_spec.rb b/spec/controllers/projects/compare_controller_spec.rb index 2a447248b7..be19f1abc5 100644 --- a/spec/controllers/projects/compare_controller_spec.rb +++ b/spec/controllers/projects/compare_controller_spec.rb @@ -23,6 +23,22 @@ describe Projects::CompareController do expect(assigns(:commits).length).to be >= 1 end + it 'compare should show some diffs with ignore whitespace change option' do + get(:show, + namespace_id: project.namespace.to_param, + project_id: project.to_param, + from: '08f22f25', + to: '66eceea0', + w: 1) + + expect(response).to be_success + expect(assigns(:diffs).length).to be >= 1 + expect(assigns(:commits).length).to be >= 1 + # without whitespace option, there are more than 2 diff_splits + diff_splits = assigns(:diffs)[0].diff.split("\n") + expect(diff_splits.length).to be <= 2 + end + describe 'non-existent refs' do it 'invalid source ref' do get(:show, diff --git a/spec/controllers/projects/merge_requests_controller_spec.rb b/spec/controllers/projects/merge_requests_controller_spec.rb index b8db859170..3e5e1fa87a 100644 --- a/spec/controllers/projects/merge_requests_controller_spec.rb +++ b/spec/controllers/projects/merge_requests_controller_spec.rb @@ -147,6 +147,34 @@ describe Projects::MergeRequestsController do end end + describe 'GET diffs with ignore_whitespace_change' do + def go(format: 'html') + get :diffs, + namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: merge_request.iid, + format: format, + w: 1 + end + + context 'as html' do + it 'renders the diff template' do + go + + expect(response).to render_template('diffs') + end + end + + context 'as json' do + it 'renders the diffs template to a string' do + go format: 'json' + + expect(response).to render_template('projects/merge_requests/show/_diffs') + expect(JSON.parse(response.body)).to have_key('html') + end + end + end + describe 'GET commits' do def go(format: 'html') get :commits, diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb index 21beaf37fc..4bb47c6b02 100644 --- a/spec/controllers/projects_controller_spec.rb +++ b/spec/controllers/projects_controller_spec.rb @@ -22,17 +22,68 @@ describe ProjectsController do end end - context "when requested with case sensitive namespace and project path" do - it "redirects to the normalized path for case mismatch" do - get :show, namespace_id: public_project.namespace.path, id: public_project.path.upcase + context "rendering default project view" do + render_views - expect(response).to redirect_to("/#{public_project.path_with_namespace}") + it "renders the activity view" do + allow(controller).to receive(:current_user).and_return(user) + allow(user).to receive(:project_view).and_return('activity') + + get :show, namespace_id: public_project.namespace.path, id: public_project.path + expect(response).to render_template('_activity') end - it "loads the page if normalized path matches request path" do - get :show, namespace_id: public_project.namespace.path, id: public_project.path + it "renders the readme view" do + allow(controller).to receive(:current_user).and_return(user) + allow(user).to receive(:project_view).and_return('readme') - expect(response.status).to eq(200) + get :show, namespace_id: public_project.namespace.path, id: public_project.path + expect(response).to render_template('_readme') + end + + it "renders the files view" do + allow(controller).to receive(:current_user).and_return(user) + allow(user).to receive(:project_view).and_return('files') + + get :show, namespace_id: public_project.namespace.path, id: public_project.path + expect(response).to render_template('_files') + end + end + + context "when requested with case sensitive namespace and project path" do + context "when there is a match with the same casing" do + it "loads the project" do + get :show, namespace_id: public_project.namespace.path, id: public_project.path + + expect(assigns(:project)).to eq(public_project) + expect(response.status).to eq(200) + end + end + + context "when there is a match with different casing" do + it "redirects to the normalized path" do + get :show, namespace_id: public_project.namespace.path, id: public_project.path.upcase + + expect(assigns(:project)).to eq(public_project) + expect(response).to redirect_to("/#{public_project.path_with_namespace}") + end + + + # MySQL queries are case insensitive by default, so this spec would fail. + if Gitlab::Database.postgresql? + context "when there is also a match with the same casing" do + + let!(:other_project) { create(:project, :public, namespace: public_project.namespace, path: public_project.path.upcase) } + + it "loads the exactly matched project" do + + get :show, namespace_id: public_project.namespace.path, id: public_project.path.upcase + + expect(assigns(:project)).to eq(other_project) + expect(response.status).to eq(200) + end + end + end end end end @@ -62,4 +113,50 @@ describe ProjectsController do expect(user.starred?(public_project)).to be_falsey end end + + describe "DELETE remove_fork" do + context 'when signed in' do + before do + sign_in(user) + end + + context 'with forked project' do + let(:project_fork) { create(:project, namespace: user.namespace) } + + before do + create(:forked_project_link, forked_to_project: project_fork) + end + + it 'should remove fork from project' do + delete(:remove_fork, + namespace_id: project_fork.namespace.to_param, + id: project_fork.to_param, format: :js) + + expect(project_fork.forked?).to be_falsey + expect(flash[:notice]).to eq('The fork relationship has been removed.') + expect(response).to render_template(:remove_fork) + end + end + + context 'when project not forked' do + let(:unforked_project) { create(:project, namespace: user.namespace) } + + it 'should do nothing if project was not forked' do + delete(:remove_fork, + namespace_id: unforked_project.namespace.to_param, + id: unforked_project.to_param, format: :js) + + expect(flash[:notice]).to be_nil + expect(response).to render_template(:remove_fork) + end + end + end + + it "does nothing if user is not signed in" do + delete(:remove_fork, + namespace_id: project.namespace.to_param, + id: project.to_param, format: :js) + expect(response.status).to eq(401) + end + end end diff --git a/spec/controllers/snippets_controller_spec.rb b/spec/controllers/snippets_controller_spec.rb new file mode 100644 index 0000000000..e9b823c523 --- /dev/null +++ b/spec/controllers/snippets_controller_spec.rb @@ -0,0 +1,118 @@ +require 'spec_helper' + +describe SnippetsController do + describe 'GET #show' do + let(:user) { create(:user) } + + context 'when the personal snippet is private' do + let(:personal_snippet) { create(:personal_snippet, :private, author: user) } + + context 'when signed in' do + before do + sign_in(user) + end + + context 'when signed in user is not the author' do + let(:other_author) { create(:author) } + let(:other_personal_snippet) { create(:personal_snippet, :private, author: other_author) } + + it 'responds with status 404' do + get :show, id: other_personal_snippet.to_param + + expect(response.status).to eq(404) + end + end + + context 'when signed in user is the author' do + it 'renders the snippet' do + get :show, id: personal_snippet.to_param + + expect(assigns(:snippet)).to eq(personal_snippet) + expect(response.status).to eq(200) + end + end + end + + context 'when not signed in' do + it 'redirects to the sign in page' do + get :show, id: personal_snippet.to_param + + expect(response).to redirect_to(new_user_session_path) + end + end + end + + context 'when the personal snippet is internal' do + let(:personal_snippet) { create(:personal_snippet, :internal, author: user) } + + context 'when signed in' do + before do + sign_in(user) + end + + it 'renders the snippet' do + get :show, id: personal_snippet.to_param + + expect(assigns(:snippet)).to eq(personal_snippet) + expect(response.status).to eq(200) + end + end + + context 'when not signed in' do + it 'redirects to the sign in page' do + get :show, id: personal_snippet.to_param + + expect(response).to redirect_to(new_user_session_path) + end + end + end + + context 'when the personal snippet is public' do + let(:personal_snippet) { create(:personal_snippet, :public, author: user) } + + context 'when signed in' do + before do + sign_in(user) + end + + it 'renders the snippet' do + get :show, id: personal_snippet.to_param + + expect(assigns(:snippet)).to eq(personal_snippet) + expect(response.status).to eq(200) + end + end + + context 'when not signed in' do + it 'renders the snippet' do + get :show, id: personal_snippet.to_param + + expect(assigns(:snippet)).to eq(personal_snippet) + expect(response.status).to eq(200) + end + end + end + + context 'when the personal snippet does not exist' do + context 'when signed in' do + before do + sign_in(user) + end + + it 'responds with status 404' do + get :show, id: 'doesntexist' + + expect(response.status).to eq(404) + end + end + + context 'when not signed in' do + it 'responds with status 404' do + get :show, id: 'doesntexist' + + expect(response.status).to eq(404) + end + end + end + end +end diff --git a/spec/controllers/users_controller_spec.rb b/spec/controllers/users_controller_spec.rb index 9f89101d7f..104a5f5014 100644 --- a/spec/controllers/users_controller_spec.rb +++ b/spec/controllers/users_controller_spec.rb @@ -16,13 +16,26 @@ describe UsersController do context 'with rendered views' do render_views - it 'renders the show template' do - sign_in(user) + describe 'when logged in' do + before do + sign_in(user) + end - get :show, username: user.username + it 'renders the show template' do + get :show, username: user.username - expect(response).to be_success - expect(response).to render_template('show') + expect(response).to be_success + expect(response).to render_template('show') + end + end + + describe 'when logged out' do + it 'renders the show template' do + get :show, username: user.username + + expect(response).to be_success + expect(response).to render_template('show') + end end end end diff --git a/spec/factories.rb b/spec/factories.rb index 200f18f660..4bf93adabe 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -165,6 +165,18 @@ FactoryGirl.define do title content file_name + + trait :public do + visibility_level Gitlab::VisibilityLevel::PUBLIC + end + + trait :internal do + visibility_level Gitlab::VisibilityLevel::INTERNAL + end + + trait :private do + visibility_level Gitlab::VisibilityLevel::PRIVATE + end end factory :snippet do diff --git a/spec/factories/ci/projects.rb b/spec/factories/ci/projects.rb index 111e1a8281..11cb8c9eea 100644 --- a/spec/factories/ci/projects.rb +++ b/spec/factories/ci/projects.rb @@ -31,14 +31,20 @@ FactoryGirl.define do factory :ci_project_without_token, class: Ci::Project do default_ref 'master' - gl_project factory: :empty_project + shared_runners_enabled false factory :ci_project do token 'iPWx6WM4lhHNedGfBpPJNP' end - factory :ci_public_project do - public true + initialize_with do + # TODO: + # this is required, because builds_enabled is initialized when Project is created + # and this create gitlab_ci_project if builds is set to true + # here we take created gitlab_ci_project and update it's attributes + ci_project = create(:empty_project).ensure_gitlab_ci_project + ci_project.update_attributes(attributes) + ci_project end end end diff --git a/spec/factories/labels.rb b/spec/factories/labels.rb index 6829387c66..8b12ee11af 100644 --- a/spec/factories/labels.rb +++ b/spec/factories/labels.rb @@ -8,6 +8,7 @@ # project_id :integer # created_at :datetime # updated_at :datetime +# template :boolean default(FALSE) # # Read about factories at https://github.com/thoughtbot/factory_girl diff --git a/spec/factories/lfs_objects.rb b/spec/factories/lfs_objects.rb new file mode 100644 index 0000000000..7fb2d77ca3 --- /dev/null +++ b/spec/factories/lfs_objects.rb @@ -0,0 +1,12 @@ +# Read about factories at https://github.com/thoughtbot/factory_girl + +FactoryGirl.define do + factory :lfs_object do + oid "b68143e6463773b1b6c6fd009a76c32aeec041faff32ba2ed42fd7f708a17f80" + size 499013 + end + + trait :with_file do + file { fixture_file_upload(Rails.root + "spec/fixtures/dk.png", "`/png") } + end +end diff --git a/spec/factories/lfs_objects_projects.rb b/spec/factories/lfs_objects_projects.rb new file mode 100644 index 0000000000..93de6607df --- /dev/null +++ b/spec/factories/lfs_objects_projects.rb @@ -0,0 +1,8 @@ +# Read about factories at https://github.com/thoughtbot/factory_girl + +FactoryGirl.define do + factory :lfs_objects_project do + lfs_object + project + end +end diff --git a/spec/factories/merge_requests.rb b/spec/factories/merge_requests.rb index 6080d0ccde..729a49c9f7 100644 --- a/spec/factories/merge_requests.rb +++ b/spec/factories/merge_requests.rb @@ -20,6 +20,7 @@ # position :integer default(0) # locked_at :datetime # updated_by_id :integer +# merge_error :string(255) # FactoryGirl.define do diff --git a/spec/factories/releases.rb b/spec/factories/releases.rb new file mode 100644 index 0000000000..43d09b1753 --- /dev/null +++ b/spec/factories/releases.rb @@ -0,0 +1,21 @@ +# == Schema Information +# +# Table name: releases +# +# id :integer not null, primary key +# tag :string(255) +# description :text +# project_id :integer +# created_at :datetime +# updated_at :datetime +# + +# Read about factories at https://github.com/thoughtbot/factory_girl + +FactoryGirl.define do + factory :release do + tag "v1.1.0" + description "Awesome release" + project + end +end diff --git a/spec/features/admin/admin_users_spec.rb b/spec/features/admin/admin_users_spec.rb index c2c7364f6c..4c756a8e73 100644 --- a/spec/features/admin/admin_users_spec.rb +++ b/spec/features/admin/admin_users_spec.rb @@ -111,24 +111,50 @@ describe "Admin::Users", feature: true do expect(page).to have_content(@user.name) end - describe 'Login as another user' do - it 'should show login button for other users and check that it works' do - another_user = create(:user) + describe 'Impersonation' do + let(:another_user) { create(:user) } + before { visit admin_user_path(another_user) } - visit admin_user_path(another_user) + context 'before impersonating' do + it 'shows impersonate button for other users' do + expect(page).to have_content('Impersonate') + end - click_link 'Log in as this user' + it 'should not show impersonate button for admin itself' do + visit admin_user_path(@user) - expect(page).to have_content("Logged in as #{another_user.username}") - - page.within '.sidebar-user .username' do - expect(page).to have_content(another_user.username) + expect(page).not_to have_content('Impersonate') end end - it 'should not show login button for admin itself' do - visit admin_user_path(@user) - expect(page).not_to have_content('Log in as this user') + context 'when impersonating' do + before { click_link 'Impersonate' } + + it 'logs in as the user when impersonate is clicked' do + page.within '.sidebar-user .username' do + expect(page).to have_content(another_user.username) + end + end + + it 'sees impersonation log out icon' do + icon = first('.fa.fa-user-secret') + + expect(icon).to_not eql nil + end + + it 'can log out of impersonated user back to original user' do + find(:css, 'li.impersonation a').click + + page.within '.sidebar-user .username' do + expect(page).to have_content(@user.username) + end + end + + it 'is redirected back to the impersonated users page in the admin after stopping' do + find(:css, 'li.impersonation a').click + + expect(current_path).to eql "/admin/users/#{another_user.username}" + end end end diff --git a/spec/features/builds_spec.rb b/spec/features/builds_spec.rb index 154857e77f..5213ce1099 100644 --- a/spec/features/builds_spec.rb +++ b/spec/features/builds_spec.rb @@ -1,6 +1,8 @@ require 'spec_helper' describe "Builds" do + let(:artifacts_file) { fixture_file_upload(Rails.root + 'spec/fixtures/banana_sample.gif', 'image/gif') } + before do login_as(:user) @commit = FactoryGirl.create :ci_commit @@ -47,10 +49,11 @@ describe "Builds" do end end - describe "GET /:project/builds/:id/cancel_all" do + describe "POST /:project/builds/:id/cancel_all" do before do @build.run! - visit cancel_all_namespace_project_builds_path(@gl_project.namespace, @gl_project) + visit namespace_project_builds_path(@gl_project.namespace, @gl_project) + click_link "Cancel all" end it { expect(page).to have_content 'No builds to show' } @@ -65,12 +68,22 @@ describe "Builds" do it { expect(page).to have_content @commit.sha[0..7] } it { expect(page).to have_content @commit.git_commit_message } it { expect(page).to have_content @commit.git_author_name } + + context "Download artifacts" do + before do + @build.update_attributes(artifacts_file: artifacts_file) + visit namespace_project_build_path(@gl_project.namespace, @gl_project, @build) + end + + it { expect(page).to have_content 'Download artifacts' } + end end - describe "GET /:project/builds/:id/cancel" do + describe "POST /:project/builds/:id/cancel" do before do @build.run! - visit cancel_namespace_project_build_path(@gl_project.namespace, @gl_project, @build) + visit namespace_project_build_path(@gl_project.namespace, @gl_project, @build) + click_link "Cancel" end it { expect(page).to have_content 'canceled' } @@ -79,11 +92,23 @@ describe "Builds" do describe "POST /:project/builds/:id/retry" do before do - visit cancel_namespace_project_build_path(@gl_project.namespace, @gl_project, @build) + @build.run! + visit namespace_project_build_path(@gl_project.namespace, @gl_project, @build) + click_link "Cancel" click_link 'Retry' end it { expect(page).to have_content 'pending' } it { expect(page).to have_content 'Cancel' } end + + describe "GET /:project/builds/:id/download" do + before do + @build.update_attributes(artifacts_file: artifacts_file) + visit namespace_project_build_path(@gl_project.namespace, @gl_project, @build) + click_link 'Download artifacts' + end + + it { expect(page.response_headers['Content-Type']).to eq(artifacts_file.content_type) } + end end diff --git a/spec/features/ci/events_spec.rb b/spec/features/ci/events_spec.rb deleted file mode 100644 index 5b9fd40415..0000000000 --- a/spec/features/ci/events_spec.rb +++ /dev/null @@ -1,22 +0,0 @@ -require 'spec_helper' - -describe "Events" do - let(:user) { create(:user) } - let(:project) { FactoryGirl.create :ci_project } - let(:event) { FactoryGirl.create :ci_admin_event, project: project } - - before do - login_as(user) - project.gl_project.team << [user, :master] - end - - describe "GET /ci/project/:id/events" do - before do - event - visit ci_project_events_path(project) - end - - it { expect(page).to have_content "Events" } - it { expect(page).to have_content event.description } - end -end diff --git a/spec/features/commits_spec.rb b/spec/features/commits_spec.rb index 1adc2cdf70..90739cd6a2 100644 --- a/spec/features/commits_spec.rb +++ b/spec/features/commits_spec.rb @@ -19,7 +19,7 @@ describe "Commits" do stub_ci_commit_to_return_yaml_file end - describe "GET /:project/commits/:sha" do + describe "GET /:project/commits/:sha/ci" do before do visit ci_status_path(@commit) end @@ -29,10 +29,24 @@ describe "Commits" do it { expect(page).to have_content @commit.git_author_name } end + context "Download artifacts" do + let(:artifacts_file) { fixture_file_upload(Rails.root + 'spec/fixtures/banana_sample.gif', 'image/gif') } + + before do + @build.update_attributes(artifacts_file: artifacts_file) + end + + it do + visit ci_status_path(@commit) + click_on "Download artifacts" + expect(page.response_headers['Content-Type']).to eq(artifacts_file.content_type) + end + end + describe "Cancel all builds" do it "cancels commit" do visit ci_status_path(@commit) - click_on "Cancel all" + click_on "Cancel running" expect(page).to have_content "canceled" end end diff --git a/spec/features/projects_spec.rb b/spec/features/projects_spec.rb index aac93b17a3..09fcff2444 100644 --- a/spec/features/projects_spec.rb +++ b/spec/features/projects_spec.rb @@ -34,6 +34,27 @@ feature 'Project', feature: true do end end + describe 'remove forked relationship', js: true do + let(:user) { create(:user) } + let(:project) { create(:project, namespace: user.namespace) } + + before do + login_with user + create(:forked_project_link, forked_to_project: project) + visit edit_namespace_project_path(project.namespace, project) + end + + it 'should remove fork' do + expect(page).to have_content 'Remove fork relationship' + + remove_with_confirm('Remove fork relationship', project.path) + + expect(page).to have_content 'The fork relationship has been removed.' + expect(project.forked?).to be_falsey + expect(page).not_to have_content 'Remove fork relationship' + end + end + describe 'removal', js: true do let(:user) { create(:user) } let(:project) { create(:project, namespace: user.namespace) } @@ -45,13 +66,13 @@ feature 'Project', feature: true do end it 'should remove project' do - expect { remove_project }.to change {Project.count}.by(-1) + expect { remove_with_confirm('Remove project', project.path) }.to change {Project.count}.by(-1) end end - def remove_project - click_button "Remove project" - fill_in 'confirm_name_input', with: project.path + def remove_with_confirm(button_text, confirm_with) + click_button button_text + fill_in 'confirm_name_input', with: confirm_with click_button 'Confirm' end end diff --git a/spec/features/runners_spec.rb b/spec/features/runners_spec.rb index 06adb7633b..b025902663 100644 --- a/spec/features/runners_spec.rb +++ b/spec/features/runners_spec.rb @@ -14,15 +14,25 @@ describe "Runners" do @project2 = FactoryGirl.create :ci_project @project2.gl_project.team << [user, :master] + @project3 = FactoryGirl.create :ci_project + @project3.gl_project.team << [user, :developer] + @shared_runner = FactoryGirl.create :ci_shared_runner @specific_runner = FactoryGirl.create :ci_specific_runner @specific_runner2 = FactoryGirl.create :ci_specific_runner + @specific_runner3 = FactoryGirl.create :ci_specific_runner @project.runners << @specific_runner @project2.runners << @specific_runner2 + @project3.runners << @specific_runner3 visit runners_path(@project.gl_project) end + before do + expect(page).to_not have_content(@specific_runner3.display_name) + expect(page).to_not have_content(@specific_runner3.display_name) + end + it "places runners in right places" do expect(page.find(".available-specific-runners")).to have_content(@specific_runner2.display_name) expect(page.find(".activated-specific-runners")).to have_content(@specific_runner.display_name) @@ -76,10 +86,10 @@ describe "Runners" do @project.gl_project.team << [user, :master] @specific_runner = FactoryGirl.create :ci_specific_runner @project.runners << @specific_runner - visit runners_path(@project.gl_project) end it "shows runner information" do + visit runners_path(@project.gl_project) click_on @specific_runner.short_sha expect(page).to have_content(@specific_runner.platform) end diff --git a/spec/finders/contributed_projects_finder_spec.rb b/spec/finders/contributed_projects_finder_spec.rb new file mode 100644 index 0000000000..65d7f14c72 --- /dev/null +++ b/spec/finders/contributed_projects_finder_spec.rb @@ -0,0 +1,35 @@ +require 'spec_helper' + +describe ContributedProjectsFinder do + let(:source_user) { create(:user) } + let(:current_user) { create(:user) } + + let(:finder) { described_class.new(source_user) } + + let!(:public_project) { create(:project, :public) } + let!(:private_project) { create(:project, :private) } + + before do + private_project.team << [source_user, Gitlab::Access::MASTER] + private_project.team << [current_user, Gitlab::Access::DEVELOPER] + public_project.team << [source_user, Gitlab::Access::MASTER] + + create(:event, action: Event::PUSHED, project: public_project, + target: public_project, author: source_user) + + create(:event, action: Event::PUSHED, project: private_project, + target: private_project, author: source_user) + end + + describe 'without a current user' do + subject { finder.execute } + + it { is_expected.to eq([public_project]) } + end + + describe 'with a current user' do + subject { finder.execute(current_user) } + + it { is_expected.to eq([private_project, public_project]) } + end +end diff --git a/spec/finders/groups_finder_spec.rb b/spec/finders/groups_finder_spec.rb new file mode 100644 index 0000000000..4f6a000822 --- /dev/null +++ b/spec/finders/groups_finder_spec.rb @@ -0,0 +1,48 @@ +require 'spec_helper' + +describe GroupsFinder do + describe '#execute' do + let(:user) { create(:user) } + + let(:group1) { create(:group) } + let(:group2) { create(:group) } + let(:group3) { create(:group) } + let(:group4) { create(:group, public: true) } + + let!(:public_project) { create(:project, :public, group: group1) } + let!(:internal_project) { create(:project, :internal, group: group2) } + let!(:private_project) { create(:project, :private, group: group3) } + + let(:finder) { described_class.new } + + describe 'with a user' do + subject { finder.execute(user) } + + describe 'when the user is not a member of any groups' do + it { is_expected.to eq([group4, group2, group1]) } + end + + describe 'when the user is a member of a group' do + before do + group3.add_user(user, Gitlab::Access::DEVELOPER) + end + + it { is_expected.to eq([group4, group3, group2, group1]) } + end + + describe 'when the user is a member of a private project' do + before do + private_project.team.add_user(user, Gitlab::Access::DEVELOPER) + end + + it { is_expected.to eq([group4, group3, group2, group1]) } + end + end + + describe 'without a user' do + subject { finder.execute } + + it { is_expected.to eq([group4, group1]) } + end + end +end diff --git a/spec/finders/joined_groups_finder_spec.rb b/spec/finders/joined_groups_finder_spec.rb new file mode 100644 index 0000000000..2d9068cc72 --- /dev/null +++ b/spec/finders/joined_groups_finder_spec.rb @@ -0,0 +1,49 @@ +require 'spec_helper' + +describe JoinedGroupsFinder do + describe '#execute' do + let(:source_user) { create(:user) } + let(:current_user) { create(:user) } + + let(:group1) { create(:group) } + let(:group2) { create(:group) } + let(:group3) { create(:group) } + let(:group4) { create(:group, public: true) } + + let!(:public_project) { create(:project, :public, group: group1) } + let!(:internal_project) { create(:project, :internal, group: group2) } + let!(:private_project) { create(:project, :private, group: group3) } + + let(:finder) { described_class.new(source_user) } + + before do + [group1, group2, group3, group4].each do |group| + group.add_user(source_user, Gitlab::Access::MASTER) + end + end + + describe 'with a current user' do + describe 'when the current user has access to the projects of the source user' do + before do + private_project.team.add_user(current_user, Gitlab::Access::DEVELOPER) + end + + subject { finder.execute(current_user) } + + it { is_expected.to eq([group4, group3, group2, group1]) } + end + + describe 'when the current user does not have access to the projects of the source user' do + subject { finder.execute(current_user) } + + it { is_expected.to eq([group4, group2, group1]) } + end + end + + describe 'without a current user' do + subject { finder.execute } + + it { is_expected.to eq([group4, group1]) } + end + end +end diff --git a/spec/finders/personal_projects_finder_spec.rb b/spec/finders/personal_projects_finder_spec.rb new file mode 100644 index 0000000000..38817add45 --- /dev/null +++ b/spec/finders/personal_projects_finder_spec.rb @@ -0,0 +1,34 @@ +require 'spec_helper' + +describe PersonalProjectsFinder do + let(:source_user) { create(:user) } + let(:current_user) { create(:user) } + + let(:finder) { described_class.new(source_user) } + + let!(:public_project) do + create(:project, :public, namespace: source_user.namespace, name: 'A', + path: 'A') + end + + let!(:private_project) do + create(:project, :private, namespace: source_user.namespace, name: 'B', + path: 'B') + end + + before do + private_project.team << [current_user, Gitlab::Access::DEVELOPER] + end + + describe 'without a current user' do + subject { finder.execute } + + it { is_expected.to eq([public_project]) } + end + + describe 'with a current user' do + subject { finder.execute(current_user) } + + it { is_expected.to eq([private_project, public_project]) } + end +end diff --git a/spec/finders/projects_finder_spec.rb b/spec/finders/projects_finder_spec.rb index de9d4cd612..d1dede78f7 100644 --- a/spec/finders/projects_finder_spec.rb +++ b/spec/finders/projects_finder_spec.rb @@ -1,51 +1,56 @@ require 'spec_helper' describe ProjectsFinder do - let(:user) { create :user } - let(:group) { create :group } + describe '#execute' do + let(:user) { create(:user) } - let(:project1) { create(:empty_project, :public, group: group) } - let(:project2) { create(:empty_project, :internal, group: group) } - let(:project3) { create(:empty_project, :private, group: group) } - let(:project4) { create(:empty_project, :private, group: group) } + let!(:private_project) { create(:project, :private) } + let!(:internal_project) { create(:project, :internal) } + let!(:public_project) { create(:project, :public) } - context 'non authenticated' do - subject { ProjectsFinder.new.execute(nil, group: group) } + let(:finder) { described_class.new } - it { is_expected.to include(project1) } - it { is_expected.not_to include(project2) } - it { is_expected.not_to include(project3) } - it { is_expected.not_to include(project4) } - end + describe 'without a group' do + describe 'without a user' do + subject { finder.execute } - context 'authenticated' do - subject { ProjectsFinder.new.execute(user, group: group) } + it { is_expected.to eq([public_project]) } + end - it { is_expected.to include(project1) } - it { is_expected.to include(project2) } - it { is_expected.not_to include(project3) } - it { is_expected.not_to include(project4) } - end + describe 'with a user' do + subject { finder.execute(user) } - context 'authenticated, project member' do - before { project3.team << [user, :developer] } + describe 'without private projects' do + it { is_expected.to eq([public_project, internal_project]) } + end - subject { ProjectsFinder.new.execute(user, group: group) } + describe 'with private projects' do + before do + private_project.team.add_user(user, Gitlab::Access::MASTER) + end - it { is_expected.to include(project1) } - it { is_expected.to include(project2) } - it { is_expected.to include(project3) } - it { is_expected.not_to include(project4) } - end + it do + is_expected.to eq([public_project, internal_project, + private_project]) + end + end + end + end - context 'authenticated, group member' do - before { group.add_developer(user) } + describe 'with a group' do + let(:group) { public_project.group } - subject { ProjectsFinder.new.execute(user, group: group) } + describe 'without a user' do + subject { finder.execute(nil, group: group) } - it { is_expected.to include(project1) } - it { is_expected.to include(project2) } - it { is_expected.to include(project3) } - it { is_expected.to include(project4) } + it { is_expected.to eq([public_project]) } + end + + describe 'with a user' do + subject { finder.execute(user, group: group) } + + it { is_expected.to eq([public_project, internal_project]) } + end + end end end diff --git a/spec/helpers/issues_helper_spec.rb b/spec/helpers/issues_helper_spec.rb index 78a6b631eb..1f2c4ee77b 100644 --- a/spec/helpers/issues_helper_spec.rb +++ b/spec/helpers/issues_helper_spec.rb @@ -127,4 +127,30 @@ describe IssuesHelper do it { is_expected.to eq("!1, !2, or !3") } end + describe "#url_to_emoji" do + it "returns url" do + expect(url_to_emoji("smile")).to include("emoji/1F604.png") + end + end + + describe "#emoji_list" do + it "returns url" do + expect(emoji_list).to be_kind_of(Array) + end + end + + describe "#note_active_class" do + before do + @note = create :note + @note1 = create :note + end + + it "returns empty string for unauthenticated user" do + expect(note_active_class(Note.all, nil)).to eq("") + end + + it "returns active string for author" do + expect(note_active_class(Note.all, @note.author)).to eq("active") + end + end end diff --git a/spec/helpers/search_helper_spec.rb b/spec/helpers/search_helper_spec.rb index b327f4f911..ebe9c29d91 100644 --- a/spec/helpers/search_helper_spec.rb +++ b/spec/helpers/search_helper_spec.rb @@ -42,6 +42,11 @@ describe SearchHelper do expect(search_autocomplete_opts(project.name).size).to eq(1) end + it "includes the public group" do + group = create(:group, public: true) + expect(search_autocomplete_opts(group.name).size).to eq(1) + end + context "with a current project" do before { @project = create(:project) } diff --git a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb index 2260a6f813..6f287719ba 100644 --- a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb +++ b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' module Ci describe GitlabCiYamlProcessor do - + let(:path) { 'path' } + describe "#builds_for_ref" do let(:type) { 'test' } @@ -12,7 +13,7 @@ module Ci rspec: { script: "rspec" } }) - config_processor = GitlabCiYamlProcessor.new(config) + config_processor = GitlabCiYamlProcessor.new(config, path) expect(config_processor.builds_for_stage_and_ref(type, "master").size).to eq(1) expect(config_processor.builds_for_stage_and_ref(type, "master").first).to eq({ @@ -28,78 +29,218 @@ module Ci when: "on_success" }) end + + describe :only do + it "does not return builds if only has another branch" do + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", only: ["deploy"] } + }) - it "does not return builds if only has another branch" do - config = YAML.dump({ - before_script: ["pwd"], - rspec: { script: "rspec", only: ["deploy"] } - }) + config_processor = GitlabCiYamlProcessor.new(config, path) - config_processor = GitlabCiYamlProcessor.new(config) + expect(config_processor.builds_for_stage_and_ref(type, "master").size).to eq(0) + end - expect(config_processor.builds_for_stage_and_ref(type, "master").size).to eq(0) + it "does not return builds if only has regexp with another branch" do + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", only: ["/^deploy$/"] } + }) + + config_processor = GitlabCiYamlProcessor.new(config, path) + + expect(config_processor.builds_for_stage_and_ref(type, "master").size).to eq(0) + end + + it "returns builds if only has specified this branch" do + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", only: ["master"] } + }) + + config_processor = GitlabCiYamlProcessor.new(config, path) + + expect(config_processor.builds_for_stage_and_ref(type, "master").size).to eq(1) + end + + it "returns builds if only has a list of branches including specified" do + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", type: type, only: ["master", "deploy"] } + }) + + config_processor = GitlabCiYamlProcessor.new(config, path) + + expect(config_processor.builds_for_stage_and_ref(type, "deploy").size).to eq(1) + end + + it "returns builds if only has a branches keyword specified" do + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", type: type, only: ["branches"] } + }) + + config_processor = GitlabCiYamlProcessor.new(config, path) + + expect(config_processor.builds_for_stage_and_ref(type, "deploy").size).to eq(1) + end + + it "does not return builds if only has a tags keyword" do + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", type: type, only: ["tags"] } + }) + + config_processor = GitlabCiYamlProcessor.new(config, path) + + expect(config_processor.builds_for_stage_and_ref(type, "deploy").size).to eq(0) + end + + it "returns builds if only has current repository path" do + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", type: type, only: ["branches@path"] } + }) + + config_processor = GitlabCiYamlProcessor.new(config, path) + + expect(config_processor.builds_for_stage_and_ref(type, "deploy").size).to eq(1) + end + + it "does not return builds if only has different repository path" do + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", type: type, only: ["branches@fork"] } + }) + + config_processor = GitlabCiYamlProcessor.new(config, path) + + expect(config_processor.builds_for_stage_and_ref(type, "deploy").size).to eq(0) + end + + it "returns build only for specified type" do + + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", type: "test", only: ["master", "deploy"] }, + staging: { script: "deploy", type: "deploy", only: ["master", "deploy"] }, + production: { script: "deploy", type: "deploy", only: ["master@path", "deploy"] }, + }) + + config_processor = GitlabCiYamlProcessor.new(config, 'fork') + + expect(config_processor.builds_for_stage_and_ref("deploy", "deploy").size).to eq(2) + expect(config_processor.builds_for_stage_and_ref("test", "deploy").size).to eq(1) + expect(config_processor.builds_for_stage_and_ref("deploy", "master").size).to eq(1) + end end - it "does not return builds if only has regexp with another branch" do - config = YAML.dump({ - before_script: ["pwd"], - rspec: { script: "rspec", only: ["/^deploy$/"] } - }) + describe :except do + it "returns builds if except has another branch" do + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", except: ["deploy"] } + }) - config_processor = GitlabCiYamlProcessor.new(config) + config_processor = GitlabCiYamlProcessor.new(config, path) - expect(config_processor.builds_for_stage_and_ref(type, "master").size).to eq(0) + expect(config_processor.builds_for_stage_and_ref(type, "master").size).to eq(1) + end + + it "returns builds if except has regexp with another branch" do + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", except: ["/^deploy$/"] } + }) + + config_processor = GitlabCiYamlProcessor.new(config, path) + + expect(config_processor.builds_for_stage_and_ref(type, "master").size).to eq(1) + end + + it "does not return builds if except has specified this branch" do + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", except: ["master"] } + }) + + config_processor = GitlabCiYamlProcessor.new(config, path) + + expect(config_processor.builds_for_stage_and_ref(type, "master").size).to eq(0) + end + + it "does not return builds if except has a list of branches including specified" do + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", type: type, except: ["master", "deploy"] } + }) + + config_processor = GitlabCiYamlProcessor.new(config, path) + + expect(config_processor.builds_for_stage_and_ref(type, "deploy").size).to eq(0) + end + + it "does not return builds if except has a branches keyword specified" do + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", type: type, except: ["branches"] } + }) + + config_processor = GitlabCiYamlProcessor.new(config, path) + + expect(config_processor.builds_for_stage_and_ref(type, "deploy").size).to eq(0) + end + + it "returns builds if except has a tags keyword" do + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", type: type, except: ["tags"] } + }) + + config_processor = GitlabCiYamlProcessor.new(config, path) + + expect(config_processor.builds_for_stage_and_ref(type, "deploy").size).to eq(1) + end + + it "does not return builds if except has current repository path" do + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", type: type, except: ["branches@path"] } + }) + + config_processor = GitlabCiYamlProcessor.new(config, path) + + expect(config_processor.builds_for_stage_and_ref(type, "deploy").size).to eq(0) + end + + it "returns builds if except has different repository path" do + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", type: type, except: ["branches@fork"] } + }) + + config_processor = GitlabCiYamlProcessor.new(config, path) + + expect(config_processor.builds_for_stage_and_ref(type, "deploy").size).to eq(1) + end + + it "returns build except specified type" do + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", type: "test", except: ["master", "deploy", "test@fork"] }, + staging: { script: "deploy", type: "deploy", except: ["master"] }, + production: { script: "deploy", type: "deploy", except: ["master@fork"] }, + }) + + config_processor = GitlabCiYamlProcessor.new(config, 'fork') + + expect(config_processor.builds_for_stage_and_ref("deploy", "deploy").size).to eq(2) + expect(config_processor.builds_for_stage_and_ref("test", "test").size).to eq(0) + expect(config_processor.builds_for_stage_and_ref("deploy", "master").size).to eq(0) + end end - it "returns builds if only has specified this branch" do - config = YAML.dump({ - before_script: ["pwd"], - rspec: { script: "rspec", only: ["master"] } - }) - - config_processor = GitlabCiYamlProcessor.new(config) - - expect(config_processor.builds_for_stage_and_ref(type, "master").size).to eq(1) - end - - it "does not build tags" do - config = YAML.dump({ - before_script: ["pwd"], - rspec: { script: "rspec", except: ["tags"] } - }) - - config_processor = GitlabCiYamlProcessor.new(config) - - expect(config_processor.builds_for_stage_and_ref(type, "0-1", true).size).to eq(0) - end - - it "returns builds if only has a list of branches including specified" do - config = YAML.dump({ - before_script: ["pwd"], - rspec: { script: "rspec", type: type, only: ["master", "deploy"] } - }) - - config_processor = GitlabCiYamlProcessor.new(config) - - expect(config_processor.builds_for_stage_and_ref(type, "deploy").size).to eq(1) - end - - it "returns build only for specified type" do - - config = YAML.dump({ - before_script: ["pwd"], - build: { script: "build", type: "build", only: ["master", "deploy"] }, - rspec: { script: "rspec", type: type, only: ["master", "deploy"] }, - staging: { script: "deploy", type: "deploy", only: ["master", "deploy"] }, - production: { script: "deploy", type: "deploy", only: ["master", "deploy"] }, - }) - - config_processor = GitlabCiYamlProcessor.new(config) - - expect(config_processor.builds_for_stage_and_ref("production", "deploy").size).to eq(0) - expect(config_processor.builds_for_stage_and_ref(type, "deploy").size).to eq(1) - expect(config_processor.builds_for_stage_and_ref("deploy", "deploy").size).to eq(2) - end end describe "Image and service handling" do @@ -111,7 +252,7 @@ module Ci rspec: { script: "rspec" } }) - config_processor = GitlabCiYamlProcessor.new(config) + config_processor = GitlabCiYamlProcessor.new(config, path) expect(config_processor.builds_for_stage_and_ref("test", "master").size).to eq(1) expect(config_processor.builds_for_stage_and_ref("test", "master").first).to eq({ @@ -139,7 +280,7 @@ module Ci rspec: { image: "ruby:2.5", services: ["postgresql"], script: "rspec" } }) - config_processor = GitlabCiYamlProcessor.new(config) + config_processor = GitlabCiYamlProcessor.new(config, path) expect(config_processor.builds_for_stage_and_ref("test", "master").size).to eq(1) expect(config_processor.builds_for_stage_and_ref("test", "master").first).to eq({ @@ -172,7 +313,7 @@ module Ci rspec: { script: "rspec" } }) - config_processor = GitlabCiYamlProcessor.new(config) + config_processor = GitlabCiYamlProcessor.new(config, path) expect(config_processor.variables).to eq(variables) end end @@ -184,7 +325,7 @@ module Ci rspec: { script: "rspec", when: when_state } }) - config_processor = GitlabCiYamlProcessor.new(config) + config_processor = GitlabCiYamlProcessor.new(config, path) builds = config_processor.builds_for_stage_and_ref("test", "master") expect(builds.size).to eq(1) expect(builds.first[:when]).to eq(when_state) @@ -192,150 +333,301 @@ module Ci end end + describe "Caches" do + it "returns cache when defined globally" do + config = YAML.dump({ + cache: { paths: ["logs/", "binaries/"], untracked: true }, + rspec: { + script: "rspec" + } + }) + + config_processor = GitlabCiYamlProcessor.new(config) + + expect(config_processor.builds_for_stage_and_ref("test", "master").size).to eq(1) + expect(config_processor.builds_for_stage_and_ref("test", "master").first[:options][:cache]).to eq( + paths: ["logs/", "binaries/"], + untracked: true, + ) + end + + it "returns cache when defined in a job" do + config = YAML.dump({ + rspec: { + cache: { paths: ["logs/", "binaries/"], untracked: true }, + script: "rspec" + } + }) + + config_processor = GitlabCiYamlProcessor.new(config) + + expect(config_processor.builds_for_stage_and_ref("test", "master").size).to eq(1) + expect(config_processor.builds_for_stage_and_ref("test", "master").first[:options][:cache]).to eq( + paths: ["logs/", "binaries/"], + untracked: true, + ) + end + + it "overwrite cache when defined for a job and globally" do + config = YAML.dump({ + cache: { paths: ["logs/", "binaries/"], untracked: true }, + rspec: { + script: "rspec", + cache: { paths: ["test/"], untracked: false }, + } + }) + + config_processor = GitlabCiYamlProcessor.new(config) + + expect(config_processor.builds_for_stage_and_ref("test", "master").size).to eq(1) + expect(config_processor.builds_for_stage_and_ref("test", "master").first[:options][:cache]).to eq( + paths: ["test/"], + untracked: false, + ) + end + end + + describe "Artifacts" do + it "returns artifacts when defined" do + config = YAML.dump({ + image: "ruby:2.1", + services: ["mysql"], + before_script: ["pwd"], + rspec: { + artifacts: { paths: ["logs/", "binaries/"], untracked: true }, + script: "rspec" + } + }) + + config_processor = GitlabCiYamlProcessor.new(config) + + expect(config_processor.builds_for_stage_and_ref("test", "master").size).to eq(1) + expect(config_processor.builds_for_stage_and_ref("test", "master").first).to eq({ + except: nil, + stage: "test", + stage_idx: 1, + name: :rspec, + only: nil, + commands: "pwd\nrspec", + tag_list: [], + options: { + image: "ruby:2.1", + services: ["mysql"], + artifacts: { + paths: ["logs/", "binaries/"], + untracked: true + } + }, + when: "on_success", + allow_failure: false + }) + end + end + describe "Error handling" do + it "fails to parse YAML" do + expect{GitlabCiYamlProcessor.new("invalid: yaml: test")}.to raise_error(Psych::SyntaxError) + end + it "indicates that object is invalid" do - expect{GitlabCiYamlProcessor.new("invalid_yaml\n!ccdvlf%612334@@@@")}.to raise_error(GitlabCiYamlProcessor::ValidationError) + expect{GitlabCiYamlProcessor.new("invalid_yaml")}.to raise_error(GitlabCiYamlProcessor::ValidationError) end it "returns errors if tags parameter is invalid" do config = YAML.dump({ rspec: { script: "test", tags: "mysql" } }) expect do - GitlabCiYamlProcessor.new(config) + GitlabCiYamlProcessor.new(config, path) end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: tags parameter should be an array of strings") end it "returns errors if before_script parameter is invalid" do config = YAML.dump({ before_script: "bundle update", rspec: { script: "test" } }) expect do - GitlabCiYamlProcessor.new(config) + GitlabCiYamlProcessor.new(config, path) end.to raise_error(GitlabCiYamlProcessor::ValidationError, "before_script should be an array of strings") end it "returns errors if image parameter is invalid" do config = YAML.dump({ image: ["test"], rspec: { script: "test" } }) expect do - GitlabCiYamlProcessor.new(config) + GitlabCiYamlProcessor.new(config, path) end.to raise_error(GitlabCiYamlProcessor::ValidationError, "image should be a string") end + it "returns errors if job name is blank" do + config = YAML.dump({ '' => { script: "test" } }) + expect do + GitlabCiYamlProcessor.new(config, path) + end.to raise_error(GitlabCiYamlProcessor::ValidationError, "job name should be non-empty string") + end + + it "returns errors if job name is non-string" do + config = YAML.dump({ 10 => { script: "test" } }) + expect do + GitlabCiYamlProcessor.new(config, path) + end.to raise_error(GitlabCiYamlProcessor::ValidationError, "job name should be non-empty string") + end + it "returns errors if job image parameter is invalid" do config = YAML.dump({ rspec: { script: "test", image: ["test"] } }) expect do - GitlabCiYamlProcessor.new(config) + GitlabCiYamlProcessor.new(config, path) end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: image should be a string") end it "returns errors if services parameter is not an array" do config = YAML.dump({ services: "test", rspec: { script: "test" } }) expect do - GitlabCiYamlProcessor.new(config) + GitlabCiYamlProcessor.new(config, path) end.to raise_error(GitlabCiYamlProcessor::ValidationError, "services should be an array of strings") end it "returns errors if services parameter is not an array of strings" do config = YAML.dump({ services: [10, "test"], rspec: { script: "test" } }) expect do - GitlabCiYamlProcessor.new(config) + GitlabCiYamlProcessor.new(config, path) end.to raise_error(GitlabCiYamlProcessor::ValidationError, "services should be an array of strings") end it "returns errors if job services parameter is not an array" do config = YAML.dump({ rspec: { script: "test", services: "test" } }) expect do - GitlabCiYamlProcessor.new(config) + GitlabCiYamlProcessor.new(config, path) end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: services should be an array of strings") end it "returns errors if job services parameter is not an array of strings" do config = YAML.dump({ rspec: { script: "test", services: [10, "test"] } }) expect do - GitlabCiYamlProcessor.new(config) + GitlabCiYamlProcessor.new(config, path) end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: services should be an array of strings") end it "returns errors if there are unknown parameters" do config = YAML.dump({ extra: "bundle update" }) expect do - GitlabCiYamlProcessor.new(config) + GitlabCiYamlProcessor.new(config, path) end.to raise_error(GitlabCiYamlProcessor::ValidationError, "Unknown parameter: extra") end it "returns errors if there are unknown parameters that are hashes, but doesn't have a script" do config = YAML.dump({ extra: { services: "test" } }) expect do - GitlabCiYamlProcessor.new(config) + GitlabCiYamlProcessor.new(config, path) end.to raise_error(GitlabCiYamlProcessor::ValidationError, "Unknown parameter: extra") end it "returns errors if there is no any jobs defined" do config = YAML.dump({ before_script: ["bundle update"] }) expect do - GitlabCiYamlProcessor.new(config) + GitlabCiYamlProcessor.new(config, path) end.to raise_error(GitlabCiYamlProcessor::ValidationError, "Please define at least one job") end it "returns errors if job allow_failure parameter is not an boolean" do config = YAML.dump({ rspec: { script: "test", allow_failure: "string" } }) expect do - GitlabCiYamlProcessor.new(config) + GitlabCiYamlProcessor.new(config, path) end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: allow_failure parameter should be an boolean") end it "returns errors if job stage is not a string" do config = YAML.dump({ rspec: { script: "test", type: 1, allow_failure: "string" } }) expect do - GitlabCiYamlProcessor.new(config) + GitlabCiYamlProcessor.new(config, path) end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: stage parameter should be build, test, deploy") end it "returns errors if job stage is not a pre-defined stage" do config = YAML.dump({ rspec: { script: "test", type: "acceptance", allow_failure: "string" } }) expect do - GitlabCiYamlProcessor.new(config) + GitlabCiYamlProcessor.new(config, path) end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: stage parameter should be build, test, deploy") end it "returns errors if job stage is not a defined stage" do config = YAML.dump({ types: ["build", "test"], rspec: { script: "test", type: "acceptance", allow_failure: "string" } }) expect do - GitlabCiYamlProcessor.new(config) + GitlabCiYamlProcessor.new(config, path) end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: stage parameter should be build, test") end it "returns errors if stages is not an array" do config = YAML.dump({ types: "test", rspec: { script: "test" } }) expect do - GitlabCiYamlProcessor.new(config) + GitlabCiYamlProcessor.new(config, path) end.to raise_error(GitlabCiYamlProcessor::ValidationError, "stages should be an array of strings") end it "returns errors if stages is not an array of strings" do config = YAML.dump({ types: [true, "test"], rspec: { script: "test" } }) expect do - GitlabCiYamlProcessor.new(config) + GitlabCiYamlProcessor.new(config, path) end.to raise_error(GitlabCiYamlProcessor::ValidationError, "stages should be an array of strings") end it "returns errors if variables is not a map" do config = YAML.dump({ variables: "test", rspec: { script: "test" } }) expect do - GitlabCiYamlProcessor.new(config) + GitlabCiYamlProcessor.new(config, path) end.to raise_error(GitlabCiYamlProcessor::ValidationError, "variables should be a map of key-valued strings") end it "returns errors if variables is not a map of key-valued strings" do config = YAML.dump({ variables: { test: false }, rspec: { script: "test" } }) expect do - GitlabCiYamlProcessor.new(config) + GitlabCiYamlProcessor.new(config, path) end.to raise_error(GitlabCiYamlProcessor::ValidationError, "variables should be a map of key-valued strings") end it "returns errors if job when is not on_success, on_failure or always" do config = YAML.dump({ rspec: { script: "test", when: 1 } }) expect do - GitlabCiYamlProcessor.new(config) + GitlabCiYamlProcessor.new(config, path) end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: when parameter should be on_success, on_failure or always") end + + it "returns errors if job artifacts:untracked is not an array of strings" do + config = YAML.dump({ types: ["build", "test"], rspec: { script: "test", artifacts: { untracked: "string" } } }) + expect do + GitlabCiYamlProcessor.new(config) + end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: artifacts:untracked parameter should be an boolean") + end + + it "returns errors if job artifacts:paths is not an array of strings" do + config = YAML.dump({ types: ["build", "test"], rspec: { script: "test", artifacts: { paths: "string" } } }) + expect do + GitlabCiYamlProcessor.new(config) + end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: artifacts:paths parameter should be an array of strings") + end + + it "returns errors if cache:untracked is not an array of strings" do + config = YAML.dump({ cache: { untracked: "string" }, rspec: { script: "test" } }) + expect do + GitlabCiYamlProcessor.new(config) + end.to raise_error(GitlabCiYamlProcessor::ValidationError, "cache:untracked parameter should be an boolean") + end + + it "returns errors if cache:paths is not an array of strings" do + config = YAML.dump({ cache: { paths: "string" }, rspec: { script: "test" } }) + expect do + GitlabCiYamlProcessor.new(config) + end.to raise_error(GitlabCiYamlProcessor::ValidationError, "cache:paths parameter should be an array of strings") + end + + it "returns errors if job cache:untracked is not an array of strings" do + config = YAML.dump({ types: ["build", "test"], rspec: { script: "test", cache: { untracked: "string" } } }) + expect do + GitlabCiYamlProcessor.new(config) + end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: cache:untracked parameter should be an boolean") + end + + it "returns errors if job cache:paths is not an array of strings" do + config = YAML.dump({ types: ["build", "test"], rspec: { script: "test", cache: { paths: "string" } } }) + expect do + GitlabCiYamlProcessor.new(config) + end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: cache:paths parameter should be an array of strings") + end end end end diff --git a/spec/lib/gitlab/backend/grack_auth_spec.rb b/spec/lib/gitlab/backend/grack_auth_spec.rb index 37c527221a..dfa0e10318 100644 --- a/spec/lib/gitlab/backend/grack_auth_spec.rb +++ b/spec/lib/gitlab/backend/grack_auth_spec.rb @@ -50,6 +50,22 @@ describe Grack::Auth do end end + context "when the Wiki for a project exists" do + before do + @wiki = ProjectWiki.new(project) + env["PATH_INFO"] = "#{@wiki.repository.path_with_namespace}.git/info/refs" + project.update_attribute(:visibility_level, Project::PUBLIC) + end + + it "responds with the right project" do + response = auth.call(env) + json_body = ActiveSupport::JSON.decode(response[2][0]) + + expect(response.first).to eq(200) + expect(json_body['RepoPath']).to include(@wiki.repository.path_with_namespace) + end + end + context "when the project exists" do before do env["PATH_INFO"] = project.path_with_namespace + ".git" diff --git a/spec/lib/gitlab/diff/inline_diff_spec.rb b/spec/lib/gitlab/inline_diff_spec.rb similarity index 100% rename from spec/lib/gitlab/diff/inline_diff_spec.rb rename to spec/lib/gitlab/inline_diff_spec.rb diff --git a/spec/lib/gitlab/lfs/lfs_router_spec.rb b/spec/lib/gitlab/lfs/lfs_router_spec.rb new file mode 100644 index 0000000000..5b13d65c7c --- /dev/null +++ b/spec/lib/gitlab/lfs/lfs_router_spec.rb @@ -0,0 +1,765 @@ +require 'spec_helper' + +describe Gitlab::Lfs::Router do + let(:project) { create(:project) } + let(:public_project) { create(:project, :public) } + let(:forked_project) { fork_project(public_project, user) } + + let(:user) { create(:user) } + let(:user_two) { create(:user) } + let!(:lfs_object) { create(:lfs_object, :with_file) } + + let(:request) { Rack::Request.new(env) } + let(:env) do + { + 'rack.input' => '', + 'REQUEST_METHOD' => 'GET', + } + end + + let(:lfs_router_auth) { new_lfs_router(project, user) } + let(:lfs_router_noauth) { new_lfs_router(project, nil) } + let(:lfs_router_public_auth) { new_lfs_router(public_project, user) } + let(:lfs_router_public_noauth) { new_lfs_router(public_project, nil) } + let(:lfs_router_forked_noauth) { new_lfs_router(forked_project, nil) } + let(:lfs_router_forked_auth) { new_lfs_router(forked_project, user_two) } + + let(:sample_oid) { "b68143e6463773b1b6c6fd009a76c32aeec041faff32ba2ed42fd7f708a17f80" } + let(:sample_size) { 499013 } + let(:respond_with_deprecated) {[ 501, { "Content-Type"=>"application/json; charset=utf-8" }, ["{\"message\":\"Server supports batch API only, please update your Git LFS client to version 1.0.1 and up.\",\"documentation_url\":\"#{Gitlab.config.gitlab.url}/help\"}"]]} + let(:respond_with_disabled) {[ 501, { "Content-Type"=>"application/json; charset=utf-8" }, ["{\"message\":\"Git LFS is not enabled on this GitLab server, contact your admin.\",\"documentation_url\":\"#{Gitlab.config.gitlab.url}/help\"}"]]} + + describe 'when lfs is disabled' do + before do + allow(Gitlab.config.lfs).to receive(:enabled).and_return(false) + env['REQUEST_METHOD'] = 'POST' + body = { + 'objects' => [ + { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897', + 'size' => 1575078 + }, + { 'oid' => sample_oid, + 'size' => sample_size + } + ], + 'operation' => 'upload' + }.to_json + env['rack.input'] = StringIO.new(body) + env["PATH_INFO"] = "#{project.repository.path_with_namespace}.git/info/lfs/objects/batch" + end + + it 'responds with 501' do + expect(lfs_router_auth.try_call).to match_array(respond_with_disabled) + end + end + + describe 'when fetching lfs object using deprecated API' do + before do + enable_lfs + env["PATH_INFO"] = "#{project.repository.path_with_namespace}.git/info/lfs/objects/#{sample_oid}" + end + + it 'responds with 501' do + expect(lfs_router_auth.try_call).to match_array(respond_with_deprecated) + end + end + + describe 'when fetching lfs object' do + before do + enable_lfs + env['HTTP_ACCEPT'] = "application/vnd.git-lfs+json; charset=utf-8" + env["PATH_INFO"] = "#{project.repository.path_with_namespace}.git/gitlab-lfs/objects/#{sample_oid}" + end + + describe 'and request comes from gitlab-workhorse' do + context 'without user being authorized' do + it "responds with status 401" do + expect(lfs_router_noauth.try_call.first).to eq(401) + end + end + + context 'with required headers' do + before do + env['HTTP_X_SENDFILE_TYPE'] = "X-Sendfile" + end + + context 'when user does not have project access' do + it "responds with status 403" do + expect(lfs_router_auth.try_call.first).to eq(403) + end + end + + context 'when user has project access' do + before do + project.lfs_objects << lfs_object + project.team << [user, :master] + end + + it "responds with status 200" do + expect(lfs_router_auth.try_call.first).to eq(200) + end + + it "responds with the file location" do + expect(lfs_router_auth.try_call[1]['Content-Type']).to eq("application/octet-stream") + expect(lfs_router_auth.try_call[1]['X-Sendfile']).to eq(lfs_object.file.path) + end + end + end + + context 'without required headers' do + it "responds with status 403" do + expect(lfs_router_auth.try_call.first).to eq(403) + end + end + end + end + + describe 'when handling lfs request using deprecated API' do + before do + enable_lfs + env['REQUEST_METHOD'] = 'POST' + env["PATH_INFO"] = "#{project.repository.path_with_namespace}.git/info/lfs/objects" + end + + it 'responds with 501' do + expect(lfs_router_auth.try_call).to match_array(respond_with_deprecated) + end + end + + describe 'when handling lfs batch request' do + before do + enable_lfs + env['REQUEST_METHOD'] = 'POST' + env['PATH_INFO'] = "#{project.repository.path_with_namespace}.git/info/lfs/objects/batch" + end + + describe 'download' do + describe 'when user is authenticated' do + before do + body = { 'operation' => 'download', + 'objects' => [ + { 'oid' => sample_oid, + 'size' => sample_size + }] + }.to_json + env['rack.input'] = StringIO.new(body) + end + + describe 'when user has download access' do + before do + @auth = authorize(user) + env["HTTP_AUTHORIZATION"] = @auth + project.team << [user, :reporter] + end + + context 'when downloading an lfs object that is assigned to our project' do + before do + project.lfs_objects << lfs_object + end + + it 'responds with status 200 and href to download' do + response = lfs_router_auth.try_call + expect(response.first).to eq(200) + response_body = ActiveSupport::JSON.decode(response.last.first) + + expect(response_body).to eq('objects' => [ + { 'oid' => sample_oid, + 'size' => sample_size, + 'actions' => { + 'download' => { + 'href' => "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}", + 'header' => { 'Authorization' => @auth } + } + } + }]) + end + end + + context 'when downloading an lfs object that is assigned to other project' do + before do + public_project.lfs_objects << lfs_object + end + + it 'responds with status 200 and error message' do + response = lfs_router_auth.try_call + expect(response.first).to eq(200) + response_body = ActiveSupport::JSON.decode(response.last.first) + + expect(response_body).to eq('objects' => [ + { 'oid' => sample_oid, + 'size' => sample_size, + 'error' => { + 'code' => 404, + 'message' => "Object does not exist on the server or you don't have permissions to access it", + } + }]) + end + end + + context 'when downloading a lfs object that does not exist' do + before do + body = { 'operation' => 'download', + 'objects' => [ + { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897', + 'size' => 1575078 + }] + }.to_json + env['rack.input'] = StringIO.new(body) + end + + it "responds with status 200 and error message" do + response = lfs_router_auth.try_call + expect(response.first).to eq(200) + response_body = ActiveSupport::JSON.decode(response.last.first) + + expect(response_body).to eq('objects' => [ + { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897', + 'size' => 1575078, + 'error' => { + 'code' => 404, + 'message' => "Object does not exist on the server or you don't have permissions to access it", + } + }]) + end + end + + context 'when downloading one new and one existing lfs object' do + before do + body = { 'operation' => 'download', + 'objects' => [ + { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897', + 'size' => 1575078 + }, + { 'oid' => sample_oid, + 'size' => sample_size + } + ] + }.to_json + env['rack.input'] = StringIO.new(body) + project.lfs_objects << lfs_object + end + + it "responds with status 200 with upload hypermedia link for the new object" do + response = lfs_router_auth.try_call + expect(response.first).to eq(200) + response_body = ActiveSupport::JSON.decode(response.last.first) + + expect(response_body).to eq('objects' => [ + { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897', + 'size' => 1575078, + 'error' => { + 'code' => 404, + 'message' => "Object does not exist on the server or you don't have permissions to access it", + } + }, + { 'oid' => sample_oid, + 'size' => sample_size, + 'actions' => { + 'download' => { + 'href' => "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}", + 'header' => { 'Authorization' => @auth } + } + } + }]) + end + end + end + + context 'when user does is not member of the project' do + before do + @auth = authorize(user) + env["HTTP_AUTHORIZATION"] = @auth + project.team << [user, :guest] + end + + it 'responds with 403' do + expect(lfs_router_auth.try_call.first).to eq(403) + end + end + + context 'when user does not have download access' do + before do + @auth = authorize(user) + env["HTTP_AUTHORIZATION"] = @auth + project.team << [user, :guest] + end + + it 'responds with 403' do + expect(lfs_router_auth.try_call.first).to eq(403) + end + end + end + + context 'when user is not authenticated' do + before do + body = { 'operation' => 'download', + 'objects' => [ + { 'oid' => sample_oid, + 'size' => sample_size + }], + + }.to_json + env['rack.input'] = StringIO.new(body) + end + + describe 'is accessing public project' do + before do + public_project.lfs_objects << lfs_object + end + + it 'responds with status 200 and href to download' do + response = lfs_router_public_noauth.try_call + expect(response.first).to eq(200) + response_body = ActiveSupport::JSON.decode(response.last.first) + + expect(response_body).to eq('objects' => [ + { 'oid' => sample_oid, + 'size' => sample_size, + 'actions' => { + 'download' => { + 'href' => "#{public_project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}", + 'header' => {} + } + } + }]) + end + end + + describe 'is accessing non-public project' do + before do + project.lfs_objects << lfs_object + end + + it 'responds with authorization required' do + expect(lfs_router_noauth.try_call.first).to eq(401) + end + end + end + end + + describe 'upload' do + describe 'when user is authenticated' do + before do + body = { 'operation' => 'upload', + 'objects' => [ + { 'oid' => sample_oid, + 'size' => sample_size + }] + }.to_json + env['rack.input'] = StringIO.new(body) + end + + describe 'when user has project push access' do + before do + @auth = authorize(user) + env["HTTP_AUTHORIZATION"] = @auth + project.team << [user, :developer] + end + + context 'when pushing an lfs object that already exists' do + before do + public_project.lfs_objects << lfs_object + end + + it "responds with status 200 and links the object to the project" do + response_body = lfs_router_auth.try_call.last + response = ActiveSupport::JSON.decode(response_body.first) + + expect(response['objects']).to be_kind_of(Array) + expect(response['objects'].first['oid']).to eq(sample_oid) + expect(response['objects'].first['size']).to eq(sample_size) + expect(lfs_object.projects.pluck(:id)).to_not include(project.id) + expect(lfs_object.projects.pluck(:id)).to include(public_project.id) + expect(response['objects'].first['actions']['upload']['href']).to eq("#{Gitlab.config.gitlab.url}/#{project.path_with_namespace}.git/gitlab-lfs/objects/#{sample_oid}/#{sample_size}") + expect(response['objects'].first['actions']['upload']['header']).to eq('Authorization' => @auth) + end + end + + context 'when pushing a lfs object that does not exist' do + before do + body = { 'operation' => 'upload', + 'objects' => [ + { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897', + 'size' => 1575078 + }] + }.to_json + env['rack.input'] = StringIO.new(body) + end + + it "responds with status 200 and upload hypermedia link" do + response = lfs_router_auth.try_call + expect(response.first).to eq(200) + + response_body = ActiveSupport::JSON.decode(response.last.first) + expect(response_body['objects']).to be_kind_of(Array) + expect(response_body['objects'].first['oid']).to eq("91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897") + expect(response_body['objects'].first['size']).to eq(1575078) + expect(lfs_object.projects.pluck(:id)).not_to include(project.id) + expect(response_body['objects'].first['actions']['upload']['href']).to eq("#{Gitlab.config.gitlab.url}/#{project.path_with_namespace}.git/gitlab-lfs/objects/91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897/1575078") + expect(response_body['objects'].first['actions']['upload']['header']).to eq('Authorization' => @auth) + end + end + + context 'when pushing one new and one existing lfs object' do + before do + body = { 'operation' => 'upload', + 'objects' => [ + { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897', + 'size' => 1575078 + }, + { 'oid' => sample_oid, + 'size' => sample_size + } + ] + }.to_json + env['rack.input'] = StringIO.new(body) + project.lfs_objects << lfs_object + end + + it "responds with status 200 with upload hypermedia link for the new object" do + response = lfs_router_auth.try_call + expect(response.first).to eq(200) + + response_body = ActiveSupport::JSON.decode(response.last.first) + expect(response_body['objects']).to be_kind_of(Array) + + expect(response_body['objects'].first['oid']).to eq("91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897") + expect(response_body['objects'].first['size']).to eq(1575078) + expect(response_body['objects'].first['actions']['upload']['href']).to eq("#{Gitlab.config.gitlab.url}/#{project.path_with_namespace}.git/gitlab-lfs/objects/91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897/1575078") + expect(response_body['objects'].first['actions']['upload']['header']).to eq("Authorization" => @auth) + + expect(response_body['objects'].last['oid']).to eq(sample_oid) + expect(response_body['objects'].last['size']).to eq(sample_size) + expect(response_body['objects'].last).to_not have_key('actions') + end + end + end + + context 'when user does not have push access' do + it 'responds with 403' do + expect(lfs_router_auth.try_call.first).to eq(403) + end + end + end + + context 'when user is not authenticated' do + before do + env['rack.input'] = StringIO.new( + { 'objects' => [], 'operation' => 'upload' }.to_json + ) + end + + context 'when user has push access' do + before do + project.team << [user, :master] + end + + it "responds with status 401" do + expect(lfs_router_public_noauth.try_call.first).to eq(401) + end + end + + context 'when user does not have push access' do + it "responds with status 401" do + expect(lfs_router_public_noauth.try_call.first).to eq(401) + end + end + end + end + + describe 'unsupported' do + before do + body = { 'operation' => 'other', + 'objects' => [ + { 'oid' => sample_oid, + 'size' => sample_size + }] + }.to_json + env['rack.input'] = StringIO.new(body) + end + + it 'responds with status 404' do + expect(lfs_router_public_noauth.try_call.first).to eq(404) + end + end + end + + describe 'when pushing a lfs object' do + before do + enable_lfs + env['REQUEST_METHOD'] = 'PUT' + end + + describe 'to one project' do + describe 'when user has push access to the project' do + before do + project.team << [user, :master] + end + + describe 'when user is authenticated' do + context 'and request is sent by gitlab-workhorse to authorize the request' do + before do + header_for_upload_authorize(project) + end + + it 'responds with status 200, location of lfs store and object details' do + json_response = ActiveSupport::JSON.decode(lfs_router_auth.try_call.last.first) + + expect(lfs_router_auth.try_call.first).to eq(200) + expect(json_response['StoreLFSPath']).to eq("#{Gitlab.config.shared.path}/lfs-objects/tmp/upload") + expect(json_response['LfsOid']).to eq(sample_oid) + expect(json_response['LfsSize']).to eq(sample_size) + end + end + + context 'and request is sent by gitlab-workhorse to finalize the upload' do + before do + headers_for_upload_finalize(project) + end + + it 'responds with status 200 and lfs object is linked to the project' do + expect(lfs_router_auth.try_call.first).to eq(200) + expect(lfs_object.projects.pluck(:id)).to include(project.id) + end + end + end + + describe 'when user is unauthenticated' do + let(:lfs_router_noauth) { new_lfs_router(project, nil) } + + context 'and request is sent by gitlab-workhorse to authorize the request' do + before do + header_for_upload_authorize(project) + end + + it 'responds with status 401' do + expect(lfs_router_noauth.try_call.first).to eq(401) + end + end + + context 'and request is sent by gitlab-workhorse to finalize the upload' do + before do + headers_for_upload_finalize(project) + end + + it 'responds with status 401' do + expect(lfs_router_noauth.try_call.first).to eq(401) + end + end + + context 'and request is sent with a malformed headers' do + before do + env["PATH_INFO"] = "#{project.repository.path_with_namespace}.git/gitlab-lfs/objects/#{sample_oid}/#{sample_size}" + env["HTTP_X_GITLAB_LFS_TMP"] = "cat /etc/passwd" + end + + it 'does not recognize it as a valid lfs command' do + expect(lfs_router_noauth.try_call).to eq(nil) + end + end + end + end + + describe 'and user does not have push access' do + describe 'when user is authenticated' do + context 'and request is sent by gitlab-workhorse to authorize the request' do + before do + header_for_upload_authorize(project) + end + + it 'responds with 403' do + expect(lfs_router_auth.try_call.first).to eq(403) + end + end + + context 'and request is sent by gitlab-workhorse to finalize the upload' do + before do + headers_for_upload_finalize(project) + end + + it 'responds with 403' do + expect(lfs_router_auth.try_call.first).to eq(403) + end + end + end + + describe 'when user is unauthenticated' do + let(:lfs_router_noauth) { new_lfs_router(project, nil) } + + context 'and request is sent by gitlab-workhorse to authorize the request' do + before do + header_for_upload_authorize(project) + end + + it 'responds with 401' do + expect(lfs_router_noauth.try_call.first).to eq(401) + end + end + + context 'and request is sent by gitlab-workhorse to finalize the upload' do + before do + headers_for_upload_finalize(project) + end + + it 'responds with 401' do + expect(lfs_router_noauth.try_call.first).to eq(401) + end + end + end + end + end + + describe "to a forked project" do + let(:forked_project) { fork_project(public_project, user) } + + describe 'when user has push access to the project' do + before do + forked_project.team << [user_two, :master] + end + + describe 'when user is authenticated' do + context 'and request is sent by gitlab-workhorse to authorize the request' do + before do + header_for_upload_authorize(forked_project) + end + + it 'responds with status 200, location of lfs store and object details' do + json_response = ActiveSupport::JSON.decode(lfs_router_forked_auth.try_call.last.first) + + expect(lfs_router_forked_auth.try_call.first).to eq(200) + expect(json_response['StoreLFSPath']).to eq("#{Gitlab.config.shared.path}/lfs-objects/tmp/upload") + expect(json_response['LfsOid']).to eq(sample_oid) + expect(json_response['LfsSize']).to eq(sample_size) + end + end + + context 'and request is sent by gitlab-workhorse to finalize the upload' do + before do + headers_for_upload_finalize(forked_project) + end + + it 'responds with status 200 and lfs object is linked to the source project' do + expect(lfs_router_forked_auth.try_call.first).to eq(200) + expect(lfs_object.projects.pluck(:id)).to include(public_project.id) + end + end + end + + describe 'when user is unauthenticated' do + context 'and request is sent by gitlab-workhorse to authorize the request' do + before do + header_for_upload_authorize(forked_project) + end + + it 'responds with status 401' do + expect(lfs_router_forked_noauth.try_call.first).to eq(401) + end + end + + context 'and request is sent by gitlab-workhorse to finalize the upload' do + before do + headers_for_upload_finalize(forked_project) + end + + it 'responds with status 401' do + expect(lfs_router_forked_noauth.try_call.first).to eq(401) + end + end + end + end + + describe 'and user does not have push access' do + describe 'when user is authenticated' do + context 'and request is sent by gitlab-workhorse to authorize the request' do + before do + header_for_upload_authorize(forked_project) + end + + it 'responds with 403' do + expect(lfs_router_forked_auth.try_call.first).to eq(403) + end + end + + context 'and request is sent by gitlab-workhorse to finalize the upload' do + before do + headers_for_upload_finalize(forked_project) + end + + it 'responds with 403' do + expect(lfs_router_forked_auth.try_call.first).to eq(403) + end + end + end + + describe 'when user is unauthenticated' do + context 'and request is sent by gitlab-workhorse to authorize the request' do + before do + header_for_upload_authorize(forked_project) + end + + it 'responds with 401' do + expect(lfs_router_forked_noauth.try_call.first).to eq(401) + end + end + + context 'and request is sent by gitlab-workhorse to finalize the upload' do + before do + headers_for_upload_finalize(forked_project) + end + + it 'responds with 401' do + expect(lfs_router_forked_noauth.try_call.first).to eq(401) + end + end + end + end + + describe 'and second project not related to fork or a source project' do + let(:second_project) { create(:project) } + let(:lfs_router_second_project) { new_lfs_router(second_project, user) } + + before do + public_project.lfs_objects << lfs_object + headers_for_upload_finalize(second_project) + end + + context 'when pushing the same lfs object to the second project' do + before do + second_project.team << [user, :master] + end + + it 'responds with 200 and links the lfs object to the project' do + expect(lfs_router_second_project.try_call.first).to eq(200) + expect(lfs_object.projects.pluck(:id)).to include(second_project.id, public_project.id) + end + end + end + end + end + + def enable_lfs + allow(Gitlab.config.lfs).to receive(:enabled).and_return(true) + end + + def authorize(user) + ActionController::HttpAuthentication::Basic.encode_credentials(user.username, user.password) + end + + def new_lfs_router(project, user) + Gitlab::Lfs::Router.new(project, user, request) + end + + def header_for_upload_authorize(project) + env["PATH_INFO"] = "#{project.repository.path_with_namespace}.git/gitlab-lfs/objects/#{sample_oid}/#{sample_size}/authorize" + end + + def headers_for_upload_finalize(project) + env["PATH_INFO"] = "#{project.repository.path_with_namespace}.git/gitlab-lfs/objects/#{sample_oid}/#{sample_size}" + env["HTTP_X_GITLAB_LFS_TMP"] = "#{sample_oid}6e561c9d4" + end + + def fork_project(project, user, object = nil) + allow(RepositoryForkWorker).to receive(:perform_async).and_return(true) + Projects::ForkService.new(project, user, {}).execute + end +end diff --git a/spec/lib/gitlab/markdown/sanitization_filter_spec.rb b/spec/lib/gitlab/markdown/sanitization_filter_spec.rb index e50c82d0b3..27cd00e805 100644 --- a/spec/lib/gitlab/markdown/sanitization_filter_spec.rb +++ b/spec/lib/gitlab/markdown/sanitization_filter_spec.rb @@ -44,7 +44,7 @@ module Gitlab::Markdown instance = described_class.new('Foo') 3.times { instance.whitelist } - expect(instance.whitelist[:transformers].size).to eq 4 + expect(instance.whitelist[:transformers].size).to eq 5 end it 'allows syntax highlighting' do @@ -77,19 +77,100 @@ module Gitlab::Markdown end it 'removes `rel` attribute from `a` elements' do - doc = filter(%q{
    Link}) + act = %q{Link} + exp = %q{Link} - expect(doc.css('a').size).to eq 1 - expect(doc.at_css('a')['href']).to eq '#' - expect(doc.at_css('a')['rel']).to be_nil + expect(filter(act).to_html).to eq exp end - it 'removes script-like `href` attribute from `a` elements' do - html = %q{Hi} - doc = filter(html) + # Adapted from the Sanitize test suite: http://git.io/vczrM + protocols = { + 'protocol-based JS injection: simple, no spaces' => { + input: 'foo', + output: 'foo' + }, - expect(doc.css('a').size).to eq 1 - expect(doc.at_css('a')['href']).to be_nil + 'protocol-based JS injection: simple, spaces before' => { + input: 'foo', + output: 'foo' + }, + + 'protocol-based JS injection: simple, spaces after' => { + input: 'foo', + output: 'foo' + }, + + 'protocol-based JS injection: simple, spaces before and after' => { + input: 'foo', + output: 'foo' + }, + + 'protocol-based JS injection: preceding colon' => { + input: 'foo', + output: 'foo' + }, + + 'protocol-based JS injection: UTF-8 encoding' => { + input: 'foo', + output: 'foo' + }, + + 'protocol-based JS injection: long UTF-8 encoding' => { + input: 'foo', + output: 'foo' + }, + + 'protocol-based JS injection: long UTF-8 encoding without semicolons' => { + input: 'foo', + output: 'foo' + }, + + 'protocol-based JS injection: hex encoding' => { + input: 'foo', + output: 'foo' + }, + + 'protocol-based JS injection: long hex encoding' => { + input: 'foo', + output: 'foo' + }, + + 'protocol-based JS injection: hex encoding without semicolons' => { + input: 'foo', + output: 'foo' + }, + + 'protocol-based JS injection: null char' => { + input: "foo", + output: '' + }, + + 'protocol-based JS injection: spaces and entities' => { + input: 'foo', + output: 'foo' + }, + } + + protocols.each do |name, data| + it "handles #{name}" do + doc = filter(data[:input]) + + expect(doc.to_html).to eq data[:output] + end + end + + it 'allows non-standard anchor schemes' do + exp = %q{IRC} + act = filter(exp) + + expect(act.to_html).to eq exp + end + + it 'allows relative links' do + exp = %q{foo/bar.md} + act = filter(exp) + + expect(act.to_html).to eq exp end end diff --git a/spec/lib/gitlab/project_search_results_spec.rb b/spec/lib/gitlab/project_search_results_spec.rb index 32a25f08ca..19327ac8ce 100644 --- a/spec/lib/gitlab/project_search_results_spec.rb +++ b/spec/lib/gitlab/project_search_results_spec.rb @@ -9,7 +9,7 @@ describe Gitlab::ProjectSearchResults do it { expect(results.project).to eq(project) } it { expect(results.repository_ref).to be_nil } - it { expect(results.query).to eq('hello\\ world') } + it { expect(results.query).to eq('hello world') } end describe 'initialize with ref' do @@ -18,6 +18,6 @@ describe Gitlab::ProjectSearchResults do it { expect(results.project).to eq(project) } it { expect(results.repository_ref).to eq(ref) } - it { expect(results.query).to eq('hello\\ world') } + it { expect(results.query).to eq('hello world') } end end diff --git a/spec/lib/gitlab/push_data_builder_spec.rb b/spec/lib/gitlab/push_data_builder_spec.rb index 1b8ba7b4d4..0271074262 100644 --- a/spec/lib/gitlab/push_data_builder_spec.rb +++ b/spec/lib/gitlab/push_data_builder_spec.rb @@ -17,6 +17,9 @@ describe 'Gitlab::PushDataBuilder' do it { expect(data[:repository][:git_ssh_url]).to eq(project.ssh_url_to_repo) } it { expect(data[:repository][:visibility_level]).to eq(project.visibility_level) } it { expect(data[:total_commits_count]).to eq(3) } + it { expect(data[:added]).to eq(["gitlab-grack"]) } + it { expect(data[:modified]).to eq([".gitmodules", "files/ruby/popen.rb", "files/ruby/regex.rb"]) } + it { expect(data[:removed]).to eq([]) } end describe :build do @@ -35,5 +38,8 @@ describe 'Gitlab::PushDataBuilder' do it { expect(data[:ref]).to eq('refs/tags/v1.1.0') } it { expect(data[:commits]).to be_empty } it { expect(data[:total_commits_count]).to be_zero } + it { expect(data[:added]).to eq([]) } + it { expect(data[:modified]).to eq([]) } + it { expect(data[:removed]).to eq([]) } end end diff --git a/spec/lib/gitlab/sherlock/collection_spec.rb b/spec/lib/gitlab/sherlock/collection_spec.rb new file mode 100644 index 0000000000..a8a9d6fc7b --- /dev/null +++ b/spec/lib/gitlab/sherlock/collection_spec.rb @@ -0,0 +1,82 @@ +require 'spec_helper' + +describe Gitlab::Sherlock::Collection do + let(:collection) { described_class.new } + + let(:transaction) do + Gitlab::Sherlock::Transaction.new('POST', '/cat_pictures') + end + + describe '#add' do + it 'adds a new transaction' do + collection.add(transaction) + + expect(collection).to_not be_empty + end + + it 'is aliased as <<' do + collection << transaction + + expect(collection).to_not be_empty + end + end + + describe '#each' do + it 'iterates over every transaction' do + collection.add(transaction) + + expect { |b| collection.each(&b) }.to yield_with_args(transaction) + end + end + + describe '#clear' do + it 'removes all transactions' do + collection.add(transaction) + + collection.clear + + expect(collection).to be_empty + end + end + + describe '#empty?' do + it 'returns true for an empty collection' do + expect(collection).to be_empty + end + + it 'returns false for a collection with a transaction' do + collection.add(transaction) + + expect(collection).to_not be_empty + end + end + + describe '#find_transaction' do + it 'returns the transaction for the given ID' do + collection.add(transaction) + + expect(collection.find_transaction(transaction.id)).to eq(transaction) + end + + it 'returns nil when no transaction could be found' do + collection.add(transaction) + + expect(collection.find_transaction('cats')).to be_nil + end + end + + describe '#newest_first' do + it 'returns transactions sorted from new to old' do + trans1 = Gitlab::Sherlock::Transaction.new('POST', '/cat_pictures') + trans2 = Gitlab::Sherlock::Transaction.new('POST', '/more_cat_pictures') + + allow(trans1).to receive(:finished_at).and_return(Time.utc(2015, 1, 1)) + allow(trans2).to receive(:finished_at).and_return(Time.utc(2015, 1, 2)) + + collection.add(trans1) + collection.add(trans2) + + expect(collection.newest_first).to eq([trans2, trans1]) + end + end +end diff --git a/spec/lib/gitlab/sherlock/file_sample_spec.rb b/spec/lib/gitlab/sherlock/file_sample_spec.rb new file mode 100644 index 0000000000..f05a59f56f --- /dev/null +++ b/spec/lib/gitlab/sherlock/file_sample_spec.rb @@ -0,0 +1,54 @@ +require 'spec_helper' + +describe Gitlab::Sherlock::FileSample do + let(:sample) { described_class.new(__FILE__, [], 150.4, 2) } + + describe '#id' do + it 'returns the ID' do + expect(sample.id).to be_an_instance_of(String) + end + end + + describe '#file' do + it 'returns the file path' do + expect(sample.file).to eq(__FILE__) + end + end + + describe '#line_samples' do + it 'returns the line samples' do + expect(sample.line_samples).to eq([]) + end + end + + describe '#events' do + it 'returns the total number of events' do + expect(sample.events).to eq(2) + end + end + + describe '#duration' do + it 'returns the total execution time' do + expect(sample.duration).to eq(150.4) + end + end + + describe '#relative_path' do + it 'returns the relative path' do + expect(sample.relative_path). + to eq('spec/lib/gitlab/sherlock/file_sample_spec.rb') + end + end + + describe '#to_param' do + it 'returns the sample ID' do + expect(sample.to_param).to eq(sample.id) + end + end + + describe '#source' do + it 'returns the contents of the file' do + expect(sample.source).to eq(File.read(__FILE__)) + end + end +end diff --git a/spec/lib/gitlab/sherlock/line_profiler_spec.rb b/spec/lib/gitlab/sherlock/line_profiler_spec.rb new file mode 100644 index 0000000000..8f2e129971 --- /dev/null +++ b/spec/lib/gitlab/sherlock/line_profiler_spec.rb @@ -0,0 +1,73 @@ +require 'spec_helper' + +describe Gitlab::Sherlock::LineProfiler do + let(:profiler) { described_class.new } + + describe '#profile' do + it 'runs the profiler when using MRI' do + allow(profiler).to receive(:mri?).and_return(true) + allow(profiler).to receive(:profile_mri) + + profiler.profile { 'cats' } + end + + it 'raises NotImplementedError when profiling an unsupported platform' do + allow(profiler).to receive(:mri?).and_return(false) + + expect { profiler.profile { 'cats' } }.to raise_error(NotImplementedError) + end + end + + describe '#profile_mri' do + it 'returns an Array containing the return value and profiling samples' do + allow(profiler).to receive(:lineprof). + and_yield. + and_return({ __FILE__ => [[0, 0, 0, 0]] }) + + retval, samples = profiler.profile_mri { 42 } + + expect(retval).to eq(42) + expect(samples).to eq([]) + end + end + + describe '#aggregate_rblineprof' do + let(:raw_samples) do + { __FILE__ => [[30000, 30000, 5, 0], [15000, 15000, 4, 0]] } + end + + it 'returns an Array of FileSample objects' do + samples = profiler.aggregate_rblineprof(raw_samples) + + expect(samples).to be_an_instance_of(Array) + expect(samples[0]).to be_an_instance_of(Gitlab::Sherlock::FileSample) + end + + describe 'the first FileSample object' do + let(:file_sample) do + profiler.aggregate_rblineprof(raw_samples)[0] + end + + it 'uses the correct file path' do + expect(file_sample.file).to eq(__FILE__) + end + + it 'contains a list of line samples' do + line_sample = file_sample.line_samples[0] + + expect(line_sample).to be_an_instance_of(Gitlab::Sherlock::LineSample) + + expect(line_sample.duration).to eq(15.0) + expect(line_sample.events).to eq(4) + end + + it 'contains the total file execution time' do + expect(file_sample.duration).to eq(30.0) + end + + it 'contains the total amount of file events' do + expect(file_sample.events).to eq(5) + end + end + end +end diff --git a/spec/lib/gitlab/sherlock/line_sample_spec.rb b/spec/lib/gitlab/sherlock/line_sample_spec.rb new file mode 100644 index 0000000000..5f02f6a321 --- /dev/null +++ b/spec/lib/gitlab/sherlock/line_sample_spec.rb @@ -0,0 +1,33 @@ +require 'spec_helper' + +describe Gitlab::Sherlock::LineSample do + let(:sample) { described_class.new(150.0, 4) } + + describe '#duration' do + it 'returns the duration' do + expect(sample.duration).to eq(150.0) + end + end + + describe '#events' do + it 'returns the amount of events' do + expect(sample.events).to eq(4) + end + end + + describe '#percentage_of' do + it 'returns the percentage of 1500.0' do + expect(sample.percentage_of(1500.0)).to be_within(0.1).of(10.0) + end + end + + describe '#majority_of' do + it 'returns true if the sample takes up the majority of the given duration' do + expect(sample.majority_of?(500.0)).to eq(true) + end + + it "returns false if the sample doesn't take up the majority of the given duration" do + expect(sample.majority_of?(1500.0)).to eq(false) + end + end +end diff --git a/spec/lib/gitlab/sherlock/location_spec.rb b/spec/lib/gitlab/sherlock/location_spec.rb new file mode 100644 index 0000000000..b295a624b3 --- /dev/null +++ b/spec/lib/gitlab/sherlock/location_spec.rb @@ -0,0 +1,40 @@ +require 'spec_helper' + +describe Gitlab::Sherlock::Location do + let(:location) { described_class.new(__FILE__, 1) } + + describe 'from_ruby_location' do + it 'creates a Location from a Thread::Backtrace::Location' do + input = caller_locations[0] + output = described_class.from_ruby_location(input) + + expect(output).to be_an_instance_of(described_class) + expect(output.path).to eq(input.path) + expect(output.line).to eq(input.lineno) + end + end + + describe '#path' do + it 'returns the file path' do + expect(location.path).to eq(__FILE__) + end + end + + describe '#line' do + it 'returns the line number' do + expect(location.line).to eq(1) + end + end + + describe '#application?' do + it 'returns true for an application frame' do + expect(location.application?).to eq(true) + end + + it 'returns false for a non application frame' do + loc = described_class.new('/tmp/cats.rb', 1) + + expect(loc.application?).to eq(false) + end + end +end diff --git a/spec/lib/gitlab/sherlock/middleware_spec.rb b/spec/lib/gitlab/sherlock/middleware_spec.rb new file mode 100644 index 0000000000..aa74fc53a7 --- /dev/null +++ b/spec/lib/gitlab/sherlock/middleware_spec.rb @@ -0,0 +1,79 @@ +require 'spec_helper' + +describe Gitlab::Sherlock::Middleware do + let(:app) { double(:app) } + let(:middleware) { described_class.new(app) } + + describe '#call' do + describe 'when instrumentation is enabled' do + it 'instruments a request' do + allow(middleware).to receive(:instrument?).and_return(true) + allow(middleware).to receive(:call_with_instrumentation) + + middleware.call({}) + end + end + + describe 'when instrumentation is disabled' do + it "doesn't instrument a request" do + allow(middleware).to receive(:instrument).and_return(false) + allow(app).to receive(:call) + + middleware.call({}) + end + end + end + + describe '#call_with_instrumentation' do + it 'instruments a request' do + trans = double(:transaction) + retval = 'cats are amazing' + env = {} + + allow(app).to receive(:call).with(env).and_return(retval) + allow(middleware).to receive(:transaction_from_env).and_return(trans) + allow(trans).to receive(:run).and_yield.and_return(retval) + allow(Gitlab::Sherlock.collection).to receive(:add).with(trans) + + middleware.call_with_instrumentation(env) + end + end + + describe '#instrument?' do + it 'returns false for a text/css request' do + env = { 'HTTP_ACCEPT' => 'text/css', 'REQUEST_URI' => '/' } + + expect(middleware.instrument?(env)).to eq(false) + end + + it 'returns false for a request to a Sherlock route' do + env = { + 'HTTP_ACCEPT' => 'text/html', + 'REQUEST_URI' => '/sherlock/transactions' + } + + expect(middleware.instrument?(env)).to eq(false) + end + + it 'returns true for a request that should be instrumented' do + env = { + 'HTTP_ACCEPT' => 'text/html', + 'REQUEST_URI' => '/cats' + } + + expect(middleware.instrument?(env)).to eq(true) + end + end + + describe '#transaction_from_env' do + it 'returns a Transaction' do + env = { + 'HTTP_ACCEPT' => 'text/html', + 'REQUEST_URI' => '/cats' + } + + expect(middleware.transaction_from_env(env)). + to be_an_instance_of(Gitlab::Sherlock::Transaction) + end + end +end diff --git a/spec/lib/gitlab/sherlock/query_spec.rb b/spec/lib/gitlab/sherlock/query_spec.rb new file mode 100644 index 0000000000..a9afef5dc1 --- /dev/null +++ b/spec/lib/gitlab/sherlock/query_spec.rb @@ -0,0 +1,113 @@ +require 'spec_helper' + +describe Gitlab::Sherlock::Query do + let(:started_at) { Time.utc(2015, 1, 1) } + let(:finished_at) { started_at + 5 } + + let(:query) do + described_class.new('SELECT COUNT(*) FROM users', started_at, finished_at) + end + + describe 'new_with_bindings' do + it 'returns a Query' do + sql = 'SELECT COUNT(*) FROM users WHERE id = $1' + bindings = [[double(:column), 10]] + + query = described_class. + new_with_bindings(sql, bindings, started_at, finished_at) + + expect(query.query).to eq('SELECT COUNT(*) FROM users WHERE id = 10;') + end + end + + describe '#id' do + it 'returns a String' do + expect(query.id).to be_an_instance_of(String) + end + end + + describe '#query' do + it 'returns the query with a trailing semi-colon' do + expect(query.query).to eq('SELECT COUNT(*) FROM users;') + end + end + + describe '#started_at' do + it 'returns the start time' do + expect(query.started_at).to eq(started_at) + end + end + + describe '#finished_at' do + it 'returns the completion time' do + expect(query.finished_at).to eq(finished_at) + end + end + + describe '#backtrace' do + it 'returns the backtrace' do + expect(query.backtrace).to be_an_instance_of(Array) + end + end + + describe '#duration' do + it 'returns the duration in milliseconds' do + expect(query.duration).to be_within(0.1).of(5000.0) + end + end + + describe '#to_param' do + it 'returns the query ID' do + expect(query.to_param).to eq(query.id) + end + end + + describe '#formatted_query' do + it 'returns a formatted version of the query' do + expect(query.formatted_query).to eq(<<-EOF.strip) +SELECT COUNT(*) +FROM users; + EOF + end + end + + describe '#last_application_frame' do + it 'returns the last application frame' do + frame = query.last_application_frame + + expect(frame).to be_an_instance_of(Gitlab::Sherlock::Location) + expect(frame.path).to eq(__FILE__) + end + end + + describe '#application_backtrace' do + it 'returns an Array of application frames' do + frames = query.application_backtrace + + expect(frames).to be_an_instance_of(Array) + expect(frames).to_not be_empty + + frames.each do |frame| + expect(frame.path).to start_with(Rails.root.to_s) + end + end + end + + describe '#explain' do + it 'returns the query plan as a String' do + lines = [ + ['Aggregate (cost=123 rows=1)'], + [' -> Index Only Scan using index_cats_are_amazing'] + ] + + result = double(:result, values: lines) + + allow(query).to receive(:raw_explain).and_return(result) + + expect(query.explain).to eq(<<-EOF.strip) +Aggregate (cost=123 rows=1) + -> Index Only Scan using index_cats_are_amazing + EOF + end + end +end diff --git a/spec/lib/gitlab/sherlock/transaction_spec.rb b/spec/lib/gitlab/sherlock/transaction_spec.rb new file mode 100644 index 0000000000..bb49fb65cf --- /dev/null +++ b/spec/lib/gitlab/sherlock/transaction_spec.rb @@ -0,0 +1,222 @@ +require 'spec_helper' + +describe Gitlab::Sherlock::Transaction do + let(:transaction) { described_class.new('POST', '/cat_pictures') } + + describe '#id' do + it 'returns the transaction ID' do + expect(transaction.id).to be_an_instance_of(String) + end + end + + describe '#type' do + it 'returns the type' do + expect(transaction.type).to eq('POST') + end + end + + describe '#path' do + it 'returns the path' do + expect(transaction.path).to eq('/cat_pictures') + end + end + + describe '#queries' do + it 'returns an Array of queries' do + expect(transaction.queries).to be_an_instance_of(Array) + end + end + + describe '#file_samples' do + it 'returns an Array of file samples' do + expect(transaction.file_samples).to be_an_instance_of(Array) + end + end + + describe '#started_at' do + it 'returns the start time' do + allow(transaction).to receive(:profile_lines).and_yield + + transaction.run { 'cats are amazing' } + + expect(transaction.started_at).to be_an_instance_of(Time) + end + end + + describe '#finished_at' do + it 'returns the completion time' do + allow(transaction).to receive(:profile_lines).and_yield + + transaction.run { 'cats are amazing' } + + expect(transaction.finished_at).to be_an_instance_of(Time) + end + end + + describe '#view_counts' do + it 'returns a Hash' do + expect(transaction.view_counts).to be_an_instance_of(Hash) + end + + it 'sets the default value of a key to 0' do + expect(transaction.view_counts['cats.rb']).to be_zero + end + end + + describe '#run' do + it 'runs the transaction' do + allow(transaction).to receive(:profile_lines).and_yield + + retval = transaction.run { 'cats are amazing' } + + expect(retval).to eq('cats are amazing') + end + end + + describe '#duration' do + it 'returns the duration in seconds' do + start_time = Time.now + + allow(transaction).to receive(:started_at).and_return(start_time) + allow(transaction).to receive(:finished_at).and_return(start_time + 5) + + expect(transaction.duration).to be_within(0.1).of(5.0) + end + end + + describe '#to_param' do + it 'returns the transaction ID' do + expect(transaction.to_param).to eq(transaction.id) + end + end + + describe '#sorted_queries' do + it 'returns the queries in descending order' do + start_time = Time.now + + query1 = Gitlab::Sherlock::Query.new('SELECT 1', start_time, start_time) + + query2 = Gitlab::Sherlock::Query. + new('SELECT 2', start_time, start_time + 5) + + transaction.queries << query1 + transaction.queries << query2 + + expect(transaction.sorted_queries).to eq([query2, query1]) + end + end + + describe '#sorted_file_samples' do + it 'returns the file samples in descending order' do + sample1 = Gitlab::Sherlock::FileSample.new(__FILE__, [], 10.0, 1) + sample2 = Gitlab::Sherlock::FileSample.new(__FILE__, [], 15.0, 1) + + transaction.file_samples << sample1 + transaction.file_samples << sample2 + + expect(transaction.sorted_file_samples).to eq([sample2, sample1]) + end + end + + describe '#find_query' do + it 'returns a Query when found' do + query = Gitlab::Sherlock::Query.new('SELECT 1', Time.now, Time.now) + + transaction.queries << query + + expect(transaction.find_query(query.id)).to eq(query) + end + + it 'returns nil when no query could be found' do + expect(transaction.find_query('cats')).to be_nil + end + end + + describe '#find_file_sample' do + it 'returns a FileSample when found' do + sample = Gitlab::Sherlock::FileSample.new(__FILE__, [], 10.0, 1) + + transaction.file_samples << sample + + expect(transaction.find_file_sample(sample.id)).to eq(sample) + end + + it 'returns nil when no file sample could be found' do + expect(transaction.find_file_sample('cats')).to be_nil + end + end + + describe '#profile_lines' do + describe 'when line profiling is enabled' do + it 'yields the block using the line profiler' do + allow(Gitlab::Sherlock).to receive(:enable_line_profiler?). + and_return(true) + + allow_any_instance_of(Gitlab::Sherlock::LineProfiler). + to receive(:profile).and_return('cats are amazing', []) + + retval = transaction.profile_lines { 'cats are amazing' } + + expect(retval).to eq('cats are amazing') + end + end + + describe 'when line profiling is disabled' do + it 'yields the block' do + allow(Gitlab::Sherlock).to receive(:enable_line_profiler?). + and_return(false) + + retval = transaction.profile_lines { 'cats are amazing' } + + expect(retval).to eq('cats are amazing') + end + end + end + + describe '#subscribe_to_active_record' do + let(:subscription) { transaction.subscribe_to_active_record } + let(:time) { Time.now } + let(:query_data) { { sql: 'SELECT 1', binds: [] } } + + after do + ActiveSupport::Notifications.unsubscribe(subscription) + end + + it 'tracks executed queries' do + expect(transaction).to receive(:track_query). + with('SELECT 1', [], time, time) + + subscription.publish('test', time, time, nil, query_data) + end + + it 'only tracks queries triggered from the transaction thread' do + expect(transaction).to_not receive(:track_query) + + Thread.new { subscription.publish('test', time, time, nil, query_data) }. + join + end + end + + describe '#subscribe_to_action_view' do + let(:subscription) { transaction.subscribe_to_action_view } + let(:time) { Time.now } + let(:view_data) { { identifier: 'foo.rb' } } + + after do + ActiveSupport::Notifications.unsubscribe(subscription) + end + + it 'tracks rendered views' do + expect(transaction).to receive(:track_view).with('foo.rb') + + subscription.publish('test', time, time, nil, view_data) + end + + it 'only tracks views rendered from the transaction thread' do + expect(transaction).to_not receive(:track_view) + + Thread.new { subscription.publish('test', time, time, nil, view_data) }. + join + end + end +end diff --git a/spec/lib/gitlab/sql/union_spec.rb b/spec/lib/gitlab/sql/union_spec.rb new file mode 100644 index 0000000000..9e1cd4419e --- /dev/null +++ b/spec/lib/gitlab/sql/union_spec.rb @@ -0,0 +1,16 @@ +require 'spec_helper' + +describe Gitlab::SQL::Union do + describe '#to_sql' do + it 'returns a String joining relations together using a UNION' do + rel1 = User.where(email: 'alice@example.com') + rel2 = User.where(email: 'bob@example.com') + union = described_class.new([rel1, rel2]) + + sql1 = rel1.reorder(nil).to_sql + sql2 = rel2.reorder(nil).to_sql + + expect(union.to_sql).to eq("#{sql1}\nUNION\n#{sql2}") + end + end +end diff --git a/spec/lib/votes_spec.rb b/spec/lib/votes_spec.rb deleted file mode 100644 index 39e5d054e6..0000000000 --- a/spec/lib/votes_spec.rb +++ /dev/null @@ -1,188 +0,0 @@ -require 'spec_helper' - -describe Issue, 'Votes' do - let(:issue) { create(:issue) } - - describe "#upvotes" do - it "with no notes has a 0/0 score" do - expect(issue.upvotes).to eq(0) - end - - it "should recognize non-+1 notes" do - add_note "No +1 here" - expect(issue.notes.size).to eq(1) - expect(issue.notes.first.upvote?).to be_falsey - expect(issue.upvotes).to eq(0) - end - - it "should recognize a single +1 note" do - add_note "+1 This is awesome" - expect(issue.upvotes).to eq(1) - end - - it 'should recognize multiple +1 notes' do - add_note '+1 This is awesome', create(:user) - add_note '+1 I want this', create(:user) - expect(issue.upvotes).to eq(2) - end - - it 'should not count 2 +1 votes from the same user' do - add_note '+1 This is awesome' - add_note '+1 I want this' - expect(issue.upvotes).to eq(1) - end - end - - describe "#downvotes" do - it "with no notes has a 0/0 score" do - expect(issue.downvotes).to eq(0) - end - - it "should recognize non--1 notes" do - add_note "Almost got a -1" - expect(issue.notes.size).to eq(1) - expect(issue.notes.first.downvote?).to be_falsey - expect(issue.downvotes).to eq(0) - end - - it "should recognize a single -1 note" do - add_note "-1 This is bad" - expect(issue.downvotes).to eq(1) - end - - it "should recognize multiple -1 notes" do - add_note('-1 This is bad', create(:user)) - add_note('-1 Away with this', create(:user)) - expect(issue.downvotes).to eq(2) - end - end - - describe "#votes_count" do - it "with no notes has a 0/0 score" do - expect(issue.votes_count).to eq(0) - end - - it "should recognize non notes" do - add_note "No +1 here" - expect(issue.notes.size).to eq(1) - expect(issue.votes_count).to eq(0) - end - - it "should recognize a single +1 note" do - add_note "+1 This is awesome" - expect(issue.votes_count).to eq(1) - end - - it "should recognize a single -1 note" do - add_note "-1 This is bad" - expect(issue.votes_count).to eq(1) - end - - it "should recognize multiple notes" do - add_note('+1 This is awesome', create(:user)) - add_note('-1 This is bad', create(:user)) - add_note('+1 I want this', create(:user)) - expect(issue.votes_count).to eq(3) - end - - it 'should not count 2 -1 votes from the same user' do - add_note '-1 This is suspicious' - add_note '-1 This is bad' - expect(issue.votes_count).to eq(1) - end - end - - describe "#upvotes_in_percent" do - it "with no notes has a 0% score" do - expect(issue.upvotes_in_percent).to eq(0) - end - - it "should count a single 1 note as 100%" do - add_note "+1 This is awesome" - expect(issue.upvotes_in_percent).to eq(100) - end - - it 'should count multiple +1 notes as 100%' do - add_note('+1 This is awesome', create(:user)) - add_note('+1 I want this', create(:user)) - expect(issue.upvotes_in_percent).to eq(100) - end - - it 'should count fractions for multiple +1 and -1 notes correctly' do - add_note('+1 This is awesome', create(:user)) - add_note('+1 I want this', create(:user)) - add_note('-1 This is bad', create(:user)) - add_note('+1 me too', create(:user)) - expect(issue.upvotes_in_percent).to eq(75) - end - end - - describe "#downvotes_in_percent" do - it "with no notes has a 0% score" do - expect(issue.downvotes_in_percent).to eq(0) - end - - it "should count a single -1 note as 100%" do - add_note "-1 This is bad" - expect(issue.downvotes_in_percent).to eq(100) - end - - it 'should count multiple -1 notes as 100%' do - add_note('-1 This is bad', create(:user)) - add_note('-1 Away with this', create(:user)) - expect(issue.downvotes_in_percent).to eq(100) - end - - it 'should count fractions for multiple +1 and -1 notes correctly' do - add_note('+1 This is awesome', create(:user)) - add_note('+1 I want this', create(:user)) - add_note('-1 This is bad', create(:user)) - add_note('+1 me too', create(:user)) - expect(issue.downvotes_in_percent).to eq(25) - end - end - - describe '#filter_superceded_votes' do - - it 'should count a users vote only once amongst multiple votes' do - add_note('-1 This needs work before I will accept it') - add_note('+1 I want this', create(:user)) - add_note('+1 This is is awesome', create(:user)) - add_note('+1 this looks good now') - add_note('+1 This is awesome', create(:user)) - add_note('+1 me too', create(:user)) - expect(issue.downvotes).to eq(0) - expect(issue.upvotes).to eq(5) - end - - it 'should count each users vote only once' do - add_note '-1 This needs work before it will be accepted' - add_note '+1 I like this' - add_note '+1 I still like this' - add_note '+1 I really like this' - add_note '+1 Give me this now!!!!' - expect(issue.downvotes).to eq(0) - expect(issue.upvotes).to eq(1) - end - - it 'should count a users vote only once without caring about comments' do - add_note '-1 This needs work before it will be accepted' - add_note 'Comment 1' - add_note 'Another comment' - add_note '+1 vote' - add_note 'final comment' - expect(issue.downvotes).to eq(0) - expect(issue.upvotes).to eq(1) - end - - end - - def add_note(text, author = issue.author) - created_at = Time.now - 1.hour + Note.count.seconds - issue.notes << create(:note, - note: text, - project: issue.project, - author_id: author.id, - created_at: created_at) - end -end diff --git a/spec/mailers/notify_spec.rb b/spec/mailers/notify_spec.rb index cb67ec95d5..47863d5457 100644 --- a/spec/mailers/notify_spec.rb +++ b/spec/mailers/notify_spec.rb @@ -468,7 +468,7 @@ describe Notify do subject { Notify.note_commit_email(recipient.id, note.id) } it_behaves_like 'a note email' - it_behaves_like 'an answer to an existing thread', 'commits' + it_behaves_like 'an answer to an existing thread', 'commit' it 'has the correct subject' do is_expected.to have_subject /#{commit.title} \(#{commit.short_id}\)/ diff --git a/spec/models/application_setting_spec.rb b/spec/models/application_setting_spec.rb index de0b2ef4cd..dfbac7b400 100644 --- a/spec/models/application_setting_spec.rb +++ b/spec/models/application_setting_spec.rb @@ -23,16 +23,20 @@ # after_sign_out_path :string(255) # session_expire_delay :integer default(10080), not null # import_sources :text +# help_page_text :text +# admin_notification_email :string(255) +# shared_runners_enabled :boolean default(TRUE), not null +# max_artifacts_size :integer default(100), not null # require 'spec_helper' describe ApplicationSetting, models: true do - it { expect(ApplicationSetting.create_from_defaults).to be_valid } + let(:setting) { ApplicationSetting.create_from_defaults } + + it { expect(setting).to be_valid } context 'restricted signup domains' do - let(:setting) { ApplicationSetting.create_from_defaults } - it 'set single domain' do setting.restricted_signup_domains_raw = 'example.com' expect(setting.restricted_signup_domains).to eq(['example.com']) @@ -53,4 +57,26 @@ describe ApplicationSetting, models: true do expect(setting.restricted_signup_domains).to eq(['example.com', '*.example.com']) end end + + context 'shared runners' do + let(:gl_project) { create(:empty_project) } + + before do + allow_any_instance_of(Project).to receive(:current_application_settings).and_return(setting) + end + + subject { gl_project.ensure_gitlab_ci_project.shared_runners_enabled } + + context 'enabled' do + before { setting.update_attributes(shared_runners_enabled: true) } + + it { is_expected.to be_truthy } + end + + context 'disabled' do + before { setting.update_attributes(shared_runners_enabled: false) } + + it { is_expected.to be_falsey } + end + end end diff --git a/spec/models/build_spec.rb b/spec/models/build_spec.rb index 7f5abb83ac..839b4c6b16 100644 --- a/spec/models/build_spec.rb +++ b/spec/models/build_spec.rb @@ -400,4 +400,19 @@ describe Ci::Build do end end end + + describe :download_url do + subject { build.download_url } + + it "should be nil if artifact doesn't exist" do + build.update_attributes(artifacts_file: nil) + is_expected.to be_nil + end + + it 'should be nil if artifact exist' do + gif = fixture_file_upload(Rails.root + 'spec/fixtures/banana_sample.gif', 'image/gif') + build.update_attributes(artifacts_file: gif) + is_expected.to_not be_nil + end + end end diff --git a/spec/models/ci/commit_spec.rb b/spec/models/ci/commit_spec.rb index 44dbd083f0..a13f6458ca 100644 --- a/spec/models/ci/commit_spec.rb +++ b/spec/models/ci/commit_spec.rb @@ -1,18 +1,19 @@ # == Schema Information # -# Table name: commits +# Table name: ci_commits # -# id :integer not null, primary key -# project_id :integer -# ref :string(255) -# sha :string(255) -# before_sha :string(255) -# push_data :text -# created_at :datetime -# updated_at :datetime -# tag :boolean default(FALSE) -# yaml_errors :text -# committed_at :datetime +# id :integer not null, primary key +# project_id :integer +# ref :string(255) +# sha :string(255) +# before_sha :string(255) +# push_data :text +# created_at :datetime +# updated_at :datetime +# tag :boolean default(FALSE) +# yaml_errors :text +# committed_at :datetime +# gl_project_id :integer # require 'spec_helper' diff --git a/spec/models/ci/project_spec.rb b/spec/models/ci/project_spec.rb index 490c6a6798..ac7e38bbcb 100644 --- a/spec/models/ci/project_spec.rb +++ b/spec/models/ci/project_spec.rb @@ -1,9 +1,9 @@ # == Schema Information # -# Table name: projects +# Table name: ci_projects # # id :integer not null, primary key -# name :string(255) not null +# name :string(255) # timeout :integer default(3600), not null # created_at :datetime # updated_at :datetime @@ -28,8 +28,8 @@ require 'spec_helper' describe Ci::Project do - let(:gl_project) { FactoryGirl.create :empty_project } - let(:project) { FactoryGirl.create :ci_project, gl_project: gl_project } + let(:project) { FactoryGirl.create :ci_project } + let(:gl_project) { project.gl_project } subject { project } it { is_expected.to have_many(:runner_projects) } @@ -194,18 +194,6 @@ describe Ci::Project do end end - describe 'Project.parse' do - let(:project) { FactoryGirl.create :project } - - subject { Ci::Project.parse(project) } - - it { is_expected.to be_valid } - it { is_expected.to be_kind_of(Ci::Project) } - it { expect(subject.name).to eq(project.name_with_namespace) } - it { expect(subject.gitlab_id).to eq(project.id) } - it { expect(subject.gitlab_url).to eq(project.web_url) } - end - describe :repo_url_with_auth do let(:project) { FactoryGirl.create :ci_project } subject { project.repo_url_with_auth } diff --git a/spec/models/ci/runner_project_spec.rb b/spec/models/ci/runner_project_spec.rb index 0218d48413..37682c6ea0 100644 --- a/spec/models/ci/runner_project_spec.rb +++ b/spec/models/ci/runner_project_spec.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: runner_projects +# Table name: ci_runner_projects # # id :integer not null, primary key # runner_id :integer not null diff --git a/spec/models/ci/runner_spec.rb b/spec/models/ci/runner_spec.rb index f8a51c29dc..9a1233b909 100644 --- a/spec/models/ci/runner_spec.rb +++ b/spec/models/ci/runner_spec.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: runners +# Table name: ci_runners # # id :integer not null, primary key # token :string(255) diff --git a/spec/models/ci/service_spec.rb b/spec/models/ci/service_spec.rb index 2df70e8888..36cda988eb 100644 --- a/spec/models/ci/service_spec.rb +++ b/spec/models/ci/service_spec.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: services +# Table name: ci_services # # id :integer not null, primary key # type :string(255) diff --git a/spec/models/ci/trigger_spec.rb b/spec/models/ci/trigger_spec.rb index 19c14ef2da..b8aa3c1e77 100644 --- a/spec/models/ci/trigger_spec.rb +++ b/spec/models/ci/trigger_spec.rb @@ -1,3 +1,15 @@ +# == Schema Information +# +# Table name: ci_triggers +# +# id :integer not null, primary key +# token :string(255) +# project_id :integer not null +# deleted_at :datetime +# created_at :datetime +# updated_at :datetime +# + require 'spec_helper' describe Ci::Trigger do diff --git a/spec/models/ci/variable_spec.rb b/spec/models/ci/variable_spec.rb index d034a6c7b9..a515f5881f 100644 --- a/spec/models/ci/variable_spec.rb +++ b/spec/models/ci/variable_spec.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: variables +# Table name: ci_variables # # id :integer not null, primary key # project_id :integer not null diff --git a/spec/models/ci/web_hook_spec.rb b/spec/models/ci/web_hook_spec.rb index bf9481ab81..2865482a21 100644 --- a/spec/models/ci/web_hook_spec.rb +++ b/spec/models/ci/web_hook_spec.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: web_hooks +# Table name: ci_web_hooks # # id :integer not null, primary key # url :string(255) not null diff --git a/spec/models/commit_status_spec.rb b/spec/models/commit_status_spec.rb index c96a606fda..dca0715eed 100644 --- a/spec/models/commit_status_spec.rb +++ b/spec/models/commit_status_spec.rb @@ -1,3 +1,36 @@ +# == Schema Information +# +# Table name: ci_builds +# +# id :integer not null, primary key +# project_id :integer +# status :string(255) +# finished_at :datetime +# trace :text +# created_at :datetime +# updated_at :datetime +# started_at :datetime +# runner_id :integer +# coverage :float +# commit_id :integer +# commands :text +# job_id :integer +# name :string(255) +# deploy :boolean default(FALSE) +# options :text +# allow_failure :boolean default(FALSE), not null +# stage :string(255) +# trigger_request_id :integer +# stage_idx :integer +# tag :boolean +# ref :string(255) +# user_id :integer +# type :string(255) +# target_url :string(255) +# description :string(255) +# artifacts_file :text +# + require 'spec_helper' describe CommitStatus do diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb index 0f32f162a1..ae53f7a536 100644 --- a/spec/models/event_spec.rb +++ b/spec/models/event_spec.rb @@ -64,4 +64,42 @@ describe Event do it { expect(@event.branch_name).to eq("master") } it { expect(@event.author).to eq(@user) } end + + describe '.latest_update_time' do + describe 'when events are present' do + let(:time) { Time.utc(2015, 1, 1) } + + before do + create(:closed_issue_event, updated_at: time) + create(:closed_issue_event, updated_at: time + 5) + end + + it 'returns the latest update time' do + expect(Event.latest_update_time).to eq(time + 5) + end + end + + describe 'when no events exist' do + it 'returns nil' do + expect(Event.latest_update_time).to be_nil + end + end + end + + describe '.limit_recent' do + let!(:event1) { create(:closed_issue_event) } + let!(:event2) { create(:closed_issue_event) } + + describe 'without an explicit limit' do + subject { Event.limit_recent } + + it { is_expected.to eq([event2, event1]) } + end + + describe 'with an explicit limit' do + subject { Event.limit_recent(1) } + + it { is_expected.to eq([event2]) } + end + end end diff --git a/spec/models/generic_commit_status_spec.rb b/spec/models/generic_commit_status_spec.rb index f442fa5fbe..c86314c454 100644 --- a/spec/models/generic_commit_status_spec.rb +++ b/spec/models/generic_commit_status_spec.rb @@ -1,3 +1,36 @@ +# == Schema Information +# +# Table name: ci_builds +# +# id :integer not null, primary key +# project_id :integer +# status :string(255) +# finished_at :datetime +# trace :text +# created_at :datetime +# updated_at :datetime +# started_at :datetime +# runner_id :integer +# coverage :float +# commit_id :integer +# commands :text +# job_id :integer +# name :string(255) +# deploy :boolean default(FALSE) +# options :text +# allow_failure :boolean default(FALSE), not null +# stage :string(255) +# trigger_request_id :integer +# stage_idx :integer +# tag :boolean +# ref :string(255) +# user_id :integer +# type :string(255) +# target_url :string(255) +# description :string(255) +# artifacts_file :text +# + require 'spec_helper' describe GenericCommitStatus do diff --git a/spec/models/global_milestone_spec.rb b/spec/models/global_milestone_spec.rb new file mode 100644 index 0000000000..6eeff30b20 --- /dev/null +++ b/spec/models/global_milestone_spec.rb @@ -0,0 +1,65 @@ +require 'spec_helper' + +describe GlobalMilestone do + let(:user) { create(:user) } + let(:user2) { create(:user) } + let(:group) { create(:group) } + let(:project1) { create(:project, group: group) } + let(:project2) { create(:project, path: 'gitlab-ci', group: group) } + let(:project3) { create(:project, path: 'cookbook-gitlab', group: group) } + let(:milestone1_project1) { create(:milestone, title: "Milestone v1.2", project: project1) } + let(:milestone1_project2) { create(:milestone, title: "Milestone v1.2", project: project2) } + let(:milestone1_project3) { create(:milestone, title: "Milestone v1.2", project: project3) } + let(:milestone2_project1) { create(:milestone, title: "VD-123", project: project1) } + let(:milestone2_project2) { create(:milestone, title: "VD-123", project: project2) } + let(:milestone2_project3) { create(:milestone, title: "VD-123", project: project3) } + + describe :build_collection do + before do + milestones = + [ + milestone1_project1, + milestone1_project2, + milestone1_project3, + milestone2_project1, + milestone2_project2, + milestone2_project3 + ] + + @global_milestones = GlobalMilestone.build_collection(milestones) + end + + it 'should have all project milestones' do + expect(@global_milestones.count).to eq(2) + end + + it 'should have all project milestones titles' do + expect(@global_milestones.map(&:title)).to match_array(['Milestone v1.2', 'VD-123']) + end + + it 'should have all project milestones' do + expect(@global_milestones.map { |group_milestone| group_milestone.milestones.count }.sum).to eq(6) + end + end + + describe :initialize do + before do + milestones = + [ + milestone1_project1, + milestone1_project2, + milestone1_project3, + ] + + @global_milestone = GlobalMilestone.new(milestone1_project1.title, milestones) + end + + it 'should have exactly one group milestone' do + expect(@global_milestone.title).to eq('Milestone v1.2') + end + + it 'should have all project milestones with the same title' do + expect(@global_milestone.milestones.count).to eq(3) + end + end +end diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb index 80638fc8db..6f166b5ab7 100644 --- a/spec/models/group_spec.rb +++ b/spec/models/group_spec.rb @@ -11,6 +11,7 @@ # type :string(255) # description :string(255) default(""), not null # avatar :string(255) +# public :boolean default(FALSE) # require 'spec_helper' @@ -37,6 +38,33 @@ describe Group do it { is_expected.not_to validate_presence_of :owner } end + describe '.public_and_given_groups' do + let!(:public_group) { create(:group, public: true) } + + subject { described_class.public_and_given_groups([group.id]) } + + it { is_expected.to eq([public_group, group]) } + end + + describe '.visible_to_user' do + let!(:group) { create(:group) } + let!(:user) { create(:user) } + + subject { described_class.visible_to_user(user) } + + describe 'when the user has access to a group' do + before do + group.add_user(user, Gitlab::Access::MASTER) + end + + it { is_expected.to eq([group]) } + end + + describe 'when the user does not have access to any groups' do + it { is_expected.to eq([]) } + end + end + describe '#to_reference' do it 'returns a String reference to the object' do expect(group.to_reference).to eq "@#{group.name}" @@ -84,4 +112,23 @@ describe Group do expect(group.avatar_type).to eq(["only images allowed"]) end end + + describe "public_profile?" do + it "returns true for public group" do + group = create(:group, public: true) + expect(group.public_profile?).to be_truthy + end + + it "returns true for non-public group with public project" do + group = create(:group) + create(:project, :public, group: group) + expect(group.public_profile?).to be_truthy + end + + it "returns false for non-public group with no public projects" do + group = create(:group) + create(:project, group: group) + expect(group.public_profile?).to be_falsy + end + end end diff --git a/spec/models/label_spec.rb b/spec/models/label_spec.rb index 6518213d71..511ee8cbd9 100644 --- a/spec/models/label_spec.rb +++ b/spec/models/label_spec.rb @@ -8,6 +8,7 @@ # project_id :integer # created_at :datetime # updated_at :datetime +# template :boolean default(FALSE) # require 'spec_helper' diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 6aaf1c036b..567c911425 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -20,6 +20,7 @@ # position :integer default(0) # locked_at :datetime # updated_by_id :integer +# merge_error :string(255) # require 'spec_helper' @@ -79,6 +80,12 @@ describe MergeRequest do expect(merge_request.commits).not_to be_empty expect(merge_request.mr_and_commit_notes.count).to eq(2) end + + it "should include notes for commits from target project as well" do + create(:note, commit_id: merge_request.commits.first.id, noteable_type: 'Commit', project: merge_request.target_project) + expect(merge_request.commits).not_to be_empty + expect(merge_request.mr_and_commit_notes.count).to eq(3) + end end describe '#is_being_reassigned?' do @@ -186,4 +193,29 @@ describe MergeRequest do it_behaves_like 'a Taskable' do subject { create :merge_request, :simple } end + + describe '#ci_commit' do + describe 'when the source project exists' do + it 'returns the latest commit' do + commit = double(:commit, id: '123abc') + ci_commit = double(:ci_commit) + + allow(subject).to receive(:last_commit).and_return(commit) + + expect(subject.source_project).to receive(:ci_commit). + with('123abc'). + and_return(ci_commit) + + expect(subject.ci_commit).to eq(ci_commit) + end + end + + describe 'when the source project does not exist' do + it 'returns nil' do + allow(subject).to receive(:source_project).and_return(nil) + + expect(subject.ci_commit).to be_nil + end + end + end end diff --git a/spec/models/milestone_spec.rb b/spec/models/milestone_spec.rb index c88d534966..77c5862732 100644 --- a/spec/models/milestone_spec.rb +++ b/spec/models/milestone_spec.rb @@ -140,4 +140,32 @@ describe Milestone do end end + describe '#sort_issues' do + let(:milestone) { create(:milestone) } + + let(:issue1) { create(:issue, milestone: milestone, position: 1) } + let(:issue2) { create(:issue, milestone: milestone, position: 2) } + let(:issue3) { create(:issue, milestone: milestone, position: 3) } + let(:issue4) { create(:issue, position: 42) } + + it 'sorts the given issues' do + milestone.sort_issues([issue3.id, issue2.id, issue1.id]) + + issue1.reload + issue2.reload + issue3.reload + + expect(issue1.position).to eq(3) + expect(issue2.position).to eq(2) + expect(issue3.position).to eq(1) + end + + it 'ignores issues not part of the milestone' do + milestone.sort_issues([issue3.id, issue2.id, issue1.id, issue4.id]) + + issue4.reload + + expect(issue4.position).to eq(42) + end + end end diff --git a/spec/models/namespace_spec.rb b/spec/models/namespace_spec.rb index 1d72a9503a..a98b9cb732 100644 --- a/spec/models/namespace_spec.rb +++ b/spec/models/namespace_spec.rb @@ -11,6 +11,7 @@ # type :string(255) # description :string(255) default(""), not null # avatar :string(255) +# public :boolean default(FALSE) # require 'spec_helper' diff --git a/spec/models/note_spec.rb b/spec/models/note_spec.rb index 75564839dc..f347f53755 100644 --- a/spec/models/note_spec.rb +++ b/spec/models/note_spec.rb @@ -32,77 +32,6 @@ describe Note do it { is_expected.to validate_presence_of(:project) } end - describe '#votable?' do - it 'is true for issue notes' do - note = build(:note_on_issue) - expect(note).to be_votable - end - - it 'is true for merge request notes' do - note = build(:note_on_merge_request) - expect(note).to be_votable - end - - it 'is false for merge request diff notes' do - note = build(:note_on_merge_request_diff) - expect(note).not_to be_votable - end - - it 'is false for commit notes' do - note = build(:note_on_commit) - expect(note).not_to be_votable - end - - it 'is false for commit diff notes' do - note = build(:note_on_commit_diff) - expect(note).not_to be_votable - end - end - - describe 'voting score' do - it 'recognizes a neutral note' do - note = build(:votable_note, note: 'This is not a +1 note') - expect(note).not_to be_upvote - expect(note).not_to be_downvote - end - - it 'recognizes a neutral emoji note' do - note = build(:votable_note, note: "I would :+1: this, but I don't want to") - expect(note).not_to be_upvote - expect(note).not_to be_downvote - end - - it 'recognizes a +1 note' do - note = build(:votable_note, note: '+1 for this') - expect(note).to be_upvote - end - - it 'recognizes a +1 emoji as a vote' do - note = build(:votable_note, note: ':+1: for this') - expect(note).to be_upvote - end - - it 'recognizes a thumbsup emoji as a vote' do - note = build(:votable_note, note: ':thumbsup: for this') - expect(note).to be_upvote - end - - it 'recognizes a -1 note' do - note = build(:votable_note, note: '-1 for this') - expect(note).to be_downvote - end - - it 'recognizes a -1 emoji as a vote' do - note = build(:votable_note, note: ':-1: for this') - expect(note).to be_downvote - end - - it 'recognizes a thumbsdown emoji as a vote' do - note = build(:votable_note, note: ':thumbsdown: for this') - expect(note).to be_downvote - end - end - describe "Commit notes" do let!(:note) { create(:note_on_commit, note: "+1 from me") } let!(:commit) { note.noteable } @@ -139,10 +68,6 @@ describe Note do it "should be recognized by #for_commit_diff_line?" do expect(note).to be_for_commit_diff_line end - - it "should not be votable" do - expect(note).not_to be_votable - end end describe 'authorization' do @@ -204,4 +129,16 @@ describe Note do it { expect(Note.search('wow')).to include(note) } end + + describe :grouped_awards do + before do + create :note, note: "smile", is_award: true + create :note, note: "smile", is_award: true + end + + it "returns grouped array of notes" do + expect(Note.grouped_awards.first.first).to eq("smile") + expect(Note.grouped_awards.first.last).to match_array(Note.all) + end + end end diff --git a/spec/models/project_services/gitlab_ci_service_spec.rb b/spec/models/project_services/gitlab_ci_service_spec.rb index 842089ebe0..b9006b693b 100644 --- a/spec/models/project_services/gitlab_ci_service_spec.rb +++ b/spec/models/project_services/gitlab_ci_service_spec.rb @@ -39,7 +39,7 @@ describe GitlabCiService do end describe :build_page do - it { expect(@service.build_page("2ab7834c", 'master')).to eq("http://localhost/#{@ci_project.gl_project.path_with_namespace}/commit/2ab7834c/ci")} + it { expect(@service.build_page("2ab7834c", 'master')).to eq("http://localhost/#{@ci_project.gl_project.path_with_namespace}/commit/2ab7834c/builds")} end describe "execute" do diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index f93935ebe3..f80fada45e 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -345,17 +345,6 @@ describe Project do expect(project1.star_count).to eq(0) expect(project2.star_count).to eq(0) end - - it 'is decremented when an upvoter account is deleted' do - user = create :user - project = create :project, :public - user.toggle_star(project) - project.reload - expect(project.star_count).to eq(1) - user.destroy - project.reload - expect(project.star_count).to eq(0) - end end describe :avatar_type do @@ -415,12 +404,15 @@ describe Project do it { expect(project.ci_commit(commit.sha)).to eq(commit) } end - describe :enable_ci do + describe :builds_enabled do let(:project) { create :project } - before { project.enable_ci } + before { project.builds_enabled = true } - it { expect(project.gitlab_ci?).to be_truthy } + subject { project.builds_enabled } + + it { is_expected.to eq(project.gitlab_ci_service.active) } + it { expect(project.builds_enabled?).to be_truthy } it { expect(project.gitlab_ci_project).to be_a(Ci::Project) } end @@ -461,4 +453,23 @@ describe Project do end end end + + describe '.visible_to_user' do + let!(:project) { create(:project, :private) } + let!(:user) { create(:user) } + + subject { described_class.visible_to_user(user) } + + describe 'when a user has access to a project' do + before do + project.team.add_user(user, Gitlab::Access::MASTER) + end + + it { is_expected.to eq([project]) } + end + + describe 'when a user does not have access to any projects' do + it { is_expected.to eq([]) } + end + end end diff --git a/spec/models/project_wiki_spec.rb b/spec/models/project_wiki_spec.rb index 94802dcfb7..3b88914444 100644 --- a/spec/models/project_wiki_spec.rb +++ b/spec/models/project_wiki_spec.rb @@ -184,6 +184,12 @@ describe ProjectWiki do subject.create_page("test page", "some content", :markdown, "commit message") expect(subject.pages.first.page.version.message).to eq("commit message") end + + it 'updates project activity' do + expect(subject).to receive(:update_project_activity) + + subject.create_page('Test Page', 'This is content') + end end describe "#update_page" do @@ -205,6 +211,12 @@ describe ProjectWiki do it "sets the correct commit message" do expect(@page.version.message).to eq("updated page") end + + it 'updates project activity' do + expect(subject).to receive(:update_project_activity) + + subject.update_page(@gollum_page, 'Yet more content', :markdown, 'Updated page again') + end end describe "#delete_page" do @@ -217,13 +229,19 @@ describe ProjectWiki do subject.delete_page(@page) expect(subject.pages.count).to eq(0) end + + it 'updates project activity' do + expect(subject).to receive(:update_project_activity) + + subject.delete_page(@page) + end end private def create_temp_repo(path) FileUtils.mkdir_p path - system(*%W(git init --quiet --bare -- #{path})) + system(*%W(#{Gitlab.config.git.bin_path} init --quiet --bare -- #{path})) end def remove_temp_repo(path) diff --git a/spec/models/release_spec.rb b/spec/models/release_spec.rb new file mode 100644 index 0000000000..72ecb442a3 --- /dev/null +++ b/spec/models/release_spec.rb @@ -0,0 +1,28 @@ +# == Schema Information +# +# Table name: releases +# +# id :integer not null, primary key +# tag :string(255) +# description :text +# project_id :integer +# created_at :datetime +# updated_at :datetime +# + +require 'rails_helper' + +RSpec.describe Release, type: :model do + let(:release) { create(:release) } + + it { expect(release).to be_valid } + + describe 'associations' do + it { is_expected.to belong_to(:project) } + end + + describe 'validation' do + it { is_expected.to validate_presence_of(:project) } + it { is_expected.to validate_presence_of(:description) } + end +end diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index 05e51532eb..319fa0a7c8 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -26,6 +26,15 @@ describe Repository do it { is_expected.to eq('c1acaa58bbcbc3eafe538cb8274ba387047b69f8') } end + describe :find_commits_by_message do + subject { repository.find_commits_by_message('submodule').map{ |k| k.id } } + + it { is_expected.to include('5937ac0a7beb003549fc5fd26fc247adbce4a52e') } + it { is_expected.to include('6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9') } + it { is_expected.to include('cfe32cf61b73a0d5e9f13e774abde7ff789b1660') } + it { is_expected.not_to include('913c66a37b4a45b9769037c55c2d238bd0942d2e') } + end + describe :blob_at do context 'blank sha' do subject { repository.blob_at(Gitlab::Git::BLANK_SHA, '.gitignore') } diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index c71cfb3ebe..4631b12faf 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -54,6 +54,8 @@ # public_email :string(255) default(""), not null # dashboard :integer default(0) # project_view :integer default(0) +# consumed_timestep :integer +# layout :integer default(0) # require 'spec_helper' @@ -663,28 +665,28 @@ describe User do @user1 = create :user, created_at: Date.today - 1, last_sign_in_at: Date.today - 1, name: 'Omega' end - it "sorts users as recently_signed_in" do + it "sorts users by the recent sign-in time" do expect(User.sort('recent_sign_in').first).to eq(@user) end - it "sorts users as late_signed_in" do + it "sorts users by the oldest sign-in time" do expect(User.sort('oldest_sign_in').first).to eq(@user1) end - it "sorts users as recently_created" do + it "sorts users in descending order by their creation time" do expect(User.sort('created_desc').first).to eq(@user) end - it "sorts users as late_created" do + it "sorts users in ascending order by their creation time" do expect(User.sort('created_asc').first).to eq(@user1) end - it "sorts users by name when nil is passed" do - expect(User.sort(nil).first).to eq(@user) + it "sorts users by id in descending order when nil is passed" do + expect(User.sort(nil).first).to eq(@user1) end end - describe "#contributed_projects_ids" do + describe "#contributed_projects" do subject { create(:user) } let!(:project1) { create(:project) } let!(:project2) { create(:project, forked_from_project: project3) } @@ -699,15 +701,15 @@ describe User do end it "includes IDs for projects the user has pushed to" do - expect(subject.contributed_projects_ids).to include(project1.id) + expect(subject.contributed_projects).to include(project1) end it "includes IDs for projects the user has had merge requests merged into" do - expect(subject.contributed_projects_ids).to include(project3.id) + expect(subject.contributed_projects).to include(project3) end it "doesn't include IDs for unrelated projects" do - expect(subject.contributed_projects_ids).not_to include(project2.id) + expect(subject.contributed_projects).not_to include(project2) end end @@ -756,4 +758,30 @@ describe User do expect(subject.recent_push).to eq(nil) end end + + describe '#authorized_groups' do + let!(:user) { create(:user) } + let!(:private_group) { create(:group) } + + before do + private_group.add_user(user, Gitlab::Access::MASTER) + end + + subject { user.authorized_groups } + + it { is_expected.to eq([private_group]) } + end + + describe '#authorized_projects' do + let!(:user) { create(:user) } + let!(:private_project) { create(:project, :private) } + + before do + private_project.team << [user, Gitlab::Access::MASTER] + end + + subject { user.authorized_projects } + + it { is_expected.to eq([private_project]) } + end end diff --git a/spec/requests/api/api_helpers_spec.rb b/spec/requests/api/api_helpers_spec.rb index 4048c29701..0c19094ec5 100644 --- a/spec/requests/api/api_helpers_spec.rb +++ b/spec/requests/api/api_helpers_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' describe API, api: true do - include API::APIHelpers + include API::Helpers include ApiHelpers let(:user) { create(:user) } let(:admin) { create(:admin) } @@ -13,25 +13,25 @@ describe API, api: true do def set_env(token_usr, identifier) clear_env clear_param - env[API::APIHelpers::PRIVATE_TOKEN_HEADER] = token_usr.private_token - env[API::APIHelpers::SUDO_HEADER] = identifier + env[API::Helpers::PRIVATE_TOKEN_HEADER] = token_usr.private_token + env[API::Helpers::SUDO_HEADER] = identifier end def set_param(token_usr, identifier) clear_env clear_param - params[API::APIHelpers::PRIVATE_TOKEN_PARAM] = token_usr.private_token - params[API::APIHelpers::SUDO_PARAM] = identifier + params[API::Helpers::PRIVATE_TOKEN_PARAM] = token_usr.private_token + params[API::Helpers::SUDO_PARAM] = identifier end def clear_env - env.delete(API::APIHelpers::PRIVATE_TOKEN_HEADER) - env.delete(API::APIHelpers::SUDO_HEADER) + env.delete(API::Helpers::PRIVATE_TOKEN_HEADER) + env.delete(API::Helpers::SUDO_HEADER) end def clear_param - params.delete(API::APIHelpers::PRIVATE_TOKEN_PARAM) - params.delete(API::APIHelpers::SUDO_PARAM) + params.delete(API::Helpers::PRIVATE_TOKEN_PARAM) + params.delete(API::Helpers::SUDO_PARAM) end def error!(message, status) @@ -40,22 +40,22 @@ describe API, api: true do describe ".current_user" do it "should return nil for an invalid token" do - env[API::APIHelpers::PRIVATE_TOKEN_HEADER] = 'invalid token' + env[API::Helpers::PRIVATE_TOKEN_HEADER] = 'invalid token' allow_any_instance_of(self.class).to receive(:doorkeeper_guard){ false } expect(current_user).to be_nil end it "should return nil for a user without access" do - env[API::APIHelpers::PRIVATE_TOKEN_HEADER] = user.private_token + env[API::Helpers::PRIVATE_TOKEN_HEADER] = user.private_token allow(Gitlab::UserAccess).to receive(:allowed?).and_return(false) expect(current_user).to be_nil end it "should leave user as is when sudo not specified" do - env[API::APIHelpers::PRIVATE_TOKEN_HEADER] = user.private_token + env[API::Helpers::PRIVATE_TOKEN_HEADER] = user.private_token expect(current_user).to eq(user) clear_env - params[API::APIHelpers::PRIVATE_TOKEN_PARAM] = user.private_token + params[API::Helpers::PRIVATE_TOKEN_PARAM] = user.private_token expect(current_user).to eq(user) end diff --git a/spec/requests/api/commit_status_spec.rb b/spec/requests/api/commit_status_spec.rb index b9e6dfc15a..a28607bd24 100644 --- a/spec/requests/api/commit_status_spec.rb +++ b/spec/requests/api/commit_status_spec.rb @@ -18,7 +18,7 @@ describe API::API, api: true do before do @status1 = create(:commit_status, commit: ci_commit, status: 'running') @status2 = create(:commit_status, commit: ci_commit, name: 'coverage', status: 'pending') - @status3 = create(:commit_status, commit: ci_commit, name: 'coverage', ref: 'develop', status: 'running') + @status3 = create(:commit_status, commit: ci_commit, name: 'coverage', ref: 'develop', status: 'running', allow_failure: true) @status4 = create(:commit_status, commit: ci_commit, name: 'coverage', status: 'success') @status5 = create(:commit_status, commit: ci_commit, ref: 'develop', status: 'success') @status6 = create(:commit_status, commit: ci_commit, status: 'success') @@ -30,6 +30,8 @@ describe API::API, api: true do expect(json_response).to be_an Array expect(statuses_id).to contain_exactly(@status3.id, @status4.id, @status5.id, @status6.id) + json_response.sort_by!{ |status| status['id'] } + expect(json_response.map{ |status| status['allow_failure'] }).to eq([true, false, false, false]) end it "should return all commit statuses" do diff --git a/spec/requests/api/files_spec.rb b/spec/requests/api/files_spec.rb index 042e635256..8efa09f75f 100644 --- a/spec/requests/api/files_spec.rb +++ b/spec/requests/api/files_spec.rb @@ -19,6 +19,7 @@ describe API::API, api: true do expect(response.status).to eq(200) expect(json_response['file_path']).to eq(file_path) expect(json_response['file_name']).to eq('popen.rb') + expect(json_response['last_commit_id']).to eq('570e7b2abdd848b95f2f578043fc23bd6f6fd24d') expect(Base64.decode64(json_response['content']).lines.first).to eq("require 'fileutils'\n") end diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index 580bbec77d..9fc294118a 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -88,8 +88,11 @@ describe API::API, api: true do end it 'returns projects in the correct order when ci_enabled_first parameter is passed' do - [project, project2, project3].each{ |project| project.build_missing_services } - project2.gitlab_ci_service.update(active: true) + [project, project2, project3].each do |project| + project.builds_enabled = false + project.build_missing_services + end + project2.builds_enabled = true get api('/projects', user), { ci_enabled_first: 'true' } expect(response.status).to eq(200) expect(json_response).to be_an Array @@ -606,28 +609,42 @@ describe API::API, api: true do describe 'DELETE /projects/:id/fork' do - it "shouldn't available for non admin users" do + it "shouldn't be visible to users outside group" do delete api("/projects/#{project_fork_target.id}/fork", user) - expect(response.status).to eq(403) + expect(response.status).to eq(404) end - it 'should make forked project unforked' do - post api("/projects/#{project_fork_target.id}/fork/#{project_fork_source.id}", admin) - project_fork_target.reload - expect(project_fork_target.forked_from_project).not_to be_nil - expect(project_fork_target.forked?).to be_truthy - delete api("/projects/#{project_fork_target.id}/fork", admin) - expect(response.status).to eq(200) - project_fork_target.reload - expect(project_fork_target.forked_from_project).to be_nil - expect(project_fork_target.forked?).not_to be_truthy - end + context 'when users belong to project group' do + let(:project_fork_target) { create(:project, group: create(:group)) } - it 'should be idempotent if not forked' do - expect(project_fork_target.forked_from_project).to be_nil - delete api("/projects/#{project_fork_target.id}/fork", admin) - expect(response.status).to eq(200) - expect(project_fork_target.reload.forked_from_project).to be_nil + before do + project_fork_target.group.add_owner user + project_fork_target.group.add_developer user2 + end + + it 'should be forbidden to non-owner users' do + delete api("/projects/#{project_fork_target.id}/fork", user2) + expect(response.status).to eq(403) + end + + it 'should make forked project unforked' do + post api("/projects/#{project_fork_target.id}/fork/#{project_fork_source.id}", admin) + project_fork_target.reload + expect(project_fork_target.forked_from_project).not_to be_nil + expect(project_fork_target.forked?).to be_truthy + delete api("/projects/#{project_fork_target.id}/fork", admin) + expect(response.status).to eq(200) + project_fork_target.reload + expect(project_fork_target.forked_from_project).to be_nil + expect(project_fork_target.forked?).not_to be_truthy + end + + it 'should be idempotent if not forked' do + expect(project_fork_target.forked_from_project).to be_nil + delete api("/projects/#{project_fork_target.id}/fork", admin) + expect(response.status).to eq(200) + expect(project_fork_target.reload.forked_from_project).to be_nil + end end end end diff --git a/spec/requests/api/repositories_spec.rb b/spec/requests/api/repositories_spec.rb index 1149f7e798..4911cdd9da 100644 --- a/spec/requests/api/repositories_spec.rb +++ b/spec/requests/api/repositories_spec.rb @@ -11,81 +11,6 @@ describe API::API, api: true do let!(:master) { create(:project_member, user: user, project: project, access_level: ProjectMember::MASTER) } let!(:guest) { create(:project_member, user: user2, project: project, access_level: ProjectMember::GUEST) } - describe "GET /projects/:id/repository/tags" do - it "should return an array of project tags" do - get api("/projects/#{project.id}/repository/tags", user) - expect(response.status).to eq(200) - expect(json_response).to be_an Array - expect(json_response.first['name']).to eq(project.repo.tags.sort_by(&:name).reverse.first.name) - end - end - - describe 'POST /projects/:id/repository/tags' do - context 'lightweight tags' do - it 'should create a new tag' do - post api("/projects/#{project.id}/repository/tags", user), - tag_name: 'v7.0.1', - ref: 'master' - - expect(response.status).to eq(201) - expect(json_response['name']).to eq('v7.0.1') - end - end - - context 'annotated tag' do - it 'should create a new annotated tag' do - # Identity must be set in .gitconfig to create annotated tag. - repo_path = project.repository.path_to_repo - system(*%W(git --git-dir=#{repo_path} config user.name #{user.name})) - system(*%W(git --git-dir=#{repo_path} config user.email #{user.email})) - - post api("/projects/#{project.id}/repository/tags", user), - tag_name: 'v7.1.0', - ref: 'master', - message: 'Release 7.1.0' - - expect(response.status).to eq(201) - expect(json_response['name']).to eq('v7.1.0') - expect(json_response['message']).to eq('Release 7.1.0') - end - end - - it 'should deny for user without push access' do - post api("/projects/#{project.id}/repository/tags", user2), - tag_name: 'v1.9.0', - ref: '621491c677087aa243f165eab467bfdfbee00be1' - expect(response.status).to eq(403) - end - - it 'should return 400 if tag name is invalid' do - post api("/projects/#{project.id}/repository/tags", user), - tag_name: 'v 1.0.0', - ref: 'master' - expect(response.status).to eq(400) - expect(json_response['message']).to eq('Tag name invalid') - end - - it 'should return 400 if tag already exists' do - post api("/projects/#{project.id}/repository/tags", user), - tag_name: 'v8.0.0', - ref: 'master' - expect(response.status).to eq(201) - post api("/projects/#{project.id}/repository/tags", user), - tag_name: 'v8.0.0', - ref: 'master' - expect(response.status).to eq(400) - expect(json_response['message']).to eq('Tag already exists') - end - - it 'should return 400 if ref name is invalid' do - post api("/projects/#{project.id}/repository/tags", user), - tag_name: 'mytag', - ref: 'foo' - expect(response.status).to eq(400) - expect(json_response['message']).to eq('Invalid reference name') - end - end - describe "GET /projects/:id/repository/tree" do context "authorized user" do before { project.team << [user2, :reporter] } diff --git a/spec/requests/api/services_spec.rb b/spec/requests/api/services_spec.rb index c0226605a2..b180d2fec7 100644 --- a/spec/requests/api/services_spec.rb +++ b/spec/requests/api/services_spec.rb @@ -46,6 +46,7 @@ describe API::API, api: true do delete api("/projects/#{project.id}/services/#{dashed_service}", user) expect(response.status).to eq(200) + project.send(service_method).reload expect(project.send(service_method).activated?).to be_falsey end end diff --git a/spec/requests/api/tags_spec.rb b/spec/requests/api/tags_spec.rb new file mode 100644 index 0000000000..17f2643fd4 --- /dev/null +++ b/spec/requests/api/tags_spec.rb @@ -0,0 +1,196 @@ +require 'spec_helper' +require 'mime/types' + +describe API::API, api: true do + include ApiHelpers + include RepoHelpers + + let(:user) { create(:user) } + let(:user2) { create(:user) } + let!(:project) { create(:project, creator_id: user.id) } + let!(:master) { create(:project_member, user: user, project: project, access_level: ProjectMember::MASTER) } + let!(:guest) { create(:project_member, user: user2, project: project, access_level: ProjectMember::GUEST) } + + describe "GET /projects/:id/repository/tags" do + let(:tag_name) { project.repository.tag_names.sort.reverse.first } + let(:description) { 'Awesome release!' } + + context 'without releases' do + it "should return an array of project tags" do + get api("/projects/#{project.id}/repository/tags", user) + expect(response.status).to eq(200) + expect(json_response).to be_an Array + expect(json_response.first['name']).to eq(tag_name) + end + end + + context 'with releases' do + before do + release = project.releases.find_or_initialize_by(tag: tag_name) + release.update_attributes(description: description) + end + + it "should return an array of project tags with release info" do + get api("/projects/#{project.id}/repository/tags", user) + expect(response.status).to eq(200) + expect(json_response).to be_an Array + expect(json_response.first['name']).to eq(tag_name) + expect(json_response.first['release']['description']).to eq(description) + end + end + end + + describe 'POST /projects/:id/repository/tags' do + context 'lightweight tags' do + it 'should create a new tag' do + post api("/projects/#{project.id}/repository/tags", user), + tag_name: 'v7.0.1', + ref: 'master' + + expect(response.status).to eq(201) + expect(json_response['name']).to eq('v7.0.1') + end + end + + context 'lightweight tags with release notes' do + it 'should create a new tag' do + post api("/projects/#{project.id}/repository/tags", user), + tag_name: 'v7.0.1', + ref: 'master', + release_description: 'Wow' + + expect(response.status).to eq(201) + expect(json_response['name']).to eq('v7.0.1') + expect(json_response['release']['description']).to eq('Wow') + end + end + + context 'annotated tag' do + it 'should create a new annotated tag' do + # Identity must be set in .gitconfig to create annotated tag. + repo_path = project.repository.path_to_repo + system(*%W(#{Gitlab.config.git.bin_path} --git-dir=#{repo_path} config user.name #{user.name})) + system(*%W(#{Gitlab.config.git.bin_path} --git-dir=#{repo_path} config user.email #{user.email})) + + post api("/projects/#{project.id}/repository/tags", user), + tag_name: 'v7.1.0', + ref: 'master', + message: 'Release 7.1.0' + + expect(response.status).to eq(201) + expect(json_response['name']).to eq('v7.1.0') + expect(json_response['message']).to eq('Release 7.1.0') + end + end + + it 'should deny for user without push access' do + post api("/projects/#{project.id}/repository/tags", user2), + tag_name: 'v1.9.0', + ref: '621491c677087aa243f165eab467bfdfbee00be1' + expect(response.status).to eq(403) + end + + it 'should return 400 if tag name is invalid' do + post api("/projects/#{project.id}/repository/tags", user), + tag_name: 'v 1.0.0', + ref: 'master' + expect(response.status).to eq(400) + expect(json_response['message']).to eq('Tag name invalid') + end + + it 'should return 400 if tag already exists' do + post api("/projects/#{project.id}/repository/tags", user), + tag_name: 'v8.0.0', + ref: 'master' + expect(response.status).to eq(201) + post api("/projects/#{project.id}/repository/tags", user), + tag_name: 'v8.0.0', + ref: 'master' + expect(response.status).to eq(400) + expect(json_response['message']).to eq('Tag already exists') + end + + it 'should return 400 if ref name is invalid' do + post api("/projects/#{project.id}/repository/tags", user), + tag_name: 'mytag', + ref: 'foo' + expect(response.status).to eq(400) + expect(json_response['message']).to eq('Invalid reference name') + end + end + + describe 'POST /projects/:id/repository/tags/:tag_name/release' do + let(:tag_name) { project.repository.tag_names.first } + let(:description) { 'Awesome release!' } + + it 'should create description for existing git tag' do + post api("/projects/#{project.id}/repository/tags/#{tag_name}/release", user), + description: description + + expect(response.status).to eq(201) + expect(json_response['tag_name']).to eq(tag_name) + expect(json_response['description']).to eq(description) + end + + it 'should return 404 if the tag does not exist' do + post api("/projects/#{project.id}/repository/tags/foobar/release", user), + description: description + + expect(response.status).to eq(404) + expect(json_response['message']).to eq('Tag does not exist') + end + + context 'on tag with existing release' do + before do + release = project.releases.find_or_initialize_by(tag: tag_name) + release.update_attributes(description: description) + end + + it 'should return 409 if there is already a release' do + post api("/projects/#{project.id}/repository/tags/#{tag_name}/release", user), + description: description + + expect(response.status).to eq(409) + expect(json_response['message']).to eq('Release already exists') + end + end + end + + describe 'PUT id/repository/tags/:tag_name/release' do + let(:tag_name) { project.repository.tag_names.first } + let(:description) { 'Awesome release!' } + let(:new_description) { 'The best release!' } + + context 'on tag with existing release' do + before do + release = project.releases.find_or_initialize_by(tag: tag_name) + release.update_attributes(description: description) + end + + it 'should update the release description' do + put api("/projects/#{project.id}/repository/tags/#{tag_name}/release", user), + description: new_description + + expect(response.status).to eq(200) + expect(json_response['tag_name']).to eq(tag_name) + expect(json_response['description']).to eq(new_description) + end + end + + it 'should return 404 if the tag does not exist' do + put api("/projects/#{project.id}/repository/tags/foobar/release", user), + description: new_description + + expect(response.status).to eq(404) + expect(json_response['message']).to eq('Tag does not exist') + end + + it 'should return 404 if the release does not exist' do + put api("/projects/#{project.id}/repository/tags/#{tag_name}/release", user), + description: new_description + + expect(response.status).to eq(404) + expect(json_response['message']).to eq('Release does not exist') + end + end +end diff --git a/spec/requests/api/users_spec.rb b/spec/requests/api/users_spec.rb index d26a300ed8..a9ef2fe588 100644 --- a/spec/requests/api/users_spec.rb +++ b/spec/requests/api/users_spec.rb @@ -343,8 +343,9 @@ describe API::API, api: true do end.to change{ user.keys.count }.by(1) end - it "should raise error for invalid ID" do - expect{post api("/users/ASDF/keys", admin) }.to raise_error(ActionController::RoutingError) + it "should return 405 for invalid ID" do + post api("/users/ASDF/keys", admin) + expect(response.status).to eq(405) end end @@ -374,9 +375,9 @@ describe API::API, api: true do expect(json_response.first['title']).to eq(key.title) end - it "should return 404 for invalid ID" do + it "should return 405 for invalid ID" do get api("/users/ASDF/keys", admin) - expect(response.status).to eq(404) + expect(response.status).to eq(405) end end end @@ -434,7 +435,8 @@ describe API::API, api: true do end it "should raise error for invalid ID" do - expect{post api("/users/ASDF/emails", admin) }.to raise_error(ActionController::RoutingError) + post api("/users/ASDF/emails", admin) + expect(response.status).to eq(405) end end @@ -465,7 +467,8 @@ describe API::API, api: true do end it "should raise error for invalid ID" do - expect{put api("/users/ASDF/emails", admin) }.to raise_error(ActionController::RoutingError) + put api("/users/ASDF/emails", admin) + expect(response.status).to eq(405) end end end diff --git a/spec/requests/ci/api/builds_spec.rb b/spec/requests/ci/api/builds_spec.rb index 88218a93e1..c2be045099 100644 --- a/spec/requests/ci/api/builds_spec.rb +++ b/spec/requests/ci/api/builds_spec.rb @@ -5,7 +5,7 @@ describe Ci::API::API do let(:runner) { FactoryGirl.create(:ci_runner, tag_list: ["mysql", "ruby"]) } let(:project) { FactoryGirl.create(:ci_project) } - let(:gl_project) { FactoryGirl.create(:empty_project, gitlab_ci_project: project) } + let(:gl_project) { project.gl_project } before do stub_ci_commit_to_return_yaml_file @@ -14,7 +14,7 @@ describe Ci::API::API do describe "Builds API for runners" do let(:shared_runner) { FactoryGirl.create(:ci_runner, token: "SharedRunner") } let(:shared_project) { FactoryGirl.create(:ci_project, name: "SharedProject") } - let(:shared_gl_project) { FactoryGirl.create(:empty_project, gitlab_ci_project: shared_project) } + let(:shared_gl_project) { shared_project.gl_project } before do FactoryGirl.create :ci_runner_project, project_id: project.id, runner_id: runner.id @@ -41,7 +41,7 @@ describe Ci::API::API do it "should return 404 error if no builds for specific runner" do commit = FactoryGirl.create(:ci_commit, gl_project: shared_gl_project) - FactoryGirl.create(:ci_build, commit: commit, status: 'pending' ) + FactoryGirl.create(:ci_build, commit: commit, status: 'pending') post ci_api("/builds/register"), token: runner.token @@ -50,7 +50,7 @@ describe Ci::API::API do it "should return 404 error if no builds for shared runner" do commit = FactoryGirl.create(:ci_commit, gl_project: gl_project) - FactoryGirl.create(:ci_build, commit: commit, status: 'pending' ) + FactoryGirl.create(:ci_build, commit: commit, status: 'pending') post ci_api("/builds/register"), token: shared_runner.token @@ -79,7 +79,7 @@ describe Ci::API::API do { "key" => "CI_BUILD_NAME", "value" => "spinach", "public" => true }, { "key" => "CI_BUILD_STAGE", "value" => "test", "public" => true }, { "key" => "DB_NAME", "value" => "postgres", "public" => true }, - { "key" => "SECRET_KEY", "value" => "secret_value", "public" => false }, + { "key" => "SECRET_KEY", "value" => "secret_value", "public" => false } ]) end @@ -122,5 +122,191 @@ describe Ci::API::API do expect(build.reload.trace).to eq 'hello_world' end end + + context "Artifacts" do + let(:file_upload) { fixture_file_upload(Rails.root + 'spec/fixtures/banana_sample.gif', 'image/gif') } + let(:file_upload2) { fixture_file_upload(Rails.root + 'spec/fixtures/dk.png', 'image/gif') } + let(:commit) { FactoryGirl.create(:ci_commit, gl_project: gl_project) } + let(:build) { FactoryGirl.create(:ci_build, commit: commit, runner_id: runner.id) } + let(:authorize_url) { ci_api("/builds/#{build.id}/artifacts/authorize") } + let(:post_url) { ci_api("/builds/#{build.id}/artifacts") } + let(:delete_url) { ci_api("/builds/#{build.id}/artifacts") } + let(:get_url) { ci_api("/builds/#{build.id}/artifacts") } + let(:headers) { { "GitLab-Workhorse" => "1.0" } } + let(:headers_with_token) { headers.merge(Ci::API::Helpers::BUILD_TOKEN_HEADER => build.project.token) } + + describe "POST /builds/:id/artifacts/authorize" do + context "should authorize posting artifact to running build" do + before do + build.run! + end + + it "using token as parameter" do + post authorize_url, { token: build.project.token }, headers + expect(response.status).to eq(200) + expect(json_response["TempPath"]).to_not be_nil + end + + it "using token as header" do + post authorize_url, {}, headers_with_token + expect(response.status).to eq(200) + expect(json_response["TempPath"]).to_not be_nil + end + end + + context "should fail to post too large artifact" do + before do + build.run! + end + + it "using token as parameter" do + stub_application_setting(max_artifacts_size: 0) + post authorize_url, { token: build.project.token, filesize: 100 }, headers + expect(response.status).to eq(413) + end + + it "using token as header" do + stub_application_setting(max_artifacts_size: 0) + post authorize_url, { filesize: 100 }, headers_with_token + expect(response.status).to eq(413) + end + end + + context "should get denied" do + it do + post authorize_url, { token: 'invalid', filesize: 100 } + expect(response.status).to eq(403) + end + end + end + + describe "POST /builds/:id/artifacts" do + context "Disable sanitizer" do + before do + # by configuring this path we allow to pass temp file from any path + allow(ArtifactUploader).to receive(:artifacts_upload_path).and_return('/') + end + + context "should post artifact to running build" do + before do + build.run! + end + + it "uses regual file post" do + upload_artifacts(file_upload, headers_with_token, false) + expect(response.status).to eq(201) + expect(json_response["artifacts_file"]["filename"]).to eq(file_upload.original_filename) + end + + it "uses accelerated file post" do + upload_artifacts(file_upload, headers_with_token, true) + expect(response.status).to eq(201) + expect(json_response["artifacts_file"]["filename"]).to eq(file_upload.original_filename) + end + + it "updates artifact" do + upload_artifacts(file_upload, headers_with_token) + upload_artifacts(file_upload2, headers_with_token) + expect(response.status).to eq(201) + expect(json_response["artifacts_file"]["filename"]).to eq(file_upload2.original_filename) + end + end + + context "should fail to post too large artifact" do + before do + build.run! + end + + it do + stub_application_setting(max_artifacts_size: 0) + upload_artifacts(file_upload, headers_with_token) + expect(response.status).to eq(413) + end + end + + context "should fail to post artifacts without file" do + before do + build.run! + end + + it do + post post_url, {}, headers_with_token + expect(response.status).to eq(400) + end + end + + context "should fail to post artifacts without GitLab-Workhorse" do + before do + build.run! + end + + it do + post post_url, { token: build.project.token }, {} + expect(response.status).to eq(403) + end + end + end + + context "should fail to post artifacts for outside of tmp path" do + before do + # by configuring this path we allow to pass file from @tmpdir only + # but all temporary files are stored in system tmp directory + @tmpdir = Dir.mktmpdir + allow(ArtifactUploader).to receive(:artifacts_upload_path).and_return(@tmpdir) + build.run! + end + + after do + FileUtils.remove_entry @tmpdir + end + + it do + upload_artifacts(file_upload, headers_with_token) + expect(response.status).to eq(400) + end + end + + def upload_artifacts(file, headers = {}, accelerated = true) + if accelerated + post post_url, { + 'file.path' => file.path, + 'file.name' => file.original_filename + }, headers + else + post post_url, { file: file }, headers + end + end + end + + describe "DELETE /builds/:id/artifacts" do + before do + build.run! + post delete_url, token: build.project.token, file: file_upload + end + + it "should delete artifact build" do + build.success + delete delete_url, token: build.project.token + expect(response.status).to eq(200) + end + end + + describe "GET /builds/:id/artifacts" do + before do + build.run! + end + + it "should download artifact" do + build.update_attributes(artifacts_file: file_upload) + get get_url, token: build.project.token + expect(response.status).to eq(200) + end + + it "should fail to download if no artifact uploaded" do + get get_url, token: build.project.token + expect(response.status).to eq(404) + end + end + end end end diff --git a/spec/requests/ci/api/commits_spec.rb b/spec/requests/ci/api/commits_spec.rb index 6049135fd1..aa51ba95bc 100644 --- a/spec/requests/ci/api/commits_spec.rb +++ b/spec/requests/ci/api/commits_spec.rb @@ -4,7 +4,7 @@ describe Ci::API::API, 'Commits' do include ApiHelpers let(:project) { FactoryGirl.create(:ci_project) } - let(:gl_project) { FactoryGirl.create(:empty_project, gitlab_ci_project: project) } + let(:gl_project) { project.gl_project } let(:commit) { FactoryGirl.create(:ci_commit, gl_project: gl_project) } let(:options) do diff --git a/spec/requests/ci/api/projects_spec.rb b/spec/requests/ci/api/projects_spec.rb index 53f7f91cc1..893fd168d3 100644 --- a/spec/requests/ci/api/projects_spec.rb +++ b/spec/requests/ci/api/projects_spec.rb @@ -41,8 +41,8 @@ describe Ci::API::API do describe "GET /projects/owned" do let!(:gl_project1) {FactoryGirl.create(:empty_project, namespace: user.namespace)} let!(:gl_project2) {FactoryGirl.create(:empty_project, namespace: user.namespace)} - let!(:project1) { FactoryGirl.create(:ci_project, gl_project: gl_project1) } - let!(:project2) { FactoryGirl.create(:ci_project, gl_project: gl_project2) } + let!(:project1) { gl_project1.ensure_gitlab_ci_project } + let!(:project2) { gl_project2.ensure_gitlab_ci_project } before do project1.gl_project.team << [user, :developer] @@ -180,87 +180,53 @@ describe Ci::API::API do end end - describe "POST /projects" do - let(:gl_project) { FactoryGirl.create :empty_project } - let(:project_info) do - { - gitlab_id: gl_project.id - } + describe "POST /projects/:id/runners/:id" do + let(:project) { FactoryGirl.create(:ci_project) } + let(:runner) { FactoryGirl.create(:ci_runner) } + + it "should add the project to the runner" do + project.gl_project.team << [user, :master] + post ci_api("/projects/#{project.id}/runners/#{runner.id}"), options + expect(response.status).to eq(201) + + project.reload + expect(project.runners.first.id).to eq(runner.id) end - let(:invalid_project_info) { {} } + it "should fail if it tries to link a non-existing project or runner" do + post ci_api("/projects/#{project.id}/runners/non-existing"), options + expect(response.status).to eq(404) - context "with valid project info" do - before do - options.merge!(project_info) - end - - it "should create a project with valid data" do - post ci_api("/projects"), options - expect(response.status).to eq(201) - expect(json_response['name']).to eq(gl_project.name_with_namespace) - end + post ci_api("/projects/non-existing/runners/#{runner.id}"), options + expect(response.status).to eq(404) end - context "with invalid project info" do - before do - options.merge!(invalid_project_info) - end + it "non-manager is not authorized" do + allow_any_instance_of(User).to receive(:can_manage_project?).and_return(false) + post ci_api("/projects/#{project.id}/runners/#{runner.id}"), options + expect(response.status).to eq(401) + end + end - it "should error with invalid data" do - post ci_api("/projects"), options - expect(response.status).to eq(400) - end + describe "DELETE /projects/:id/runners/:id" do + let(:project) { FactoryGirl.create(:ci_project) } + let(:runner) { FactoryGirl.create(:ci_runner) } + + it "should remove the project from the runner" do + project.gl_project.team << [user, :master] + post ci_api("/projects/#{project.id}/runners/#{runner.id}"), options + + expect(project.runners).to be_present + delete ci_api("/projects/#{project.id}/runners/#{runner.id}"), options + expect(response.status).to eq(200) + + project.reload + expect(project.runners).to be_empty end - describe "POST /projects/:id/runners/:id" do - let(:project) { FactoryGirl.create(:ci_project) } - let(:runner) { FactoryGirl.create(:ci_runner) } - - it "should add the project to the runner" do - project.gl_project.team << [user, :master] - post ci_api("/projects/#{project.id}/runners/#{runner.id}"), options - expect(response.status).to eq(201) - - project.reload - expect(project.runners.first.id).to eq(runner.id) - end - - it "should fail if it tries to link a non-existing project or runner" do - post ci_api("/projects/#{project.id}/runners/non-existing"), options - expect(response.status).to eq(404) - - post ci_api("/projects/non-existing/runners/#{runner.id}"), options - expect(response.status).to eq(404) - end - - it "non-manager is not authorized" do - allow_any_instance_of(User).to receive(:can_manage_project?).and_return(false) - post ci_api("/projects/#{project.id}/runners/#{runner.id}"), options - expect(response.status).to eq(401) - end - end - - describe "DELETE /projects/:id/runners/:id" do - let(:project) { FactoryGirl.create(:ci_project) } - let(:runner) { FactoryGirl.create(:ci_runner) } - - it "should remove the project from the runner" do - project.gl_project.team << [user, :master] - post ci_api("/projects/#{project.id}/runners/#{runner.id}"), options - - expect(project.runners).to be_present - delete ci_api("/projects/#{project.id}/runners/#{runner.id}"), options - expect(response.status).to eq(200) - - project.reload - expect(project.runners).to be_empty - end - - it "non-manager is not authorized" do - delete ci_api("/projects/#{project.id}/runners/#{runner.id}"), options - expect(response.status).to eq(401) - end + it "non-manager is not authorized" do + delete ci_api("/projects/#{project.id}/runners/#{runner.id}"), options + expect(response.status).to eq(401) end end end diff --git a/spec/requests/ci/api/triggers_spec.rb b/spec/requests/ci/api/triggers_spec.rb index 93617fc4b3..a2b436d581 100644 --- a/spec/requests/ci/api/triggers_spec.rb +++ b/spec/requests/ci/api/triggers_spec.rb @@ -6,7 +6,7 @@ describe Ci::API::API do describe 'POST /projects/:project_id/refs/:ref/trigger' do let!(:trigger_token) { 'secure token' } let!(:gl_project) { FactoryGirl.create(:project) } - let!(:project) { FactoryGirl.create(:ci_project, gl_project: gl_project) } + let!(:project) { gl_project.ensure_gitlab_ci_project } let!(:project2) { FactoryGirl.create(:ci_project) } let!(:trigger) { FactoryGirl.create(:ci_trigger, project: project, token: trigger_token) } let(:options) do diff --git a/spec/services/ci/create_commit_service_spec.rb b/spec/services/ci/create_commit_service_spec.rb index e3a8fe9681..e0ede1d58b 100644 --- a/spec/services/ci/create_commit_service_spec.rb +++ b/spec/services/ci/create_commit_service_spec.rb @@ -53,7 +53,7 @@ module Ci end end - it 'fails commits without .gitlab-ci.yml' do + it 'skips commits without .gitlab-ci.yml' do stub_ci_commit_yaml_file(nil) result = service.execute(project, user, ref: 'refs/heads/0_1', @@ -63,7 +63,24 @@ module Ci ) expect(result).to be_persisted expect(result.builds.any?).to be_falsey - expect(result.status).to eq('failed') + expect(result.status).to eq('skipped') + expect(result.yaml_errors).to be_nil + end + + it 'skips commits if yaml is invalid' do + message = 'message' + allow_any_instance_of(Ci::Commit).to receive(:git_commit_message) { message } + stub_ci_commit_yaml_file('invalid: file: file') + commits = [{ message: message }] + commit = service.execute(project, user, + ref: 'refs/tags/0_1', + before: '00000000', + after: '31das312', + commits: commits + ) + expect(commit.builds.any?).to be false + expect(commit.status).to eq('failed') + expect(commit.yaml_errors).to_not be_nil end describe :ci_skip? do @@ -100,7 +117,7 @@ module Ci end it "skips builds creation if there is [ci skip] tag in commit message and yaml is invalid" do - stub_ci_commit_yaml_file('invalid: file') + stub_ci_commit_yaml_file('invalid: file: fiile') commits = [{ message: message }] commit = service.execute(project, user, ref: 'refs/tags/0_1', @@ -110,6 +127,7 @@ module Ci ) expect(commit.builds.any?).to be false expect(commit.status).to eq("skipped") + expect(commit.yaml_errors).to be_nil end end diff --git a/spec/services/ci/create_trigger_request_service_spec.rb b/spec/services/ci/create_trigger_request_service_spec.rb index fcafae3864..2ef4bb50a5 100644 --- a/spec/services/ci/create_trigger_request_service_spec.rb +++ b/spec/services/ci/create_trigger_request_service_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' describe Ci::CreateTriggerRequestService do let(:service) { Ci::CreateTriggerRequestService.new } let(:gl_project) { create(:project) } - let(:project) { create(:ci_project, gl_project: gl_project) } + let(:project) { gl_project.ensure_gitlab_ci_project } let(:trigger) { create(:ci_trigger, project: project) } before do diff --git a/spec/services/ci/image_for_build_service_spec.rb b/spec/services/ci/image_for_build_service_spec.rb index d7242d684c..cda7d0c4a5 100644 --- a/spec/services/ci/image_for_build_service_spec.rb +++ b/spec/services/ci/image_for_build_service_spec.rb @@ -4,8 +4,9 @@ module Ci describe ImageForBuildService do let(:service) { ImageForBuildService.new } let(:project) { FactoryGirl.create(:ci_project) } - let(:gl_project) { FactoryGirl.create(:empty_project, gitlab_ci_project: project) } - let(:commit) { FactoryGirl.create(:ci_commit, gl_project: gl_project, ref: 'master') } + let(:gl_project) { FactoryGirl.create(:project, gitlab_ci_project: project) } + let(:commit_sha) { gl_project.commit('master').sha } + let(:commit) { gl_project.ensure_ci_commit(commit_sha) } let(:build) { FactoryGirl.create(:ci_build, commit: commit) } describe :execute do diff --git a/spec/services/ci/register_build_service_spec.rb b/spec/services/ci/register_build_service_spec.rb index 781764627a..b370dfbe11 100644 --- a/spec/services/ci/register_build_service_spec.rb +++ b/spec/services/ci/register_build_service_spec.rb @@ -70,6 +70,10 @@ module Ci end context 'disallow shared runners' do + before do + gl_project.gitlab_ci_project.update(shared_runners_enabled: false) + end + context 'shared runner' do let(:build) { service.execute(shared_runner) } diff --git a/spec/services/issues/update_service_spec.rb b/spec/services/issues/update_service_spec.rb index a91be3b447..f55527ee9a 100644 --- a/spec/services/issues/update_service_spec.rb +++ b/spec/services/issues/update_service_spec.rb @@ -3,13 +3,15 @@ require 'spec_helper' describe Issues::UpdateService do let(:user) { create(:user) } let(:user2) { create(:user) } - let(:issue) { create(:issue, title: 'Old title') } + let(:user3) { create(:user) } + let(:issue) { create(:issue, title: 'Old title', assignee_id: user3.id) } let(:label) { create(:label) } let(:project) { issue.project } before do project.team << [user, :master] project.team << [user2, :developer] + project.team << [user3, :developer] end describe 'execute' do @@ -34,9 +36,11 @@ describe Issues::UpdateService do it { expect(@issue.labels.count).to eq(1) } it { expect(@issue.labels.first.title).to eq('Bug') } - it 'should send email to user2 about assign of new issue' do - email = ActionMailer::Base.deliveries.last - expect(email.to.first).to eq(user2.email) + it 'should send email to user2 about assign of new issue and email to user3 about issue unassignment' do + deliveries = ActionMailer::Base.deliveries + email = deliveries.last + recipients = deliveries.last(2).map(&:to).flatten + expect(recipients).to include(user2.email, user3.email) expect(email.subject).to include(issue.title) end diff --git a/spec/services/merge_requests/refresh_service_spec.rb b/spec/services/merge_requests/refresh_service_spec.rb index 227ac995ec..7ee4488521 100644 --- a/spec/services/merge_requests/refresh_service_spec.rb +++ b/spec/services/merge_requests/refresh_service_spec.rb @@ -62,6 +62,25 @@ describe MergeRequests::RefreshService do it { expect(@fork_merge_request.notes.last.note).to include('changed to merged') } end + context 'manual merge of source branch' do + before do + # Merge master -> feature branch + author = { email: 'test@gitlab.com', time: Time.now, name: "Me" } + commit_options = { message: 'Test message', committer: author, author: author } + master_commit = @project.repository.commit('master') + @project.repository.merge(@user, master_commit.id, 'feature', commit_options) + commit = @project.repository.commit('feature') + service.new(@project, @user).execute(@oldrev, commit.id, 'refs/heads/feature') + reload_mrs + end + + it { expect(@merge_request.notes.last.note).to include('changed to merged') } + it { expect(@merge_request).to be_merged } + it { expect(@merge_request.diffs.length).to be > 0 } + it { expect(@fork_merge_request).to be_merged } + it { expect(@fork_merge_request.notes.last.note).to include('changed to merged') } + end + context 'push to fork repo source branch' do let(:refresh_service) { service.new(@fork_project, @user) } before do diff --git a/spec/services/merge_requests/update_service_spec.rb b/spec/services/merge_requests/update_service_spec.rb index c75173c145..2ed51d223b 100644 --- a/spec/services/merge_requests/update_service_spec.rb +++ b/spec/services/merge_requests/update_service_spec.rb @@ -3,7 +3,8 @@ require 'spec_helper' describe MergeRequests::UpdateService do let(:user) { create(:user) } let(:user2) { create(:user) } - let(:merge_request) { create(:merge_request, :simple, title: 'Old title') } + let(:user3) { create(:user) } + let(:merge_request) { create(:merge_request, :simple, title: 'Old title', assignee_id: user3.id) } let(:project) { merge_request.project } let(:label) { create(:label) } @@ -47,9 +48,11 @@ describe MergeRequests::UpdateService do with(@merge_request, 'update') end - it 'should send email to user2 about assign of new merge_request' do - email = ActionMailer::Base.deliveries.last - expect(email.to.first).to eq(user2.email) + it 'should send email to user2 about assign of new merge request and email to user3 about merge request unassignment' do + deliveries = ActionMailer::Base.deliveries + email = deliveries.last + recipients = deliveries.last(2).map(&:to).flatten + expect(recipients).to include(user2.email, user3.email) expect(email.subject).to include(merge_request.title) end diff --git a/spec/services/milestones/close_service_spec.rb b/spec/services/milestones/close_service_spec.rb new file mode 100644 index 0000000000..034c0f22e1 --- /dev/null +++ b/spec/services/milestones/close_service_spec.rb @@ -0,0 +1,28 @@ +require 'spec_helper' + +describe Milestones::CloseService do + let(:user) { create(:user) } + let(:project) { create(:project) } + let(:milestone) { create(:milestone, title: "Milestone v1.2", project: project) } + + before do + project.team << [user, :master] + end + + describe :execute do + before do + Milestones::CloseService.new(project, user, {}).execute(milestone) + end + + it { expect(milestone).to be_valid } + it { expect(milestone).to be_closed } + + describe :event do + let(:event) { Event.first } + + it { expect(event.milestone).to be_truthy } + it { expect(event.target).to eq(milestone) } + it { expect(event.action_name).to eq('closed') } + end + end +end diff --git a/spec/services/milestones/create_service_spec.rb b/spec/services/milestones/create_service_spec.rb new file mode 100644 index 0000000000..757c9a226d --- /dev/null +++ b/spec/services/milestones/create_service_spec.rb @@ -0,0 +1,24 @@ +require 'spec_helper' + +describe Milestones::CreateService do + let(:project) { create(:empty_project) } + let(:user) { create(:user) } + + describe :execute do + context "valid params" do + before do + project.team << [user, :master] + + opts = { + title: 'v2.1.9', + description: 'Patch release to fix security issue' + } + + @milestone = Milestones::CreateService.new(project, user, opts).execute + end + + it { expect(@milestone).to be_valid } + it { expect(@milestone.title).to eq('v2.1.9') } + end + end +end diff --git a/spec/services/milestones/group_service_spec.rb b/spec/services/milestones/group_service_spec.rb deleted file mode 100644 index 74eb0f99e0..0000000000 --- a/spec/services/milestones/group_service_spec.rb +++ /dev/null @@ -1,70 +0,0 @@ -require 'spec_helper' - -describe Milestones::GroupService do - let(:user) { create(:user) } - let(:user2) { create(:user) } - let(:group) { create(:group) } - let(:project1) { create(:project, group: group) } - let(:project2) { create(:project, path: 'gitlab-ci', group: group) } - let(:project3) { create(:project, path: 'cookbook-gitlab', group: group) } - let(:milestone1_project1) { create(:milestone, title: "Milestone v1.2", project: project1) } - let(:milestone1_project2) { create(:milestone, title: "Milestone v1.2", project: project2) } - let(:milestone1_project3) { create(:milestone, title: "Milestone v1.2", project: project3) } - let(:milestone2_project1) { create(:milestone, title: "VD-123", project: project1) } - let(:milestone2_project2) { create(:milestone, title: "VD-123", project: project2) } - let(:milestone2_project3) { create(:milestone, title: "VD-123", project: project3) } - - describe 'execute' do - context 'with valid projects' do - before do - milestones = - [ - milestone1_project1, - milestone1_project2, - milestone1_project3, - milestone2_project1, - milestone2_project2, - milestone2_project3 - ] - @group_milestones = Milestones::GroupService.new(milestones).execute - end - - it 'should have all project milestones' do - expect(@group_milestones.count).to eq(2) - end - - it 'should have all project milestones titles' do - expect(@group_milestones.map { |group_milestone| group_milestone.title }).to match_array(['Milestone v1.2', 'VD-123']) - end - - it 'should have all project milestones' do - expect(@group_milestones.map { |group_milestone| group_milestone.milestones.count }.sum).to eq(6) - end - end - end - - describe 'milestone' do - context 'with valid title' do - before do - milestones = - [ - milestone1_project1, - milestone1_project2, - milestone1_project3, - milestone2_project1, - milestone2_project2, - milestone2_project3 - ] - @group_milestones = Milestones::GroupService.new(milestones).milestone('Milestone v1.2') - end - - it 'should have exactly one group milestone' do - expect(@group_milestones.title).to eq('Milestone v1.2') - end - - it 'should have all project milestones with the same title' do - expect(@group_milestones.milestones.count).to eq(3) - end - end - end -end diff --git a/spec/services/notes/create_service_spec.rb b/spec/services/notes/create_service_spec.rb index f2ea0805b2..cc38d25779 100644 --- a/spec/services/notes/create_service_spec.rb +++ b/spec/services/notes/create_service_spec.rb @@ -24,4 +24,38 @@ describe Notes::CreateService do it { expect(@note.note).to eq('Awesome comment') } end end + + describe "award emoji" do + before do + project.team << [user, :master] + end + + it "creates emoji note" do + opts = { + note: ':smile: ', + noteable_type: 'Issue', + noteable_id: issue.id + } + + @note = Notes::CreateService.new(project, user, opts).execute + + expect(@note).to be_valid + expect(@note.note).to eq('smile') + expect(@note.is_award).to be_truthy + end + + it "creates regular note if emoji name is invalid" do + opts = { + note: ':smile: moretext: ', + noteable_type: 'Issue', + noteable_id: issue.id + } + + @note = Notes::CreateService.new(project, user, opts).execute + + expect(@note).to be_valid + expect(@note.note).to eq(opts[:note]) + expect(@note.is_award).to be_falsy + end + end end diff --git a/spec/services/projects/create_service_spec.rb b/spec/services/projects/create_service_spec.rb index 25277f0748..e81c4edb7d 100644 --- a/spec/services/projects/create_service_spec.rb +++ b/spec/services/projects/create_service_spec.rb @@ -70,6 +70,28 @@ describe Projects::CreateService do end end + context 'builds_enabled global setting' do + let(:project) { create_project(@user, @opts) } + + subject { project.builds_enabled? } + + context 'global builds_enabled false does not enable CI by default' do + before do + @opts.merge!(builds_enabled: false) + end + + it { is_expected.to be_falsey } + end + + context 'global builds_enabled true does enable CI by default' do + before do + @opts.merge!(builds_enabled: true) + end + + it { is_expected.to be_truthy } + end + end + context 'restricted visibility level' do before do stub_application_setting(restricted_visibility_levels: [Gitlab::VisibilityLevel::PUBLIC]) diff --git a/spec/services/projects/fork_service_spec.rb b/spec/services/projects/fork_service_spec.rb index 65a8c81204..1feba6ce04 100644 --- a/spec/services/projects/fork_service_spec.rb +++ b/spec/services/projects/fork_service_spec.rb @@ -25,13 +25,6 @@ describe Projects::ForkService do end end - context 'fork project failure' do - it "fails due to transaction failure" do - @to_project = fork_project(@from_project, @to_user, false) - expect(@to_project.import_failed?) - end - end - context 'project already exists' do it "should fail due to validation, not transaction failure" do @existing_project = create(:project, creator_id: @to_user.id, name: @from_project.name, namespace: @to_namespace) @@ -46,7 +39,7 @@ describe Projects::ForkService do it "fork and enable CI for fork" do @from_project.enable_ci @to_project = fork_project(@from_project, @to_user) - expect(@to_project.gitlab_ci?).to be_truthy + expect(@to_project.builds_enabled?).to be_truthy end end end @@ -66,7 +59,7 @@ describe Projects::ForkService do context 'fork project for group' do it 'group owner successfully forks project into the group' do - to_project = fork_project(@project, @group_owner, true, @opts) + to_project = fork_project(@project, @group_owner, @opts) expect(to_project.owner).to eq(@group) expect(to_project.namespace).to eq(@group) expect(to_project.name).to eq(@project.name) @@ -78,7 +71,7 @@ describe Projects::ForkService do context 'fork project for group when user not owner' do it 'group developer should fail to fork project into the group' do - to_project = fork_project(@project, @developer, true, @opts) + to_project = fork_project(@project, @developer, @opts) expect(to_project.errors[:namespace]).to eq(['is not valid']) end end @@ -87,7 +80,7 @@ describe Projects::ForkService do it 'should fail due to validation, not transaction failure' do existing_project = create(:project, name: @project.name, namespace: @group) - to_project = fork_project(@project, @group_owner, true, @opts) + to_project = fork_project(@project, @group_owner, @opts) expect(existing_project.persisted?).to be_truthy expect(to_project.errors[:name]).to eq(['has already been taken']) expect(to_project.errors[:path]).to eq(['has already been taken']) @@ -95,8 +88,8 @@ describe Projects::ForkService do end end - def fork_project(from_project, user, fork_success = true, params = {}) - allow(RepositoryForkWorker).to receive(:perform_async).and_return(fork_success) + def fork_project(from_project, user, params = {}) + allow(RepositoryForkWorker).to receive(:perform_async).and_return(true) Projects::ForkService.new(from_project, user, params).execute end end diff --git a/spec/support/test_env.rb b/spec/support/test_env.rb index d12ba25b71..787670e929 100644 --- a/spec/support/test_env.rb +++ b/spec/support/test_env.rb @@ -96,15 +96,15 @@ module TestEnv clone_url = "https://gitlab.com/gitlab-org/#{repo_name}.git" unless File.directory?(repo_path) - system(*%W(git clone -q #{clone_url} #{repo_path})) + system(*%W(#{Gitlab.config.git.bin_path} clone -q #{clone_url} #{repo_path})) end Dir.chdir(repo_path) do branch_sha.each do |branch, sha| # Try to reset without fetching to avoid using the network. - reset = %W(git update-ref refs/heads/#{branch} #{sha}) + reset = %W(#{Gitlab.config.git.bin_path} update-ref refs/heads/#{branch} #{sha}) unless system(*reset) - if system(*%w(git fetch origin)) + if system(*%W(#{Gitlab.config.git.bin_path} fetch origin)) unless system(*reset) raise 'The fetched test seed '\ 'does not contain the required revision.' @@ -117,7 +117,7 @@ module TestEnv end # We must copy bare repositories because we will push to them. - system(git_env, *%W(git clone -q --bare #{repo_path} #{repo_path_bare})) + system(git_env, *%W(#{Gitlab.config.git.bin_path} clone -q --bare #{repo_path} #{repo_path_bare})) end def copy_repo(project) diff --git a/spec/tasks/gitlab/backup_rake_spec.rb b/spec/tasks/gitlab/backup_rake_spec.rb index 3be7dd4e52..63bed2414d 100644 --- a/spec/tasks/gitlab/backup_rake_spec.rb +++ b/spec/tasks/gitlab/backup_rake_spec.rb @@ -16,7 +16,7 @@ describe 'gitlab:app namespace rake task' do end def reenable_backup_sub_tasks - %w{db repo uploads builds}.each do |subtask| + %w{db repo uploads builds artifacts lfs}.each do |subtask| Rake::Task["gitlab:backup:#{subtask}:create"].reenable end end @@ -49,12 +49,15 @@ describe 'gitlab:app namespace rake task' do to raise_error(SystemExit) end - it 'should invoke restoration on mach' do + it 'should invoke restoration on match' do allow(YAML).to receive(:load_file). and_return({ gitlab_version: gitlab_version }) expect(Rake::Task["gitlab:backup:db:restore"]).to receive(:invoke) expect(Rake::Task["gitlab:backup:repo:restore"]).to receive(:invoke) expect(Rake::Task["gitlab:backup:builds:restore"]).to receive(:invoke) + expect(Rake::Task["gitlab:backup:uploads:restore"]).to receive(:invoke) + expect(Rake::Task["gitlab:backup:artifacts:restore"]).to receive(:invoke) + expect(Rake::Task["gitlab:backup:lfs:restore"]).to receive(:invoke) expect(Rake::Task["gitlab:shell:setup"]).to receive(:invoke) expect { run_rake_task('gitlab:backup:restore') }.not_to raise_error end @@ -112,19 +115,21 @@ describe 'gitlab:app namespace rake task' do it 'should set correct permissions on the tar contents' do tar_contents, exit_status = Gitlab::Popen.popen( - %W{tar -tvf #{@backup_tar} db uploads repositories builds} + %W{tar -tvf #{@backup_tar} db uploads.tar.gz repositories builds.tar.gz artifacts.tar.gz lfs.tar.gz} ) expect(exit_status).to eq(0) expect(tar_contents).to match('db/') - expect(tar_contents).to match('uploads/') + expect(tar_contents).to match('uploads.tar.gz') expect(tar_contents).to match('repositories/') - expect(tar_contents).to match('builds/') - expect(tar_contents).not_to match(/^.{4,9}[rwx].* (db|uploads|repositories|builds)\/$/) + expect(tar_contents).to match('builds.tar.gz') + expect(tar_contents).to match('artifacts.tar.gz') + expect(tar_contents).to match('lfs.tar.gz') + expect(tar_contents).not_to match(/^.{4,9}[rwx].* (database.sql.gz|uploads.tar.gz|repositories|builds.tar.gz|artifacts.tar.gz)\/$/) end it 'should delete temp directories' do temp_dirs = Dir.glob( - File.join(Gitlab.config.backup.path, '{db,repositories,uploads,builds}') + File.join(Gitlab.config.backup.path, '{db,repositories,uploads,builds,artifacts,lfs}') ) expect(temp_dirs).to be_empty @@ -146,7 +151,7 @@ describe 'gitlab:app namespace rake task' do # Redirect STDOUT and run the rake task orig_stdout = $stdout $stdout = StringIO.new - ENV["SKIP"] = "repositories" + ENV["SKIP"] = "repositories,uploads" run_rake_task('gitlab:backup:create') $stdout = orig_stdout @@ -160,12 +165,14 @@ describe 'gitlab:app namespace rake task' do it "does not contain skipped item" do tar_contents, _exit_status = Gitlab::Popen.popen( - %W{tar -tvf #{@backup_tar} db uploads repositories builds} + %W{tar -tvf #{@backup_tar} db uploads.tar.gz repositories builds.tar.gz artifacts.tar.gz lfs.tar.gz} ) expect(tar_contents).to match('db/') - expect(tar_contents).to match('uploads/') - expect(tar_contents).to match('builds/') + expect(tar_contents).to match('uploads.tar.gz') + expect(tar_contents).to match('builds.tar.gz') + expect(tar_contents).to match('artifacts.tar.gz') + expect(tar_contents).to match('lfs.tar.gz') expect(tar_contents).not_to match('repositories/') end @@ -176,7 +183,10 @@ describe 'gitlab:app namespace rake task' do expect(Rake::Task["gitlab:backup:db:restore"]).to receive :invoke expect(Rake::Task["gitlab:backup:repo:restore"]).not_to receive :invoke + expect(Rake::Task["gitlab:backup:uploads:restore"]).not_to receive :invoke expect(Rake::Task["gitlab:backup:builds:restore"]).to receive :invoke + expect(Rake::Task["gitlab:backup:artifacts:restore"]).to receive :invoke + expect(Rake::Task["gitlab:backup:lfs:restore"]).to receive :invoke expect(Rake::Task["gitlab:shell:setup"]).to receive :invoke expect { run_rake_task('gitlab:backup:restore') }.not_to raise_error end diff --git a/spec/workers/repository_fork_worker_spec.rb b/spec/workers/repository_fork_worker_spec.rb index aa03110696..245f066df1 100644 --- a/spec/workers/repository_fork_worker_spec.rb +++ b/spec/workers/repository_fork_worker_spec.rb @@ -12,7 +12,6 @@ describe RepositoryForkWorker do project.path_with_namespace, fork_project.namespace.path). and_return(true) - expect(ProjectCacheWorker).to receive(:perform_async) subject.perform(project.id, project.path_with_namespace, diff --git a/spec/workers/stuck_ci_builds_worker_spec.rb b/spec/workers/stuck_ci_builds_worker_spec.rb new file mode 100644 index 0000000000..f9d87d9701 --- /dev/null +++ b/spec/workers/stuck_ci_builds_worker_spec.rb @@ -0,0 +1,44 @@ +require "spec_helper" + +describe StuckCiBuildsWorker do + let!(:build) { create :ci_build } + + subject do + build.reload + build.status + end + + %w(pending running).each do |status| + context "#{status} build" do + before do + build.update!(status: status) + end + + it 'gets dropped if it was updated over 2 days ago' do + build.update!(updated_at: 2.day.ago) + StuckCiBuildsWorker.new.perform + is_expected.to eq('failed') + end + + it "is still #{status}" do + build.update!(updated_at: 1.minute.ago) + StuckCiBuildsWorker.new.perform + is_expected.to eq(status) + end + end + end + + %w(success failed canceled).each do |status| + context "#{status} build" do + before do + build.update!(status: status) + end + + it "is still #{status}" do + build.update!(updated_at: 2.day.ago) + StuckCiBuildsWorker.new.perform + is_expected.to eq(status) + end + end + end +end diff --git a/vendor/assets/javascripts/clipboard.js b/vendor/assets/javascripts/clipboard.js new file mode 100644 index 0000000000..1b1f4f0bd6 --- /dev/null +++ b/vendor/assets/javascripts/clipboard.js @@ -0,0 +1,621 @@ +/*! + * clipboard.js v1.4.2 + * https://zenorocha.github.io/clipboard.js + * + * Licensed MIT © Zeno Rocha + */ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Clipboard = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o

    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 z%0A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 GitLab x.x.0.rc1 is available https://packages.gitlab.com/gitlab/unstable Use at your own risk. Please link regressions issues from LINK_TO_REGRESSION_ISSUE + ``` + This is a meta issue to index possible regressions in this monthly release + and any patch versions. -Xth: (3 working days before the 22nd) + Please do not raise or discuss issues directly in this issue but link to + issues that might warrant a patch release. If there is a Merge Request + that fixes the issue, please link to that as well. -- [ ] Merge CE stable branch into EE stable branch + Please only post one regression issue and/or merge request per comment. + Comments will be updated by the release manager as they are addressed. + ``` -Xth: (2 working days before the 22nd) +- [ ] Tweet about RC1 release: -- [ ] Check that everyone is mentioned on the blog post using `@all` (the reviewer should have done this one working day ago) -- [ ] Check that MVP is added to the mvp page (source/mvp/index.html in www-gitlab-com) + ``` + GitLab x.y.0.rc1 is available: https://packages.gitlab.com/gitlab/unstable + Use at your own risk. Please link regressions issues from + LINK_TO_REGRESSION_ISSUE + ``` -Xth: (1 working day before the 22nd) +### Xth: (3 working days before the 22nd) -- [ ] Merge CE stable into EE stable -- [ ] Create CE, EE, CI release candidates (#LINK) (hopefully final ones with the same commit as the release tomorrow) +- [ ] Merge `x-y-stable` into `x-y-stable-ee` +- [ ] Check that everyone is mentioned on the [blog post] using `@all` + +### Xth: (2 working days before the 22nd) + +- [ ] Check that MVP is added to the [MVP page] + +### Xth: (1 working day before the 22nd) + +- [ ] Merge `x-y-stable` into `x-y-stable-ee` +- [ ] Create CE and EE release candidates - [ ] Create Omnibus tags and build packages for the latest release candidates -- [ ] Update GitLab.com with the latest RC (#LINK) -- [ ] Update ci.gitLab.com with the latest RC (#LINK) +- [ ] Update GitLab.com with the latest RC -22nd before 1200 CET: +### 22nd before 1200 CET: Release before 1200 CET / 2AM PST, to make sure the majority of our users get the new version on the 22nd and there is sufficient time in the European workday to quickly fix any issues. -- [ ] Merge CE stable into EE stable (#LINK) -- [ ] Create the 'x.y.0' tag with the [release tools](https://dev.gitlab.org/gitlab/release-tools) (#LINK) +- [ ] Merge `x-y-stable` into `x-y-stable-ee` +- [ ] Create the 'x.y.0' tag with the [release tools](https://dev.gitlab.org/gitlab/release-tools) - [ ] Create the 'x.y.0' version on version.gitlab.com -- [ ] Try to do before 1100 CET: Create and push omnibus tags for x.y.0 (will auto-release the packages) (#LINK) -- [ ] Try to do before 1200 CET: Publish the release blog post (#LINK) -- [ ] Tweet about the release (blog post) (#LINK) -- [ ] Schedule a second tweet of the release announcement with the same text at 1800 CET / 8AM PST +- [ ] Try to do before 1100 CET: Create and push Omnibus tags for x.y.0 (will auto-release the packages) +- [ ] Try to do before 1200 CET: Publish the release [blog post] +- [ ] Tweet about the release +- [ ] Schedule a second Tweet of the release announcement with the same text at 1800 CET / 8AM PST + +[Omnibus milestone]: LINK_TO_OMNIBUS_MILESTONE +[blog post]: LINK_TO_WIP_BLOG_POST +[MVP page]: https://gitlab.com/gitlab-com/www-gitlab-com/blob/master/source/mvp/index.html ``` - - - diff --git a/doc/release/security.md b/doc/release/security.md index 60bcfbb6da..b1a62b333e 100644 --- a/doc/release/security.md +++ b/doc/release/security.md @@ -8,7 +8,7 @@ Do a security release when there is a critical issue that needs to be addresses ## Security vulnerability disclosure -Please report suspected security vulnerabilities in private to , also see the [disclosure section on the GitLab.com website](http://about.gitlab.com/disclosure/). Please do NOT create publicly viewable issues for suspected security vulnerabilities. +Please report suspected security vulnerabilities in private to , also see the [disclosure section on the GitLab.com website](https://about.gitlab.com/disclosure/). Please do NOT create publicly viewable issues for suspected security vulnerabilities. ## Release Procedure @@ -25,7 +25,7 @@ Please report suspected security vulnerabilities in private to W|;H$0>%5`M9diyI%qT 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 literal 0 HcmV?d00001 diff --git a/doc/workflow/gitlab_flow.md b/doc/workflow/gitlab_flow.md index f608674faf..8965e5b365 100644 --- a/doc/workflow/gitlab_flow.md +++ b/doc/workflow/gitlab_flow.md @@ -7,7 +7,7 @@ This allows a wide variety of branching strategies and workflows. Almost all of these are an improvement over the methods used before git. But many organizations end up with a workflow that is not clearly defined, overly complex or not integrated with issue tracking systems. Therefore we propose the GitLab flow as clearly defined set of best practices. -It combines [feature driven development](http://en.wikipedia.org/wiki/Feature-driven_development) and [feature branches](http://martinfowler.com/bliki/FeatureBranch.html) with issue tracking. +It combines [feature driven development](https://en.wikipedia.org/wiki/Feature-driven_development) and [feature branches](http://martinfowler.com/bliki/FeatureBranch.html) with issue tracking. Organizations coming to git from other version control systems frequently find it hard to develop an effective workflow. This article describes the GitLab flow that integrates the git workflow with an issue tracking system. @@ -26,7 +26,7 @@ After getting used to these three steps the branching model becomes the challeng Since many organizations new to git have no conventions how to work with it, it can quickly become a mess. The biggest problem they run into is that many long running branches that each contain part of the changes are around. People have a hard time figuring out which branch they should develop on or deploy to production. -Frequently the reaction to this problem is to adopt a standardized pattern such as [git flow](http://nvie.com/posts/a-successful-git-branching-model/) and [GitHub flow](http://scottchacon.com/2011/08/31/github-flow.html) +Frequently the reaction to this problem is to adopt a standardized pattern such as [git flow](http://nvie.com/posts/a-successful-git-branching-model/) and [GitHub flow](http://scottchacon.com/2011/08/31/github-flow.html). We think there is still room for improvement and will detail a set of practices we call GitLab flow. ## Git flow and its problems @@ -91,7 +91,7 @@ This workflow where commits only flow downstream ensures that everything has bee If you need to cherry-pick a commit with a hotfix it is common to develop it on a feature branch and merge it into master with a merge request, do not delete the feature branch. If master is good to go (it should be if you a practicing [continuous delivery](http://martinfowler.com/bliki/ContinuousDelivery.html)) you then merge it to the other branches. If this is not possible because more manual testing is required you can send merge requests from the feature branch to the downstream branches. -An 'extreme' version of environment branches are setting up an environment for each feature branch as done by [Teatro](http://teatro.io/). +An 'extreme' version of environment branches are setting up an environment for each feature branch as done by [Teatro](https://teatro.io/). ## Release branches with GitLab flow @@ -104,7 +104,7 @@ By branching as late as possible you minimize the time you have to apply bug fix After a release branch is announced, only serious bug fixes are included in the release branch. If possible these bug fixes are first merged into master and then cherry-picked into the release branch. This way you can't forget to cherry-pick them into master and encounter the same bug on subsequent releases. -This is called an 'upstream first' policy that is also practiced by [Google](http://www.chromium.org/chromium-os/chromiumos-design-docs/upstream-first) and [Red Hat](http://www.redhat.com/about/news/archive/2013/5/a-community-for-using-openstack-with-red-hat-rdo). +This is called an 'upstream first' policy that is also practiced by [Google](https://www.chromium.org/chromium-os/chromiumos-design-docs/upstream-first) and [Red Hat](https://www.redhat.com/about/news/archive/2013/5/a-community-for-using-openstack-with-red-hat-rdo). Every time a bug-fix is included in a release branch the patch version is raised (to comply with [Semantic Versioning](http://semver.org/)) by setting a new tag. Some projects also have a stable branch that points to the same commit as the latest released branch. In this flow it is not common to have a production branch (or git flow master branch). @@ -200,7 +200,7 @@ And to understand a change in context one can always look at the merge commit th After you merge multiple commits from a feature branch into the master branch this is harder to undo. If you would have squashed all the commits into one you could have just reverted this commit but as we indicated you should not rebase commits after they are pushed. -Fortunately [reverting a merge made some time ago](http://git-scm.com/blog/2010/03/02/undoing-merges.html) can be done with git. +Fortunately [reverting a merge made some time ago](https://git-scm.com/blog/2010/03/02/undoing-merges.html) can be done with git. This however, requires having specific merge commits for the commits your want to revert. If you revert a merge and you change your mind, revert the revert instead of merging again since git will not allow you to merge the code again otherwise. @@ -215,7 +215,7 @@ With git you can also rebase your feature branch commits to order them after the This prevents creating a merge commit when merging master into your feature branch and creates a nice linear history. However, just like with squashing you should never rebase commits you have pushed to a remote server. This makes it impossible to rebase work in progress that you already shared with your team which is something we recommend. -When using rebase to keep your feature branch updated you [need to resolve similar conflicts again and again](http://blogs.atlassian.com/2013/10/git-team-workflows-merge-or-rebase/). +When using rebase to keep your feature branch updated you [need to resolve similar conflicts again and again](https://blogs.atlassian.com/2013/10/git-team-workflows-merge-or-rebase/). You can reuse recorded resolutions (rerere) sometimes, but without rebasing you only have to solve the conflicts one time and you’re set. There has to be a better way to avoid many merge commits. @@ -244,13 +244,12 @@ Developing software happen in small messy steps and it is OK to have your histor You can use tools to view the network graphs of commits and understand the messy history that created your code. If you rebase code the history is incorrect, and there is no way for tools to remedy this because they can't deal with changing commit identifiers. -## Voting on merge requests +## Award emojis on issues and merge requests -![Voting slider in GitLab](voting_slider.png) +![Emoji bar in GitLab](award_emoji.png) -It is common to voice approval or disapproval by using +1 or -1 emoticons. -In GitLab the +1 and -1 are aggregated and shown at the top of the merge request. -As a rule of thumb anything that doesn't have two times more +1's than -1's is suspect and should not be merged yet. +It is common to voice approval or disapproval by using +1 or -1. In GitLab you +can use emojis to give a virtual high five on issues and merge requests. ## Pushing and removing branches @@ -307,7 +306,7 @@ When initiating a feature branch, always start with an up to date master to bran If you know beforehand that your work absolutely depends on another branch you can also branch from there. If you need to merge in another branch after starting explain the reason in the merge commit. If you have not pushed your commits to a shared location yet you can also rebase on master or another feature branch. -Do not merge in upstream if your code will work and merge cleanly without doing so, Linus even says that [you should never merge in upstream at random points, only at major releases](http://lwn.net/Articles/328438/). +Do not merge in upstream if your code will work and merge cleanly without doing so, Linus even says that [you should never merge in upstream at random points, only at major releases](https://lwn.net/Articles/328438/). Merging only when needed prevents creating merge commits in your feature branch that later end up littering the master history. ### References diff --git a/doc/workflow/importing/import_projects_from_gitlab_com.md b/doc/workflow/importing/import_projects_from_gitlab_com.md index f4c4e955d4..1117db98e7 100644 --- a/doc/workflow/importing/import_projects_from_gitlab_com.md +++ b/doc/workflow/importing/import_projects_from_gitlab_com.md @@ -2,12 +2,12 @@ You can import your existing GitLab.com projects to your GitLab instance. But keep in mind that it is possible only if GitLab support is enabled on your GitLab instance. -You can read more about Gitlab support [here](http://doc.gitlab.com/ce/integration/gitlab.html) +You can read more about GitLab support [here](http://doc.gitlab.com/ce/integration/gitlab.html) To get to the importer page you need to go to "New project" page. ![New project page](gitlab_importer/new_project_page.png) -Click on the "Import projects from Gitlab.com" link and you will be redirected to GitLab.com +Click on the "Import projects from GitLab.com" link and you will be redirected to GitLab.com for permission to access your projects. After accepting, you'll be automatically redirected to the importer. diff --git a/doc/workflow/importing/migrating_from_svn.md b/doc/workflow/importing/migrating_from_svn.md index 485db4834e..1938ccd0c2 100644 --- a/doc/workflow/importing/migrating_from_svn.md +++ b/doc/workflow/importing/migrating_from_svn.md @@ -6,9 +6,9 @@ Git is a distributed version control system. There are some major differences between the two, for more information consult your favorite search engine. Git has tools for migrating SVN repositories to git, namely `git svn`. You can read more about this at -[git documentation pages](http://git-scm.com/book/en/Git-and-Other-Systems-Git-and-Subversion). +[git documentation pages](https://git-scm.com/book/en/Git-and-Other-Systems-Git-and-Subversion). -Apart from the [official git documentation](http://git-scm.com/book/en/Git-and-Other-Systems-Migrating-to-Git) there is also +Apart from the [official git documentation](https://git-scm.com/book/en/Git-and-Other-Systems-Migrating-to-Git) there is also user created step by step guide for migrating from SVN to GitLab. [Benjamin New](https://github.com/leftclickben) wrote [a guide that shows how to do a migration](https://gist.github.com/leftclickben/322b7a3042cbe97ed2af). Mirrors can be found [here](https://gitlab.com/snippets/2168) and [here](https://gist.github.com/maxlazio/f1b593b0d00aa966e9ca). diff --git a/doc/workflow/lfs/lfs_administration.md b/doc/workflow/lfs/lfs_administration.md new file mode 100644 index 0000000000..5076b2697a --- /dev/null +++ b/doc/workflow/lfs/lfs_administration.md @@ -0,0 +1,41 @@ +# GitLab Git LFS Administration + +Documentation on how to use Git LFS are under [Managing large binary files with Git LFS doc](manage_large_binaries_with_git_lfs.md). + +## Requirements + +* Git LFS is supported in GitLab starting with version 8.2. +* Users need to install [Git LFS client](https://git-lfs.github.com) version 1.0.1 and up. + +## Configuration + +Git LFS objects can be large in size. By default, they are stored on the server GitLab is installed on. + +There are two configuration options to help GitLab server administrators: + +* Enabling/disabling Git LFS support +* Changing the location of LFS object storage + +### Omnibus packages + +In `/etc/gitlab/gitlab.rb`: + +```ruby +gitlab_rails['lfs_enabled'] = false +gitlab_rails['lfs_storage_path'] = "/mnt/storage/lfs-objects" +``` + +### Installations from source + +In `config/gitlab.yml`: + +```yaml + lfs: + enabled: false + storage_path: /mnt/storage/lfs-objects +``` + +## Known limitations + +* Currently, storing GitLab Git LFS objects on a non-local storage (like S3 buckets) is not supported +* Currently, removing LFS objects from GitLab Git LFS storage is not supported diff --git a/doc/workflow/lfs/manage_large_binaries_with_git_lfs.md b/doc/workflow/lfs/manage_large_binaries_with_git_lfs.md new file mode 100644 index 0000000000..210a8f71c3 --- /dev/null +++ b/doc/workflow/lfs/manage_large_binaries_with_git_lfs.md @@ -0,0 +1,126 @@ +# Git LFS + +Managing large files such as audio, video and graphics files has always been one of the shortcomings of Git. +The general recommendation is to not have Git repositories larger than 1GB to preserve performance. + +GitLab already supports [managing large files with git annex](http://doc.gitlab.com/ee/workflow/git_annex.html) (EE only), however in certain +environments it is not always convenient to use different commands to differentiate between the large files and regular ones. + +Git LFS makes this simpler for the end user by removing the requirement to learn new commands. + +## How it works + +Git LFS client talks with the GitLab server over HTTPS. It uses HTTP Basic Authentication to authorize client requests. +Once the request is authorized, Git LFS client receives instructions from where to fetch or where to push the large file. + +## GitLab server configuration + +Documentation for GitLab instance administrators is under [LFS administration doc](lfs_administration.md). + +## Requirements + +* Git LFS is supported in GitLab starting with version 8.2 +* [Git LFS client](https://git-lfs.github.com) version 1.0.1 and up + +## Known limitations + +* Git LFS v1 original API is not supported since it was deprecated early in LFS development +* When SSH is set as a remote, Git LFS objects still go through HTTPS +* Any Git LFS request will ask for HTTPS credentials to be provided so good Git credentials store is recommended +* Git LFS always assumes HTTPS so if you have GitLab server on HTTP you will have to add the URL to Git config manually (see #troubleshooting) + +## Using Git LFS + +Lets take a look at the workflow when you need to check large files into your Git repository with Git LFS: +For example, if you want to upload a very large file and check it into your Git repository: + +```bash +git clone git@gitlab.example.com:group/project.git +git lfs init # initialize the Git LFS project project +git lfs track "*.iso" # select the file extensions that you want to treat as large files +``` + +Once a certain file extension is marked for tracking as a LFS object you can use Git as usual without having to redo the command to track a file with the same extension: + +```bash +cp ~/tmp/debian.iso ./ # copy a large file into the current directory +git add . # add the large file to the project +git commit -am "Added Debian iso" # commit the file meta data +git push origin master # sync the git repo and large file to the GitLab server +``` + +Cloning the repository works the same as before. Git automatically detects the LFS-tracked files and clones them via HTTP. If you performed the git clone command with a SSH URL, you have to enter your GitLab credentials for HTTP authentication. + +```bash +git clone git@gitlab.example.com:group/project.git +``` + +If you already cloned the repository and you want to get the latest LFS object that are on the remote repository, eg. from branch `master`: + +```bash +git lfs fetch master +``` + +## Troubleshooting + +### error: Repository or object not found + +There are a couple of reasons why this error can occur: + +* You don't have permissions to access certain LFS object + +Check if you have permissions to push to the project or fetch from the project. + +* Project is not allowed to access the LFS object + +LFS object you are trying to push to the project or fetch from the project is not available to the project anymore. +Probably the object was removed from the server. + +* Local git repository is using deprecated LFS API + +### Invalid status for : 501 + +Git LFS will log the failures into a log file. +To view this log file, while in project directory: + +```bash +git lfs logs last +``` + +If the status `error 501` is shown, it is because: + +* Git LFS support is not enabled on the GitLab server. Check with your GitLab administrator why Git LFS is not enabled on the server. See [LFS administration documentation](lfs_administration.md) for instructions on how to enable LFS support. + +* Git LFS client version is not supported by GitLab server. Check your Git LFS version with `git lfs version`. Check the Git config of the project for traces of deprecated API with `git lfs -l`. If `batch = false` is set in the config, remove the line and try to update your Git LFS client. Only version 1.0.1 and newer are supported. + +### getsockopt: connection refused + +If you push a LFS object to a project and you receive an error similar to: `Post /info/lfs/objects/batch: dial tcp IP: getsockopt: connection refused`, +the LFS client is trying to reach GitLab through HTTPS. However, your GitLab instance is being served on HTTP. + +This behaviour is caused by Git LFS using HTTPS connections by default when a `lfsurl` is not set in the Git config. + +To prevent this from happening, set the lfs url in project Git config: + +```bash + +git config --add lfs.url "http://gitlab.example.com/group/project.git/info/lfs/objects/batch" +``` + +### Credentials are always required when pushing an object + +Given that Git LFS uses HTTP Basic Authentication to authenticate the user pushing the LFS object on every push for every object, user HTTPS credentials are required. + +By default, Git has support for remembering the credentials for each repository you use. This is described in [Git credentials man pages](https://git-scm.com/docs/gitcredentials). + +For example, you can tell Git to remember the password for a period of time in which you expect to push the objects: + +```bash +git config --global credential.helper 'cache --timeout=3600' +``` + +This will remember the credentials for an hour after which Git operations will require re-authentication. + +If you are using OS X you can use `osxkeychain` to store and encrypt your credentials. For Windows, `wincred` is available. + +More details about various methods of storing the user credentials can be found on [Git Credential Storage documentation](https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage). diff --git a/doc/workflow/merge_requests.md b/doc/workflow/merge_requests.md index 751e19da7f..6d57b5d98c 100644 --- a/doc/workflow/merge_requests.md +++ b/doc/workflow/merge_requests.md @@ -38,3 +38,15 @@ To check out a particular merge request: ``` $ git checkout origin/merge-requests/1 ``` + +## Ignore whitespace changes in Merge Request diff view + +![MR diff](merge_requests/merge_request_diff.png) + +It you add `w=1` option to URL, you can see diff without whitespace changes. + +![MR diff without whitespace](merge_requests/merge_request_diff_without_whitespace.png) + +It is also working on commits compare view. + +![Commit Compare](merge_requests/commit_compare.png) diff --git a/doc/workflow/merge_requests/commit_compare.png b/doc/workflow/merge_requests/commit_compare.png new file mode 100644 index 0000000000000000000000000000000000000000..46b3a56a59b9cdf0317d7ae8c1903a65eca2c5af GIT binary patch literal 89631 zcmeFZcT`hd+czjS6e+h@K&pyJl_&^EzeOpEG$9~Tf{TZJE36_z@rVD*Hb<1W90)vYexqsU*9*pf9zN# z;vD_OsiWhw?)p|<$BuD#{Nu^i?N;b`>=-NW(Zl=Z{&wq(b3wq7bP7VDZpMqz!enU< zsxPSTsw)`bQzi)BLICogmm|e_(j!kLFILW;Dz<04^!(@Z!t94p0w-_i{8e#3`}7&g zvHNmifw%8}IDR}rV3Y0m$+P@>yZ9NO@zAk2r+2QKf1FPg$>2f)kwW9qf>~2A0jI>)KxmI5TsGA53 ztTHZ}SSEG2DD+j1Ihbv*_Z@De6ggppnx^t&t~rhWkTH9USrv8O@_$%klpnY78@~s0 zu|=1TBY>nqBOhVlv@8)42c?cRgGVyf%}QzyX}9rF&AQKP`e(w&Uo9&BDTXjLe<_I} z<18S%loz#E0-}F7rJ{MN`+J;ofp~gwGDO!->|brz5qLYI1Q&gk8i&*W-(G5Z^!M*~ z)gXT&k!T8npC&)G$j_*?W28V8kOgErD=B2(xQ|n?`?#}lKhZa@R1OIw8w%GLmc_qa zytk*+B5I8TIPW`*(5lUB^%9gZQ0v?bO(i$08VMTqf8RjBp0oETjr3~d^|#-+>kP|2 zeOp_=vjMlkCqV1I9;K0)oJ7MW`GndiCQ18$PPf!9DiZ8j@0VE*ZoN{;rsqh)TBzMI z4lPfaY!|CEwo$x=6VBhLqF&R@RQBie{ZEzMf^d4X?mr$8ONvf5b~#=DcQ%t1&e$vz z^R7{#LID^$@ua`%Vr+nv8T>f_W8PQf)8<)aTZY4X2fmU9A19N8a)p7oT5+F;z`Oalkt<>wt6p~?kAzJ}syB4|hzoJPd(GuJ_!@jLL<2beLkgVR{QULuh~{1u z8b1E253fY0z6S?SHb!Y0;lr%>WM5Mp`iT3#%==Cfh==-WRGTN(PxZ{nE=_SeRR3II z4J2{Zcf%KCZJeMCd3;3*Ihqns!_%@(0@bGM)N-L=_Ew^Gayf|M+83jzFyoBmokk6X z1o`(=sOFy-O}^no?0KLD-Zi&bQ{=7QAW^l^wrL7CYPMvU`c${C#OIaW#sdJ2mITRf zhIAlBpN)2xVOAG@K$4I8%vUSF*>&(q-jnaB48)I|!OkE5-DUsXW&b_O{(EBn{~(rS zkiPr!FRaKjY?ieU_~nvX>yRZOpX|Oa8JZc5Q*rT`c63>i{h?P1l-ey|EjQs^9v5_* ziqV$J`}*|pzh2%Jw@)7k{YkNvFClX#dSQFFoUwCWq~qi97Q3Ep$9FRWL-!h6v3GOp zh+UeNK2Ow`RbPk6=E5m`s%92-Wtg}9%@BO;oEwhdPyz0Ts@3eif;+LCQZ=$>1iI%oIp<~nQd5#A~K4>H9XEw@UPNchZ9FIZ2?WB zp2IaC1%|^{MsKsl2stS)t^75@s_sQ?38XP?^cTJsBFOZGU<3YjDN$tHlYcd~Syx_> zxPcu=Wo!%dVoU4H)ZF&Foo|>`PaADCkN-b-;>=;AZuP6d_O56_VU^rog%b@os-LGM z{h#}RAbDJ2$4Y_Y(#k!sK*jK&mR8lqx*eb%8HaQ(k%gAuPR4U_}&;NoGY(}=uYsI^B6H2VKiOVm<#?D zdYawR!Y<~LjKysApk~MW6YP@zWn}&6eLPU_I;9#^;Zwo^OBp$h>#Ztt#*fkx0<7hp zX}YGb1N>#3>@vgcka!$etb5kYjJSt&6Emrm!WD*?Kb6SJA1V%e@B=R>^V+aBE%~uk zo~l(h6hu+cEs}fs+dh2{88^xHyalSbPntmhPzT39{-u59+P_}DaDP#FJbf@t7?FlQ zQL_B!1;BzmP7ZYqPnMd^q)MJF2>2AL0mB;`%?fufJ3@=g2h5DY>A!Hj&A_tiT{|nF zF*0dQ%Bp~n3wP1Jgx4$*QRLr^nL{i6BpwGH$(==9rxWU|mDu^a`)n-wg zM@t}2wbsJPi(1~Za&SkKvd1;w#R z^gGfe>Q~ZmDl1g7^%kK-VQV%7kppK*+;PHY-u7I4IC$2dP$Z!xCCw66P zHOF`%PLKI6TvQ|m#(;&hi}26i;?bMVd_5O$tQpz&P;3_>Rzfb2Fv?zDy%R*=7I7&V z3oEm(dpQy)Xj<?H!^JkW_RC-(SOPyaZ&#j==4Zhpdr|LmAQO8Qdqta(oN{U26u z1V905M+i|#H(DTcZFuJI2My^P`B z#Qm$xgYHNE)HNGAld`b=^8&zOtRm_5o8JocBve*Ci#bzd!os0P-!mB$t#bMlDWkJF zAQG6`7CdeP1O)EhhnK{Ek(t{{uVNrnwpwt)s@G= zmon#FIxO$GAKXYp(oQON6Sk`*raL`pDtLG%L;;jNP3Ro@S^m{J8| z2u+FTsQFCJKibI|v5=rFy?wCDzP&>P-rKxITXJ;j^NkI;=kdp18~FnRowhC*#i%L( z*y`Z1wHedpgx-i=RbxDAs=?JDzcFe$sWe``w$#;(1o&NEaFXcM@{ORh2lEyz&L}G( ztTj^atvAkA{kR6v>%(Y1R(9+18q^4%ZVAjWNRo3>h3>s^nWm#uP9tOd&R17gk5sPi z%0ng?7}b&5by6-gqU~Fa^GH%>sP~`d=H`!mcP{)<#eR3B>qh~K?qCe_8YbR;+&JV{ zkr&1HzbyHkMk|$SJBV8tl20m1&^%!fnQ`tKL};JqpLcfR=FM@|pG#Zt!#t=o{LiMs zYHc|;#pPb;Aq{0R2ZNm0YTNdj9$h4H2JQ4p956_5#J6t(Pm*u5S=U)4-Rgx71pzfW}VjZ5SUx?Y{S9z(f>(3oHuS4IgbJ*$;gPR+# zAw)FJ8>??0hmlLV-DiRk^Gup(Clbo@Q-i|U3J6sHct0d#XBXRpT8I6*lN^wcaJp~Y zW%SajHRN#CyiUp|+DR+l&=_4hg-)U1dTVZzV}w*bNL4Fk&l$`PGrG4X)T}H0m%9BA z4r`v7QO`DNH1MX2fIgTalN|owQ!An5zbLe9jBq*$MkgdAtw8INQiL z5CZSo#N{{T!w1{1&MaChtDF8zEN|lO2h6FWA04f`)^Hs+maSL-H&2NJ0h8_z)ZxH?1{1#!!z%FYf&-TUpb zdllUiVth;FSMgcJl9(BiPSW1r7N)DcH!5eKSXU6D{cXqA?l5x2y#O*fbRWCP z*Z9zO+i4fwk5qh|sNbzG>XcVpRPOI%G}k3+bWOYoI_r3Vm{+A{e(Ddu>%re{biRMN z7}Wmi6)Z7^U1R3Emqr^+`=(?TV3)GBqMXyGJyy1VfK*T zJ*nuT=*pUU>@AEEinQElLj|*&*feV|wR^T~n9)#=(wd%Ueoy<6qWoGJMs8}Ur_^Ok z??qb$Vxj2f$_@|G&&6Y3+X8Yfs%|RE?RGmMUabDklAc7-Hk*LI%Qn^ZRnS4-Gsg21 zgT;u~A6vEb!`iaz^lWU*KXMUqIX$W6lzdaLL(Gh;S@&X6Bmjw6Ims=o`cXs!T6mk4 z5xCiggpphiZShM-R&+M>+s8ga&d zVbF;g2@nVZ%gUZ5pBk6jP>P0@3i+N_HHpMFND(Db{p)0d~sk;OdVMS5Rz4d8~MEvI#okh3~nK zRF%$s!7)v3MkBd_KgF_~da?2(?d~IvOYJNE=$2P1wlDF{rSSC~X0REs1l`T$Q`j@u z-jkO7krntS&1H~>>DH&esDPFDk3s+N&cd+50n6$%#WxD$X*mqmKm$OZ*;pGi%T|mKN zyf0LHrF^=XvtXAtgXm0851j9=^XYUzXsjHTLbc(utylfFcIzw+K<0iqG4wp8QPgwI05Ha z83qV2ImZ*@Z;RWR0S8&aMnu?;^ zsHhtBBAPZuGXKt)4dE%Cdt(P@_^{rMWD4tBjbx-y@}Gj-&bcb%=>aY4gBTQWN?%w? zM)W{W6!tM%P2VD{3^M2AvqB%y^T zs26p$oegEZ~<}~KH&>P>57w>rZ zh07wtB2~W{iA1Ee_Mg!qA9tj&Rm#N+?)Ge#x64L(=gCTaEL7}N*;G0?Vk9DsWf?ib z3IS|i;llA8WTHt%Qgm;>kL(peLid-$ESPP8NR>o*Fhbx#rb7mEhu6S7Q`6X-??sTs z3$fs8;W#H&p_HzX^Gt;~8q7&P`yY^}QdVW_6m$0rU^{7-xZQuMJGPD`BlM-9NpRq} z-u}XS!-6foYNJ`?Yf+tWKd0YWvuBu2qo(wg(1PvVe$Wwq%W*sT@!I&TnK9!&*ExrP zwY;S5AwAKQyr23O^{(mM}C(&+F<}dA)%>Aw@KZ*B?svf6obU3f7%o5kUPMujabv)kRC&7j64A$;D6CmJ$ha zy#Qr;2*a2(#e=nqO9#EbFV!#9Vd50QC#GezqHuPDmN_j#Do+$SIt6L_fxi%N0KT^pucb?UDYbKy!&n7FhcCV2+hoEQIuRTr_p%!Kd9VGyN1-XMv;}CIH zp`U0W;TN^D3E3`=;{2eszfEK647;k%%d2A%!cO8vCg>DIXcj8To$V|KqELE<=8W(vH>`$*-P;>fY)|g}qm1(z(O5wuKsfHo|XNYqk~x#SgY2Qy#m9 zT9i?ZcWRsTJZK-QK&z#D946nW4OM%p>p(0m_l@`HpowO&B2!zO$tv8qwAO+^=i5O+ zQW@Xq*F;2VY*Y=<=RjsX+Z2o?0#kKSgvoo0y9NiTSU@yO?HpyTymfR!sRkUDwCIK` z7cI{j`bjZR(a#Ps>7k{#$Ml0XX>Ztp0(}veIqO@Q`9!Nzm?yY+bY}l=@lBBmK?V#h zXx!2)C>#^O)r*e{86EvrRB)1tW^A}I{sx6*MR4zJ2p{*dZ)*~@Q~T3Z=}?7eh2;hx zi8co`a-XE3+WtWF6v7q&IC-$u!DHIkaB*pAsrZ7+S9?%jGGnbM!*YUg(CtVmKrDpb zaroU5=y!?0$H!Na%3d2~BPJzA`YU#u%+AUGU7K+~ZxrIRp)-mrU0EmZ<+6*Z( zJImc29NVavUd+oG6vOnfO2clVIxu-u>XoFx*$L7Bg6Ev$GXb|2H7eu=)_CtLmCZ^N ze&X6?zj`^i>2J0Uff5^%Fun#ipGDs&EYo_IV3qFvNL264=Jy6|2DLb$hu|$H!l4-f zGW#$YXC*l%uKdEu^b7IKGhnQn_Sc8TuZnL=ih3aR9^Jh0Wt$?y5gV_;l{etoWRjc^ z((?j;wO(LEJm6K(ifK=u?K|5xw19ysR_omf;%=-%cf`QJgGWB!uLW|mbK3{oaq9+v z9pNeg;%6>buVz_DUw=@RJX?`ndpvaE1nI8|iINE%t#)GYZ!VQM(ED$HdIDkqr6$TX zj_L4U3&JbYlUcA|hp*KJ(6ukwZsI9-3I`u{O>$4qMsjTnXTgFMA0MX;L6RXKS~3*# zk`r%%7u7EWC90g&G=TeY-68q*a5v-c*A)$R^3yeYS5i_(Rw?(HpT+l)AVTq|*vx1` zux{`+(X>TV%kxS8M)9m@_sR16cC~UV2sb$*-S1^o_lH@&j?of)=qV<%I@TFwrpZ-P zDEUjrB3pBg&Uv@DMMlgcbGpVpXtA-dkvy#$D7(`l6CHF~+ZH%Wr26xu#LTWpMrd*;A;s2|6Z5QR#CV3{0|&v(U(LzK$nHu zX7t@z`{%tS@5P`csl39|D#aNCmVFg!H?b@d=Kb5uG@!#K{QPd1Z2&KPu}5n@5`enx z{B#8Y4-xmX8NQ{`I+DJ7S&PaukDSVGBY)||}=lpjRG#-p?UV0;i3O7f$hEoZeMJcbR^eP~MT z(Y+wZKB3Ra_F8ap7RuFF@K-f3LvSp=PA_II`oqWpIoUAzX~n4)X8maZ>oAxz=*nL)8f)@HLMcZ8gN8-X8AZF?i@)EK z+nnz@O)7b>10w`C%jAb2)3+>veS#WpgpKj;H_Ko=4-`1p2-<9;z$)2=%{%nK67m|w z`Fj1TD&sR+hk;tZlm4P9qYt@Y+mWEzExyI+Ezi_!K9 z2+{+3- zjqI3`oBV{p0<(-2hPz%DRi!92?-^EP*BX8!b* zzl6QP*PNUEqD*n(=foD;GZI+en7Zkb# z6(WW;ax7w+*z*lL4(J@gzosiMu0WSQNLfy<X`7-myAiCUJUN?pV z=0`9A@_OA`7*OyXrwLW-U8|Ga3b?qU%ewSQwN7Ypk*}k9v`s8wP@ex~xgPArDQ+w= zOo01h3Dbn%|J~$aF3eUcKe{g_h_!w&Z_1V*PA!R^U0EmJAssAL0}3mAoJ~zl*0p*; z;t#CAD>>>r?PuKrWBj-{>>G<%=>ni<+&+UpH?{l(@}rY}+m&H)at9g}Go8Js3U6=V zDX$zat^es>Fs;@U4ZXzv9bmAiumyIhzp39nm)aFZD-;nX*W`h*+Y6-x;dMXrTI@u;C`(?%XB;Qvf?cA zm9Uxdyn#Q9ubO;t2v_K~mgv~j|4q6@lprJKk;UiCO3PS^AC*#)>K4Y2Jt)51N|uoqZAm5N@f zEk78jLnFFHgx@!Wp1bY!icMEj<8(uO{(J{d-9jFp#B3G3iJL_&E7@X@X2N8U&G!w- zFc;>UVL$4+S<{qbfpm_B0N?LOB{vtBbj2~0YF#U;qiTY$Ku!l&U?Bz{;-;%Q3+vL? zg7<{0&oXoahlf&!h-+N0o-ju0ck4>9$<#VcyQl|xMsvGVsF1q zB}u|_KwdO3dK5Al0phZYz>uaxMJLT7h*0zSiOq!iVxox6G?)h!h!e3H4NyjTh1VMd zSiN?GuDIIl4{IFkZ-{1xaN!v|_$M0!u$}nK!V2r->-Moz1;(P2fut6XeZt7OsYag; zV>s2!>wDb(7gO!S&~tpnfGp0+g(fL^z=NfpWGe5fwK8PlBN&sYvi~-TeAg2e=lOJH zE?l(h0gp!R*BEeJ(ME;@(P(~eZP?>+j|eOy4#G>oV1h4byZ~HdA15a_u!%ORzW3 z0f5Dp16@uT)pyX{T&50A^JDf6krB6A39@rtj!BE8@(@V%&Eg~cwyE)IVoqzAr1ZzP z`6e?3Y&9dq3(b;sY)b)^#=hTl|&y-+xOL`tke> zI!&0|hztmQm>J*RG!5MOT1JGb=@aNB=I@d$MFLa5vt62A;k#lXwXdF&G!p&(Z5%8o zuGZni$Qa37IukrbG1Yn`L>IEjLY*XypZg%%tY<5A6Ok5W4=dA5DjXb~+>2;3Iz6Jh zl{b9Zc94atN0||jZ(g<=ku8lP9ENpC_4i1iQyR?cY&HorXm+NYODh8+-p4OYZE*uFrs*>A77JPaC z@9CQe5RYQbpQBgKUu4qSp^6qLuKlHmAlBL7Ci=j6dfrERwef6UUU&25><;=>e4U$K zB4uXYt%Y3M#~*(`3@;^TSDx`FDeCU0#po|;kD2`GhS1YhplxlOk zxxaqCPtbkJr|w}*YMQFdKS-G{YHh!L##DXxR-d4O2aRNrJ*eP}jr3?jJPXkSJx5F% zBkvDtl~WRNS(td}YC0a?#9OC<64HWtU#TS(wZ)0a2MrqiN>}4cNJuE||42hLY>qN$ zJTJh#;Rj1@77J>AE|zS}I@g&{H^xI6GTnC$1f$lW>7DhJ?sAZz_M6HR>Zj)7~ zW}26R_f|ns+@Q0xz$mX5TA`f7{?KuV1^$j5h!ppx>6nw_Y zCU*DsvzA*m%V&J^X~vNtI=IpA*j-D>SXM- zfLzpcrmJOo<~Vv9IbHW$37>n!HqDZD>kMp- z1qqnwV|=`SR+gEMLiZ(%(w-E$BzZmx{|D+_&z?Q!sdz+OhH|5a^_iPyfQ>Qq@mTa3 zeSU&6ET{EKc?logw{>>*_x%qONy2|#t9c?@Bwx|#&{9!f6}iU;uy<$rFA|n#|4v04YY=!L;{n%auj~$S zoQcfl!sn?v+B2I6&+lalA*S?laP3V3OT)*N@9!~}bYn)e5*-IX2@%{sZV~*w41Q76 z>CGdDr(>=a!moU3%sAh!Wzf)8DWY>Kpr?O8>4A_=-355d0uuPs9`ExkQ_xEx*MceE z6`X$2)Ag+DlOks`du=zIqC3p!4%?e{lFqLSSkDVC!RI-4JmWTO`80kQ+6T5X*pWJ| zvt)xTV+k??srK&kms35N>eFf#YC=yJ#|U+N{%9GoIE?_dzLI`W+%ub%tkF|38ig8( zA8~gc@!FwvHPK`80}G!T677T=-YYu=X+Ew^MRQmFtSv~aZeejHp#}6WqKK)d4?P^p z)>0LH(Vn|HuyY~G57ry^>L7}F-8mM0Sys;H5R|>Mg3N{jA>;IT!D5( zE%he(Lk6z|JQQ8wU7<>U%2ZJhJyPhip#(L~E7C_E1Sx(kSTppg`sH3hNFlOHKh^lO zfo`FJad6*}abz*uiKV1g(@->e=}-8n z1G&_1BdBV7Mb|*O?c^PAaVRG!CQuLZv$ZnSgQNiMNpA{AJ_Yn7%!0zE8kQ_9KnI8p1+7c(!eKYE$@!5R1Bi*yi*RnPF@&R5jQ znVnOrK99pbR2rAUH?lfAKP=UdWD7^C)w$DNE%E*lqb?;!#q z@WPCNnNJ)(C+tI@0p(E(0CG*fMiWR8iAPMsqdCZ+^n0cZoexnZpxe%gjlX>Zw*-2j zQUKk)lY@^)#))}$xvtTwFqP2?6V`~OMDcG_?fye;aMM=QM|EQU);QQhe-n+W7t-iOtG<~w z0U6bu*mPYVUQ4*>@Ij|foRGc;M} z$DVf{hXoZC>OySO1zdGAxOr;hC69Qmr#HEA=R8N44>CR_d8vtJ!LacM(}znjPaiaz zn_~>H#GzRsrOp~wtl;G^bEAe#Do=l0oQYeeC=6vynoAX&$yx@k|= z-71Od+L|XaAL8y<{pWmgx50#|nkNBT9j~CZWVSZHjO}ARxp#KK_2Q(!i80|7ek>@z z5ZxC$JM%+E`NIfHsmJ3~#v&hfJ23OnaR*K4i3h>|6r*1r_R-L4mYIKtw?n;Sx0vYy z!poT9!wmVon3FWP#tJ{vbN?(I|L4M+GiP@l;<7q316}V9qz`wH>-m*kn+0~nhwjl; zu`}Oy^iqwVhcx6l*04M}dE6NkwK>6=dd``>=Dk0}ttmK5Gb3pJEoZ<1#eaxKN@fq_ zY}aBq(fW9v?lE<#m?HXu=&~O!#*NlegC3iaQM@R(w9{ zH~%R^)UDn2AMhQ2RfE@@h`@)-nRXD4p#A^{L-Z-=ZcxP8Q)=6oIOmZIRHfhO!y&LV zwr-k&kMJk8P_WU-vzpg+0TPY6w0+^9pGPhoEWHyy=qkf+`D`b0Tv~)LB=TH;!R$}f zP|l)tL{`kVK>BQk9e{;J#^M z$vru0X@;+r6Lryg>B!2~Y-?>sGe2>3S(e&lh0VqRO4PFe?@@9NF}=#}QKrNbP{?EJ zmOx5ZFl8z{^GISQ7~9|Y!801KHCQ-iku`wUqihmFhRNWjDK~p3Btpt-e(|i&dIU39 zSDSkFf*mlcCHU<}gCqR=j9!Y9DspK%k}xUJ-%>2?54O&-LxqzvW#e#Ui1fHMY0Z zU>Zm3*S?}lr3^NP+cd~eY@ljy!N{KN%LL_x?9)9bHYmzSQ1SJ>jk}pv8 zwk)fUU>--zJX}^Kl7dL7+#6xJr9BAeo;xZBG3y}K$CAHv_C2FU#5S9H>IM9M4o``-adhQa#OcI;&`tz8 zuud>Rxx~j8{l2KziE?Ca>(0o`IUaa+6OnPCy;R1<#YM>Peg8nhowDUOa*wLaV@C)- zROYt%Aj)O)Ny{+cK?|N-Jy?8VWkWdR7k=SvDTRz%TZnaFF2=X4?v6PHG4z(Y^Vu?cHyuA}fg7^OQXy1zVPJ{qX@^;iJCe)~xB2*_sC z;$3%9E`!Bd62IAVFa&C?;alU0A;{YPb)w4^+W~BXL&ef@u+Cw8XpJ+j_zq>M{m92< zp-~BNm@Vis_QiJ}t8fQA1s!FHfOh=MpcAJa_!Vz&+lhC%DJMJ z5YI1aEHdg3R_2AnZ^gTP*venWN!%|a)ubd;^ZFLT-3lZHe8uFrV~Ri*7}+-K(z^FU zgV%C{@4tp&4T487-b+$OWcgpGu@FEMM_rElY2Y-Wkk6y9ye|#_(C51R75$g{>E^TA zCCTrcEj`$zn+L5jBSp-#s5aheVtTK{09)HA7oJCVbPS{+sIEn`I5o;FyP4T~ zP5dSD(`nTJ%EL;-lBJvBYWy*1qd$Y|k)DFhQ{c`cbZn8Xhdo#>cb;8$E;oTY{xYz~ zIehaQfX$e-l~Se(e|HyX5_`vcIBJh#!(x^HjA6i94cv9-qd(jAB=H)}sZ|Pyi#?Hu zt^lTE4oX}9dZ8$3Yw|&wtn?hAO7c28Eo9npZOQ(AjgFu z*l18gn>bN`A(NK-?{xQ5{Gb*)N;OVH0qanejyVFNtY;Lxc(10VUCFDap|t;< zAjXMDSp8E!Saen*gl~5FK4xoO@Y21&+P0>!*Ug9q5eehb0H2r_D;W<~x3N2gCP!vO z!`8k_GL>H4MhSvMuP?RzDxY7$_o3moImTKHPMnWb#8CvvJsz}i+9qfLI_Oh>5bmr# z)1ft0!D~6)z@HiPv}|I-y~p{XdeA}aP^wn0-$irZ;s+}p(ql;y6C@PPwI_Zz&hxzz z9jrilGmLXRC$k{scjq#|F4yjJlW+fX#S9e3o-p`FeX%1jZeBtlf zysaC=qRn*Q`iET%i55|w@{WJbDgiM#j-q+zk^V}j_DcHoE!rMC5?$|1-4bX(A)Dom zLidln4i}{Hc{cJ{um$5DT(){0PkGBT)!xq4J(C+3Eq|Vx14;@_p5-es@;NWJc6W@% z!?HhR2%NL`Zd|->o3CfFhjDVin?G22sOt3F{*#?`Mx-Xru5=XS{fNi0vxSXv%wl=3 zRh)0Fkq?Atw+hAgbDcrlT(@j_GFGV}pKGj9yMp&hSRi~1_q5bycdC35|It3+73YSj zRZl+%;l#Rni|by6CXdQKxN%|E)Ja=0l4Bt^`Wb}Z5)}QVSxA9dgVP;wl&w&{aFKeJ zG=@I&yZ%J$*gJ#cDD^9@+8YiRJ$D|PTpCGxTj0+p&C#9eu-#`U*Ir(D%#z)i>c{|?t zWVR7!nRFE(;a(ok*IH6;VvK5HIz1TrD>(fZObnaTc;gS+TuZj}U4P!Ca_7GST{$cZ zGZCIDzQfA8;HB&6y}!->79>}#Z--6?h~J^dT;CsSA@v?7jg8b|Y2FJn@D?qG+(*-% zeU#hCbi=6`QkG`HY(qIRhQ0~)YPvi|GS~`gCf$D_SGBJAsVr%h`ub&|C_|VBCL&U~ z(J36_7mSUrw674oObE1I0=#?45_rfpciDg3=YmOQ6E*E+vO|)&MIVa(e`&9RKX5_%!#K`L{<~Cp?(r2(iwBGN!@f_mH?r}}Vo>`4- z!_1N9a_7j>N`6-<+|^WG&ONBE@E9B=cf;)~CH9Do>J^)^DvOGMuYqy1qRhF>Z3=4( zaj*<##lQ~-;Ir0AHb*?qo;=-|;&;jwfjQe2;#7Do;3aE1kkqL`nar`v zz*oOEuAv{L6))$1Mi8DY0{E}5@J{8c-gMJ~&QK4IT!`1yu}SF5u><(zr*bJKnXw-W zU+4>nW;Oxc!yrR9gkYb3@NSwM(7&^sa)$0u2HDSc99Ue9r{4Wnfq~7LAo8XCG%D|S zW>9EJl2A9?dP{}rdTC2*<`k3SG)uai{&ULN=tWn-YmWgL{6*i*$%sk^kZC|>GkR|j z&Qv(E_^FgWtJE$V?CmvW`*GEH*Pw7+JCrK;q|mLpcdYbjemKt@5rn?T#~KD7z?no= zB#WBFIx%w)S+WISt#R0R4=H!Q{$Bxb@%g|tPTHPnOYzX7dxO;L@;eXU_&VC z2PEGYZc5{6(8X9-%x0>Vo7e>{Jf{!ye0Fyp)aIlzj!#lC;|JZum4$ghi+NErXt5vg zaA>EjxSxAx<+Qxl?eDf0c<#QcuPTMprLtyc_F%k(~IvuVF7|wXBMxER+Pg0w+RbI0>GK(qxW34F9 z(R=*@TliW~QHB^0M!j(hJDd?6Wi{<|SAZZP;uQMh@|BB(k}Xx9tOuA(z<@(xrfKlE zf0dxf-5m&if8sT&J#i5Ip;@A2e$VpW;w=mmlVsRKo(c9l^=dGqEQ|>|vRQ3WiDtlM z>7Ikle`vFXra4%XMR}**5~Pti{$*VAkY*8b_i?J#MB3diW-vl6y!iEtl@ zp6Or_cKi-zv>1Vt-oX;|twihX5WMS8uDZ!jG4d_so8HZbuWaCWo^6JpYnP$&WSF(< z#z!K2>j8Z$yl!n@`~nankvY<+O*OCCpwUbq_}xSY{j`zCg>ZWo%p7hJePnlGb#N*b5`ZE$3{k){%96Toni4uMq;+tF*^0jF+rCItQq36!%nJTC7i`} zl-2wG_0j>av1BiXnZ6$;tCtiFGMXA=gs!Ucd7T&A=)uxn3Xj4Qt_t6u7Pw`mhDB6I zkNMo`3wV46kS;T1U2L4LnrDYjdG|2)Uy9(z z*jIX<&;Tn}ege4B@XX$+fTV(`p6&K?fY}zxw3+dG_jRk;k7qB$rl*&E0P}rOe!MAp z=-^juvN%0`K| ztix2imZ6uk3k%Q4SeBa`ufX?)^rR69sQ^!f){$2`1m_=aGq7e=A7MGhkgWRd%k#^( zV4`@<;)mqvV5g=hT9c+lqgwGT{7KVa!#&~+DsXss_=)1I6ZiaE)y}7U>jJk--IOTY zw3GBvsWCF_Z|kYGw{5b6R1^1L>nLyQr@D1~BjsNy`E9jgL>IOE(qAQ>)4ph7TMI*Q z`YpGFTJtL!(L$Erh0QF=6li;hM}#XI+a*wly00!RJz{WO%R)83u=)U93yPLn z%2mI{caoEgKgLOp|L||5{?Vpl^&Lxw{1EjdHF=@#%n@z%ZlT+Fb^XuaUBj@qJCC** z{a}9OP2eQC+O>Wz>}YrsU3I!iGoJ-r>33lM4ib~AhaIBd0^FbrhR`G5nA%(;(e)<+ z=B?HRCHt+@pMk$a6iX5|XgX*2DVsn*Sy^#$`{q>BcBP-I{L9E+@TcSmXf~XLY9UA+ z&T3{)0BOqIIkn?Q)e&SBotXOsNZDA(B~tLaGSSVhg3Jvw@P<;bF!zyRazFbe-nCS^ zs5P;ysnR$Dt96xq9)gva?GG$2DwfbVyM#MSd!c{K-abi43P1>4tCW+i!2( zn{HjOD!|7$mbb|(u`7c6tI7(zEUb<5p{WB_V*dwUDo;v6e68%>%nX@w#mf)R`dZ(t zGO80+!P#GFf}4%X;-OT!%fH*Mx;}&Ep-}>4)F~<2PFAC-U@PPZalPsmagc_2>Y6FQ z_lAYiS7V~+8@|@LQBE?oF;=fBIhe7H>{~fW8y>~rx0uw^h@ngh2GcC}8ey1}5c~~1 zV&P(IZG^-Te0;|f69TS?8BD*q;0)ajV;L#`DmvO*K@0-nbV42oITga?kL_gd;7Ks+S}e` zD439{L@44M%;6lM5u10Wy@z!*qNnqL8)IPW0qkzlM)T1>KSYk-94=H^uYET_O>N%Y z89ha$F10|IRlmAjc;3`)3v{~h9Q|X+(azf8>Q1vRR0C=Hb%5HeYpP1z70_8L9dy2! zSFQPf@y%XPPJdqNNXXAGYQ;~KlJ&kteX)Z4+J6Vx7VsIX^8@T}BwPxt#93Eb_6JTB znNF{l)Uuls!O~z2$dx8p2d)mpO=JM`?iK$D2cY>l|^UvALT32#K;<7vs9kdt2euWDWe z{#|32UtFetrKuEQO9I3n&7hI*7w?({RzUT9Z9RA6lwKx6t|*SMFH7^OpH4xPi{6ui zrvr^{L&pK4HExh~=2X}Epn`u8lR68FPex4n?Ws&iA>+`R^)8sg|M%~_UAE2P9tkWl zwQb>(2g;Oyi*dc!%cT}(Ewa09V008#kqj>GdsriZX-s==K^qyi*Qk-*NTK?Ipwh%& z<_S2={sBY&RiI-_xf}j7uCxxKS5t(*$?0XrmkGL953(mQzL_F9w2B&Wf zOex%Vv`Sh~{9^{ZS*&3-y5t|dXPyw@WSr=uVkf2n1pj~I)P^UGy24ntM{HhyQICZ{ zFA3wZZHJGq*vh@J5oX!{{5wF=je7#%R*UzU#-dH$`@jy9eF*Ji5GNI=08qI?uF-Cb zpL};e?MI`{)gH@&Cf!dq*|hHEYA(77(N; z2uK%^CLq0+2uM*;Ku|=w2uKI%B|%zHsR~F3L+`zpL_r8j69_dzP(6rPWBVWaQ8#mt>g_*@ ztX10pfXt5U);}wnEk#lJk|9_B>BU4ZVf9l~=>FkDv@TKM1$r<4EM53H##JgPG2SNj zAKyDqN2Uh8Eur;~@13Oxfhp%QU;TeDt(wOLf&NJ2G+b)?JIB<)k@&yXA*`m>F2|;P zKjKt)^!?k$U20ND19NWSJH=r{bfAZT#^Ji(LY+svG^lCs{z1h|Y2QkG9nW7=9~9Rb zdlWcdVss_6=JX(PcAnYJ=rIq9bGbH#O;#TQgr}1zHgmdPIr6gtPKE7g&yC(hh3@<(AMYB9gF7s;<7gG8uqAPk_eY2Gy10Cv8Nd5`n|@z@c;t$MZFKf3%Bb2EE*nLp z*VJ1u!dN_%3Sy+jn*s~4-eogPf9gTqYBl#?#{z=RQZ*ZVt$P8wk}{63??V^cOoI{s z1bD*Hl2 za(3%;{*=_5(Sen(PJ`7DJ#WQ@sJFMyut#^0_r4yPoxV@iSj-B&$SyAU$BJ|2fCHn2 zi@gOdEpxn3<@mBJfOY6yU}TeI##Db; zCkx4=Y~3vMFLcI8{PwM(Ud&gI*}lJ<9u95ixs)k!j_1~VnI})!RAs;B5=C{EoYs#^ zkDns!?$_HvI@yQzY>o~|K&7fJP_!L0-MEm^{uQPs_U!BBmZQV{yqiN^NxDZN>P>4b zTOdhXKPxi_cBf^ZciDIDe%fwty{ogulWzZ`)U8|lqPfwHj>m*_w`nZ3DhutTs*ywyt6nZ<>~Awp_nuV6EE9JzYA%WEpU2%B+e z{HZnlM@r&eri!Jk*tJg%O5~Q#SwWpC=ds12%@0&bvt_nIeHEl-vl0kQMBdv8K3!W1 zB?{yBcyjvoIq)m5u7~hhy4QjW`^1)wlz*e$PJhvxe8_k8^Lu4lDDiih&9?Cjzt=l6 zM9%~}s5o?a0j1~6e%dK?aaESn%8m6t6@JK8f%3`DC>9y}YSEQ&5dP`z0;*6SyL6DB z31P_u6PWwb)vOS2GMhTh){6x4Bxq)TT&eLel2E`u(V#&4|ydLx*_ zOB{h<_J;{&?MeGHxYG~5E2)7~a)edC1nqDMaZFGv@oHwwdkqx9Ab2*#uip25B!)}! zpfY7@5`GGZqTLJc95l~bmDdZ%W_zzu4m!;3pXGiOyEYy6;bYjPu0P6~Og`i=N@CZA zZTFO`)3|E<-ovT)sPODHB;BJ)Z;U5&hi({8uKBKmPtgW$sgix2X9^Qdr!EJCYDxPZDxAEg>;uhb}r^xKGovll9(Z zMx~gty!l?+e2BHr%4hiEl@*Vb2tM9Kb@I|{4J$FhO8FJ}i`I%LeOlAO+@os#v6OG3 z;=|R%@bDi3>Dfln10xT(yfJcP`i8GMM5x3UhFR5Gw&drX%F)#qt%#}aizK0WzXgV? z$|#*xzs|R!j-a}eIzIax8)iMV3J;-n+~hD#!|_0!?ZqQ;MkHIR;7y%|%!2+}84f?o zLhrjh(kiu57u{)7`X3O`fiTL}VJRO=ZtRnZOX6O4J@{9t@H#MJtK6lnoSo!i_cu7j zlS5u(?i5D{p&@HJ`0%c!LHF~W7a!#9T!*sj541PuS&g9iwpnK`N$UhkZ<=~@geb>| z;dBaT*njMt+izrVoB!O7mx{%Kyt0Xhd!Gn``;D~euY0i(EC+{#j+edz`!S?%_#J5t zw5_)Bo3)YZB*N5GWFX?q&%mM**zXJt-$Sa%fY#GeHc@feXkA%w9wqtQnKa*S@9Zf@ z)pk9Dgo|9GG#GC5os%*Y2C`ItWDXvRJI3twYlamScRzaYGQCIa)9MZi z`DofaKe;PC&f*fcd%y$EmWa=X8^Wq~?^jmNNW?Z5Q8qI!>5d>a=~Fk>Xq z(l_Nc&_*D?4tCHUqxTf9c@OD}31{?227f#6zFe&r*K9em41-hoTZMSyGCn5CtNDll zQHM0)HXF7W{ApQclFJ9muo?=KHgC4Bu2gD-X z6e6&#bGueO8)KwsW=VDz1RqkUTS2eJRh~G>VfxOd4miOuxY?-H`nr}bKiAa0-kU56 zy#J4&g?CT(#YmtNw#9}P25ZiXSAxnO&sYYdubYzl9;q4I1%I|0llSFs`Zml|E=A0` z=R4Ty?bFDsSXds7*~qD%{1&jW1BNuPM;TMAa#C2% z(;G0z^HB*#!!Zb9?4A&$Or(h_BSgt2UA3%ol+Y?t5~Ms^ExS9_Jtel&k%SK-$*OuR zKh5$}e*d)J_!brl>4#1J0}8$gKashuKF(>6!Q6NQ_7AEho0Da?YYZoNOeHhtaY z=vMC7CKwNAYBeVyK(@nTT?_P7^Z1>t2+D8XDR_S|Lo9*qbr3lGM{TK}Q~Hjt;%ox= ziSP8uG05-`&X7PHO|T5E&+H@RLS|XmOb$y%N3-^0w``)Znw2s>+vWlu%uQbd)>@?$ z-aSdF*ZCPFPOu1&NA2H<734yHQWe^@;QS%JsE>{Xx$$mFv!l>`2C!W`bCSsug1e2v zYo>%OV(5VtkqxWNuln#F*9f{@_xrl`)BZ=+W>bX^)S%jFG5F!l)0KuU-U8Pg3!F~Q z>6MGLdkwF;8C>kq4%p(7?vhpkd#M!C46`chBNeMI6A{T^?H8O!IS_8-`C80SL04u_ zNw9c2L)v)w>p5#Kq{1mV_m&mg7I$aaB6LOr)q}j3p+qBkTP|}`Z+BCat=Or?JKi{O z+E~<;wU#OX3UR6WWOfd}*QYw*3~tZ)elwY1FTW^m0X0}_$@=08eAoYu}Ac)pNo4Q5pgHZ@E zR_XjaDsw{n;i5){_S!_3C`cgFDob|^n!b6u$q4pU2ki}UzPmm2*&Z=qX?Ngx3o!Lr zG3{*rU#HrwGTtgj;6=7QXsD~f&s{uLiQ)(3J?xq40S(Pe?)%Nt|j>>l3KI%>WU0-Dvmit>U$hR99$8b+EbVtTzmNMA2IRg%))xWy+B6hS zUt^(nKh^f_5#>ScolO|LjJ28b53Rj&my$(ixs!O3bkk=!ZkPNWJgQ`mGnFT#CCQx# zT|DyIezUQ3N~MCLCt@en`nxvsW{bG5^(teU=aY8qMkpHWkcVbc3~6mnR$dJ4=SdWf-AG5>sGPr2O+^CLoVcg&+FyDO!eAQ7s=TP zR#CD>Mxw+pT5~>8!SdKEpd_H3QdMeFR%P##s|)GKW~nMBU*yb;`6(EFMVq)p5^Sd@ySSfagUj*tJM#kDAGQA z%Z0n!aVOl~?acgeaV&fD^_Rubf@kYPp(`nQP$CR@zPZI5BrL2(Av|Uf)^u|TzGdR^ zqO81G5G9kT{>_|q(eE&6Nzcg;#((L6?7_<7%B%2UyL}jZ{UbT&G%TFszSUxP++Mb3 z%)=nKtjD5mz^>)cz4ewbVr3BA4Yf_j_G~-)zC-LskuP^IVk1&Dn!@|vSbCbMK)&8o zTPu)e-=~`sIc*#oU7sssw>u#8Vy@AB_4KPriE2YOC@7Oma zY(S^QAAQw=x)JV`3UZ9dcKinEk>e3B?U$;HuBKjl3=-h-4~$HLpF|hy_+n0yn8}W} zs1!WC{5)2w=9+b|d z#d7z+`u=mwY}jsDg5}4elRu=gVsGR$4CFq)sSi02X)$N@Nf3 zQF#-(n>**Tg-`r?bV%-|--n%5BdN%vXgRoh9gRbIPfuM(>0S@25VdqI&Y)R?rtS1T zZ(HBF_%LRB;!?}k3olqu6@s@y3-8Km8uAO(JS^b!SF)lwhtF;w9r3#lf`(=~bV+Ib zXx3A5iIvY-{2l{j3DYYVW?pwwTev#k<_~aU@oB z(v<=0zmm*lPDhChLM^j_|jE`}4rr!w{}PYryh$MfuuA|{E*d+s!dI3FMO=2oGP zu_{dW3f8i+vQCDOQE!Hj(iOPd8+p}=!--B;zA}l+qL^F`21=85Pz-$)rWqODt+FzX zXE{c{Dhxtv<|dHM{RiRlWTTb2SrENd`N$>g#MB_{usR8TZ*(Ql*aCbFb~w~s`9+~q zZYGeiHN&PvShXm~dr|;77U-|{736oYfAgagzC`7jBb&GSq(-@mXS>=Kn`KRh0^#~$ zTrXFSUo;1HmtE~h(!U^c79YtYgc|)=-`ZI!nFkTNdlnzJ=iJcd=Rb3$%w%~X(L$TF z{iYuSj$%MY?`67uvBD}K^eNzhrF2-C&HMHrsj^XvQGa*=@yPh#&TLjuBeSsohe!aE*}4%CM>IC=Sf}5gqZxQ^-x9Sa^47YuL8944p34<&>r#e?c&q|A*K{F{tnD=nDA!*^$0V87) z%ERrGU-a4w?BSRrwq*M_+6h@=KJSZXSh{8RMM_@n3u&}6HSqj68;p-I$~LDmSx8S@ zo_Xb~@ST$&wzgC7%xaeGPOz@gI)XKhbp8dM^f|3Q;v`5-VVrC?)m5xu zaNTh1TtuwZ$=gyiBy!#iN4)M4oBeG@F5`5J_G|*Xi)uk2W9{+fE^d486Wmpn@=YJwCHm&7bCMep8;l(Y+2f;&@-SuN7|3zS(Pg)$?gVP7%FLwkG%i z#U}6gii_1|mR2fWVXDJti+L`Tx*Y`_hl3UD9kR=w+^;b!2)u~P$Ms+Ken8DKt3Esx zU_(Z1v%|B#N9bgf%aCM^B~eTYm_zOWNdo4_$=%+5AKXb5@Ys39O0~5X&^5TyxTatG zN(0Ha&mLdnztJYMvHN0bkss$0c%FnTf2fAO*t(&BC=oPS+h}ST^J2{d;m^73F*URn zL+s%jx<_KO@P*oXX9}`g>1e-VFk_(`-V_FBoAKDLw?3-5$L>AQ^M;sYms+8&CAD6L zju;-w?D#OH^q{rR)F1F%5*2d1AM`(#o+chXLQj6p-8tJrfM|C)v?G@sbQQfCAWMZc zdu{iZDJZt_t~{ifOdl^mFF9qQcq{Vc#0tVEwJnd>WI#1lb?t^|1mgjNqs|%5W_+W3 z^_0%N4?jwyzaYPeIz62YNSn!M4z{2u-v3fL&UyhF@{zD@t6=lcXcGn*rQmm7ZnjkO zacKr!jj0dsjXQ;*Z+u9O$Hz=1?r+g=dso%l8`e$k&vx_sAmr#4)yCKkgmPCt_CI<2 z&DVEfI>EmnUv4KOL^Q8Jd|pHv(7hemI*96Q!@kHTjx~vi>Hzy5{I;@j^q*>Xxm5Y; z*<0+I>r;+3PtjLjkKi0Cb>Ozo-(y;i0si!j=Hi*)-9gI%o#|%i^ec8h&EZ#eniF0t z)r~E7U!Q8fV;XiI_}vJ*LN5GVfXbH?vBsj zE-mumXTmXmFf*}R6lx^t8xg11{C0EfnY}^Z&9BDJ=RDYdY@tXZ&@G-TWyD61nvO)B zWix0wBO=S!Sc3Uvx1(7iK)Qw#eg{+0ePF!_#@5SrPYOh4I(L%NCL$hb+5FjX==|GP zq9~VBH8%?oh|_Xdfz^7wUCYJT-*S?l;o&2$=O1uF=6&+NhutZL60=%9c+Dhr4H4*i z&>H|nu)chR_eMzz(6?}1c9KMPy9)GP712t$h{d^mo@`%=)eiqNIpr$7@R(M5M79}J zuzmF!J9Swlet26uuRd&p>5hZMU>9}%uVwJrL=97%B2%q^^ zmam42ntH)tj9=%1{%vE8MqgfVRE^O8=XBx!yDVmQyS3ruiQ9HIJ`M9{|Isr$o;UuO z-^?kF`>R1aK+P5={Qv*_zY9dfB!*o9YVbQFy@W;mgVG*6XLziLmZs?`{}8L+_b&jS zEnQNqum5K=eBe7GCd^p<38<&1{XhP>6ebAhD7vET-re?}4N-qT4_D*dtRJiV`FWP> ze;t9dT*;AwLzF4n1%a+!A^|H7=KA8tthk4#{VzV{Sb%XLs7Uo6v+IMyg?0^p9X77e zr{ZPWg8ct}aD7(D0)SD(+r0hd-1PnRoB>wkw!|&N{Jigf*_F`qZ$CGPm%c9yBeFrl z2P1zu>N9)T;l?=`6oQzsAO)GYb&P_7FHZjZyC4^fk#tD)*Ha=?5EV`-^5b6P68^b{&O8~?-Qdk@6?FwCvTa?q zV-O9`Z0L{f2i3j%r68EG#pfa1RcjuO=f+62QICw9$i`{C3GWoL{R!gbW@qwf;=cPm z=|+MIGjEd)T^?AhU>g?$tLp={&T2n4edSwDEsFNMu~rWxWt73~Pjp^SL`eIb0vn|N z=Hpj4+S#OjDMxkhsv1dHK@>Oqy`iI+d+kyZc31%7a5IOdR~FEF=wI&Pys8%O%$J&A zaa7DXJWuSXPEmyX*-_Z;k3#83ObXwZ_RN^^+byQHQPg<-Vi8=#7L?e1&2^`HsV*4E zh>W*X<*XL+LM>cSJk(GldAbiEop+Y6$Xsdh1fRk^vjGmCq{(0D1?N@8nGN$8;$e`s z@7}>GKBAXn7Af0mD`60O{IEU=#|T5T)Ql5yn zsH|paE=j3m zV!#zlL)*{(L|NiipouxXC(R+`S>7+jWDra=Xt=Bf-oV23W9wVm0_7o2cFZ<+*~9uE z$$g7QSQZA4;uYM8#bCwFAaA~HuoL&g!YYN>o%oVFaCqzIY0d}%kmVz97XX{uY4JT> z74hX@vqRloY?0}s^tmfeWoFR)jJNswGis#z*UM4`>wSTz%Vf}YHrRi&X`KQ(lSt){ z7-ls(8vKxA6BGkWE-%&}a{bGrtDgP*)Fk<#E|kc;u+=3v83d>*QrLcxjhXTp<C+iy-uV)c7VePsIr++gk^D3fFYCK`)!xBjI8eK$riybsbJ>ufbM}_D71&^8ba=Q@gy)t%WNSB7 z{VZ3GoGW0==K|eX=5`-ygQr=18FDV%>POy;JaiGO5Uq%(VQR-CWCaHIiJ~vv!7*^g@CTaM*MP)?~H>yhy{ud`rsGu-Z_}x zkcj}!Z_%;s-b9EL0^#uAE<@`%%3^d-{SwHTOk@6~#2e!Zng@L1a`EF)S+68S?KK3j zJuGb3KklYoag>QDyrPq6^Z30>!pxV@d~;mU=rr(lTejw?^J0MEF^Mab*BaR6$kThP zche{jq`?L-nT!Fh6-F*kbJYdIiM<1w{kG;4X6H%1o$`=975ysDXTUyd@AX~@JwGV@ zQrZQN?J<-)gRC0P3Mb63ApDh zgg2GOxw?!Vb{Uyb>}NhedI@zDEWFF|%M@udbBAm#o_>_B4#=?U zuxM)BU-S(u#QD4*@d1P&Y$(F z+1du2_|uf>vr(cKB;LfC(2Ds?4sVWNj)i)Go|koGx|{Uk7-3KA zAwdsghw^ohVS0KThZl|Kg+ILnP_z&S|M<)wli$2W9oy`e-_FGtTJ>yAJ&)8MxifyP z1Y$*#VSt;T)=}p~)-aT^E$mHO47hp#4CyOY-aj%4s`=zG!_=mJF&`Yn+P56RwXA;H zQ&51e?>PUUjL(lMJ!r*q3KERdxc(^vuuP8WInkC|84O*_6Rf5!1O;#QP%-s{H(W`s zXN@Cxr(aF^9i=xDI_QVI$?DLgwNI6J`t?{UZb={5-kp#ntF%H4X1R2{zst z=fAhoNeoU>Hn1)$pv;>jDN~k5b$PAr+Lp9kKiZjLvj=L{OcV}AWy=pYC-pLuzdqws zdKgk9)p04VbbnMre-wL|_+e`}F(3_gD2IBG_~c_`SM6JzX%k5H;)Ky!weV|`@)v%) z88%HB2{^Gi2C#5ufVJ4vq*?Zeix2lE>%2oCjxA#crwtgJyVHOR{&JKjsX^+K*|@QQ ztT@o8L8#ej{OK94#*=uuKKrt&58KFH2p{E=u_b$+2#J*UU99?k`ODTE#nF{z`Rs^A zU2}5XIr~eQ)v^@^s-Kg){J?OE!IdWUf(pE&tcc}N9@xHQ9g2NWR9fuf= z&*!?z*V;f5ouXBpQ)c~n`q#>BmM(|u`K)3*{?{1;+02pGkiN=eigm2=h>C&cV9T_Q z5ySl~_qD`I;`{4H^|mxnATfwjC>n^@%ZtLoWjngMH3w<>#~ZM^kW( zUh#by$INd`rqI3(T*d>>aH|bp7GwT_b%k*=1e&8^^u6=5yFjL$<5B32smtyq^}V&M zHkv}uC#;)%eK-0B`?ss!6C*}#%>$XxI$ih;V*Z3J*KM7}D<6>j@!p2o=3&?L^Sp+N zw7MM8v5-L77V4v&Q~93BqjU2iNWDF9@~Z>d?cTcIQ>6B!QN_7uqwoV()*Y8NHt9-8 z+p+ZlC(xsgp9t;I&pZE6AR{~^?hNN5Ms-^D8f6P+0-z9Y2>XxbJH9D0G!f2Rkz1>; zylIMPo1B-hdxvX0<<2YeY0!zhWlwF_5&tC8^)Le**+D;V@r4K$!*Tx?tqOHNU+oX3 zHs4Qq_b(P$Hw|`QXrbZ`bde(Tc1nz%?Dg|>DZ1t$c9#mA@>xY|`w@m^(e5%=WyeW2 zRySTItf2@Ptw8YBE2XarMU9LAda?1&^0pQ1kTC4CH21`DBhM<0YwY1{YZ`w8CVV)~ zmaDv{_O2juoXFPp12*|}Z+Lp)`}7#4BJ3nV>&108W95_S&2Xyb$6;8tY~*)C+yURb zR9)Iprt39S4DEP5e1bk*v+R{Wosl~u&U_JiJ;=&?2~u`MJEPA0!(i z*IF^KY0m<8AkS0mgK|}`KJ+7922$%Qo|c%A0=};Nl2M&FzL~wHJHNdplJL5tNI~1f z_eFkhcKjV(Uh?;4T>-7XowRAp5L-2kp%|Z9d)!0pe?32w%xsLh`+1u9et{$pyc1+c z|I;}O{1@lUe@m&byxpC7iaW)@sB;s4*%vBN~8;p>cX(p_SHWZHuG(~lxm7TnL+#3@4k81 zYX1{Y$0mp?7unP>=b3r`cK|--Xd0|*PEC#Sq^nD@P6N_)Y%F@>NE#wDl59Eer8JylEuy_pzFLN{?xZy9b2Bsrh}E~#z&5jnrj(+$G0kL z#2fmAfeZEECEx=5tmw$U?O$RY+0T)Mm`*ithn(axCi<;hn0?R2vK)FwwQM%yG4(mT zLj_MDV`q2>LfH+16p~$e^kHxR#agiT$SXjMzT_9_PoZiI6;33 zdA(y^DO}fkq$bXwfOF3wSo?!g9z2}IjAwK7dY>+aDw#(IUycD1@9w1!ucVjjVh-Dt+;Im}C=I!FrQ-{AJ z>WC$N&EM|Wg8Vb6iT?}j`2Es#HO;-?EzFbmy4q}Q>bvS^x∓5Wdx0(-)x_xiuIh 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 literal 0 HcmV?d00001 diff --git a/doc/workflow/merge_requests/merge_request_diff.png b/doc/workflow/merge_requests/merge_request_diff.png new file mode 100644 index 0000000000000000000000000000000000000000..ed08ae91bec73772c3cd51521a46edfea9aace93 GIT binary patch literal 120422 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≀fzN-YZ2W)&knUR7x7xbOJhd+V|a?RK-e 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