mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-21 18:46:10 +10:00
Merge branch 'master' into 8-4-stable
This commit is contained in:
@@ -42,6 +42,7 @@ v 8.4.0 (unreleased)
|
||||
- Ajax filter by message for commits page
|
||||
- API: Add support for deleting a tag via the API (Robert Schilling)
|
||||
- Allow subsequent validations in CI Linter
|
||||
- Fix Encoding::CompatibilityError bug when markdown content has some complex URL (Jason Lee)
|
||||
|
||||
v 8.3.4
|
||||
- Use gitlab-workhorse 0.5.4 (fixes API routing bug)
|
||||
@@ -59,6 +60,8 @@ v 8.3.3
|
||||
- Fix Error 500 when visiting build page of project with nil runners_token (Stan Hu)
|
||||
- Use WOFF versions of SourceSansPro fonts
|
||||
- Fix regression when builds were not generated for tags created through web/api interface
|
||||
- Fix: maintain milestone filter between Open and Closed tabs (Greg Smethells)
|
||||
- Fix missing artifacts and build traces for build created before 8.3
|
||||
|
||||
v 8.3.2
|
||||
- Disable --follow in `git log` to avoid loading duplicate commit data in infinite scroll (Stan Hu)
|
||||
|
||||
+2
-2
@@ -334,9 +334,9 @@ merge request:
|
||||
1. [CoffeeScript](https://github.com/thoughtbot/guides/tree/master/style/coffeescript)
|
||||
1. [Shell commands](doc/development/shell_commands.md) created by GitLab
|
||||
contributors to enhance security
|
||||
1. [Markdown](http://www.cirosantilli.com/markdown-styleguide)
|
||||
1. [Database Migrations](doc/development/migration_style_guide.md)
|
||||
1. [Documentation styleguide](doc_styleguide.md)
|
||||
1. [Markdown](http://www.cirosantilli.com/markdown-styleguide)
|
||||
1. [Documentation styleguide](doc/development/doc_styleguide.md)
|
||||
1. Interface text should be written subjectively instead of objectively. It
|
||||
should be the GitLab core team addressing a person. It should be written in
|
||||
present time and never use past tense (has been/was). For example instead
|
||||
|
||||
@@ -73,6 +73,7 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController
|
||||
:metrics_pool_size,
|
||||
:metrics_timeout,
|
||||
:metrics_method_call_threshold,
|
||||
:metrics_sample_interval,
|
||||
:recaptcha_enabled,
|
||||
:recaptcha_site_key,
|
||||
:recaptcha_private_key,
|
||||
|
||||
@@ -266,7 +266,7 @@ module ApplicationHelper
|
||||
state: params[:state],
|
||||
scope: params[:scope],
|
||||
label_name: params[:label_name],
|
||||
milestone_id: params[:milestone_id],
|
||||
milestone_title: params[:milestone_title],
|
||||
assignee_id: params[:assignee_id],
|
||||
author_id: params[:author_id],
|
||||
sort: params[:sort],
|
||||
|
||||
@@ -48,8 +48,8 @@ class WebHook < ActiveRecord::Base
|
||||
else
|
||||
post_url = url.gsub("#{parsed_url.userinfo}@", "")
|
||||
auth = {
|
||||
username: URI.decode(parsed_url.user),
|
||||
password: URI.decode(parsed_url.password),
|
||||
username: CGI.unescape(parsed_url.user),
|
||||
password: CGI.unescape(parsed_url.password),
|
||||
}
|
||||
response = WebHook.post(post_url,
|
||||
body: data.to_json,
|
||||
|
||||
@@ -120,13 +120,13 @@ class HipchatService < Service
|
||||
message << "#{push[:user_name]} "
|
||||
if Gitlab::Git.blank_ref?(before)
|
||||
message << "pushed new #{ref_type} <a href=\""\
|
||||
"#{project_url}/commits/#{URI.escape(ref)}\">#{ref}</a>"\
|
||||
"#{project_url}/commits/#{CGI.escape(ref)}\">#{ref}</a>"\
|
||||
" to #{project_link}\n"
|
||||
elsif Gitlab::Git.blank_ref?(after)
|
||||
message << "removed #{ref_type} <b>#{ref}</b> from <a href=\"#{project.web_url}\">#{project_name}</a> \n"
|
||||
else
|
||||
message << "pushed to #{ref_type} <a href=\""\
|
||||
"#{project.web_url}/commits/#{URI.escape(ref)}\">#{ref}</a> "
|
||||
"#{project.web_url}/commits/#{CGI.escape(ref)}\">#{ref}</a> "
|
||||
message << "of <a href=\"#{project.web_url}\">#{project.name_with_namespace.gsub!(/\s/,'')}</a> "
|
||||
message << "(<a href=\"#{project.web_url}/compare/#{before}...#{after}\">Compare changes</a>)"
|
||||
|
||||
@@ -255,8 +255,8 @@ class HipchatService < Service
|
||||
status = data[:commit][:status]
|
||||
duration = data[:commit][:duration]
|
||||
|
||||
branch_link = "<a href=\"#{project_url}/commits/#{URI.escape(ref)}\">#{ref}</a>"
|
||||
commit_link = "<a href=\"#{project_url}/commit/#{URI.escape(sha)}/builds\">#{Commit.truncate_sha(sha)}</a>"
|
||||
branch_link = "<a href=\"#{project_url}/commits/#{CGI.escape(ref)}\">#{ref}</a>"
|
||||
commit_link = "<a href=\"#{project_url}/commit/#{CGI.escape(sha)}/builds\">#{Commit.truncate_sha(sha)}</a>"
|
||||
|
||||
"#{project_link}: Commit #{commit_link} of #{branch_link} #{ref_type} by #{user_name} #{humanized_status(status)} in #{duration} second(s)"
|
||||
end
|
||||
|
||||
@@ -202,6 +202,13 @@
|
||||
.help-block
|
||||
A method call is only tracked when it takes longer to complete than
|
||||
the given amount of milliseconds.
|
||||
.form-group
|
||||
= f.label :metrics_sample_interval, 'Sampler Interval (sec)', class: 'control-label col-sm-2'
|
||||
.col-sm-10
|
||||
= f.number_field :metrics_sample_interval, class: 'form-control'
|
||||
.help-block
|
||||
The sampling interval in seconds. Sampled data includes memory usage,
|
||||
retained Ruby objects, file descriptors and so on.
|
||||
|
||||
%fieldset
|
||||
%legend Spam and Anti-bot Protection
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
.col-sm-10
|
||||
= users_select_tag(:user_ids, multiple: true, class: 'input-large', scope: :all, email_user: true)
|
||||
.help-block
|
||||
Search for existing users or invite new ones using their email address.
|
||||
Search for users by name, username, or email, or invite new ones using their email address.
|
||||
|
||||
.form-group
|
||||
= f.label :access_level, "Group Access", class: 'control-label'
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
.col-sm-10
|
||||
= users_select_tag(:user_ids, multiple: true, class: 'input-large', scope: :all, email_user: true)
|
||||
.help-block
|
||||
Search for existing users or invite new ones using their email address.
|
||||
Search for users by name, username, or email, or invite new ones using their email address.
|
||||
|
||||
.form-group
|
||||
= f.label :access_level, "Project Access", class: 'control-label'
|
||||
|
||||
@@ -11,7 +11,7 @@ class Settings < Settingslogic
|
||||
|
||||
# get host without www, thanks to http://stackoverflow.com/a/6674363/1233435
|
||||
def get_host_without_www(url)
|
||||
url = URI.encode(url)
|
||||
url = CGI.escape(url)
|
||||
uri = URI.parse(url)
|
||||
uri = URI.parse("http://#{url}") if uri.scheme.nil?
|
||||
host = uri.host.downcase
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
class AddMetricsSampleInterval < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :application_settings, :metrics_sample_interval, :integer,
|
||||
default: 15
|
||||
end
|
||||
end
|
||||
+253
-251
@@ -11,7 +11,7 @@
|
||||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
ActiveRecord::Schema.define(version: 20160113111034) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
@@ -32,23 +32,23 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
t.text "sign_in_text"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.string "home_page_url", limit: 255
|
||||
t.integer "default_branch_protection", default: 2
|
||||
t.boolean "twitter_sharing_enabled", default: true
|
||||
t.string "home_page_url"
|
||||
t.integer "default_branch_protection", default: 2
|
||||
t.boolean "twitter_sharing_enabled", default: true
|
||||
t.text "restricted_visibility_levels"
|
||||
t.boolean "version_check_enabled", default: true
|
||||
t.integer "max_attachment_size", default: 10, null: false
|
||||
t.boolean "version_check_enabled", default: true
|
||||
t.integer "max_attachment_size", default: 10, null: false
|
||||
t.integer "default_project_visibility"
|
||||
t.integer "default_snippet_visibility"
|
||||
t.text "restricted_signup_domains"
|
||||
t.boolean "user_oauth_applications", default: true
|
||||
t.string "after_sign_out_path", limit: 255
|
||||
t.integer "session_expire_delay", default: 10080, null: false
|
||||
t.boolean "user_oauth_applications", default: true
|
||||
t.string "after_sign_out_path"
|
||||
t.integer "session_expire_delay", default: 10080, null: false
|
||||
t.text "import_sources"
|
||||
t.text "help_page_text"
|
||||
t.string "admin_notification_email", limit: 255
|
||||
t.boolean "shared_runners_enabled", default: true, null: false
|
||||
t.integer "max_artifacts_size", default: 100, null: false
|
||||
t.string "admin_notification_email"
|
||||
t.boolean "shared_runners_enabled", default: true, null: false
|
||||
t.integer "max_artifacts_size", default: 100, null: false
|
||||
t.string "runners_registration_token"
|
||||
t.boolean "require_two_factor_authentication", default: false
|
||||
t.integer "two_factor_grace_period", default: 48
|
||||
@@ -60,14 +60,15 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
t.boolean "recaptcha_enabled", default: false
|
||||
t.string "recaptcha_site_key"
|
||||
t.string "recaptcha_private_key"
|
||||
t.integer "metrics_port", default: 8089
|
||||
t.integer "metrics_port", default: 8089
|
||||
t.integer "metrics_sample_interval", default: 15
|
||||
end
|
||||
|
||||
create_table "audit_events", force: :cascade do |t|
|
||||
t.integer "author_id", null: false
|
||||
t.string "type", limit: 255, null: false
|
||||
t.integer "entity_id", null: false
|
||||
t.string "entity_type", limit: 255, null: false
|
||||
t.integer "author_id", null: false
|
||||
t.string "type", null: false
|
||||
t.integer "entity_id", null: false
|
||||
t.string "entity_type", null: false
|
||||
t.text "details"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
@@ -78,14 +79,14 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
add_index "audit_events", ["type"], name: "index_audit_events_on_type", using: :btree
|
||||
|
||||
create_table "broadcast_messages", force: :cascade do |t|
|
||||
t.text "message", null: false
|
||||
t.text "message", null: false
|
||||
t.datetime "starts_at"
|
||||
t.datetime "ends_at"
|
||||
t.integer "alert_type"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.string "color", limit: 255
|
||||
t.string "font", limit: 255
|
||||
t.string "color"
|
||||
t.string "font"
|
||||
end
|
||||
|
||||
create_table "ci_application_settings", force: :cascade do |t|
|
||||
@@ -97,7 +98,7 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
|
||||
create_table "ci_builds", force: :cascade do |t|
|
||||
t.integer "project_id"
|
||||
t.string "status", limit: 255
|
||||
t.string "status"
|
||||
t.datetime "finished_at"
|
||||
t.text "trace"
|
||||
t.datetime "created_at"
|
||||
@@ -108,19 +109,19 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
t.integer "commit_id"
|
||||
t.text "commands"
|
||||
t.integer "job_id"
|
||||
t.string "name", limit: 255
|
||||
t.boolean "deploy", default: false
|
||||
t.string "name"
|
||||
t.boolean "deploy", default: false
|
||||
t.text "options"
|
||||
t.boolean "allow_failure", default: false, null: false
|
||||
t.string "stage", limit: 255
|
||||
t.boolean "allow_failure", default: false, null: false
|
||||
t.string "stage"
|
||||
t.integer "trigger_request_id"
|
||||
t.integer "stage_idx"
|
||||
t.boolean "tag"
|
||||
t.string "ref", limit: 255
|
||||
t.string "ref"
|
||||
t.integer "user_id"
|
||||
t.string "type", limit: 255
|
||||
t.string "target_url", limit: 255
|
||||
t.string "description", limit: 255
|
||||
t.string "type"
|
||||
t.string "target_url"
|
||||
t.string "description"
|
||||
t.text "artifacts_file"
|
||||
t.integer "gl_project_id"
|
||||
end
|
||||
@@ -139,13 +140,13 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
|
||||
create_table "ci_commits", force: :cascade do |t|
|
||||
t.integer "project_id"
|
||||
t.string "ref", limit: 255
|
||||
t.string "sha", limit: 255
|
||||
t.string "before_sha", limit: 255
|
||||
t.string "ref"
|
||||
t.string "sha"
|
||||
t.string "before_sha"
|
||||
t.text "push_data"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.boolean "tag", default: false
|
||||
t.boolean "tag", default: false
|
||||
t.text "yaml_errors"
|
||||
t.datetime "committed_at"
|
||||
t.integer "gl_project_id"
|
||||
@@ -172,16 +173,16 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
add_index "ci_events", ["project_id"], name: "index_ci_events_on_project_id", using: :btree
|
||||
|
||||
create_table "ci_jobs", force: :cascade do |t|
|
||||
t.integer "project_id", null: false
|
||||
t.integer "project_id", null: false
|
||||
t.text "commands"
|
||||
t.boolean "active", default: true, null: false
|
||||
t.boolean "active", default: true, null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.string "name", limit: 255
|
||||
t.boolean "build_branches", default: true, null: false
|
||||
t.boolean "build_tags", default: false, null: false
|
||||
t.string "job_type", limit: 255, default: "parallel"
|
||||
t.string "refs", limit: 255
|
||||
t.string "name"
|
||||
t.boolean "build_branches", default: true, null: false
|
||||
t.boolean "build_tags", default: false, null: false
|
||||
t.string "job_type", default: "parallel"
|
||||
t.string "refs"
|
||||
t.datetime "deleted_at"
|
||||
end
|
||||
|
||||
@@ -189,25 +190,25 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
add_index "ci_jobs", ["project_id"], name: "index_ci_jobs_on_project_id", using: :btree
|
||||
|
||||
create_table "ci_projects", force: :cascade do |t|
|
||||
t.string "name", limit: 255
|
||||
t.integer "timeout", default: 3600, null: false
|
||||
t.string "name"
|
||||
t.integer "timeout", default: 3600, null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.string "token", limit: 255
|
||||
t.string "default_ref", limit: 255
|
||||
t.string "path", limit: 255
|
||||
t.boolean "always_build", default: false, null: false
|
||||
t.string "token"
|
||||
t.string "default_ref"
|
||||
t.string "path"
|
||||
t.boolean "always_build", default: false, null: false
|
||||
t.integer "polling_interval"
|
||||
t.boolean "public", default: false, null: false
|
||||
t.string "ssh_url_to_repo", limit: 255
|
||||
t.boolean "public", default: false, null: false
|
||||
t.string "ssh_url_to_repo"
|
||||
t.integer "gitlab_id"
|
||||
t.boolean "allow_git_fetch", default: true, null: false
|
||||
t.string "email_recipients", limit: 255, default: "", null: false
|
||||
t.boolean "email_add_pusher", default: true, null: false
|
||||
t.boolean "email_only_broken_builds", default: true, null: false
|
||||
t.string "skip_refs", limit: 255
|
||||
t.string "coverage_regex", limit: 255
|
||||
t.boolean "shared_runners_enabled", default: false
|
||||
t.boolean "allow_git_fetch", default: true, null: false
|
||||
t.string "email_recipients", default: "", null: false
|
||||
t.boolean "email_add_pusher", default: true, null: false
|
||||
t.boolean "email_only_broken_builds", default: true, null: false
|
||||
t.string "skip_refs"
|
||||
t.string "coverage_regex"
|
||||
t.boolean "shared_runners_enabled", default: false
|
||||
t.text "generated_yaml_config"
|
||||
end
|
||||
|
||||
@@ -226,34 +227,34 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
add_index "ci_runner_projects", ["runner_id"], name: "index_ci_runner_projects_on_runner_id", using: :btree
|
||||
|
||||
create_table "ci_runners", force: :cascade do |t|
|
||||
t.string "token", limit: 255
|
||||
t.string "token"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.string "description", limit: 255
|
||||
t.string "description"
|
||||
t.datetime "contacted_at"
|
||||
t.boolean "active", default: true, null: false
|
||||
t.boolean "is_shared", default: false
|
||||
t.string "name", limit: 255
|
||||
t.string "version", limit: 255
|
||||
t.string "revision", limit: 255
|
||||
t.string "platform", limit: 255
|
||||
t.string "architecture", limit: 255
|
||||
t.boolean "active", default: true, null: false
|
||||
t.boolean "is_shared", default: false
|
||||
t.string "name"
|
||||
t.string "version"
|
||||
t.string "revision"
|
||||
t.string "platform"
|
||||
t.string "architecture"
|
||||
end
|
||||
|
||||
create_table "ci_services", force: :cascade do |t|
|
||||
t.string "type", limit: 255
|
||||
t.string "title", limit: 255
|
||||
t.integer "project_id", null: false
|
||||
t.string "type"
|
||||
t.string "title"
|
||||
t.integer "project_id", null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.boolean "active", default: false, null: false
|
||||
t.boolean "active", default: false, null: false
|
||||
t.text "properties"
|
||||
end
|
||||
|
||||
add_index "ci_services", ["project_id"], name: "index_ci_services_on_project_id", using: :btree
|
||||
|
||||
create_table "ci_sessions", force: :cascade do |t|
|
||||
t.string "session_id", limit: 255, null: false
|
||||
t.string "session_id", null: false
|
||||
t.text "data"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
@@ -265,9 +266,9 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
create_table "ci_taggings", force: :cascade do |t|
|
||||
t.integer "tag_id"
|
||||
t.integer "taggable_id"
|
||||
t.string "taggable_type", limit: 255
|
||||
t.string "taggable_type"
|
||||
t.integer "tagger_id"
|
||||
t.string "tagger_type", limit: 255
|
||||
t.string "tagger_type"
|
||||
t.string "context", limit: 128
|
||||
t.datetime "created_at"
|
||||
end
|
||||
@@ -276,8 +277,8 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
add_index "ci_taggings", ["taggable_id", "taggable_type", "context"], name: "index_ci_taggings_on_taggable_id_and_taggable_type_and_context", using: :btree
|
||||
|
||||
create_table "ci_tags", force: :cascade do |t|
|
||||
t.string "name", limit: 255
|
||||
t.integer "taggings_count", default: 0
|
||||
t.string "name"
|
||||
t.integer "taggings_count", default: 0
|
||||
end
|
||||
|
||||
add_index "ci_tags", ["name"], name: "index_ci_tags_on_name", unique: true, using: :btree
|
||||
@@ -291,7 +292,7 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
end
|
||||
|
||||
create_table "ci_triggers", force: :cascade do |t|
|
||||
t.string "token", limit: 255
|
||||
t.string "token"
|
||||
t.integer "project_id"
|
||||
t.datetime "deleted_at"
|
||||
t.datetime "created_at"
|
||||
@@ -304,19 +305,19 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
|
||||
create_table "ci_variables", force: :cascade do |t|
|
||||
t.integer "project_id"
|
||||
t.string "key", limit: 255
|
||||
t.string "key"
|
||||
t.text "value"
|
||||
t.text "encrypted_value"
|
||||
t.string "encrypted_value_salt", limit: 255
|
||||
t.string "encrypted_value_iv", limit: 255
|
||||
t.string "encrypted_value_salt"
|
||||
t.string "encrypted_value_iv"
|
||||
t.integer "gl_project_id"
|
||||
end
|
||||
|
||||
add_index "ci_variables", ["gl_project_id"], name: "index_ci_variables_on_gl_project_id", using: :btree
|
||||
|
||||
create_table "ci_web_hooks", force: :cascade do |t|
|
||||
t.string "url", limit: 255, null: false
|
||||
t.integer "project_id", null: false
|
||||
t.string "url", null: false
|
||||
t.integer "project_id", null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
@@ -331,8 +332,8 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
add_index "deploy_keys_projects", ["project_id"], name: "index_deploy_keys_projects_on_project_id", using: :btree
|
||||
|
||||
create_table "emails", force: :cascade do |t|
|
||||
t.integer "user_id", null: false
|
||||
t.string "email", limit: 255, null: false
|
||||
t.integer "user_id", null: false
|
||||
t.string "email", null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
@@ -341,9 +342,9 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
add_index "emails", ["user_id"], name: "index_emails_on_user_id", using: :btree
|
||||
|
||||
create_table "events", force: :cascade do |t|
|
||||
t.string "target_type", limit: 255
|
||||
t.string "target_type"
|
||||
t.integer "target_id"
|
||||
t.string "title", limit: 255
|
||||
t.string "title"
|
||||
t.text "data"
|
||||
t.integer "project_id"
|
||||
t.datetime "created_at"
|
||||
@@ -369,8 +370,8 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
add_index "forked_project_links", ["forked_to_project_id"], name: "index_forked_project_links_on_forked_to_project_id", unique: true, using: :btree
|
||||
|
||||
create_table "identities", force: :cascade do |t|
|
||||
t.string "extern_uid", limit: 255
|
||||
t.string "provider", limit: 255
|
||||
t.string "extern_uid"
|
||||
t.string "provider"
|
||||
t.integer "user_id"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
@@ -380,17 +381,17 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
add_index "identities", ["user_id"], name: "index_identities_on_user_id", using: :btree
|
||||
|
||||
create_table "issues", force: :cascade do |t|
|
||||
t.string "title", limit: 255
|
||||
t.string "title"
|
||||
t.integer "assignee_id"
|
||||
t.integer "author_id"
|
||||
t.integer "project_id"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.integer "position", default: 0
|
||||
t.string "branch_name", limit: 255
|
||||
t.integer "position", default: 0
|
||||
t.string "branch_name"
|
||||
t.text "description"
|
||||
t.integer "milestone_id"
|
||||
t.string "state", limit: 255
|
||||
t.string "state"
|
||||
t.integer "iid"
|
||||
t.integer "updated_by_id"
|
||||
end
|
||||
@@ -410,10 +411,10 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.text "key"
|
||||
t.string "title", limit: 255
|
||||
t.string "type", limit: 255
|
||||
t.string "fingerprint", limit: 255
|
||||
t.boolean "public", default: false, null: false
|
||||
t.string "title"
|
||||
t.string "type"
|
||||
t.string "fingerprint"
|
||||
t.boolean "public", default: false, null: false
|
||||
end
|
||||
|
||||
add_index "keys", ["created_at", "id"], name: "index_keys_on_created_at_and_id", using: :btree
|
||||
@@ -422,7 +423,7 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
create_table "label_links", force: :cascade do |t|
|
||||
t.integer "label_id"
|
||||
t.integer "target_id"
|
||||
t.string "target_type", limit: 255
|
||||
t.string "target_type"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
@@ -431,22 +432,22 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
add_index "label_links", ["target_id", "target_type"], name: "index_label_links_on_target_id_and_target_type", using: :btree
|
||||
|
||||
create_table "labels", force: :cascade do |t|
|
||||
t.string "title", limit: 255
|
||||
t.string "color", limit: 255
|
||||
t.string "title"
|
||||
t.string "color"
|
||||
t.integer "project_id"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.boolean "template", default: false
|
||||
t.boolean "template", default: false
|
||||
end
|
||||
|
||||
add_index "labels", ["project_id"], name: "index_labels_on_project_id", using: :btree
|
||||
|
||||
create_table "lfs_objects", force: :cascade do |t|
|
||||
t.string "oid", limit: 255, null: false
|
||||
t.integer "size", null: false
|
||||
t.string "oid", null: false
|
||||
t.integer "size", null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.string "file", limit: 255
|
||||
t.string "file"
|
||||
end
|
||||
|
||||
add_index "lfs_objects", ["oid"], name: "index_lfs_objects_on_oid", unique: true, using: :btree
|
||||
@@ -461,17 +462,17 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
add_index "lfs_objects_projects", ["project_id"], name: "index_lfs_objects_projects_on_project_id", using: :btree
|
||||
|
||||
create_table "members", force: :cascade do |t|
|
||||
t.integer "access_level", null: false
|
||||
t.integer "source_id", null: false
|
||||
t.string "source_type", limit: 255, null: false
|
||||
t.integer "access_level", null: false
|
||||
t.integer "source_id", null: false
|
||||
t.string "source_type", null: false
|
||||
t.integer "user_id"
|
||||
t.integer "notification_level", null: false
|
||||
t.string "type", limit: 255
|
||||
t.integer "notification_level", null: false
|
||||
t.string "type"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.integer "created_by_id"
|
||||
t.string "invite_email", limit: 255
|
||||
t.string "invite_token", limit: 255
|
||||
t.string "invite_email"
|
||||
t.string "invite_token"
|
||||
t.datetime "invite_accepted_at"
|
||||
end
|
||||
|
||||
@@ -483,10 +484,10 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
add_index "members", ["user_id"], name: "index_members_on_user_id", using: :btree
|
||||
|
||||
create_table "merge_request_diffs", force: :cascade do |t|
|
||||
t.string "state", limit: 255
|
||||
t.string "state"
|
||||
t.text "st_commits"
|
||||
t.text "st_diffs"
|
||||
t.integer "merge_request_id", null: false
|
||||
t.integer "merge_request_id", null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
@@ -494,26 +495,26 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
add_index "merge_request_diffs", ["merge_request_id"], name: "index_merge_request_diffs_on_merge_request_id", unique: true, using: :btree
|
||||
|
||||
create_table "merge_requests", force: :cascade do |t|
|
||||
t.string "target_branch", limit: 255, null: false
|
||||
t.string "source_branch", limit: 255, null: false
|
||||
t.integer "source_project_id", null: false
|
||||
t.string "target_branch", null: false
|
||||
t.string "source_branch", null: false
|
||||
t.integer "source_project_id", null: false
|
||||
t.integer "author_id"
|
||||
t.integer "assignee_id"
|
||||
t.string "title", limit: 255
|
||||
t.string "title"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.integer "milestone_id"
|
||||
t.string "state", limit: 255
|
||||
t.string "merge_status", limit: 255
|
||||
t.integer "target_project_id", null: false
|
||||
t.string "state"
|
||||
t.string "merge_status"
|
||||
t.integer "target_project_id", null: false
|
||||
t.integer "iid"
|
||||
t.text "description"
|
||||
t.integer "position", default: 0
|
||||
t.integer "position", default: 0
|
||||
t.datetime "locked_at"
|
||||
t.integer "updated_by_id"
|
||||
t.string "merge_error", limit: 255
|
||||
t.string "merge_error"
|
||||
t.text "merge_params"
|
||||
t.boolean "merge_when_build_succeeds", default: false, null: false
|
||||
t.boolean "merge_when_build_succeeds", default: false, null: false
|
||||
t.integer "merge_user_id"
|
||||
end
|
||||
|
||||
@@ -529,13 +530,13 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
add_index "merge_requests", ["title"], name: "index_merge_requests_on_title", using: :btree
|
||||
|
||||
create_table "milestones", force: :cascade do |t|
|
||||
t.string "title", limit: 255, null: false
|
||||
t.integer "project_id", null: false
|
||||
t.string "title", null: false
|
||||
t.integer "project_id", null: false
|
||||
t.text "description"
|
||||
t.date "due_date"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.string "state", limit: 255
|
||||
t.string "state"
|
||||
t.integer "iid"
|
||||
end
|
||||
|
||||
@@ -543,16 +544,17 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
add_index "milestones", ["due_date"], name: "index_milestones_on_due_date", using: :btree
|
||||
add_index "milestones", ["project_id", "iid"], name: "index_milestones_on_project_id_and_iid", unique: true, using: :btree
|
||||
add_index "milestones", ["project_id"], name: "index_milestones_on_project_id", using: :btree
|
||||
add_index "milestones", ["title"], name: "index_milestones_on_title", using: :btree
|
||||
|
||||
create_table "namespaces", force: :cascade do |t|
|
||||
t.string "name", limit: 255, null: false
|
||||
t.string "path", limit: 255, 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", limit: 255
|
||||
t.string "description", limit: 255, default: "", null: false
|
||||
t.string "avatar", limit: 255
|
||||
t.string "type"
|
||||
t.string "description", default: "", null: false
|
||||
t.string "avatar"
|
||||
end
|
||||
|
||||
add_index "namespaces", ["created_at", "id"], name: "index_namespaces_on_created_at_and_id", using: :btree
|
||||
@@ -563,19 +565,19 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
|
||||
create_table "notes", force: :cascade do |t|
|
||||
t.text "note"
|
||||
t.string "noteable_type", limit: 255
|
||||
t.string "noteable_type"
|
||||
t.integer "author_id"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.integer "project_id"
|
||||
t.string "attachment", limit: 255
|
||||
t.string "line_code", limit: 255
|
||||
t.string "commit_id", limit: 255
|
||||
t.string "attachment"
|
||||
t.string "line_code"
|
||||
t.string "commit_id"
|
||||
t.integer "noteable_id"
|
||||
t.boolean "system", default: false, null: false
|
||||
t.boolean "system", default: false, null: false
|
||||
t.text "st_diff"
|
||||
t.integer "updated_by_id"
|
||||
t.boolean "is_award", default: false, null: false
|
||||
t.boolean "is_award", default: false, null: false
|
||||
end
|
||||
|
||||
add_index "notes", ["author_id"], name: "index_notes_on_author_id", using: :btree
|
||||
@@ -591,14 +593,14 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
add_index "notes", ["updated_at"], name: "index_notes_on_updated_at", using: :btree
|
||||
|
||||
create_table "oauth_access_grants", force: :cascade do |t|
|
||||
t.integer "resource_owner_id", null: false
|
||||
t.integer "application_id", null: false
|
||||
t.string "token", limit: 255, null: false
|
||||
t.integer "expires_in", null: false
|
||||
t.text "redirect_uri", null: false
|
||||
t.datetime "created_at", null: false
|
||||
t.integer "resource_owner_id", null: false
|
||||
t.integer "application_id", null: false
|
||||
t.string "token", null: false
|
||||
t.integer "expires_in", null: false
|
||||
t.text "redirect_uri", null: false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "revoked_at"
|
||||
t.string "scopes", limit: 255
|
||||
t.string "scopes"
|
||||
end
|
||||
|
||||
add_index "oauth_access_grants", ["token"], name: "index_oauth_access_grants_on_token", unique: true, using: :btree
|
||||
@@ -606,12 +608,12 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
create_table "oauth_access_tokens", force: :cascade do |t|
|
||||
t.integer "resource_owner_id"
|
||||
t.integer "application_id"
|
||||
t.string "token", limit: 255, null: false
|
||||
t.string "refresh_token", limit: 255
|
||||
t.string "token", null: false
|
||||
t.string "refresh_token"
|
||||
t.integer "expires_in"
|
||||
t.datetime "revoked_at"
|
||||
t.datetime "created_at", null: false
|
||||
t.string "scopes", limit: 255
|
||||
t.datetime "created_at", null: false
|
||||
t.string "scopes"
|
||||
end
|
||||
|
||||
add_index "oauth_access_tokens", ["refresh_token"], name: "index_oauth_access_tokens_on_refresh_token", unique: true, using: :btree
|
||||
@@ -619,15 +621,15 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
add_index "oauth_access_tokens", ["token"], name: "index_oauth_access_tokens_on_token", unique: true, using: :btree
|
||||
|
||||
create_table "oauth_applications", force: :cascade do |t|
|
||||
t.string "name", limit: 255, null: false
|
||||
t.string "uid", limit: 255, null: false
|
||||
t.string "secret", limit: 255, null: false
|
||||
t.text "redirect_uri", null: false
|
||||
t.string "scopes", limit: 255, default: "", null: false
|
||||
t.string "name", null: false
|
||||
t.string "uid", null: false
|
||||
t.string "secret", null: false
|
||||
t.text "redirect_uri", null: false
|
||||
t.string "scopes", default: "", null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.integer "owner_id"
|
||||
t.string "owner_type", limit: 255
|
||||
t.string "owner_type"
|
||||
end
|
||||
|
||||
add_index "oauth_applications", ["owner_id", "owner_type"], name: "index_oauth_applications_on_owner_id_and_owner_type", using: :btree
|
||||
@@ -639,39 +641,39 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
end
|
||||
|
||||
create_table "projects", force: :cascade do |t|
|
||||
t.string "name", limit: 255
|
||||
t.string "path", limit: 255
|
||||
t.string "name"
|
||||
t.string "path"
|
||||
t.text "description"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.integer "creator_id"
|
||||
t.boolean "issues_enabled", default: true, null: false
|
||||
t.boolean "wall_enabled", default: true, null: false
|
||||
t.boolean "merge_requests_enabled", default: true, null: false
|
||||
t.boolean "wiki_enabled", default: true, null: false
|
||||
t.boolean "issues_enabled", default: true, null: false
|
||||
t.boolean "wall_enabled", default: true, null: false
|
||||
t.boolean "merge_requests_enabled", default: true, null: false
|
||||
t.boolean "wiki_enabled", default: true, null: false
|
||||
t.integer "namespace_id"
|
||||
t.string "issues_tracker", limit: 255, default: "gitlab", null: false
|
||||
t.string "issues_tracker_id", limit: 255
|
||||
t.boolean "snippets_enabled", default: true, null: false
|
||||
t.string "issues_tracker", default: "gitlab", null: false
|
||||
t.string "issues_tracker_id"
|
||||
t.boolean "snippets_enabled", default: true, null: false
|
||||
t.datetime "last_activity_at"
|
||||
t.string "import_url", limit: 255
|
||||
t.integer "visibility_level", default: 0, null: false
|
||||
t.boolean "archived", default: false, null: false
|
||||
t.string "avatar", limit: 255
|
||||
t.string "import_status", limit: 255
|
||||
t.float "repository_size", default: 0.0
|
||||
t.integer "star_count", default: 0, null: false
|
||||
t.string "import_type", limit: 255
|
||||
t.string "import_source", limit: 255
|
||||
t.integer "commit_count", default: 0
|
||||
t.string "import_url"
|
||||
t.integer "visibility_level", default: 0, null: false
|
||||
t.boolean "archived", default: false, null: false
|
||||
t.string "avatar"
|
||||
t.string "import_status"
|
||||
t.float "repository_size", default: 0.0
|
||||
t.integer "star_count", default: 0, null: false
|
||||
t.string "import_type"
|
||||
t.string "import_source"
|
||||
t.integer "commit_count", default: 0
|
||||
t.text "import_error"
|
||||
t.integer "ci_id"
|
||||
t.boolean "builds_enabled", default: true, null: false
|
||||
t.boolean "shared_runners_enabled", default: true, null: false
|
||||
t.boolean "builds_enabled", default: true, null: false
|
||||
t.boolean "shared_runners_enabled", default: true, null: false
|
||||
t.string "runners_token"
|
||||
t.string "build_coverage_regex"
|
||||
t.boolean "build_allow_git_fetch", default: true, null: false
|
||||
t.integer "build_timeout", default: 3600, null: false
|
||||
t.boolean "build_allow_git_fetch", default: true, null: false
|
||||
t.integer "build_timeout", default: 3600, null: false
|
||||
end
|
||||
|
||||
add_index "projects", ["builds_enabled", "shared_runners_enabled"], name: "index_projects_on_builds_enabled_and_shared_runners_enabled", using: :btree
|
||||
@@ -687,17 +689,17 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
add_index "projects", ["visibility_level"], name: "index_projects_on_visibility_level", using: :btree
|
||||
|
||||
create_table "protected_branches", force: :cascade do |t|
|
||||
t.integer "project_id", null: false
|
||||
t.string "name", limit: 255, null: false
|
||||
t.integer "project_id", null: false
|
||||
t.string "name", null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.boolean "developers_can_push", default: false, null: false
|
||||
t.boolean "developers_can_push", default: false, null: false
|
||||
end
|
||||
|
||||
add_index "protected_branches", ["project_id"], name: "index_protected_branches_on_project_id", using: :btree
|
||||
|
||||
create_table "releases", force: :cascade do |t|
|
||||
t.string "tag", limit: 255
|
||||
t.string "tag"
|
||||
t.text "description"
|
||||
t.integer "project_id"
|
||||
t.datetime "created_at"
|
||||
@@ -710,30 +712,30 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
create_table "sent_notifications", force: :cascade do |t|
|
||||
t.integer "project_id"
|
||||
t.integer "noteable_id"
|
||||
t.string "noteable_type", limit: 255
|
||||
t.string "noteable_type"
|
||||
t.integer "recipient_id"
|
||||
t.string "commit_id", limit: 255
|
||||
t.string "reply_key", limit: 255, null: false
|
||||
t.string "line_code", limit: 255
|
||||
t.string "commit_id"
|
||||
t.string "reply_key", null: false
|
||||
t.string "line_code"
|
||||
end
|
||||
|
||||
add_index "sent_notifications", ["reply_key"], name: "index_sent_notifications_on_reply_key", unique: true, using: :btree
|
||||
|
||||
create_table "services", force: :cascade do |t|
|
||||
t.string "type", limit: 255
|
||||
t.string "title", limit: 255
|
||||
t.string "type"
|
||||
t.string "title"
|
||||
t.integer "project_id"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.boolean "active", default: false, null: false
|
||||
t.boolean "active", default: false, null: false
|
||||
t.text "properties"
|
||||
t.boolean "template", default: false
|
||||
t.boolean "push_events", default: true
|
||||
t.boolean "issues_events", default: true
|
||||
t.boolean "merge_requests_events", default: true
|
||||
t.boolean "tag_push_events", default: true
|
||||
t.boolean "note_events", default: true, null: false
|
||||
t.boolean "build_events", default: false, null: false
|
||||
t.boolean "template", default: false
|
||||
t.boolean "push_events", default: true
|
||||
t.boolean "issues_events", default: true
|
||||
t.boolean "merge_requests_events", default: true
|
||||
t.boolean "tag_push_events", default: true
|
||||
t.boolean "note_events", default: true, null: false
|
||||
t.boolean "build_events", default: false, null: false
|
||||
end
|
||||
|
||||
add_index "services", ["created_at", "id"], name: "index_services_on_created_at_and_id", using: :btree
|
||||
@@ -741,16 +743,16 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
add_index "services", ["template"], name: "index_services_on_template", using: :btree
|
||||
|
||||
create_table "snippets", force: :cascade do |t|
|
||||
t.string "title", limit: 255
|
||||
t.string "title"
|
||||
t.text "content"
|
||||
t.integer "author_id", null: false
|
||||
t.integer "author_id", null: false
|
||||
t.integer "project_id"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.string "file_name", limit: 255
|
||||
t.string "file_name"
|
||||
t.datetime "expires_at"
|
||||
t.string "type", limit: 255
|
||||
t.integer "visibility_level", default: 0, null: false
|
||||
t.string "type"
|
||||
t.integer "visibility_level", default: 0, null: false
|
||||
end
|
||||
|
||||
add_index "snippets", ["author_id"], name: "index_snippets_on_author_id", using: :btree
|
||||
@@ -763,7 +765,7 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
create_table "subscriptions", force: :cascade do |t|
|
||||
t.integer "user_id"
|
||||
t.integer "subscribable_id"
|
||||
t.string "subscribable_type", limit: 255
|
||||
t.string "subscribable_type"
|
||||
t.boolean "subscribed"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
@@ -774,10 +776,10 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
create_table "taggings", force: :cascade do |t|
|
||||
t.integer "tag_id"
|
||||
t.integer "taggable_id"
|
||||
t.string "taggable_type", limit: 255
|
||||
t.string "taggable_type"
|
||||
t.integer "tagger_id"
|
||||
t.string "tagger_type", limit: 255
|
||||
t.string "context", limit: 255
|
||||
t.string "tagger_type"
|
||||
t.string "context"
|
||||
t.datetime "created_at"
|
||||
end
|
||||
|
||||
@@ -785,67 +787,67 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
add_index "taggings", ["taggable_id", "taggable_type", "context"], name: "index_taggings_on_taggable_id_and_taggable_type_and_context", using: :btree
|
||||
|
||||
create_table "tags", force: :cascade do |t|
|
||||
t.string "name", limit: 255
|
||||
t.integer "taggings_count", default: 0
|
||||
t.string "name"
|
||||
t.integer "taggings_count", default: 0
|
||||
end
|
||||
|
||||
add_index "tags", ["name"], name: "index_tags_on_name", unique: true, using: :btree
|
||||
|
||||
create_table "users", force: :cascade do |t|
|
||||
t.string "email", limit: 255, default: "", null: false
|
||||
t.string "encrypted_password", limit: 255, default: "", null: false
|
||||
t.string "reset_password_token", limit: 255
|
||||
t.string "email", default: "", null: false
|
||||
t.string "encrypted_password", default: "", null: false
|
||||
t.string "reset_password_token"
|
||||
t.datetime "reset_password_sent_at"
|
||||
t.datetime "remember_created_at"
|
||||
t.integer "sign_in_count", default: 0
|
||||
t.integer "sign_in_count", default: 0
|
||||
t.datetime "current_sign_in_at"
|
||||
t.datetime "last_sign_in_at"
|
||||
t.string "current_sign_in_ip", limit: 255
|
||||
t.string "last_sign_in_ip", limit: 255
|
||||
t.string "current_sign_in_ip"
|
||||
t.string "last_sign_in_ip"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.string "name", limit: 255
|
||||
t.boolean "admin", default: false, null: false
|
||||
t.integer "projects_limit", default: 10
|
||||
t.string "skype", limit: 255, default: "", null: false
|
||||
t.string "linkedin", limit: 255, default: "", null: false
|
||||
t.string "twitter", limit: 255, default: "", null: false
|
||||
t.string "authentication_token", limit: 255
|
||||
t.integer "theme_id", default: 1, null: false
|
||||
t.string "bio", limit: 255
|
||||
t.integer "failed_attempts", default: 0
|
||||
t.string "name"
|
||||
t.boolean "admin", default: false, null: false
|
||||
t.integer "projects_limit", default: 10
|
||||
t.string "skype", default: "", null: false
|
||||
t.string "linkedin", default: "", null: false
|
||||
t.string "twitter", default: "", null: false
|
||||
t.string "authentication_token"
|
||||
t.integer "theme_id", default: 1, null: false
|
||||
t.string "bio"
|
||||
t.integer "failed_attempts", default: 0
|
||||
t.datetime "locked_at"
|
||||
t.string "username", limit: 255
|
||||
t.boolean "can_create_group", default: true, null: false
|
||||
t.boolean "can_create_team", default: true, null: false
|
||||
t.string "state", limit: 255
|
||||
t.integer "color_scheme_id", default: 1, null: false
|
||||
t.integer "notification_level", default: 1, null: false
|
||||
t.string "username"
|
||||
t.boolean "can_create_group", default: true, null: false
|
||||
t.boolean "can_create_team", default: true, null: false
|
||||
t.string "state"
|
||||
t.integer "color_scheme_id", default: 1, null: false
|
||||
t.integer "notification_level", default: 1, null: false
|
||||
t.datetime "password_expires_at"
|
||||
t.integer "created_by_id"
|
||||
t.datetime "last_credential_check_at"
|
||||
t.string "avatar", limit: 255
|
||||
t.string "confirmation_token", limit: 255
|
||||
t.string "avatar"
|
||||
t.string "confirmation_token"
|
||||
t.datetime "confirmed_at"
|
||||
t.datetime "confirmation_sent_at"
|
||||
t.string "unconfirmed_email", limit: 255
|
||||
t.boolean "hide_no_ssh_key", default: false
|
||||
t.string "website_url", limit: 255, default: "", null: false
|
||||
t.string "notification_email", limit: 255
|
||||
t.boolean "hide_no_password", default: false
|
||||
t.boolean "password_automatically_set", default: false
|
||||
t.string "location", limit: 255
|
||||
t.string "encrypted_otp_secret", limit: 255
|
||||
t.string "encrypted_otp_secret_iv", limit: 255
|
||||
t.string "encrypted_otp_secret_salt", limit: 255
|
||||
t.boolean "otp_required_for_login", default: false, null: false
|
||||
t.string "unconfirmed_email"
|
||||
t.boolean "hide_no_ssh_key", default: false
|
||||
t.string "website_url", default: "", null: false
|
||||
t.string "notification_email"
|
||||
t.boolean "hide_no_password", default: false
|
||||
t.boolean "password_automatically_set", default: false
|
||||
t.string "location"
|
||||
t.string "encrypted_otp_secret"
|
||||
t.string "encrypted_otp_secret_iv"
|
||||
t.string "encrypted_otp_secret_salt"
|
||||
t.boolean "otp_required_for_login", default: false, null: false
|
||||
t.text "otp_backup_codes"
|
||||
t.string "public_email", limit: 255, default: "", null: false
|
||||
t.integer "dashboard", default: 0
|
||||
t.integer "project_view", default: 0
|
||||
t.string "public_email", default: "", null: false
|
||||
t.integer "dashboard", default: 0
|
||||
t.integer "project_view", default: 0
|
||||
t.integer "consumed_timestep"
|
||||
t.integer "layout", default: 0
|
||||
t.boolean "hide_project_limit", default: false
|
||||
t.integer "layout", default: 0
|
||||
t.boolean "hide_project_limit", default: false
|
||||
t.string "unlock_token"
|
||||
t.datetime "otp_grace_period_started_at"
|
||||
end
|
||||
@@ -872,19 +874,19 @@ ActiveRecord::Schema.define(version: 20160106164438) do
|
||||
add_index "users_star_projects", ["user_id"], name: "index_users_star_projects_on_user_id", using: :btree
|
||||
|
||||
create_table "web_hooks", force: :cascade do |t|
|
||||
t.string "url", limit: 255
|
||||
t.string "url"
|
||||
t.integer "project_id"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.string "type", limit: 255, default: "ProjectHook"
|
||||
t.string "type", default: "ProjectHook"
|
||||
t.integer "service_id"
|
||||
t.boolean "push_events", default: true, null: false
|
||||
t.boolean "issues_events", default: false, null: false
|
||||
t.boolean "merge_requests_events", default: false, null: false
|
||||
t.boolean "tag_push_events", default: false
|
||||
t.boolean "note_events", default: false, null: false
|
||||
t.boolean "enable_ssl_verification", default: true
|
||||
t.boolean "build_events", default: false, null: false
|
||||
t.boolean "push_events", default: true, null: false
|
||||
t.boolean "issues_events", default: false, null: false
|
||||
t.boolean "merge_requests_events", default: false, null: false
|
||||
t.boolean "tag_push_events", default: false
|
||||
t.boolean "note_events", default: false, null: false
|
||||
t.boolean "enable_ssl_verification", default: true
|
||||
t.boolean "build_events", default: false, null: false
|
||||
end
|
||||
|
||||
add_index "web_hooks", ["created_at", "id"], name: "index_web_hooks_on_created_at_and_id", using: :btree
|
||||
|
||||
@@ -70,6 +70,8 @@
|
||||
|
||||
## Contributor documentation
|
||||
|
||||
- [Documentation styleguide](development/doc_styleguide.md) Use this styleguide if you are
|
||||
contributing to documentation.
|
||||
- [Development](development/README.md) Explains the architecture and the guidelines for shell commands.
|
||||
- [Legal](legal/README.md) Contributor license agreements.
|
||||
- [Release](release/README.md) How to make the monthly and security releases.
|
||||
|
||||
+14
-3
@@ -76,7 +76,10 @@ Parameters:
|
||||
"updated_at": "2013-09-30T13: 46: 02Z"
|
||||
},
|
||||
"archived": false,
|
||||
"avatar_url": "http://example.com/uploads/project/avatar/4/uploads/avatar.png"
|
||||
"avatar_url": "http://example.com/uploads/project/avatar/4/uploads/avatar.png",
|
||||
"shared_runners_enabled": true,
|
||||
"forks_count": 0,
|
||||
"star_count": 0
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
@@ -129,7 +132,11 @@ Parameters:
|
||||
}
|
||||
},
|
||||
"archived": false,
|
||||
"avatar_url": null
|
||||
"avatar_url": null,
|
||||
"shared_runners_enabled": true,
|
||||
"forks_count": 0,
|
||||
"star_count": 0,
|
||||
"runners_token": "b8547b1dc37721d05889db52fa2f02"
|
||||
}
|
||||
]
|
||||
```
|
||||
@@ -244,7 +251,11 @@ Parameters:
|
||||
}
|
||||
},
|
||||
"archived": false,
|
||||
"avatar_url": "http://example.com/uploads/project/avatar/3/uploads/avatar.png"
|
||||
"avatar_url": "http://example.com/uploads/project/avatar/3/uploads/avatar.png",
|
||||
"shared_runners_enabled": true,
|
||||
"forks_count": 0,
|
||||
"star_count": 0,
|
||||
"runners_token": "b8bc4a7a29eb76ea83cf79e4908c2b"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -0,0 +1,231 @@
|
||||
# Documentation styleguide
|
||||
|
||||
This styleguide recommends best practices to improve documentation and to keep
|
||||
it organized and easy to find.
|
||||
|
||||
## Naming
|
||||
|
||||
- When creating a new document and it has more than one word in its name,
|
||||
make sure to use underscores instead of spaces or dashes (`-`). For example,
|
||||
a proper naming would be `import_projects_from_github.md`. The same rule
|
||||
applies to images.
|
||||
|
||||
## Text
|
||||
|
||||
- Split up long lines, this makes it much easier to review and edit. Only
|
||||
double line breaks are shown as a full line break in [GitLab markdown][gfm].
|
||||
80-100 characters is a good line length
|
||||
- Make sure that the documentation is added in the correct directory and that
|
||||
there's a link to it somewhere useful
|
||||
- Do not duplicate information
|
||||
- Be brief and clear
|
||||
- Unless there's a logical reason not to, add documents in alphabetical order
|
||||
- Write in US English
|
||||
- Use [single spaces][] instead of double spaces
|
||||
|
||||
## Formatting
|
||||
|
||||
- Use dashes (`-`) for unordered lists instead of asterisks (`*`)
|
||||
- Use the number one (`1`) for ordered lists
|
||||
- Use underscores (`_`) to mark a word or text in italics
|
||||
- Use double asterisks (`**`) to mark a word or text in bold
|
||||
- When using lists, prefer not to end each item with a period. You can use
|
||||
them if there are multiple sentences, just keep the last sentence without
|
||||
a period
|
||||
|
||||
## Headings
|
||||
|
||||
- Add only one H1 title in each document, by adding `#` at the beginning of
|
||||
it (when using markdown). For subheadings, use `##`, `###` and so on
|
||||
- Avoid putting numbers in headings. Numbers shift, hence documentation anchor
|
||||
links shift too, which eventually leads to dead links. If you think it is
|
||||
compelling to add numbers in headings, make sure to at least discuss it with
|
||||
someone in the Merge Request
|
||||
- When introducing a new document, be careful for the headings to be
|
||||
grammatically and syntactically correct. It is advised to mention one or all
|
||||
of the following GitLab members for a review: `@axil`, `@rspeicher`,
|
||||
`@dblessing`, `@ashleys`, `@nearlythere`. This is to ensure that no document
|
||||
with wrong heading is going live without an audit, thus preventing dead links
|
||||
and redirection issues when corrected
|
||||
- Leave exactly one newline after a heading
|
||||
|
||||
## Links
|
||||
|
||||
- If a link makes the paragraph to span across multiple lines, do not use
|
||||
the regular Markdown approach: `[Text](https://example.com)`. Instead use
|
||||
`[Text][identifier]` and at the very bottom of the document add:
|
||||
`[identifier]: https://example.com`. This is another way to create Markdown
|
||||
links which keeps the document clear and concise. Bonus points if you also
|
||||
add an alternative text: `[identifier]: https://example.com "Alternative text"`
|
||||
that appears when hovering your mouse on a link
|
||||
|
||||
## Images
|
||||
|
||||
- Place images in a separate directory named `img/` in the same directory where
|
||||
the `.md` document that you're working on is located. Always prepend their
|
||||
names with the name of the document that they will be included in. For
|
||||
example, if there is a document called `twitter.md`, then a valid image name
|
||||
could be `twitter_login_screen.png`.
|
||||
- Images should have a specific, non-generic name that will differentiate them.
|
||||
- Keep all file names in lower case.
|
||||
- Consider using PNG images instead of JPEG.
|
||||
|
||||
Inside the document:
|
||||
|
||||
- The Markdown way of using an image inside a document is:
|
||||
``
|
||||
- Always use a proper description for what the image is about. That way, when a
|
||||
browser fails to show the image, this text will be used as an alternative
|
||||
description
|
||||
- If there are consecutive images with little text between them, always add
|
||||
three dashes (`---`) between the image and the text to create a horizontal
|
||||
line for better clarity
|
||||
- If a heading is placed right after an image, always add three dashes (`---`)
|
||||
between the image and the heading
|
||||
|
||||
## Notes
|
||||
|
||||
- Notes should be in italics with the word `Note:` being bold. Use this form:
|
||||
`_**Note:** This is something to note._`. If the note spans across multiple
|
||||
lines it's OK to split the line.
|
||||
|
||||
## New features
|
||||
|
||||
- Every piece of documentation that comes with a new feature should declare the
|
||||
GitLab version that feature got introduced. Right below the heading add a
|
||||
note: `_**Note:** This feature was introduced in GitLab 8.3_`
|
||||
- If possible every feature should have a link to the MR that introduced it.
|
||||
The above note would be then transformed to:
|
||||
`_**Note:** This feature was [introduced][ce-1242] in GitLab 8.3_`, where
|
||||
the [link identifier](#links) is named after the repository (CE) and the MR
|
||||
number
|
||||
- If the feature is only in GitLab EE, don't forget to mention it, like:
|
||||
`_**Note:** This feature was introduced in GitLab EE 8.3_`. Otherwise, leave
|
||||
this mention out
|
||||
|
||||
## API
|
||||
|
||||
Here is a list of must-have items. Use them in the exact order that appears
|
||||
on this document. Further explanation is given below.
|
||||
|
||||
- Every method must have the REST API request. For example:
|
||||
|
||||
```
|
||||
GET /projects/:id/repository/branches
|
||||
```
|
||||
|
||||
- Every method must have a detailed
|
||||
[description of the parameters](#method-description).
|
||||
- Every method must have a cURL example.
|
||||
- Every method must have a response body (in JSON format).
|
||||
|
||||
### Method description
|
||||
|
||||
Use the following table headers to describe the methods. Attributes should
|
||||
always be in code blocks using backticks (`).
|
||||
|
||||
```
|
||||
| Attribute | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
```
|
||||
|
||||
Rendered example:
|
||||
|
||||
| Attribute | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `user` | string | yes | The GitLab username |
|
||||
|
||||
### cURL commands
|
||||
|
||||
- Use `https://gitlab.example.com/api/v3/` as an endpoint.
|
||||
- Wherever needed use this private token: `9koXpg98eAheJpvBs5tK`.
|
||||
- Always put the request first. `GET` is the default so you don't have to
|
||||
include it.
|
||||
- Use double quotes to the URL when it includes additional parameters.
|
||||
- Prefer to use examples using the private token and don't pass data of
|
||||
username and password.
|
||||
|
||||
| Methods | Description |
|
||||
| ------- | ----------- |
|
||||
| `-H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK"` | Use this method as is, whenever authentication needed |
|
||||
| `-X POST` | Use this method when creating new objects |
|
||||
| `-X PUT` | Use this method when updating existing objects |
|
||||
| `-X DELETE` | Use this method when removing existing objects |
|
||||
|
||||
### cURL Examples
|
||||
|
||||
Below is a set of [cURL][] examples that you can use in the API documentation.
|
||||
|
||||
#### Simple cURL command
|
||||
|
||||
Get the details of a group:
|
||||
|
||||
```bash
|
||||
curl -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/groups/gitlab-org
|
||||
```
|
||||
|
||||
#### cURL example with parameters passed in the URL
|
||||
|
||||
Create a new project under the authenticated user's namespace:
|
||||
|
||||
```bash
|
||||
curl -X POST -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/projects?name=foo"
|
||||
```
|
||||
|
||||
#### Post data using cURL's --data
|
||||
|
||||
Instead of using `-X POST` and appending the parameters to the URI, you can use
|
||||
cURL's `--data` option. The example below will create a new project `foo` under
|
||||
the authenticated user's namespace.
|
||||
|
||||
```bash
|
||||
curl --data "name=foo" -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/projects"
|
||||
```
|
||||
|
||||
#### Post data using JSON content
|
||||
|
||||
_**Note:** In this example we create a new group. Watch carefully the single
|
||||
and double quotes._
|
||||
|
||||
```bash
|
||||
curl -X POST -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" -H "Content-Type: application/json" --data '{"path": "my-group", "name": "My group"}' https://gitlab.example.com/api/v3/groups
|
||||
```
|
||||
|
||||
#### Post data using form-data
|
||||
|
||||
Instead of using JSON or urlencode you can use multipart/form-data which
|
||||
properly handles data encoding:
|
||||
|
||||
```bash
|
||||
curl -X POST -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" -F "title=ssh-key" -F "key=ssh-rsa AAAAB3NzaC1yc2EA..." https://gitlab.example.com/api/v3/users/25/keys
|
||||
```
|
||||
|
||||
The above example is run by and administrator and will add an SSH public key
|
||||
titled ssh-key to user's account which has an id of 25.
|
||||
|
||||
#### Escape special characters
|
||||
|
||||
Spaces or slashes (`/`) may sometimes result to errors, thus it is recommended
|
||||
to escape them when possible. In the example below we create a new issue which
|
||||
contains spaces in its title. Observe how spaces are escaped using the `%20`
|
||||
ASCII code.
|
||||
|
||||
```bash
|
||||
curl -X POST -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/projects/42/issues?title=Hello%20Dude"
|
||||
```
|
||||
|
||||
Use `%2F` for slashes (`/`).
|
||||
|
||||
#### Pass arrays to API calls
|
||||
|
||||
The GitLab API sometimes accepts arrays of strings or integers. For example, to
|
||||
restrict the sign-up e-mail domains of a GitLab instance to `*.example.com` and
|
||||
`example.net`, you would do something like this:
|
||||
|
||||
```bash
|
||||
curl -X PUT -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" -d "restricted_signup_domains[]=*.example.com" -d "restricted_signup_domains[]=example.net" https://gitlab.example.com/api/v3/application/settings
|
||||
```
|
||||
|
||||
[cURL]: http://curl.haxx.se/ "cURL website"
|
||||
[single spaces]: http://www.slate.com/articles/technology/technology/2011/01/space_invaders.html
|
||||
[gfm]: http://doc.gitlab.com/ce/markdown/markdown.html#newlines "GitLab flavored markdown documentation"
|
||||
+1
-24
@@ -1,26 +1,3 @@
|
||||
# Documentation styleguide
|
||||
|
||||
This styleguide recommends best practices to improve documentation and to keep it organized and easy to find.
|
||||
|
||||
## Text
|
||||
|
||||
- Split up long lines, this makes it much easier to review and edit. Only
|
||||
double line breaks are shown as a full line break in markdown. 80 characters
|
||||
is a good line length.
|
||||
- For subtitles, make sure to start with the largest and go down, meaning:
|
||||
`#` for the title, `##` for subtitles and `###` for subtitles of the subtitles, etc.
|
||||
- Make sure that the documentation is added in the correct directory and that there's a link to it somewhere useful.
|
||||
- Add only one H1 or title in each document, by adding '#' at the begining of it (when using markdown).
|
||||
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
|
||||
|
||||
- Create a directory to store the images with the specific name of the document where the images belong.
|
||||
It could be in the same directory where the .md document that you're working on is located.
|
||||
- Images should have a specific, non-generic name that will differentiate them.
|
||||
- Keep all file names in lower case.
|
||||
Moved to [development/doc_styleguide](doc/development/doc_styleguide.md).
|
||||
|
||||
@@ -71,6 +71,7 @@ module API
|
||||
expose :avatar_url
|
||||
expose :star_count, :forks_count
|
||||
expose :open_issues_count, if: lambda { |project, options| project.issues_enabled? && project.default_issues_tracker? }
|
||||
expose :runners_token, if: lambda { |_project, options| options[:user_can_admin_project] }
|
||||
end
|
||||
|
||||
class ProjectMember < UserBasic
|
||||
|
||||
+11
-6
@@ -69,7 +69,8 @@ module API
|
||||
# Example Request:
|
||||
# GET /projects/:id
|
||||
get ":id" do
|
||||
present user_project, with: Entities::ProjectWithAccess, user: current_user
|
||||
present user_project, with: Entities::ProjectWithAccess, user: current_user,
|
||||
user_can_admin_project: can?(current_user, :admin_project, user_project)
|
||||
end
|
||||
|
||||
# Get events for a single project
|
||||
@@ -118,7 +119,8 @@ module API
|
||||
attrs = map_public_to_visibility_level(attrs)
|
||||
@project = ::Projects::CreateService.new(current_user, attrs).execute
|
||||
if @project.saved?
|
||||
present @project, with: Entities::Project
|
||||
present @project, with: Entities::Project,
|
||||
user_can_admin_project: can?(current_user, :admin_project, @project)
|
||||
else
|
||||
if @project.errors[:limit_reached].present?
|
||||
error!(@project.errors[:limit_reached], 403)
|
||||
@@ -163,7 +165,8 @@ module API
|
||||
attrs = map_public_to_visibility_level(attrs)
|
||||
@project = ::Projects::CreateService.new(user, attrs).execute
|
||||
if @project.saved?
|
||||
present @project, with: Entities::Project
|
||||
present @project, with: Entities::Project,
|
||||
user_can_admin_project: can?(current_user, :admin_project, @project)
|
||||
else
|
||||
render_validation_error!(@project)
|
||||
end
|
||||
@@ -182,8 +185,9 @@ module API
|
||||
if @forked_project.errors.any?
|
||||
conflict!(@forked_project.errors.messages)
|
||||
else
|
||||
present @forked_project, with: Entities::Project
|
||||
end
|
||||
present @forked_project, with: Entities::Project,
|
||||
user_can_admin_project: can?(current_user, :admin_project, @forked_project)
|
||||
end
|
||||
end
|
||||
|
||||
# Update an existing project
|
||||
@@ -229,7 +233,8 @@ module API
|
||||
if user_project.errors.any?
|
||||
render_validation_error!(user_project)
|
||||
else
|
||||
present user_project, with: Entities::Project
|
||||
present user_project, with: Entities::Project,
|
||||
user_can_admin_project: can?(current_user, :admin_project, user_project)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -133,7 +133,7 @@ module Banzai
|
||||
|
||||
next unless link && text
|
||||
|
||||
link = URI.decode(link)
|
||||
link = CGI.unescape(link)
|
||||
# Ignore ending punctionation like periods or commas
|
||||
next unless link == text && text =~ /\A#{pattern}/
|
||||
|
||||
@@ -170,7 +170,7 @@ module Banzai
|
||||
text = node.text
|
||||
|
||||
next unless link && text
|
||||
link = URI.decode(link)
|
||||
link = CGI.unescape(link)
|
||||
next unless link && link =~ /\A#{pattern}\z/
|
||||
|
||||
html = yield link, text
|
||||
|
||||
@@ -12,7 +12,7 @@ module Gitlab
|
||||
end
|
||||
|
||||
def execute
|
||||
project_identifier = URI.encode(project.import_source, '/')
|
||||
project_identifier = CGI.escape(project.import_source, '/')
|
||||
|
||||
#Issues && Comments
|
||||
issues = client.issues(project_identifier)
|
||||
|
||||
@@ -13,7 +13,8 @@ module Gitlab
|
||||
timeout: current_application_settings[:metrics_timeout],
|
||||
method_call_threshold: current_application_settings[:metrics_method_call_threshold],
|
||||
host: current_application_settings[:metrics_host],
|
||||
port: current_application_settings[:metrics_port]
|
||||
port: current_application_settings[:metrics_port],
|
||||
sample_interval: current_application_settings[:metrics_sample_interval] || 15
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
@@ -7,9 +7,14 @@ module Gitlab
|
||||
# statistics, etc.
|
||||
class Sampler
|
||||
# interval - The sampling interval in seconds.
|
||||
def initialize(interval = 15)
|
||||
@interval = interval
|
||||
@metrics = []
|
||||
def initialize(interval = Metrics.settings[:sample_interval])
|
||||
interval_half = interval.to_f / 2
|
||||
|
||||
@interval = interval
|
||||
@interval_steps = (-interval_half..interval_half).step(0.1).to_a
|
||||
@last_step = nil
|
||||
|
||||
@metrics = []
|
||||
|
||||
@last_minor_gc = Delta.new(GC.stat[:minor_gc_count])
|
||||
@last_major_gc = Delta.new(GC.stat[:major_gc_count])
|
||||
@@ -26,7 +31,7 @@ module Gitlab
|
||||
Thread.current.abort_on_exception = true
|
||||
|
||||
loop do
|
||||
sleep(@interval)
|
||||
sleep(sleep_interval)
|
||||
|
||||
sample
|
||||
end
|
||||
@@ -102,6 +107,23 @@ module Gitlab
|
||||
def sidekiq?
|
||||
Sidekiq.server?
|
||||
end
|
||||
|
||||
# Returns the sleep interval with a random adjustment.
|
||||
#
|
||||
# The random adjustment is put in place to ensure we:
|
||||
#
|
||||
# 1. Don't generate samples at the exact same interval every time (thus
|
||||
# potentially missing anything that happens in between samples).
|
||||
# 2. Don't sample data at the same interval two times in a row.
|
||||
def sleep_interval
|
||||
while step = @interval_steps.sample
|
||||
if step != @last_step
|
||||
@last_step = step
|
||||
|
||||
return @interval + @last_step
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -9,7 +9,7 @@ describe Gitlab::Metrics::Sampler do
|
||||
|
||||
describe '#start' do
|
||||
it 'gathers a sample at a given interval' do
|
||||
expect(sampler).to receive(:sleep).with(5)
|
||||
expect(sampler).to receive(:sleep).with(a_kind_of(Numeric))
|
||||
expect(sampler).to receive(:sample)
|
||||
expect(sampler).to receive(:loop).and_yield
|
||||
|
||||
@@ -116,4 +116,24 @@ describe Gitlab::Metrics::Sampler do
|
||||
sampler.add_metric('cats', value: 10)
|
||||
end
|
||||
end
|
||||
|
||||
describe '#sleep_interval' do
|
||||
it 'returns a Numeric' do
|
||||
expect(sampler.sleep_interval).to be_a_kind_of(Numeric)
|
||||
end
|
||||
|
||||
# Testing random behaviour is very hard, so treat this test as a basic smoke
|
||||
# test instead of a very accurate behaviour/unit test.
|
||||
it 'does not return the same interval twice in a row' do
|
||||
last = nil
|
||||
|
||||
100.times do
|
||||
interval = sampler.sleep_interval
|
||||
|
||||
expect(interval).to_not eq(last)
|
||||
|
||||
last = interval
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user