Commit 24555f20 authored by GitLab Bot's avatar GitLab Bot

Merge remote-tracking branch 'upstream/master' into ce-to-ee-2018-11-01

# Conflicts:
#	db/schema.rb
#	doc/api/issues.md
#	doc/api/merge_requests.md

[ci skip]
parents 71c526c2 8e674510
...@@ -15,7 +15,7 @@ import CommitComponent from '../../vue_shared/components/commit.vue'; ...@@ -15,7 +15,7 @@ import CommitComponent from '../../vue_shared/components/commit.vue';
import eventHub from '../event_hub'; import eventHub from '../event_hub';
/** /**
* Envrionment Item Component * Environment Item Component
* *
* Renders a table row for each environment. * Renders a table row for each environment.
*/ */
...@@ -60,7 +60,7 @@ export default { ...@@ -60,7 +60,7 @@ export default {
computed: { computed: {
/** /**
* Verifies if `last_deployment` key exists in the current Envrionment. * Verifies if `last_deployment` key exists in the current Environment.
* This key is required to render most of the html - this method works has * This key is required to render most of the html - this method works has
* an helper. * an helper.
* *
......
...@@ -85,7 +85,7 @@ export default class FilteredSearchDropdown { ...@@ -85,7 +85,7 @@ export default class FilteredSearchDropdown {
} }
dispatchInputEvent() { dispatchInputEvent() {
// Propogate input change to FilteredSearchDropdownManager // Propagate input change to FilteredSearchDropdownManager
// so that it can determine which dropdowns to open // so that it can determine which dropdowns to open
this.input.dispatchEvent( this.input.dispatchEvent(
new CustomEvent('input', { new CustomEvent('input', {
......
...@@ -68,12 +68,12 @@ export const conditions = [ ...@@ -68,12 +68,12 @@ export const conditions = [
value: 'any', value: 'any',
}, },
{ {
url: 'milestone_title=No+Milestone', url: 'milestone_title=None',
tokenKey: 'milestone', tokenKey: 'milestone',
value: 'none', value: 'none',
}, },
{ {
url: 'milestone_title=Any+Milestone', url: 'milestone_title=Any',
tokenKey: 'milestone', tokenKey: 'milestone',
value: 'any', value: 'any',
}, },
......
...@@ -28,7 +28,7 @@ export default class GlFieldErrors { ...@@ -28,7 +28,7 @@ export default class GlFieldErrors {
this.form.on('submit', GlFieldErrors.catchInvalidFormSubmit); this.form.on('submit', GlFieldErrors.catchInvalidFormSubmit);
} }
/* Neccessary to prevent intercept and override invalid form submit /* Necessary to prevent intercept and override invalid form submit
* because Safari & iOS quietly allow form submission when form is invalid * because Safari & iOS quietly allow form submission when form is invalid
* and prevents disabling of invalid submit button by application.js */ * and prevents disabling of invalid submit button by application.js */
......
...@@ -110,7 +110,7 @@ export default { ...@@ -110,7 +110,7 @@ export default {
// Get the remaining list to use in `and x more` text. // Get the remaining list to use in `and x more` text.
const remainingAwardList = awardList.slice(TOOLTIP_NAME_COUNT, awardList.length); const remainingAwardList = awardList.slice(TOOLTIP_NAME_COUNT, awardList.length);
// Add myself to the begining of the list so title will start with You. // Add myself to the beginning of the list so title will start with You.
if (hasReactionByCurrentUser) { if (hasReactionByCurrentUser) {
namesToShow.unshift('You'); namesToShow.unshift('You');
} }
......
...@@ -70,7 +70,7 @@ export const collapseSystemNotes = notes => { ...@@ -70,7 +70,7 @@ export const collapseSystemNotes = notes => {
} else if (lastDescriptionSystemNote) { } else if (lastDescriptionSystemNote) {
const timeDifferenceMinutes = getTimeDifferenceMinutes(lastDescriptionSystemNote, note); const timeDifferenceMinutes = getTimeDifferenceMinutes(lastDescriptionSystemNote, note);
// are they less than 10 minutes appart? // are they less than 10 minutes apart?
if (timeDifferenceMinutes > 10) { if (timeDifferenceMinutes > 10) {
// reset counter // reset counter
descriptionChangedTimes = 1; descriptionChangedTimes = 1;
......
...@@ -13,7 +13,7 @@ export default { ...@@ -13,7 +13,7 @@ export default {
}, },
props: { props: {
/** /**
* Indicates the existance of a tag. * Indicates the existence of a tag.
* Used to render the correct icon, if true will render `fa-tag` icon, * Used to render the correct icon, if true will render `fa-tag` icon,
* if false will render a svg sprite fork icon * if false will render a svg sprite fork icon
*/ */
......
...@@ -158,7 +158,7 @@ ...@@ -158,7 +158,7 @@
color: $gl-text-color; color: $gl-text-color;
outline: 0; outline: 0;
// make sure the text color is not overriden // make sure the text color is not overridden
&.text-danger { &.text-danger {
color: $brand-danger; color: $brand-danger;
} }
...@@ -184,7 +184,7 @@ ...@@ -184,7 +184,7 @@
text-align: left; text-align: left;
width: 100%; width: 100%;
// make sure the text color is not overriden // make sure the text color is not overridden
&.text-danger { &.text-danger {
color: $brand-danger; color: $brand-danger;
} }
......
...@@ -35,21 +35,21 @@ class Admin::AppearancesController < Admin::ApplicationController ...@@ -35,21 +35,21 @@ class Admin::AppearancesController < Admin::ApplicationController
@appearance.save @appearance.save
redirect_to admin_appearances_path, notice: 'Logo was succesfully removed.' redirect_to admin_appearances_path, notice: 'Logo was successfully removed.'
end end
def header_logos def header_logos
@appearance.remove_header_logo! @appearance.remove_header_logo!
@appearance.save @appearance.save
redirect_to admin_appearances_path, notice: 'Header logo was succesfully removed.' redirect_to admin_appearances_path, notice: 'Header logo was successfully removed.'
end end
def favicon def favicon
@appearance.remove_favicon! @appearance.remove_favicon!
@appearance.save @appearance.save
redirect_to admin_appearances_path, notice: 'Favicon was succesfully removed.' redirect_to admin_appearances_path, notice: 'Favicon was successfully removed.'
end end
private private
......
...@@ -23,7 +23,7 @@ class Import::GiteaController < Import::GithubController ...@@ -23,7 +23,7 @@ class Import::GiteaController < Import::GithubController
:"#{provider}_host_url" :"#{provider}_host_url"
end end
# Overriden methods # Overridden methods
def provider def provider
:gitea :gitea
end end
......
...@@ -105,7 +105,7 @@ class Import::GithubController < Import::BaseController ...@@ -105,7 +105,7 @@ class Import::GithubController < Import::BaseController
{ github_access_token: session[access_token_key] } { github_access_token: session[access_token_key] }
end end
# The following methods are overriden in subclasses # The following methods are overridden in subclasses
def provider def provider
:github :github
end end
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
class Oauth::AuthorizationsController < Doorkeeper::AuthorizationsController class Oauth::AuthorizationsController < Doorkeeper::AuthorizationsController
layout 'profile' layout 'profile'
# Overriden from Doorkeeper::AuthorizationsController to # Overridden from Doorkeeper::AuthorizationsController to
# include the call to session.delete # include the call to session.delete
def new def new
if pre_auth.authorizable? if pre_auth.authorizable?
......
...@@ -278,7 +278,7 @@ class ProjectsController < Projects::ApplicationController ...@@ -278,7 +278,7 @@ class ProjectsController < Projects::ApplicationController
# rubocop: enable CodeReuse/ActiveRecord # rubocop: enable CodeReuse/ActiveRecord
# Render project landing depending of which features are available # Render project landing depending of which features are available
# So if page is not availble in the list it renders the next page # So if page is not available in the list it renders the next page
# #
# pages list order: repository readme, wiki home, issues list, customize workflow # pages list order: repository readme, wiki home, issues list, customize workflow
def render_landing_page def render_landing_page
......
...@@ -192,10 +192,6 @@ class IssuableFinder ...@@ -192,10 +192,6 @@ class IssuableFinder
params[:milestone_title].present? params[:milestone_title].present?
end end
def filter_by_no_milestone?
milestones? && params[:milestone_title] == Milestone::None.title
end
def milestones def milestones
return @milestones if defined?(@milestones) return @milestones if defined?(@milestones)
...@@ -432,18 +428,6 @@ class IssuableFinder ...@@ -432,18 +428,6 @@ class IssuableFinder
end end
# rubocop: enable CodeReuse/ActiveRecord # rubocop: enable CodeReuse/ActiveRecord
def filter_by_upcoming_milestone?
params[:milestone_title] == Milestone::Upcoming.name
end
def filter_by_any_milestone?
params[:milestone_title] == Milestone::Any.title
end
def filter_by_started_milestone?
params[:milestone_title] == Milestone::Started.name
end
# rubocop: disable CodeReuse/ActiveRecord # rubocop: disable CodeReuse/ActiveRecord
def by_milestone(items) def by_milestone(items)
if milestones? if milestones?
...@@ -465,6 +449,24 @@ class IssuableFinder ...@@ -465,6 +449,24 @@ class IssuableFinder
end end
# rubocop: enable CodeReuse/ActiveRecord # rubocop: enable CodeReuse/ActiveRecord
def filter_by_no_milestone?
# Accepts `No Milestone` for compatibility
params[:milestone_title].to_s.downcase == FILTER_NONE || params[:milestone_title] == Milestone::None.title
end
def filter_by_any_milestone?
# Accepts `Any Milestone` for compatibility
params[:milestone_title].to_s.downcase == FILTER_ANY || params[:milestone_title] == Milestone::Any.title
end
def filter_by_upcoming_milestone?
params[:milestone_title] == Milestone::Upcoming.name
end
def filter_by_started_milestone?
params[:milestone_title] == Milestone::Started.name
end
def by_label(items) def by_label(items)
return items unless labels? return items unless labels?
......
...@@ -10,7 +10,7 @@ module PageLayoutHelper ...@@ -10,7 +10,7 @@ module PageLayoutHelper
@breadcrumb_title = @page_title.last @breadcrumb_title = @page_title.last
end end
# Segments are seperated by middot # Segments are separated by middot
@page_title.join(" · ") @page_title.join(" · ")
end end
......
...@@ -169,12 +169,12 @@ class CommitStatus < ActiveRecord::Base ...@@ -169,12 +169,12 @@ class CommitStatus < ActiveRecord::Base
false false
end end
# To be overriden when inherrited from # To be overridden when inherrited from
def retryable? def retryable?
false false
end end
# To be overriden when inherrited from # To be overridden when inherrited from
def cancelable? def cancelable?
false false
end end
......
...@@ -12,12 +12,12 @@ module CacheableAttributes ...@@ -12,12 +12,12 @@ module CacheableAttributes
"#{name}:#{Gitlab::VERSION}:#{Rails.version}".freeze "#{name}:#{Gitlab::VERSION}:#{Rails.version}".freeze
end end
# Can be overriden # Can be overridden
def current_without_cache def current_without_cache
last last
end end
# Can be overriden # Can be overridden
def defaults def defaults
{} {}
end end
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
# `delete_all` is efficient as it deletes all rows with a single `DELETE` query. # `delete_all` is efficient as it deletes all rows with a single `DELETE` query.
# #
# It's better to use `delete_all` as our best practice, however, # It's better to use `delete_all` as our best practice, however,
# if external data (e.g. ObjectStorage, FileStorage or Redis) are assosiated with database records, # if external data (e.g. ObjectStorage, FileStorage or Redis) are associated with database records,
# it is difficult to accomplish it. # it is difficult to accomplish it.
# #
# This module defines a format to use `delete_all` and delete associated external data. # This module defines a format to use `delete_all` and delete associated external data.
......
...@@ -365,7 +365,7 @@ module Issuable ...@@ -365,7 +365,7 @@ module Issuable
end end
## ##
# Overriden in MergeRequest # Overridden in MergeRequest
# #
def wipless_title_changed(old_title) def wipless_title_changed(old_title)
old_title != title old_title != title
......
...@@ -94,7 +94,7 @@ module Storage ...@@ -94,7 +94,7 @@ module Storage
if gitlab_shell.mv_namespace(repository_storage, full_path, new_path) if gitlab_shell.mv_namespace(repository_storage, full_path, new_path)
Gitlab::AppLogger.info %Q(Namespace directory "#{full_path}" moved to "#{new_path}") Gitlab::AppLogger.info %Q(Namespace directory "#{full_path}" moved to "#{new_path}")
# Remove namespace directroy async with delay so # Remove namespace directory async with delay so
# GitLab has time to remove all projects first # GitLab has time to remove all projects first
run_after_commit do run_after_commit do
GitlabShellWorker.perform_in(5.minutes, :rm_namespace, repository_storage, new_path) GitlabShellWorker.perform_in(5.minutes, :rm_namespace, repository_storage, new_path)
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# Mounted uploaders are destroyed by carrierwave's after_commit # Mounted uploaders are destroyed by carrierwave's after_commit
# hook. This hook fetches upload location (local vs remote) from # hook. This hook fetches upload location (local vs remote) from
# Upload model. So it's neccessary to make sure that during that # Upload model. So it's necessary to make sure that during that
# after_commit hook model's associated uploads are not deleted yet. # after_commit hook model's associated uploads are not deleted yet.
# IOW we can not use dependent: :destroy : # IOW we can not use dependent: :destroy :
# has_many :uploads, as: :model, dependent: :destroy # has_many :uploads, as: :model, dependent: :destroy
......
...@@ -84,7 +84,7 @@ class Namespace < ActiveRecord::Base ...@@ -84,7 +84,7 @@ class Namespace < ActiveRecord::Base
find_by('lower(path) = :value', value: path.downcase) find_by('lower(path) = :value', value: path.downcase)
end end
# Case insensetive search for namespace by path or name # Case insensitive search for namespace by path or name
def find_by_path_or_name(path) def find_by_path_or_name(path)
find_by("lower(path) = :path OR lower(name) = :path", path: path.downcase) find_by("lower(path) = :path OR lower(name) = :path", path: path.downcase)
end end
......
...@@ -184,7 +184,7 @@ class Project < ActiveRecord::Base ...@@ -184,7 +184,7 @@ class Project < ActiveRecord::Base
has_one :import_export_upload, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent has_one :import_export_upload, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
# Merge Requests for target project should be removed with it # Merge Requests for target project should be removed with it
has_many :merge_requests, foreign_key: 'target_project_id' has_many :merge_requests, foreign_key: 'target_project_id', inverse_of: :target_project
has_many :source_of_merge_requests, foreign_key: 'source_project_id', class_name: 'MergeRequest' has_many :source_of_merge_requests, foreign_key: 'source_project_id', class_name: 'MergeRequest'
has_many :issues has_many :issues
has_many :labels, class_name: 'ProjectLabel' has_many :labels, class_name: 'ProjectLabel'
...@@ -668,7 +668,7 @@ class Project < ActiveRecord::Base ...@@ -668,7 +668,7 @@ class Project < ActiveRecord::Base
remove_import_data remove_import_data
end end
# This method is overriden in EE::Project model # This method is overridden in EE::Project model
def remove_import_data def remove_import_data
import_data&.destroy import_data&.destroy
end end
......
...@@ -9,7 +9,7 @@ class IssueTrackerService < Service ...@@ -9,7 +9,7 @@ class IssueTrackerService < Service
# Override this method on services that uses different patterns # Override this method on services that uses different patterns
# This pattern does not support cross-project references # This pattern does not support cross-project references
# The other code assumes that this pattern is a superset of all # The other code assumes that this pattern is a superset of all
# overriden patterns. See ReferenceRegexes::EXTERNAL_PATTERN # overridden patterns. See ReferenceRegexes::EXTERNAL_PATTERN
def self.reference_pattern(only_long: false) def self.reference_pattern(only_long: false)
if only_long if only_long
/(\b[A-Z][A-Z0-9_]+-)(?<issue>\d+)/ /(\b[A-Z][A-Z0-9_]+-)(?<issue>\d+)/
......
...@@ -99,7 +99,7 @@ module Auth ...@@ -99,7 +99,7 @@ module Auth
## ##
# Because we do not have two way communication with registry yet, # Because we do not have two way communication with registry yet,
# we create a container repository image resource when push to the # we create a container repository image resource when push to the
# registry is successfuly authorized. # registry is successfully authorized.
# #
def ensure_container_repository!(path, actions) def ensure_container_repository!(path, actions)
return if path.has_repository? return if path.has_repository?
......
...@@ -8,7 +8,7 @@ module Keys ...@@ -8,7 +8,7 @@ module Keys
key.destroy if destroy_possible?(key) key.destroy if destroy_possible?(key)
end end
# overriden in EE::Keys::DestroyService # overridden in EE::Keys::DestroyService
def destroy_possible?(key) def destroy_possible?(key)
true true
end end
......
...@@ -10,7 +10,7 @@ module Members ...@@ -10,7 +10,7 @@ module Members
end end
def after_execute(args) def after_execute(args)
# overriden in EE::Members modules # overridden in EE::Members modules
end end
private private
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
# NOTE: This service cannot be used directly because it is part of a # NOTE: This service cannot be used directly because it is part of a
# a bigger process. Instead, use the service MoveAccessService which moves # a bigger process. Instead, use the service MoveAccessService which moves
# project memberships, project group links, authorizations and refreshes # project memberships, project group links, authorizations and refreshes
# the authorizations if neccessary # the authorizations if necessary
module Projects module Projects
class MoveProjectAuthorizationsService < BaseMoveRelationsService class MoveProjectAuthorizationsService < BaseMoveRelationsService
def execute(source_project, remove_remaining_elements: true) def execute(source_project, remove_remaining_elements: true)
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
# NOTE: This service cannot be used directly because it is part of a # NOTE: This service cannot be used directly because it is part of a
# a bigger process. Instead, use the service MoveAccessService which moves # a bigger process. Instead, use the service MoveAccessService which moves
# project memberships, project group links, authorizations and refreshes # project memberships, project group links, authorizations and refreshes
# the authorizations if neccessary # the authorizations if necessary
module Projects module Projects
class MoveProjectGroupLinksService < BaseMoveRelationsService class MoveProjectGroupLinksService < BaseMoveRelationsService
def execute(source_project, remove_remaining_elements: true) def execute(source_project, remove_remaining_elements: true)
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
# NOTE: This service cannot be used directly because it is part of a # NOTE: This service cannot be used directly because it is part of a
# a bigger process. Instead, use the service MoveAccessService which moves # a bigger process. Instead, use the service MoveAccessService which moves
# project memberships, project group links, authorizations and refreshes # project memberships, project group links, authorizations and refreshes
# the authorizations if neccessary # the authorizations if necessary
module Projects module Projects
class MoveProjectMembersService < BaseMoveRelationsService class MoveProjectMembersService < BaseMoveRelationsService
def execute(source_project, remove_remaining_elements: true) def execute(source_project, remove_remaining_elements: true)
......
...@@ -434,14 +434,14 @@ module QuickActions ...@@ -434,14 +434,14 @@ module QuickActions
end end
end end
desc 'Add or substract spent time' desc 'Add or subtract spent time'
explanation do |time_spent, time_spent_date| explanation do |time_spent, time_spent_date|
if time_spent if time_spent
if time_spent > 0 if time_spent > 0
verb = 'Adds' verb = 'Adds'
value = time_spent value = time_spent
else else
verb = 'Substracts' verb = 'Subtracts'
value = -time_spent value = -time_spent
end end
......
...@@ -148,7 +148,7 @@ ...@@ -148,7 +148,7 @@
= link_to 'Archive project', archive_project_path(@project), = link_to 'Archive project', archive_project_path(@project),
data: { confirm: "Are you sure that you want to archive this project?" }, data: { confirm: "Are you sure that you want to archive this project?" },
method: :post, class: "btn btn-warning" method: :post, class: "btn btn-warning"
.sub-section.rename-respository .sub-section.rename-repository
%h4.warning-title %h4.warning-title
Rename repository Rename repository
= render 'projects/errors' = render 'projects/errors'
......
...@@ -14,7 +14,7 @@ module Gitlab ...@@ -14,7 +14,7 @@ module Gitlab
INTERVAL = 30.seconds.to_i INTERVAL = 30.seconds.to_i
# The number of seconds to wait (while blocking the thread) before # The number of seconds to wait (while blocking the thread) before
# continueing to the next waiter. # continuing to the next waiter.
BLOCKING_WAIT_TIME = 5 BLOCKING_WAIT_TIME = 5
# The known importer stages and their corresponding Sidekiq workers. # The known importer stages and their corresponding Sidekiq workers.
......
---
title: Standardize milestones filter in APIs to None / Any
merge_request: 22637
author: Heinrich Lee Yu
type: changed
---
title: Drop gcp_clusters table
merge_request: 22713
author:
type: other
---
title: Reduce SQL queries needed to load open merge requests
merge_request: 22709
author:
type: performance
...@@ -716,7 +716,7 @@ production: &base ...@@ -716,7 +716,7 @@ production: &base
gitaly: gitaly:
# Path to the directory containing Gitaly client executables. # Path to the directory containing Gitaly client executables.
client_path: /home/git/gitaly/bin client_path: /home/git/gitaly/bin
# Default Gitaly authentication token. Can be overriden per storage. Can # Default Gitaly authentication token. Can be overridden per storage. Can
# be left blank when Gitaly is running locally on a Unix socket, which # be left blank when Gitaly is running locally on a Unix socket, which
# is the normal way to deploy Gitaly. # is the normal way to deploy Gitaly.
token: token:
......
# frozen_string_literal: true
class DropGcpClustersTable < ActiveRecord::Migration
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
def up
drop_table :gcp_clusters
end
def down
create_table :gcp_clusters do |t|
# Order columns by best align scheme
t.references :project, null: false, index: { unique: true }, foreign_key: { on_delete: :cascade }
t.references :user, foreign_key: { on_delete: :nullify }
t.references :service, foreign_key: { on_delete: :nullify }
t.integer :status
t.integer :gcp_cluster_size, null: false
# Timestamps
t.datetime_with_timezone :created_at, null: false
t.datetime_with_timezone :updated_at, null: false
# Enable/disable
t.boolean :enabled, default: true
# General
t.text :status_reason
# k8s integration specific
t.string :project_namespace
# Cluster details
t.string :endpoint
t.text :ca_cert
t.text :encrypted_kubernetes_token
t.string :encrypted_kubernetes_token_iv
t.string :username
t.text :encrypted_password
t.string :encrypted_password_iv
# GKE
t.string :gcp_project_id, null: false
t.string :gcp_cluster_zone, null: false
t.string :gcp_cluster_name, null: false
t.string :gcp_machine_type
t.string :gcp_operation_id
t.text :encrypted_gcp_token
t.string :encrypted_gcp_token_iv
end
end
end
...@@ -13,7 +13,7 @@ class CleanupMoveSystemUploadFolderSymlink < ActiveRecord::Migration ...@@ -13,7 +13,7 @@ class CleanupMoveSystemUploadFolderSymlink < ActiveRecord::Migration
say "Removing #{old_directory} -> #{new_directory} symlink" say "Removing #{old_directory} -> #{new_directory} symlink"
FileUtils.rm(old_directory) FileUtils.rm(old_directory)
else else
say "Symlink #{old_directory} non existant, nothing to do." say "Symlink #{old_directory} non existent, nothing to do."
end end
end end
......
...@@ -11,7 +11,11 @@ ...@@ -11,7 +11,11 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
<<<<<<< HEAD
ActiveRecord::Schema.define(version: 20181017131623) do ActiveRecord::Schema.define(version: 20181017131623) do
=======
ActiveRecord::Schema.define(version: 20181031190559) do
>>>>>>> upstream/master
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
...@@ -1109,6 +1113,7 @@ ActiveRecord::Schema.define(version: 20181017131623) do ...@@ -1109,6 +1113,7 @@ ActiveRecord::Schema.define(version: 20181017131623) do
add_index "forked_project_links", ["forked_to_project_id"], name: "index_forked_project_links_on_forked_to_project_id", unique: true, using: :btree add_index "forked_project_links", ["forked_to_project_id"], name: "index_forked_project_links_on_forked_to_project_id", unique: true, using: :btree
<<<<<<< HEAD
create_table "gcp_clusters", force: :cascade do |t| create_table "gcp_clusters", force: :cascade do |t|
t.integer "project_id", null: false t.integer "project_id", null: false
t.integer "user_id" t.integer "user_id"
...@@ -1355,6 +1360,8 @@ ActiveRecord::Schema.define(version: 20181017131623) do ...@@ -1355,6 +1360,8 @@ ActiveRecord::Schema.define(version: 20181017131623) do
add_index "geo_upload_deleted_events", ["upload_id"], name: "index_geo_upload_deleted_events_on_upload_id", using: :btree add_index "geo_upload_deleted_events", ["upload_id"], name: "index_geo_upload_deleted_events_on_upload_id", using: :btree
=======
>>>>>>> upstream/master
create_table "gpg_key_subkeys", force: :cascade do |t| create_table "gpg_key_subkeys", force: :cascade do |t|
t.integer "gpg_key_id", null: false t.integer "gpg_key_id", null: false
t.binary "keyid" t.binary "keyid"
...@@ -3275,6 +3282,7 @@ ActiveRecord::Schema.define(version: 20181017131623) do ...@@ -3275,6 +3282,7 @@ ActiveRecord::Schema.define(version: 20181017131623) do
add_foreign_key "fork_network_members", "projects", on_delete: :cascade add_foreign_key "fork_network_members", "projects", on_delete: :cascade
add_foreign_key "fork_networks", "projects", column: "root_project_id", name: "fk_e7b436b2b5", on_delete: :nullify add_foreign_key "fork_networks", "projects", column: "root_project_id", name: "fk_e7b436b2b5", on_delete: :nullify
add_foreign_key "forked_project_links", "projects", column: "forked_to_project_id", name: "fk_434510edb0", on_delete: :cascade add_foreign_key "forked_project_links", "projects", column: "forked_to_project_id", name: "fk_434510edb0", on_delete: :cascade
<<<<<<< HEAD
add_foreign_key "gcp_clusters", "projects", on_delete: :cascade add_foreign_key "gcp_clusters", "projects", on_delete: :cascade
add_foreign_key "gcp_clusters", "services", on_delete: :nullify add_foreign_key "gcp_clusters", "services", on_delete: :nullify
add_foreign_key "gcp_clusters", "users", on_delete: :nullify add_foreign_key "gcp_clusters", "users", on_delete: :nullify
...@@ -3300,6 +3308,8 @@ ActiveRecord::Schema.define(version: 20181017131623) do ...@@ -3300,6 +3308,8 @@ ActiveRecord::Schema.define(version: 20181017131623) do
add_foreign_key "geo_repository_renamed_events", "projects", on_delete: :cascade add_foreign_key "geo_repository_renamed_events", "projects", on_delete: :cascade
add_foreign_key "geo_repository_updated_events", "projects", on_delete: :cascade add_foreign_key "geo_repository_updated_events", "projects", on_delete: :cascade
add_foreign_key "geo_reset_checksum_events", "projects", on_delete: :cascade add_foreign_key "geo_reset_checksum_events", "projects", on_delete: :cascade
=======
>>>>>>> upstream/master
add_foreign_key "gpg_key_subkeys", "gpg_keys", on_delete: :cascade add_foreign_key "gpg_key_subkeys", "gpg_keys", on_delete: :cascade
add_foreign_key "gpg_keys", "users", on_delete: :cascade add_foreign_key "gpg_keys", "users", on_delete: :cascade
add_foreign_key "gpg_signatures", "gpg_key_subkeys", on_delete: :nullify add_foreign_key "gpg_signatures", "gpg_key_subkeys", on_delete: :nullify
......
...@@ -37,12 +37,15 @@ GET /issues?my_reaction_emoji=star ...@@ -37,12 +37,15 @@ GET /issues?my_reaction_emoji=star
| ------------------- | ---------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | | ------------------- | ---------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| `state` | string | no | Return all issues or just those that are `opened` or `closed` | | `state` | string | no | Return all issues or just those that are `opened` or `closed` |
| `labels` | string | no | Comma-separated list of label names, issues must have all labels to be returned. `No+Label` lists all issues with no labels | | `labels` | string | no | Comma-separated list of label names, issues must have all labels to be returned. `No+Label` lists all issues with no labels |
| `milestone` | string | no | The milestone title. `No+Milestone` lists all issues with no milestone. `Any+Milestone` lists all issues that have an assigned milestone | | `milestone` | string | no | The milestone title. `None` lists all issues with no milestone. `Any` lists all issues that have an assigned milestone. |
| `scope` | string | no | Return issues for the given scope: `created_by_me`, `assigned_to_me` or `all`. Defaults to `created_by_me`<br> For versions before 11.0, use the now deprecated `created-by-me` or `assigned-to-me` scopes instead.<br> _([Introduced][ce-13004] in GitLab 9.5. [Changed to snake_case][ce-18935] in GitLab 11.0)_ | | `scope` | string | no | Return issues for the given scope: `created_by_me`, `assigned_to_me` or `all`. Defaults to `created_by_me`<br> For versions before 11.0, use the now deprecated `created-by-me` or `assigned-to-me` scopes instead.<br> _([Introduced][ce-13004] in GitLab 9.5. [Changed to snake_case][ce-18935] in GitLab 11.0)_ |
| `author_id` | integer | no | Return issues created by the given user `id`. Combine with `scope=all` or `scope=assigned_to_me`. _([Introduced][ce-13004] in GitLab 9.5)_ | | `author_id` | integer | no | Return issues created by the given user `id`. Combine with `scope=all` or `scope=assigned_to_me`. _([Introduced][ce-13004] in GitLab 9.5)_ |
| `assignee_id` | integer | no | Return issues assigned to the given user `id`. `None` returns unassigned issues. `Any` returns issues with an assignee. _([Introduced][ce-13004] in GitLab 9.5)_ | | `assignee_id` | integer | no | Return issues assigned to the given user `id`. `None` returns unassigned issues. `Any` returns issues with an assignee. _([Introduced][ce-13004] in GitLab 9.5)_ |
| `my_reaction_emoji` | string | no | Return issues reacted by the authenticated user by the given `emoji`. `None` returns issues not given a reaction. `Any` returns issues given at least one reaction. _([Introduced][ce-14016] in GitLab 10.0)_ | | `my_reaction_emoji` | string | no | Return issues reacted by the authenticated user by the given `emoji`. `None` returns issues not given a reaction. `Any` returns issues given at least one reaction. _([Introduced][ce-14016] in GitLab 10.0)_ |
<<<<<<< HEAD
| `weight` | integer | no | Return issues with the specified `weight`. `None` returns issues with no weight assigned. `Any` returns issues with a weight assigned. | | `weight` | integer | no | Return issues with the specified `weight`. `None` returns issues with no weight assigned. `Any` returns issues with a weight assigned. |
=======
>>>>>>> upstream/master
| `iids[]` | Array[integer] | no | Return only the issues having the given `iid` | | `iids[]` | Array[integer] | no | Return only the issues having the given `iid` |
| `order_by` | string | no | Return issues ordered by `created_at` or `updated_at` fields. Default is `created_at` | | `order_by` | string | no | Return issues ordered by `created_at` or `updated_at` fields. Default is `created_at` |
| `sort` | string | no | Return issues sorted in `asc` or `desc` order. Default is `desc` | | `sort` | string | no | Return issues sorted in `asc` or `desc` order. Default is `desc` |
...@@ -153,12 +156,15 @@ GET /groups/:id/issues?my_reaction_emoji=star ...@@ -153,12 +156,15 @@ GET /groups/:id/issues?my_reaction_emoji=star
| `state` | string | no | Return all issues or just those that are `opened` or `closed` | | `state` | string | no | Return all issues or just those that are `opened` or `closed` |
| `labels` | string | no | Comma-separated list of label names, issues must have all labels to be returned. `No+Label` lists all issues with no labels | | `labels` | string | no | Comma-separated list of label names, issues must have all labels to be returned. `No+Label` lists all issues with no labels |
| `iids[]` | Array[integer] | no | Return only the issues having the given `iid` | | `iids[]` | Array[integer] | no | Return only the issues having the given `iid` |
| `milestone` | string | no | The milestone title. `No+Milestone` lists all issues with no milestone | | `milestone` | string | no | The milestone title. `None` lists all issues with no milestone. `Any` lists all issues that have an assigned milestone. |
| `scope` | string | no | Return issues for the given scope: `created_by_me`, `assigned_to_me` or `all`.<br> For versions before 11.0, use the now deprecated `created-by-me` or `assigned-to-me` scopes instead.<br> _([Introduced][ce-13004] in GitLab 9.5. [Changed to snake_case][ce-18935] in GitLab 11.0)_ | | `scope` | string | no | Return issues for the given scope: `created_by_me`, `assigned_to_me` or `all`.<br> For versions before 11.0, use the now deprecated `created-by-me` or `assigned-to-me` scopes instead.<br> _([Introduced][ce-13004] in GitLab 9.5. [Changed to snake_case][ce-18935] in GitLab 11.0)_ |
| `author_id` | integer | no | Return issues created by the given user `id` _([Introduced][ce-13004] in GitLab 9.5)_ | | `author_id` | integer | no | Return issues created by the given user `id` _([Introduced][ce-13004] in GitLab 9.5)_ |
| `assignee_id` | integer | no | Return issues assigned to the given user `id`. `None` returns unassigned issues. `Any` returns issues with an assignee. _([Introduced][ce-13004] in GitLab 9.5)_ | | `assignee_id` | integer | no | Return issues assigned to the given user `id`. `None` returns unassigned issues. `Any` returns issues with an assignee. _([Introduced][ce-13004] in GitLab 9.5)_ |
| `my_reaction_emoji` | string | no | Return issues reacted by the authenticated user by the given `emoji`. `None` returns issues not given a reaction. `Any` returns issues given at least one reaction. _([Introduced][ce-14016] in GitLab 10.0)_ | | `my_reaction_emoji` | string | no | Return issues reacted by the authenticated user by the given `emoji`. `None` returns issues not given a reaction. `Any` returns issues given at least one reaction. _([Introduced][ce-14016] in GitLab 10.0)_ |
<<<<<<< HEAD
| `weight` | integer | no | Return issues with the specified `weight`. `None` returns issues with no weight assigned. `Any` returns issues with a weight assigned. | | `weight` | integer | no | Return issues with the specified `weight`. `None` returns issues with no weight assigned. `Any` returns issues with a weight assigned. |
=======
>>>>>>> upstream/master
| `order_by` | string | no | Return issues ordered by `created_at` or `updated_at` fields. Default is `created_at` | | `order_by` | string | no | Return issues ordered by `created_at` or `updated_at` fields. Default is `created_at` |
| `sort` | string | no | Return issues sorted in `asc` or `desc` order. Default is `desc` | | `sort` | string | no | Return issues sorted in `asc` or `desc` order. Default is `desc` |
| `search` | string | no | Search group issues against their `title` and `description` | | `search` | string | no | Search group issues against their `title` and `description` |
...@@ -269,12 +275,15 @@ GET /projects/:id/issues?my_reaction_emoji=star ...@@ -269,12 +275,15 @@ GET /projects/:id/issues?my_reaction_emoji=star
| `iids[]` | Array[integer] | no | Return only the milestone having the given `iid` | | `iids[]` | Array[integer] | no | Return only the milestone having the given `iid` |
| `state` | string | no | Return all issues or just those that are `opened` or `closed` | | `state` | string | no | Return all issues or just those that are `opened` or `closed` |
| `labels` | string | no | Comma-separated list of label names, issues must have all labels to be returned. `No+Label` lists all issues with no labels | | `labels` | string | no | Comma-separated list of label names, issues must have all labels to be returned. `No+Label` lists all issues with no labels |
| `milestone` | string | no | The milestone title. `No+Milestone` lists all issues with no milestone | | `milestone` | string | no | The milestone title. `None` lists all issues with no milestone. `Any` lists all issues that have an assigned milestone. |
| `scope` | string | no | Return issues for the given scope: `created_by_me`, `assigned_to_me` or `all`.<br> For versions before 11.0, use the now deprecated `created-by-me` or `assigned-to-me` scopes instead.<br> _([Introduced][ce-13004] in GitLab 9.5. [Changed to snake_case][ce-18935] in GitLab 11.0)_ | | `scope` | string | no | Return issues for the given scope: `created_by_me`, `assigned_to_me` or `all`.<br> For versions before 11.0, use the now deprecated `created-by-me` or `assigned-to-me` scopes instead.<br> _([Introduced][ce-13004] in GitLab 9.5. [Changed to snake_case][ce-18935] in GitLab 11.0)_ |
| `author_id` | integer | no | Return issues created by the given user `id` _([Introduced][ce-13004] in GitLab 9.5)_ | | `author_id` | integer | no | Return issues created by the given user `id` _([Introduced][ce-13004] in GitLab 9.5)_ |
| `assignee_id` | integer | no | Return issues assigned to the given user `id`. `None` returns unassigned issues. `Any` returns issues with an assignee. _([Introduced][ce-13004] in GitLab 9.5)_ | | `assignee_id` | integer | no | Return issues assigned to the given user `id`. `None` returns unassigned issues. `Any` returns issues with an assignee. _([Introduced][ce-13004] in GitLab 9.5)_ |
| `my_reaction_emoji` | string | no | Return issues reacted by the authenticated user by the given `emoji`. `None` returns issues not given a reaction. `Any` returns issues given at least one reaction. _([Introduced][ce-14016] in GitLab 10.0)_ | | `my_reaction_emoji` | string | no | Return issues reacted by the authenticated user by the given `emoji`. `None` returns issues not given a reaction. `Any` returns issues given at least one reaction. _([Introduced][ce-14016] in GitLab 10.0)_ |
<<<<<<< HEAD
| `weight` | integer | no | Return issues with the specified `weight`. `None` returns issues with no weight assigned. `Any` returns issues with a weight assigned. | | `weight` | integer | no | Return issues with the specified `weight`. `None` returns issues with no weight assigned. `Any` returns issues with a weight assigned. |
=======
>>>>>>> upstream/master
| `order_by` | string | no | Return issues ordered by `created_at` or `updated_at` fields. Default is `created_at` | | `order_by` | string | no | Return issues ordered by `created_at` or `updated_at` fields. Default is `created_at` |
| `sort` | string | no | Return issues sorted in `asc` or `desc` order. Default is `desc` | | `sort` | string | no | Return issues sorted in `asc` or `desc` order. Default is `desc` |
| `search` | string | no | Search project issues against their `title` and `description` | | `search` | string | no | Search project issues against their `title` and `description` |
......
...@@ -33,7 +33,7 @@ Parameters: ...@@ -33,7 +33,7 @@ Parameters:
| `state` | string | no | Return all merge requests or just those that are `opened`, `closed`, `locked`, or `merged` | | `state` | string | no | Return all merge requests or just those that are `opened`, `closed`, `locked`, or `merged` |
| `order_by` | string | no | Return requests ordered by `created_at` or `updated_at` fields. Default is `created_at` | | `order_by` | string | no | Return requests ordered by `created_at` or `updated_at` fields. Default is `created_at` |
| `sort` | string | no | Return requests sorted in `asc` or `desc` order. Default is `desc` | | `sort` | string | no | Return requests sorted in `asc` or `desc` order. Default is `desc` |
| `milestone` | string | no | Return merge requests for a specific milestone | | `milestone` | string | no | Return merge requests for a specific milestone. `None` returns merge requests with no milestone. `Any` returns merge requests that have an assigned milestone. |
| `view` | string | no | If `simple`, returns the `iid`, URL, title, description, and basic state of merge request | | `view` | string | no | If `simple`, returns the `iid`, URL, title, description, and basic state of merge request |
| `labels` | string | no | Return merge requests matching a comma separated list of labels | | `labels` | string | no | Return merge requests matching a comma separated list of labels |
| `created_after` | datetime | no | Return merge requests created on or after the given time | | `created_after` | datetime | no | Return merge requests created on or after the given time |
...@@ -158,7 +158,7 @@ Parameters: ...@@ -158,7 +158,7 @@ Parameters:
| `state` | string | no | Return all merge requests or just those that are `opened`, `closed`, `locked`, or `merged` | | `state` | string | no | Return all merge requests or just those that are `opened`, `closed`, `locked`, or `merged` |
| `order_by` | string | no | Return requests ordered by `created_at` or `updated_at` fields. Default is `created_at` | | `order_by` | string | no | Return requests ordered by `created_at` or `updated_at` fields. Default is `created_at` |
| `sort` | string | no | Return requests sorted in `asc` or `desc` order. Default is `desc` | | `sort` | string | no | Return requests sorted in `asc` or `desc` order. Default is `desc` |
| `milestone` | string | no | Return merge requests for a specific milestone | | `milestone` | string | no | Return merge requests for a specific milestone. `None` returns merge requests with no milestone. `Any` returns merge requests that have an assigned milestone. |
| `view` | string | no | If `simple`, returns the `iid`, URL, title, description, and basic state of merge request | | `view` | string | no | If `simple`, returns the `iid`, URL, title, description, and basic state of merge request |
| `labels` | string | no | Return merge requests matching a comma separated list of labels | | `labels` | string | no | Return merge requests matching a comma separated list of labels |
| `created_after` | datetime | no | Return merge requests created on or after the given time | | `created_after` | datetime | no | Return merge requests created on or after the given time |
...@@ -272,7 +272,11 @@ Parameters: ...@@ -272,7 +272,11 @@ Parameters:
| `state` | string | no | Return all merge requests or just those that are `opened`, `closed`, `locked`, or `merged` | | `state` | string | no | Return all merge requests or just those that are `opened`, `closed`, `locked`, or `merged` |
| `order_by` | string | no | Return merge requests ordered by `created_at` or `updated_at` fields. Default is `created_at` | | `order_by` | string | no | Return merge requests ordered by `created_at` or `updated_at` fields. Default is `created_at` |
| `sort` | string | no | Return merge requests sorted in `asc` or `desc` order. Default is `desc` | | `sort` | string | no | Return merge requests sorted in `asc` or `desc` order. Default is `desc` |
<<<<<<< HEAD
| `milestone` | string | no | Return merge requests for a specific milestone | | `milestone` | string | no | Return merge requests for a specific milestone |
=======
| `milestone` | string | no | Return merge requests for a specific milestone. `None` returns merge requests with no milestone. `Any` returns merge requests that have an assigned milestone. |
>>>>>>> upstream/master
| `view` | string | no | If `simple`, returns the `iid`, URL, title, description, and basic state of merge request | | `view` | string | no | If `simple`, returns the `iid`, URL, title, description, and basic state of merge request |
| `labels` | string | no | Return merge requests matching a comma separated list of labels | | `labels` | string | no | Return merge requests matching a comma separated list of labels |
| `created_after` | datetime | no | Return merge requests created on or after the given time | | `created_after` | datetime | no | Return merge requests created on or after the given time |
......
...@@ -16,8 +16,8 @@ to build a [Maven](https://maven.apache.org/) project, deploy it to [Artifactory ...@@ -16,8 +16,8 @@ to build a [Maven](https://maven.apache.org/) project, deploy it to [Artifactory
You'll create two different projects: You'll create two different projects:
- `simple-maven-dep`: the app built and deployed to Artifactory (available at https://gitlab.com/gitlab-examples/maven/simple-maven-dep) - `simple-maven-dep`: the app built and deployed to Artifactory (available at https://gitlab.com/gitlab-examples/maven/simple-maven-dep )
- `simple-maven-app`: the app using the previous one as a dependency (available at https://gitlab.com/gitlab-examples/maven/simple-maven-app) - `simple-maven-app`: the app using the previous one as a dependency (available at https://gitlab.com/gitlab-examples/maven/simple-maven-app )
We assume that you already have a GitLab account on [GitLab.com](https://gitlab.com/), and that you know the basic usage of Git and [GitLab CI/CD](https://about.gitlab.com/features/gitlab-ci-cd/). We assume that you already have a GitLab account on [GitLab.com](https://gitlab.com/), and that you know the basic usage of Git and [GitLab CI/CD](https://about.gitlab.com/features/gitlab-ci-cd/).
We also assume that an Artifactory instance is available and reachable from the internet, and that you have valid credentials to deploy on it. We also assume that an Artifactory instance is available and reachable from the internet, and that you have valid credentials to deploy on it.
......
...@@ -379,7 +379,7 @@ let(:mutation) do ...@@ -379,7 +379,7 @@ let(:mutation) do
) )
end end
it 'returns a successfull response' do it 'returns a successful response' do
post_graphql_mutation(mutation, current_user: user) post_graphql_mutation(mutation, current_user: user)
expect(response).to have_gitlab_http_status(:success) expect(response).to have_gitlab_http_status(:success)
......
# Tips # Tips
## Contents
* [SVGs](#svgs)
---
## SVGs ## SVGs
When exporting SVGs, be sure to follow the following guidelines: When exporting SVGs, be sure to follow the following guidelines:
1. Convert all strokes to outlines. 1. Convert all strokes to outlines.
2. Use pathfinder tools to combine overlapping paths and create compound paths. 1. Use pathfinder tools to combine overlapping paths and create compound paths.
3. SVGs that are limited to one color should be exported without a fill color so the color can be set using CSS. 1. SVGs that are limited to one color should be exported without a fill color so the color can be set using CSS.
4. Ensure that exported SVGs have been run through an [SVG cleaner](https://github.com/RazrFalcon/SVGCleaner) to remove unused elements and attributes. 1. Ensure that exported SVGs have been run through an [SVG cleaner](https://github.com/RazrFalcon/SVGCleaner) to remove unused elements and attributes.
You can open your SVG in a text editor to ensure that it is clean.
You can open your svg in a text editor to ensure that it is clean.
Incorrect files will look like this: Incorrect files will look like this:
```xml ```xml
...@@ -35,10 +31,10 @@ Incorrect files will look like this: ...@@ -35,10 +31,10 @@ Incorrect files will look like this:
</svg> </svg>
``` ```
Correct file will look like this: Correct files will look like this:
```xml ```xml
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 17" enable-background="new 0 0 16 17"><path d="m15.1 1h-2.1v-1h-2v1h-6v-1h-2v1h-2.1c-.5 0-.9.5-.9 1v14c0 .6.4 1 .9 1h14.2c.5 0 .9-.4.9-1v-14c0-.5-.4-1-.9-1m-1.1 14h-12v-9h12v9m0-11h-12v-1h12v1"/><path d="m5.4 11.6l1.5 1.2c.4.3 1.1.3 1.4-.1l2.5-3c.3-.4.3-1.1-.1-1.4-.5-.4-1.1-.3-1.5.1l-1.8 2.2-.8-.6c-.4-.3-1.1-.3-1.4.2-.3.4-.3 1 .2 1.4"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 17" enable-background="new 0 0 16 17"><path d="m15.1 1h-2.1v-1h-2v1h-6v-1h-2v1h-2.1c-.5 0-.9.5-.9 1v14c0 .6.4 1 .9 1h14.2c.5 0 .9-.4.9-1v-14c0-.5-.4-1-.9-1m-1.1 14h-12v-9h12v9m0-11h-12v-1h12v1"/><path d="m5.4 11.6l1.5 1.2c.4.3 1.1.3 1.4-.1l2.5-3c.3-.4.3-1.1-.1-1.4-.5-.4-1.1-.3-1.5.1l-1.8 2.2-.8-.6c-.4-.3-1.1-.3-1.4.2-.3.4-.3 1 .2 1.4"/></svg>
``` ```
> TODO: Checkout [https://github.com/svg/svgo](https://github.com/svg/svgo) > TODO: Checkout <https://github.com/svg/svgo>.
# Digital Ocean and Docker Machine test environment # Digital Ocean and Docker Machine test environment
## Warning. This guide is for quickly testing different versions of GitLab and CAUTION: **Caution:**
## not recommended for ease of future upgrades or keeping the data you create. This guide is for quickly testing different versions of GitLab and not recommended for ease of
future upgrades or keeping the data you create.
## Initial setup ## Initial setup
...@@ -12,92 +13,88 @@ locally on either macOS or Linux. ...@@ -12,92 +13,88 @@ locally on either macOS or Linux.
#### Install Docker Toolbox #### Install Docker Toolbox
1. [https://www.docker.com/products/docker-toolbox](https://www.docker.com/products/docker-toolbox) - <https://www.docker.com/products/docker-toolbox>
### On Linux ### On Linux
#### Install Docker Engine #### Install Docker Engine
1. [https://docs.docker.com/engine/installation/linux](https://docs.docker.com/engine/installation/linux/) - <https://docs.docker.com/engine/installation/linux/>
#### Install Docker Machine #### Install Docker Machine
1. [https://docs.docker.com/machine/install-machine](https://docs.docker.com/machine/install-machine/) - <https://docs.docker.com/machine/install-machine/>
_The rest of the steps are identical for macOS and Linux_ NOTE: **Note:**
The rest of the steps are identical for macOS and Linux.
### Create new docker host ### Create new docker host
1. Login to Digital Ocean 1. Login to Digital Ocean.
1. Generate a new API token at https://cloud.digitalocean.com/settings/api/tokens 1. Generate a new API token at <https://cloud.digitalocean.com/settings/api/tokens>.
This command will create a new DO droplet called `gitlab-test-env-do` that will act as a docker host.
This command will create a new DO droplet called `gitlab-test-env-do` that will act as a docker host. NOTE: **Note:**
4GB is the minimum requirement for a Docker host that will run more than one GitLab instance.
**Note: 4GB is the minimum requirement for a Docker host that will run more then one GitLab instance** - RAM: 4GB
- Name: `gitlab-test-env-do`
- Driver: `digitalocean`
+ RAM: 4GB 1. Set the DO token:
+ Name: `gitlab-test-env-do`
+ Driver: `digitalocean`
```sh
export DOTOKEN=<your generated token>
```
**Set the DO token** - Replace the string below with your generated token 1. Create the machine:
``` ```sh
export DOTOKEN=cf3dfd0662933203005c4a73396214b7879d70aabc6352573fe178d340a80248 docker-machine create \
``` --driver digitalocean \
--digitalocean-access-token=$DOTOKEN \
**Create the machine** --digitalocean-size "4gb" \
gitlab-test-env-do
``` ```
docker-machine create \
--driver digitalocean \
--digitalocean-access-token=$DOTOKEN \
--digitalocean-size "4gb" \
gitlab-test-env-do
```
+ Resource: https://docs.docker.com/machine/drivers/digital-ocean/
Resource: <https://docs.docker.com/machine/drivers/digital-ocean/>.
### Creating GitLab test instance ### Creating GitLab test instance
#### Connect your shell to the new machine #### Connect your shell to the new machine
In this example we'll create a GitLab EE 8.10.8 instance. In this example we'll create a GitLab EE 8.10.8 instance.
First connect the docker client to the docker host you created previously. First connect the docker client to the docker host you created previously.
``` ```sh
eval "$(docker-machine env gitlab-test-env-do)" eval "$(docker-machine env gitlab-test-env-do)"
``` ```
You can add this to your `~/.bash_profile` file to ensure the `docker` client uses the `gitlab-test-env-do` docker host You can add this to your `~/.bash_profile` file to ensure the `docker` client uses the `gitlab-test-env-do` docker host
#### Create new GitLab container #### Create new GitLab container
+ HTTP port: `8888` - HTTP port: `8888`
+ SSH port: `2222` - SSH port: `2222`
+ Set `gitlab_shell_ssh_port` using `--env GITLAB_OMNIBUS_CONFIG ` - Set `gitlab_shell_ssh_port` using `--env GITLAB_OMNIBUS_CONFIG`
+ Hostname: IP of docker host - Hostname: IP of docker host
+ Container name: `gitlab-test-8.10` - Container name: `gitlab-test-8.10`
+ GitLab version: **EE** `8.10.8-ee.0` - GitLab version: **EE** `8.10.8-ee.0`
##### Set up container settings ##### Set up container settings
``` ```sh
export SSH_PORT=2222 export SSH_PORT=2222
export HTTP_PORT=8888 export HTTP_PORT=8888
export VERSION=8.10.8-ee.0 export VERSION=8.10.8-ee.0
export NAME=gitlab-test-8.10 export NAME=gitlab-test-8.10
``` ```
##### Create container ##### Create container
```
```sh
docker run --detach \ docker run --detach \
--env GITLAB_OMNIBUS_CONFIG="external_url 'http://$(docker-machine ip gitlab-test-env-do):$HTTP_PORT'; gitlab_rails['gitlab_shell_ssh_port'] = $SSH_PORT;" \ --env GITLAB_OMNIBUS_CONFIG="external_url 'http://$(docker-machine ip gitlab-test-env-do):$HTTP_PORT'; gitlab_rails['gitlab_shell_ssh_port'] = $SSH_PORT;" \
--hostname $(docker-machine ip gitlab-test-env-do) \ --hostname $(docker-machine ip gitlab-test-env-do) \
...@@ -110,23 +107,20 @@ gitlab/gitlab-ee:$VERSION ...@@ -110,23 +107,20 @@ gitlab/gitlab-ee:$VERSION
##### Retrieve the docker host IP ##### Retrieve the docker host IP
``` ```sh
docker-machine ip gitlab-test-env-do docker-machine ip gitlab-test-env-do
# example output: 192.168.151.134 # example output: 192.168.151.134
``` ```
Browse to: <http://192.168.151.134:8888/>.
+ Browse to: http://192.168.151.134:8888/
##### Execute interactive shell/edit configuration ##### Execute interactive shell/edit configuration
```sh
```
docker exec -it $NAME /bin/bash docker exec -it $NAME /bin/bash
``` ```
``` ```sh
# example commands # example commands
root@192:/# vi /etc/gitlab/gitlab.rb root@192:/# vi /etc/gitlab/gitlab.rb
root@192:/# gitlab-ctl reconfigure root@192:/# gitlab-ctl reconfigure
...@@ -134,6 +128,6 @@ root@192:/# gitlab-ctl reconfigure ...@@ -134,6 +128,6 @@ root@192:/# gitlab-ctl reconfigure
#### Resources #### Resources
+ [https://docs.gitlab.com/omnibus/docker/](https://docs.gitlab.com/omnibus/docker/) - <https://docs.gitlab.com/omnibus/docker/>.
+ [https://docs.docker.com/machine/get-started/](https://docs.docker.com/machine/get-started/) - <https://docs.docker.com/machine/get-started/>.
+ [https://docs.docker.com/machine/reference/ip/](https://docs.docker.com/machine/reference/ip/)+ - <https://docs.docker.com/machine/reference/ip/>.
This diff is collapsed.
This diff is collapsed.
...@@ -153,7 +153,7 @@ module ExtractsPath ...@@ -153,7 +153,7 @@ module ExtractsPath
private private
# overriden in subclasses, do not remove # overridden in subclasses, do not remove
def get_id def get_id
id = [params[:id] || params[:ref]] id = [params[:id] || params[:ref]]
id << "/" + params[:path] unless params[:path].blank? id << "/" + params[:path] unless params[:path].blank?
......
...@@ -82,7 +82,7 @@ module Gitlab ...@@ -82,7 +82,7 @@ module Gitlab
end end
# Get the first part of the email address (before @) # Get the first part of the email address (before @)
# In addtion in removes illegal characters # In addition in removes illegal characters
def generate_username(email) def generate_username(email)
email.match(/^[^@]*/)[0].mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/, '').to_s email.match(/^[^@]*/)[0].mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/, '').to_s
end end
......
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
module Gitlab module Gitlab
module BackgroundMigration module BackgroundMigration
# Ensures services which previously recieved all notes events continue # Ensures services which previously received all notes events continue
# to recieve confidential ones. # to receive confidential ones.
class SetConfidentialNoteEventsOnServices class SetConfidentialNoteEventsOnServices
class Service < ActiveRecord::Base class Service < ActiveRecord::Base
self.table_name = 'services' self.table_name = 'services'
......
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
module Gitlab module Gitlab
module BackgroundMigration module BackgroundMigration
# Ensures hooks which previously recieved all notes events continue # Ensures hooks which previously received all notes events continue
# to recieve confidential ones. # to receive confidential ones.
class SetConfidentialNoteEventsOnWebhooks class SetConfidentialNoteEventsOnWebhooks
class WebHook < ActiveRecord::Base class WebHook < ActiveRecord::Base
self.table_name = 'web_hooks' self.table_name = 'web_hooks'
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
# * Publishes the documentation for `master` branch. # * Publishes the documentation for `master` branch.
variables: variables:
# This will supress any download for dependencies and plugins or upload messages which would clutter the console log. # This will suppress any download for dependencies and plugins or upload messages which would clutter the console log.
# `showDateTime` will show the passed time in milliseconds. You need to specify `--batch-mode` to make this work. # `showDateTime` will show the passed time in milliseconds. You need to specify `--batch-mode` to make this work.
MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true" MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
# As of Maven 3.3.0 instead of this you may define these options in `.mvn/maven.config` so the same config is used # As of Maven 3.3.0 instead of this you may define these options in `.mvn/maven.config` so the same config is used
......
...@@ -879,7 +879,7 @@ module Gitlab ...@@ -879,7 +879,7 @@ module Gitlab
columns(table).find { |column| column.name == name } columns(table).find { |column| column.name == name }
end end
# This will replace the first occurance of a string in a column with # This will replace the first occurrence of a string in a column with
# the replacement # the replacement
# On postgresql we can use `regexp_replace` for that. # On postgresql we can use `regexp_replace` for that.
# On mysql we find the location of the pattern, and overwrite it # On mysql we find the location of the pattern, and overwrite it
......
...@@ -24,7 +24,7 @@ module Gitlab ...@@ -24,7 +24,7 @@ module Gitlab
# head of `feature` was commit B, resulting in the original diff A->B. # head of `feature` was commit B, resulting in the original diff A->B.
# Since creation, `master` was updated to C. # Since creation, `master` was updated to C.
# Now `feature` is being updated to D, and the newly generated MR diff is C->D. # Now `feature` is being updated to D, and the newly generated MR diff is C->D.
# It is possible that C and D are direct decendants of A and B respectively, # It is possible that C and D are direct descendants of A and B respectively,
# but this isn't necessarily the case as rebases and merges come into play. # but this isn't necessarily the case as rebases and merges come into play.
# #
# Suppose we have a diff note on the original diff A->B. Now that the MR # Suppose we have a diff note on the original diff A->B. Now that the MR
......
...@@ -349,7 +349,7 @@ module Gitlab ...@@ -349,7 +349,7 @@ module Gitlab
f.write(message.data) f.write(message.data)
end end
end end
# If the file is empty means that we recieved an empty stream, we delete the file # If the file is empty means that we received an empty stream, we delete the file
FileUtils.rm(save_path) if File.zero?(save_path) FileUtils.rm(save_path) if File.zero?(save_path)
end end
......
...@@ -22,7 +22,7 @@ module Gitlab ...@@ -22,7 +22,7 @@ module Gitlab
# additional work that is strictly necessary. # additional work that is strictly necessary.
merge_request_id = insert_and_return_id(attributes, project.merge_requests) merge_request_id = insert_and_return_id(attributes, project.merge_requests)
merge_request = project.merge_requests.find(merge_request_id) merge_request = project.merge_requests.reload.find(merge_request_id)
# We use .insert_and_return_id which effectively disables all callbacks. # We use .insert_and_return_id which effectively disables all callbacks.
# Trigger iid logic here to make sure we track internal id values consistently. # Trigger iid logic here to make sure we track internal id values consistently.
......
...@@ -154,7 +154,7 @@ module Gitlab ...@@ -154,7 +154,7 @@ module Gitlab
Project.transaction do Project.transaction do
process_sub_relation(relation, relation_item) process_sub_relation(relation, relation_item)
# For every subrelation that hangs from Project, save the associated records alltogether # For every subrelation that hangs from Project, save the associated records altogether
# This effectively batches all records per subrelation item, only keeping those in memory # This effectively batches all records per subrelation item, only keeping those in memory
# We have to keep in mind that more batch granularity << Memory, but >> Slowness # We have to keep in mind that more batch granularity << Memory, but >> Slowness
if save if save
......
...@@ -240,7 +240,7 @@ module Gitlab ...@@ -240,7 +240,7 @@ module Gitlab
def single_line_regexp(regex) def single_line_regexp(regex)
# Turns a multiline extended regexp into a single line one, # Turns a multiline extended regexp into a single line one,
# beacuse `rake routes` breaks on multiline regexes. # because `rake routes` breaks on multiline regexes.
Regexp.new(regex.source.gsub(/\(\?#.+?\)/, '').gsub(/\s*/, ''), regex.options ^ Regexp::EXTENDED).freeze Regexp.new(regex.source.gsub(/\(\?#.+?\)/, '').gsub(/\s*/, ''), regex.options ^ Regexp::EXTENDED).freeze
end end
end end
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
# of the global setting allow_local_requests_from_hooks_and_services this adapter # of the global setting allow_local_requests_from_hooks_and_services this adapter
# will allow/block connection to internal IPs and/or urls. # will allow/block connection to internal IPs and/or urls.
# #
# This functionality can be overriden by providing the setting the option # This functionality can be overridden by providing the setting the option
# allow_local_requests = true in the request. For example: # allow_local_requests = true in the request. For example:
# Gitlab::HTTP.get('http://www.gitlab.com', allow_local_requests: true) # Gitlab::HTTP.get('http://www.gitlab.com', allow_local_requests: true)
# #
......
...@@ -3,7 +3,7 @@ module Gitlab ...@@ -3,7 +3,7 @@ module Gitlab
class IssueNew < IssueCommand class IssueNew < IssueCommand
def self.match(text) def self.match(text)
# we can not match \n with the dot by passing the m modifier as than # we can not match \n with the dot by passing the m modifier as than
# the title and description are not seperated # the title and description are not separated
/\Aissue\s+(new|create)\s+(?<title>[^\n]*)\n*(?<description>(.|\n)*)/.match(text) /\Aissue\s+(new|create)\s+(?<title>[^\n]*)\n*(?<description>(.|\n)*)/.match(text)
end end
......
# frozen_string_literal: true # frozen_string_literal: true
# This class extracts all users found in a piece of text by the username or the # This class extracts all users found in a piece of text by the username or the
# email adress # email address
module Gitlab module Gitlab
class UserExtractor class UserExtractor
......
...@@ -16,7 +16,7 @@ module GoogleApi ...@@ -16,7 +16,7 @@ module GoogleApi
client.auth_code.authorize_url( client.auth_code.authorize_url(
redirect_uri: redirect_uri, redirect_uri: redirect_uri,
scope: scope, scope: scope,
state: state # This is used for arbitary redirection state: state # This is used for arbitrary redirection
) )
end end
......
...@@ -32,32 +32,32 @@ module Trigger ...@@ -32,32 +32,32 @@ module Trigger
private private
# Must be overriden # Must be overridden
def downstream_project_path def downstream_project_path
raise NotImplementedError raise NotImplementedError
end end
# Must be overriden # Must be overridden
def ref def ref
raise NotImplementedError raise NotImplementedError
end end
# Must be overriden # Must be overridden
def trigger_token def trigger_token
raise NotImplementedError raise NotImplementedError
end end
# Must be overriden # Must be overridden
def access_token def access_token
raise NotImplementedError raise NotImplementedError
end end
# Can be overriden # Can be overridden
def extra_variables def extra_variables
{} {}
end end
# Can be overriden # Can be overridden
def version_param_value(version_file) def version_param_value(version_file)
File.read(version_file).strip File.read(version_file).strip
end end
......
...@@ -63,7 +63,7 @@ describe Groups::MilestonesController do ...@@ -63,7 +63,7 @@ describe Groups::MilestonesController do
let(:group_milestone) { create(:milestone, group: group) } let(:group_milestone) { create(:milestone, group: group) }
context 'when there is a title parameter' do context 'when there is a title parameter' do
it 'searchs for a legacy group milestone' do it 'searches for a legacy group milestone' do
expect(GlobalMilestone).to receive(:build) expect(GlobalMilestone).to receive(:build)
expect(Milestone).not_to receive(:find_by_iid) expect(Milestone).not_to receive(:find_by_iid)
...@@ -72,7 +72,7 @@ describe Groups::MilestonesController do ...@@ -72,7 +72,7 @@ describe Groups::MilestonesController do
end end
context 'when there is not a title parameter' do context 'when there is not a title parameter' do
it 'searchs for a group milestone' do it 'searches for a group milestone' do
expect(GlobalMilestone).not_to receive(:build) expect(GlobalMilestone).not_to receive(:build)
expect(Milestone).to receive(:find_by_iid) expect(Milestone).to receive(:find_by_iid)
......
...@@ -568,7 +568,7 @@ describe GroupsController do ...@@ -568,7 +568,7 @@ describe GroupsController do
sign_in(user) sign_in(user)
end end
context 'when transfering to a subgroup goes right' do context 'when transferring to a subgroup goes right' do
let(:new_parent_group) { create(:group, :public) } let(:new_parent_group) { create(:group, :public) }
let!(:group_member) { create(:group_member, :owner, group: group, user: user) } let!(:group_member) { create(:group_member, :owner, group: group, user: user) }
let!(:new_parent_group_member) { create(:group_member, :owner, group: new_parent_group, user: user) } let!(:new_parent_group_member) { create(:group_member, :owner, group: new_parent_group, user: user) }
......
...@@ -4,7 +4,7 @@ describe Profiles::KeysController do ...@@ -4,7 +4,7 @@ describe Profiles::KeysController do
let(:user) { create(:user) } let(:user) { create(:user) }
describe "#get_keys" do describe "#get_keys" do
describe "non existant user" do describe "non existent user" do
it "does not generally work" do it "does not generally work" do
get :get_keys, username: 'not-existent' get :get_keys, username: 'not-existent'
......
...@@ -216,7 +216,7 @@ describe Projects::EnvironmentsController do ...@@ -216,7 +216,7 @@ describe Projects::EnvironmentsController do
expect(response).to have_gitlab_http_status(200) expect(response).to have_gitlab_http_status(200)
end end
it 'loads the terminals for the enviroment' do it 'loads the terminals for the environment' do
expect_any_instance_of(Environment).to receive(:terminals) expect_any_instance_of(Environment).to receive(:terminals)
get :terminal, environment_params get :terminal, environment_params
......
...@@ -786,7 +786,7 @@ describe Projects::MergeRequestsController do ...@@ -786,7 +786,7 @@ describe Projects::MergeRequestsController do
merge_request.mark_as_merged! merge_request.mark_as_merged!
end end
it 'returns the enviroment on the source project' do it 'returns the environment on the source project' do
get_ci_environments_status(environment_target: 'merge_commit') get_ci_environments_status(environment_target: 'merge_commit')
expect(response).to have_gitlab_http_status(:ok) expect(response).to have_gitlab_http_status(:ok)
......
...@@ -33,7 +33,7 @@ RSpec.describe 'Dashboard Archived Project' do ...@@ -33,7 +33,7 @@ RSpec.describe 'Dashboard Archived Project' do
expect(page).not_to have_content(project.name) expect(page).not_to have_content(project.name)
end end
it 'searchs archived projects', :js do it 'searches archived projects', :js do
click_button 'Last updated' click_button 'Last updated'
click_link 'Show archived projects' click_link 'Show archived projects'
......
...@@ -22,7 +22,7 @@ describe 'Import multiple repositories by uploading a manifest file', :js, :post ...@@ -22,7 +22,7 @@ describe 'Import multiple repositories by uploading a manifest file', :js, :post
expect(page).to have_content('https://android-review.googlesource.com/platform/build/blueprint') expect(page).to have_content('https://android-review.googlesource.com/platform/build/blueprint')
end end
it 'imports succesfully imports a project' do it 'imports successfully imports a project' do
visit new_import_manifest_path visit new_import_manifest_path
attach_file('manifest', Rails.root.join('spec/fixtures/aosp_manifest.xml')) attach_file('manifest', Rails.root.join('spec/fixtures/aosp_manifest.xml'))
......
...@@ -15,7 +15,7 @@ describe 'GFM autocomplete', :js do ...@@ -15,7 +15,7 @@ describe 'GFM autocomplete', :js do
wait_for_requests wait_for_requests
end end
it 'updates issue descripton with GFM reference' do it 'updates issue description with GFM reference' do
find('.js-issuable-edit').click find('.js-issuable-edit').click
simulate_input('#issue-description', "@#{user.name[0...3]}") simulate_input('#issue-description', "@#{user.name[0...3]}")
......
...@@ -19,7 +19,7 @@ describe 'Pipeline Badge' do ...@@ -19,7 +19,7 @@ describe 'Pipeline Badge' do
let!(:pipeline) { create(:ci_empty_pipeline, project: project, ref: ref, sha: project.commit(ref).sha) } let!(:pipeline) { create(:ci_empty_pipeline, project: project, ref: ref, sha: project.commit(ref).sha) }
let!(:job) { create(:ci_build, pipeline: pipeline) } let!(:job) { create(:ci_build, pipeline: pipeline) }
context 'when the pipeline was successfull' do context 'when the pipeline was successful' do
it 'displays so on the badge' do it 'displays so on the badge' do
job.success job.success
......
...@@ -40,7 +40,7 @@ describe 'Clusters', :js do ...@@ -40,7 +40,7 @@ describe 'Clusters', :js do
expect(page).to have_selector('.js-project-feature-toggle') expect(page).to have_selector('.js-project-feature-toggle')
end end
context 'with sucessfull request' do context 'with successful request' do
it 'user sees updated cluster' do it 'user sees updated cluster' do
expect do expect do
page.find('.js-project-feature-toggle').click page.find('.js-project-feature-toggle').click
......
...@@ -16,7 +16,7 @@ describe 'Projects > Files > User creates files' do ...@@ -16,7 +16,7 @@ describe 'Projects > Files > User creates files' do
sign_in(user) sign_in(user)
end end
context 'without commiting a new file' do context 'without committing a new file' do
context 'when an user has write access' do context 'when an user has write access' do
before do before do
visit(project_tree_path_root_ref) visit(project_tree_path_root_ref)
...@@ -49,7 +49,7 @@ describe 'Projects > Files > User creates files' do ...@@ -49,7 +49,7 @@ describe 'Projects > Files > User creates files' do
end end
end end
context 'with commiting a new file' do context 'with committing a new file' do
context 'when an user has write access' do context 'when an user has write access' do
before do before do
visit(project_tree_path_root_ref) visit(project_tree_path_root_ref)
......
...@@ -190,19 +190,31 @@ describe IssuesFinder do ...@@ -190,19 +190,31 @@ describe IssuesFinder do
end end
context 'filtering by no milestone' do context 'filtering by no milestone' do
let(:params) { { milestone_title: Milestone::None.title } } let(:params) { { milestone_title: 'None' } }
it 'returns issues with no milestone' do it 'returns issues with no milestone' do
expect(issues).to contain_exactly(issue2, issue3, issue4) expect(issues).to contain_exactly(issue2, issue3, issue4)
end end
it 'returns issues with no milestone (deprecated)' do
params[:milestone_title] = Milestone::None.title
expect(issues).to contain_exactly(issue2, issue3, issue4)
end
end end
context 'filtering by any milestone' do context 'filtering by any milestone' do
let(:params) { { milestone_title: Milestone::Any.title } } let(:params) { { milestone_title: 'Any' } }
it 'returns issues with any assigned milestone' do it 'returns issues with any assigned milestone' do
expect(issues).to contain_exactly(issue1) expect(issues).to contain_exactly(issue1)
end end
it 'returns issues with any assigned milestone (deprecated)' do
params[:milestone_title] = Milestone::Any.title
expect(issues).to contain_exactly(issue1)
end
end end
context 'filtering by upcoming milestone' do context 'filtering by upcoming milestone' do
......
...@@ -219,7 +219,7 @@ describe('AwardsHandler', function() { ...@@ -219,7 +219,7 @@ describe('AwardsHandler', function() {
expect($thumbsUpEmoji.data('originalTitle')).toBe('You, sam, jerry, max, and andy'); expect($thumbsUpEmoji.data('originalTitle')).toBe('You, sam, jerry, max, and andy');
}); });
it('handles the special case where "You" is not cleanly comma seperated', function() { it('handles the special case where "You" is not cleanly comma separated', function() {
const awardUrl = awardsHandler.getAwardUrl(); const awardUrl = awardsHandler.getAwardUrl();
const $votesBlock = $('.js-awards-block').eq(0); const $votesBlock = $('.js-awards-block').eq(0);
const $thumbsUpEmoji = $votesBlock.find('[data-name=thumbsup]').parent(); const $thumbsUpEmoji = $votesBlock.find('[data-name=thumbsup]').parent();
...@@ -244,7 +244,7 @@ describe('AwardsHandler', function() { ...@@ -244,7 +244,7 @@ describe('AwardsHandler', function() {
expect($thumbsUpEmoji.data('originalTitle')).toBe('sam, jerry, max, and andy'); expect($thumbsUpEmoji.data('originalTitle')).toBe('sam, jerry, max, and andy');
}); });
it('handles the special case where "You" is not cleanly comma seperated', function() { it('handles the special case where "You" is not cleanly comma separated', function() {
const awardUrl = awardsHandler.getAwardUrl(); const awardUrl = awardsHandler.getAwardUrl();
const $votesBlock = $('.js-awards-block').eq(0); const $votesBlock = $('.js-awards-block').eq(0);
const $thumbsUpEmoji = $votesBlock.find('[data-name=thumbsup]').parent(); const $thumbsUpEmoji = $votesBlock.find('[data-name=thumbsup]').parent();
......
...@@ -22,7 +22,7 @@ describe('Commit pipeline status component', () => { ...@@ -22,7 +22,7 @@ describe('Commit pipeline status component', () => {
Component = Vue.extend(commitPipelineStatus); Component = Vue.extend(commitPipelineStatus);
}); });
describe('While polling pipeline data succesfully', () => { describe('While polling pipeline data successfully', () => {
beforeEach(() => { beforeEach(() => {
mock = new MockAdapter(axios); mock = new MockAdapter(axios);
mock.onGet('/dummy/endpoint').reply(() => { mock.onGet('/dummy/endpoint').reply(() => {
...@@ -59,14 +59,14 @@ describe('Commit pipeline status component', () => { ...@@ -59,14 +59,14 @@ describe('Commit pipeline status component', () => {
}); });
}); });
it('contains a ciStatus when the polling is succesful ', done => { it('contains a ciStatus when the polling is successful ', done => {
setTimeout(() => { setTimeout(() => {
expect(vm.ciStatus).toEqual(mockCiStatus); expect(vm.ciStatus).toEqual(mockCiStatus);
done(); done();
}); });
}); });
it('contains a ci-status icon when polling is succesful', done => { it('contains a ci-status icon when polling is successful', done => {
setTimeout(() => { setTimeout(() => {
expect(vm.$el.querySelector('.ci-status-icon')).not.toBe(null); expect(vm.$el.querySelector('.ci-status-icon')).not.toBe(null);
expect(vm.$el.querySelector('.ci-status-icon').classList).toContain( expect(vm.$el.querySelector('.ci-status-icon').classList).toContain(
...@@ -77,7 +77,7 @@ describe('Commit pipeline status component', () => { ...@@ -77,7 +77,7 @@ describe('Commit pipeline status component', () => {
}); });
}); });
describe('When polling data was not succesful', () => { describe('When polling data was not successful', () => {
beforeEach(() => { beforeEach(() => {
mock = new MockAdapter(axios); mock = new MockAdapter(axios);
mock.onGet('/dummy/endpoint').reply(502, {}); mock.onGet('/dummy/endpoint').reply(502, {});
......
...@@ -31,7 +31,7 @@ describe('Environment', () => { ...@@ -31,7 +31,7 @@ describe('Environment', () => {
mock.restore(); mock.restore();
}); });
describe('successfull request', () => { describe('successful request', () => {
describe('without environments', () => { describe('without environments', () => {
beforeEach(done => { beforeEach(done => {
mock.onGet(mockData.endpoint).reply(200, { environments: [] }); mock.onGet(mockData.endpoint).reply(200, { environments: [] });
......
...@@ -30,7 +30,7 @@ describe('Environments Folder View', () => { ...@@ -30,7 +30,7 @@ describe('Environments Folder View', () => {
component.$destroy(); component.$destroy();
}); });
describe('successfull request', () => { describe('successful request', () => {
beforeEach(() => { beforeEach(() => {
mock.onGet(mockData.endpoint).reply( mock.onGet(mockData.endpoint).reply(
200, 200,
......
...@@ -52,7 +52,7 @@ describe('Job App ', () => { ...@@ -52,7 +52,7 @@ describe('Job App ', () => {
}); });
}); });
describe('with successfull request', () => { describe('with successful request', () => {
beforeEach(() => { beforeEach(() => {
mock.onGet(`${props.pagePath}/trace.json`).replyOnce(200, {}); mock.onGet(`${props.pagePath}/trace.json`).replyOnce(200, {});
}); });
......
...@@ -199,11 +199,11 @@ describe('datefix', () => { ...@@ -199,11 +199,11 @@ describe('datefix', () => {
expect(datetimeUtility.pad(2)).toEqual('02'); expect(datetimeUtility.pad(2)).toEqual('02');
}); });
it('should not add a zero when lenght matches the default', () => { it('should not add a zero when length matches the default', () => {
expect(datetimeUtility.pad(12)).toEqual('12'); expect(datetimeUtility.pad(12)).toEqual('12');
}); });
it('should add a 0 when lenght is smaller than the provided', () => { it('should add a 0 when length is smaller than the provided', () => {
expect(datetimeUtility.pad(12, 3)).toEqual('012'); expect(datetimeUtility.pad(12, 3)).toEqual('012');
}); });
}); });
......
...@@ -118,7 +118,7 @@ describe('text_utility', () => { ...@@ -118,7 +118,7 @@ describe('text_utility', () => {
}); });
describe('getFirstCharacterCapitalized', () => { describe('getFirstCharacterCapitalized', () => {
it('returns the first character captialized, if first character is alphabetic', () => { it('returns the first character capitalized, if first character is alphabetic', () => {
expect(textUtils.getFirstCharacterCapitalized('loremIpsumDolar')).toEqual('L'); expect(textUtils.getFirstCharacterCapitalized('loremIpsumDolar')).toEqual('L');
expect(textUtils.getFirstCharacterCapitalized('Sit amit !')).toEqual('S'); expect(textUtils.getFirstCharacterCapitalized('Sit amit !')).toEqual('S');
}); });
......
...@@ -78,7 +78,7 @@ describe('Notes Store mutations', () => { ...@@ -78,7 +78,7 @@ describe('Notes Store mutations', () => {
}); });
describe('COLLAPSE_DISCUSSION', () => { describe('COLLAPSE_DISCUSSION', () => {
it('should collpase an expanded discussion', () => { it('should collapse an expanded discussion', () => {
const discussion = Object.assign({}, discussionMock, { expanded: true }); const discussion = Object.assign({}, discussionMock, { expanded: true });
const state = { const state = {
......
...@@ -24,7 +24,7 @@ describe('Pipelines Empty State', () => { ...@@ -24,7 +24,7 @@ describe('Pipelines Empty State', () => {
expect(component.$el.querySelector('.svg-content svg')).toBeDefined(); expect(component.$el.querySelector('.svg-content svg')).toBeDefined();
}); });
it('should render emtpy state information', () => { it('should render empty state information', () => {
expect(component.$el.querySelector('h4').textContent).toContain('Build with confidence'); expect(component.$el.querySelector('h4').textContent).toContain('Build with confidence');
expect( expect(
......
...@@ -50,7 +50,7 @@ describe('pipeline graph action component', () => { ...@@ -50,7 +50,7 @@ describe('pipeline graph action component', () => {
}); });
describe('on click', () => { describe('on click', () => {
it('emits `pipelineActionRequestComplete` after a successfull request', done => { it('emits `pipelineActionRequestComplete` after a successful request', done => {
spyOn(component, '$emit'); spyOn(component, '$emit');
component.$el.click(); component.$el.click();
......
...@@ -372,7 +372,7 @@ describe('Pipelines', () => { ...@@ -372,7 +372,7 @@ describe('Pipelines', () => {
}); });
}); });
describe('successfull request', () => { describe('successful request', () => {
describe('with pipelines', () => { describe('with pipelines', () => {
beforeEach(() => { beforeEach(() => {
mock.onGet('twitter/flight/pipelines.json').reply(200, pipelines); mock.onGet('twitter/flight/pipelines.json').reply(200, pipelines);
...@@ -667,7 +667,7 @@ describe('Pipelines', () => { ...@@ -667,7 +667,7 @@ describe('Pipelines', () => {
}); });
}); });
it('returns false when state is emtpy state', done => { it('returns false when state is empty state', done => {
vm.isLoading = false; vm.isLoading = false;
vm.hasMadeRequest = true; vm.hasMadeRequest = true;
vm.hasGitlabCi = false; vm.hasGitlabCi = false;
......
...@@ -40,7 +40,7 @@ describe('Pipelines stage component', () => { ...@@ -40,7 +40,7 @@ describe('Pipelines stage component', () => {
expect(component.$el.querySelector('button').getAttribute('data-toggle')).toEqual('dropdown'); expect(component.$el.querySelector('button').getAttribute('data-toggle')).toEqual('dropdown');
}); });
describe('with successfull request', () => { describe('with successful request', () => {
beforeEach(() => { beforeEach(() => {
mock.onGet('path.json').reply(200, stageReply); mock.onGet('path.json').reply(200, stageReply);
}); });
......
...@@ -69,7 +69,7 @@ describe('MRWidgetMerged', () => { ...@@ -69,7 +69,7 @@ describe('MRWidgetMerged', () => {
expect(vm.shouldShowRemoveSourceBranch).toEqual(true); expect(vm.shouldShowRemoveSourceBranch).toEqual(true);
}); });
it('returns false wehn sourceBranchRemoved is true', () => { it('returns false when sourceBranchRemoved is true', () => {
vm.mr.sourceBranchRemoved = true; vm.mr.sourceBranchRemoved = true;
expect(vm.shouldShowRemoveSourceBranch).toEqual(false); expect(vm.shouldShowRemoveSourceBranch).toEqual(false);
......
...@@ -41,7 +41,7 @@ describe('Filtered search dropdown', () => { ...@@ -41,7 +41,7 @@ describe('Filtered search dropdown', () => {
}); });
}); });
describe('when visible number is bigger than the items lenght', () => { describe('when visible number is bigger than the items length', () => {
beforeEach(() => { beforeEach(() => {
vm = mountComponent(Component, { vm = mountComponent(Component, {
items: [{ title: 'One' }, { title: 'Two' }, { title: 'Three' }], items: [{ title: 'One' }, { title: 'Two' }, { title: 'Three' }],
......
...@@ -44,7 +44,7 @@ describe('User Avatar Link Component', function() { ...@@ -44,7 +44,7 @@ describe('User Avatar Link Component', function() {
expect(this.userAvatarLink.$el.querySelector('img')).not.toBeNull(); expect(this.userAvatarLink.$el.querySelector('img')).not.toBeNull();
}); });
it('should return neccessary props as defined', function() { it('should return necessary props as defined', function() {
_.each(this.propsData, (val, key) => { _.each(this.propsData, (val, key) => {
expect(this.userAvatarLink[key]).toBeDefined(); expect(this.userAvatarLink[key]).toBeDefined();
}); });
......
...@@ -76,7 +76,7 @@ describe Banzai::Filter::AutolinkFilter do ...@@ -76,7 +76,7 @@ describe Banzai::Filter::AutolinkFilter do
expect(doc.at_css('a')['href']).to eq link expect(doc.at_css('a')['href']).to eq link
end end
it 'autolinks multiple occurences of smb' do it 'autolinks multiple occurrences of smb' do
link1 = 'smb:///Volumes/shared/foo.pdf' link1 = 'smb:///Volumes/shared/foo.pdf'
link2 = 'smb:///Volumes/shared/bar.pdf' link2 = 'smb:///Volumes/shared/bar.pdf'
......
...@@ -226,7 +226,7 @@ describe Banzai::Filter::RelativeLinkFilter do ...@@ -226,7 +226,7 @@ describe Banzai::Filter::RelativeLinkFilter do
let(:ref) {'mark#\'@],+;-._/#@!$&()+down'} let(:ref) {'mark#\'@],+;-._/#@!$&()+down'}
it 'correctly escapes the ref' do it 'correctly escapes the ref' do
# Adressable won't escape the '#', so we do this manually # Addressable won't escape the '#', so we do this manually
ref_escaped = 'mark%23\'@%5D,+;-._/%23@!$&()+down' ref_escaped = 'mark%23\'@%5D,+;-._/%23@!$&()+down'
# Stub this method so the branch doesn't actually need to be in the repo # Stub this method so the branch doesn't actually need to be in the repo
......
...@@ -64,7 +64,7 @@ describe ContainerRegistry::Blob do ...@@ -64,7 +64,7 @@ describe ContainerRegistry::Blob do
.to_return(status: 200) .to_return(status: 200)
end end
it 'returns true when blob has been successfuly deleted' do it 'returns true when blob has been successfully deleted' do
expect(blob.delete).to be_truthy expect(blob.delete).to be_truthy
end end
end end
......
...@@ -118,7 +118,7 @@ describe Gitlab::BackgroundMigration::CreateForkNetworkMembershipsRange, :migrat ...@@ -118,7 +118,7 @@ describe Gitlab::BackgroundMigration::CreateForkNetworkMembershipsRange, :migrat
expect(fork_network_members.count).to eq(12) expect(fork_network_members.count).to eq(12)
end end
it 'knows when not all memberships withing a batch have been created' do it 'knows when not all memberships within a batch have been created' do
expect(migration.missing_members?(8, 10)).to be_truthy expect(migration.missing_members?(8, 10)).to be_truthy
end end
end end
......
...@@ -68,7 +68,7 @@ describe Gitlab::Checks::LfsIntegrity do ...@@ -68,7 +68,7 @@ describe Gitlab::Checks::LfsIntegrity do
expect(subject.objects_missing?).to be_truthy expect(subject.objects_missing?).to be_truthy
end end
it 'is false parent project already conatins LFS objects for the fork' do it 'is false parent project already contains LFS objects for the fork' do
lfs_object = create(:lfs_object, oid: blob_object.lfs_oid) lfs_object = create(:lfs_object, oid: blob_object.lfs_oid)
create(:lfs_objects_project, project: parent_project, lfs_object: lfs_object) create(:lfs_objects_project, project: parent_project, lfs_object: lfs_object)
......
...@@ -7,7 +7,7 @@ describe Gitlab::Ci::Ansi2html do ...@@ -7,7 +7,7 @@ describe Gitlab::Ci::Ansi2html do
expect(convert_html("Hello")).to eq('Hello') expect(convert_html("Hello")).to eq('Hello')
end end
it "strips non-color-changing controll sequences" do it "strips non-color-changing control sequences" do
expect(convert_html("Hello \e[2Kworld")).to eq('Hello world') expect(convert_html("Hello \e[2Kworld")).to eq('Hello world')
end end
......
...@@ -24,7 +24,7 @@ describe Gitlab::Ci::Build::Policy::Variables do ...@@ -24,7 +24,7 @@ describe Gitlab::Ci::Build::Policy::Variables do
expect(policy).to be_satisfied_by(pipeline, seed) expect(policy).to be_satisfied_by(pipeline, seed)
end end
it 'is not satisfied by an overriden empty variable' do it 'is not satisfied by an overridden empty variable' do
policy = described_class.new(['$CI_PROJECT_NAME']) policy = described_class.new(['$CI_PROJECT_NAME'])
expect(policy).not_to be_satisfied_by(pipeline, seed) expect(policy).not_to be_satisfied_by(pipeline, seed)
......
...@@ -219,7 +219,7 @@ describe Gitlab::Ci::Config::Entry::Global do ...@@ -219,7 +219,7 @@ describe Gitlab::Ci::Config::Entry::Global do
## ##
# When nodes are specified but not defined, we assume that # When nodes are specified but not defined, we assume that
# configuration is valid, and we asume that entry is simply undefined, # configuration is valid, and we assume that entry is simply undefined,
# despite the fact, that key is present. See issue #18775 for more # despite the fact, that key is present. See issue #18775 for more
# details. # details.
# #
......
...@@ -50,7 +50,7 @@ describe Gitlab::CrossProjectAccess::CheckInfo do ...@@ -50,7 +50,7 @@ describe Gitlab::CrossProjectAccess::CheckInfo do
expect(info.should_run?(dummy_controller)).to be_truthy expect(info.should_run?(dummy_controller)).to be_truthy
end end
it 'returns the the oposite of #should_skip? when the check is a skip' do it 'returns the the opposite of #should_skip? when the check is a skip' do
info = described_class.new({}, nil, nil, true) info = described_class.new({}, nil, nil, true)
expect(info).to receive(:should_skip?).with(dummy_controller).and_return(false) expect(info).to receive(:should_skip?).with(dummy_controller).and_return(false)
...@@ -101,7 +101,7 @@ describe Gitlab::CrossProjectAccess::CheckInfo do ...@@ -101,7 +101,7 @@ describe Gitlab::CrossProjectAccess::CheckInfo do
expect(info.should_skip?(dummy_controller)).to be_truthy expect(info.should_skip?(dummy_controller)).to be_truthy
end end
it 'returns the the oposite of #should_run? when the check is not a skip' do it 'returns the the opposite of #should_run? when the check is not a skip' do
info = described_class.new({}, nil, nil, false) info = described_class.new({}, nil, nil, false)
expect(info).to receive(:should_run?).with(dummy_controller).and_return(false) expect(info).to receive(:should_run?).with(dummy_controller).and_return(false)
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment