diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e0e780e1e6b78f0e40c3fc6aeee4cad32ac17511..68690ff33daea76c4d2d61d45975fad76b2d5f29 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -233,7 +233,13 @@ spinach 9 10 ruby21: *spinach-knapsack-ruby21
   script:
     - bundle exec $CI_BUILD_NAME
 
-rubocop: *exec
+rubocop: 
+  <<: *ruby-static-analysis
+  <<: *dedicated-runner
+  stage: test
+  script:
+    - bundle exec "rubocop --require rubocop-rspec"
+
 rake haml_lint: *exec
 rake scss_lint: *exec
 rake brakeman: *exec
diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
index 11b34fafa2ae122534e8ba213e58467c89fab095..2434e8c4b4215b11690ce629afa127e8c7676c44 100644
--- a/.rubocop_todo.yml
+++ b/.rubocop_todo.yml
@@ -1,65 +1,106 @@
 # This configuration was generated by
-# `rubocop --auto-gen-config --exclude-limit 0`
-# on 2016-10-04 13:16:20 +0200 using RuboCop version 0.43.0.
+# `rubocop --auto-gen-config`
+# on 2017-01-05 14:31:09 -0800 using RuboCop version 0.46.0.
 # The point is for the user to remove these configuration records
 # one by one as the offenses are removed from the code base.
 # Note that changes in the inspected code, or installation of new
 # versions of RuboCop, may require this file to be generated again.
 
-# Offense count: 160
+# Offense count: 28
+# Configuration parameters: Include.
+# Include: **/Gemfile, **/gems.rb
+Bundler/OrderedGems:
+  Exclude:
+    - 'Gemfile'
+
+# Offense count: 174
 Lint/AmbiguousRegexpLiteral:
   Enabled: false
 
-# Offense count: 40
+# Offense count: 53
 # Configuration parameters: AllowSafeAssignment.
 Lint/AssignmentInCondition:
   Enabled: false
 
-# Offense count: 18
+# Offense count: 1
+Lint/EmptyWhen:
+  Exclude:
+    - 'lib/gitlab/diff/parser.rb'
+
+# Offense count: 20
 Lint/HandleExceptions:
   Enabled: false
 
-# Offense count: 2
+# Offense count: 1
 Lint/Loop:
-  Enabled: false
+  Exclude:
+    - 'app/mailers/notify.rb'
 
-# Offense count: 19
+# Offense count: 28
 Lint/ShadowingOuterLocalVariable:
   Enabled: false
 
-# Offense count: 9
+# Offense count: 10
 # Cop supports --auto-correct.
 Lint/UnifiedInteger:
-  Enabled: false
+  Exclude:
+    - 'spec/lib/gitlab/metrics/method_call_spec.rb'
+    - 'spec/lib/gitlab/metrics/metric_spec.rb'
+    - 'spec/lib/gitlab/metrics/system_spec.rb'
+    - 'spec/lib/gitlab/metrics/transaction_spec.rb'
+    - 'spec/models/repository_spec.rb'
 
-# Offense count: 13
+# Offense count: 21
 # Cop supports --auto-correct.
 Lint/UnneededSplatExpansion:
-  Enabled: false
-
-# Offense count: 69
+  Exclude:
+    - 'config/application.rb'
+    - 'lib/banzai/filter/gollum_tags_filter.rb'
+    - 'lib/bitbucket/page.rb'
+    - 'lib/gitlab/markup_helper.rb'
+    - 'spec/helpers/auth_helper_spec.rb'
+    - 'spec/models/project_wiki_spec.rb'
+    - 'spec/requests/api/projects_spec.rb'
+    - 'spec/requests/api/tags_spec.rb'
+    - 'spec/support/seed_helper.rb'
+    - 'spec/support/test_env.rb'
+
+# Offense count: 82
 # Cop supports --auto-correct.
 # Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments.
 Lint/UnusedBlockArgument:
   Enabled: false
 
-# Offense count: 144
+# Offense count: 173
 # Cop supports --auto-correct.
 # Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods.
 Lint/UnusedMethodArgument:
   Enabled: false
 
-# Offense count: 2
+# Offense count: 94
+# Configuration parameters: CountComments.
+Metrics/BlockLength:
+  Max: 289
+
+# Offense count: 3
 # Cop supports --auto-correct.
 Performance/RedundantBlockCall:
-  Enabled: false
+  Exclude:
+    - 'app/controllers/application_controller.rb'
+    - 'lib/gitlab/backend/shell.rb'
+    - 'lib/gitlab/optimistic_locking.rb'
 
 # Offense count: 5
 # Cop supports --auto-correct.
 Performance/RedundantMatch:
-  Enabled: false
+  Exclude:
+    - 'app/models/external_issue.rb'
+    - 'lib/ci/api/helpers.rb'
+    - 'lib/extracts_path.rb'
+    - 'lib/gitlab/diff/highlight.rb'
+    - 'lib/gitlab/diff/parser.rb'
 
-# Offense count: 26
+# Offense count: 32
 # Cop supports --auto-correct.
 # Configuration parameters: MaxKeyValuePairs.
 Performance/RedundantMerge:
@@ -67,63 +108,127 @@ Performance/RedundantMerge:
 
 # Offense count: 7
 RSpec/BeEql:
-  Enabled: false
+  Exclude:
+    - 'spec/lib/gitlab/ldap/user_spec.rb'
+    - 'spec/lib/gitlab/o_auth/user_spec.rb'
+    - 'spec/lib/gitlab/saml/user_spec.rb'
 
-# Offense count: 20
+# Offense count: 15
 # Configuration parameters: CustomIncludeMethods.
 RSpec/EmptyExampleGroup:
-  Enabled: false
+  Exclude:
+    - 'spec/features/issues_spec.rb'
+    - 'spec/features/notes_on_merge_requests_spec.rb'
+    - 'spec/lib/gitlab/git_access_spec.rb'
+    - 'spec/models/project_snippet_spec.rb'
+    - 'spec/models/protected_branch_spec.rb'
+    - 'spec/routing/routing_spec.rb'
 
-# Offense count: 16
+# Offense count: 24
 RSpec/ExpectActual:
-  Enabled: false
+  Exclude:
+    - 'spec/lib/gitlab/regex_spec.rb'
 
-# Offense count: 34
+# Offense count: 58
 # Configuration parameters: EnforcedStyle, SupportedStyles.
 # SupportedStyles: implicit, each, example
 RSpec/HookArgument:
   Enabled: false
 
-# Offense count: 168
+# Offense count: 12
+# Configuration parameters: EnforcedStyle, SupportedStyles.
+# SupportedStyles: is_expected, should
+RSpec/ImplicitExpect:
+  Exclude:
+    - 'spec/lib/banzai/renderer_spec.rb'
+    - 'spec/models/project_group_link_spec.rb'
+    - 'spec/models/project_services/external_wiki_service_spec.rb'
+    - 'spec/models/project_spec.rb'
+
+# Offense count: 235
 RSpec/LeadingSubject:
   Enabled: false
 
-# Offense count: 162
+# Offense count: 246
 RSpec/LetSetup:
   Enabled: false
 
-# Offense count: 10
+# Offense count: 13
 RSpec/MessageChain:
-  Enabled: false
-
-# Offense count: 714
+  Exclude:
+    - 'spec/finders/move_to_project_finder_spec.rb'
+    - 'spec/helpers/issues_helper_spec.rb'
+    - 'spec/initializers/secret_token_spec.rb'
+    - 'spec/models/build_spec.rb'
+    - 'spec/requests/api/internal_spec.rb'
+    - 'spec/services/merge_requests/build_service_spec.rb'
+    - 'spec/services/notes/create_service_spec.rb'
+    - 'spec/workers/emails_on_push_worker_spec.rb'
+
+# Offense count: 468
 # Configuration parameters: EnforcedStyle, SupportedStyles.
-# SupportedStyles: allow, expect
-RSpec/MessageExpectation:
+# SupportedStyles: have_received, receive
+RSpec/MessageSpies:
   Enabled: false
 
-# Offense count: 2423
+# Offense count: 3013
 RSpec/MultipleExpectations:
-  Max: 36
+  Max: 37
 
-# Offense count: 1504
+# Offense count: 2072
 RSpec/NamedSubject:
   Enabled: false
 
-# Offense count: 1335
+# Offense count: 1949
 # Configuration parameters: MaxNesting.
 RSpec/NestedGroups:
   Enabled: false
 
-# Offense count: 99
+# Offense count: 32
+RSpec/RepeatedDescription:
+  Exclude:
+    - 'spec/controllers/projects/todo_controller_spec.rb'
+    - 'spec/features/boards/boards_spec.rb'
+    - 'spec/helpers/issuables_helper_spec.rb'
+    - 'spec/lib/banzai/filter/emoji_filter_spec.rb'
+    - 'spec/models/commit_range_spec.rb'
+    - 'spec/models/global_milestone_spec.rb'
+    - 'spec/models/hooks/system_hook_spec.rb'
+    - 'spec/requests/api/commits_spec.rb'
+    - 'spec/requests/api/merge_requests_spec.rb'
+    - 'spec/requests/api/users_spec.rb'
+    - 'spec/requests/lfs_http_spec.rb'
+    - 'spec/routing/admin_routing_spec.rb'
+    - 'spec/services/notification_service_spec.rb'
+
+# Offense count: 1
+RSpec/SingleArgumentMessageChain:
+  Exclude:
+    - 'spec/requests/api/internal_spec.rb'
+
+# Offense count: 125
 RSpec/SubjectStub:
   Enabled: false
 
-# Offense count: 64
+# Offense count: 104
+# Cop supports --auto-correct.
+# Configuration parameters: Whitelist.
+# Whitelist: find_by_sql
+Rails/DynamicFindBy:
+  Enabled: false
+
+# Offense count: 929
+# Cop supports --auto-correct.
+# Configuration parameters: Include.
+# Include: spec/**/*, test/**/*
+Rails/HttpPositionalArguments:
+  Enabled: false
+
+# Offense count: 55
 Rails/OutputSafety:
   Enabled: false
 
-# Offense count: 151
+# Offense count: 181
 # Configuration parameters: EnforcedStyle, SupportedStyles.
 # SupportedStyles: strict, flexible
 Rails/TimeZone:
@@ -134,35 +239,52 @@ Rails/TimeZone:
 # Configuration parameters: Include.
 # Include: app/models/**/*.rb
 Rails/Validation:
-  Enabled: false
+  Exclude:
+    - 'app/models/ci/build.rb'
+    - 'app/models/ci/pipeline.rb'
+    - 'app/models/ci/runner_project.rb'
+    - 'app/models/ci/trigger.rb'
+    - 'app/models/commit_status.rb'
+    - 'app/models/members/group_member.rb'
+    - 'app/models/members/project_member.rb'
+    - 'app/models/project.rb'
+    - 'app/models/protected_branch.rb'
+    - 'app/models/user.rb'
 
-# Offense count: 2
+# Offense count: 8
 # Cop supports --auto-correct.
+# Configuration parameters: AutoCorrect.
 Security/JSONLoad:
-  Enabled: false
+  Exclude:
+    - 'db/migrate/20161019190736_migrate_sidekiq_queues_from_default.rb'
+    - 'db/migrate/20161024042317_migrate_mailroom_queue_from_default.rb'
+    - 'db/migrate/20161124141322_migrate_process_commit_worker_jobs.rb'
+    - 'spec/migrations/migrate_process_commit_worker_jobs_spec.rb'
+    - 'spec/models/project_services/irker_service_spec.rb'
+    - 'spec/support/stub_gitlab_calls.rb'
 
-# Offense count: 284
+# Offense count: 339
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
 # SupportedStyles: with_first_parameter, with_fixed_indentation
 Style/AlignParameters:
   Enabled: false
 
-# Offense count: 28
+# Offense count: 27
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle, SupportedStyles.
 # SupportedStyles: always, conditionals
 Style/AndOr:
   Enabled: false
 
-# Offense count: 52
+# Offense count: 53
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle, SupportedStyles.
 # SupportedStyles: percent_q, bare_percent
 Style/BarePercentLiterals:
   Enabled: false
 
-# Offense count: 291
+# Offense count: 354
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle, SupportedStyles.
 # SupportedStyles: braces, no_braces, context_dependent
@@ -171,97 +293,156 @@ Style/BracesAroundHashParameters:
 
 # Offense count: 6
 Style/CaseEquality:
-  Enabled: false
+  Exclude:
+    - 'app/helpers/auth_helper.rb'
+    - 'app/models/commit.rb'
+    - 'app/models/protected_branch.rb'
+    - 'app/services/projects/download_service.rb'
+    - 'config/initializers/trusted_proxies.rb'
+    - 'spec/features/calendar_spec.rb'
 
-# Offense count: 26
+# Offense count: 37
 # Cop supports --auto-correct.
 Style/ColonMethodCall:
   Enabled: false
 
-# Offense count: 2
+# Offense count: 4
 # Cop supports --auto-correct.
 # Configuration parameters: Keywords.
 # Keywords: TODO, FIXME, OPTIMIZE, HACK, REVIEW
 Style/CommentAnnotation:
-  Enabled: false
+  Exclude:
+    - 'config/routes/user.rb'
+    - 'lib/api/commits.rb'
+    - 'lib/api/entities.rb'
+    - 'spec/requests/api/project_snippets_spec.rb'
 
-# Offense count: 30
+# Offense count: 29
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle, SupportedStyles, SingleLineConditionsOnly.
 # SupportedStyles: assign_to_condition, assign_inside_condition
 Style/ConditionalAssignment:
   Enabled: false
 
-# Offense count: 957
+# Offense count: 1210
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle, SupportedStyles.
 # SupportedStyles: leading, trailing
 Style/DotPosition:
   Enabled: false
 
-# Offense count: 13
+# Offense count: 18
 Style/DoubleNegation:
-  Enabled: false
+  Exclude:
+    - 'app/controllers/users_controller.rb'
+    - 'app/models/commit.rb'
+    - 'app/models/merge_request.rb'
+    - 'app/models/project.rb'
+    - 'app/models/project_services/buildkite_service.rb'
+    - 'app/models/project_services/drone_ci_service.rb'
+    - 'app/models/project_wiki.rb'
+    - 'app/models/user.rb'
+    - 'config/initializers/6_validations.rb'
+    - 'lib/banzai/filter/relative_link_filter.rb'
+    - 'lib/gitlab/git/diff_collection.rb'
+    - 'lib/gitlab/git/repository.rb'
+    - 'lib/gitlab/sherlock.rb'
+    - 'lib/gitlab/sherlock/middleware.rb'
 
-# Offense count: 6
+# Offense count: 7
 # Cop supports --auto-correct.
 Style/EachWithObject:
-  Enabled: false
+  Exclude:
+    - 'app/controllers/projects/cycle_analytics_controller.rb'
+    - 'app/services/merge_requests/get_urls_service.rb'
+    - 'lib/ci/ansi2html.rb'
+    - 'lib/expand_variables.rb'
+    - 'lib/gitlab/ee_compat_check.rb'
+    - 'lib/gitlab/import_export/members_mapper.rb'
+    - 'lib/gitlab/import_export/relation_factory.rb'
 
-# Offense count: 26
+# Offense count: 24
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle, SupportedStyles.
 # SupportedStyles: empty, nil, both
 Style/EmptyElse:
   Enabled: false
 
-# Offense count: 3
+# Offense count: 4
 # Cop supports --auto-correct.
 Style/EmptyLiteral:
+  Exclude:
+    - 'features/steps/project/commits/commits.rb'
+    - 'lib/gitlab/fogbugz_import/importer.rb'
+    - 'lib/gitlab/git/diff_collection.rb'
+    - 'spec/lib/gitlab/workhorse_spec.rb'
+
+# Offense count: 57
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles.
+# SupportedStyles: compact, expanded
+Style/EmptyMethod:
   Enabled: false
 
-# Offense count: 140
+# Offense count: 145
 # Cop supports --auto-correct.
 # Configuration parameters: AllowForAlignment, ForceEqualSignAlignment.
 Style/ExtraSpacing:
   Enabled: false
 
-# Offense count: 6
+# Offense count: 8
 # Configuration parameters: EnforcedStyle, SupportedStyles.
 # SupportedStyles: format, sprintf, percent
 Style/FormatString:
-  Enabled: false
-
-# Offense count: 201
+  Exclude:
+    - 'app/models/ci/pipeline.rb'
+    - 'app/services/gravatar_service.rb'
+    - 'config/initializers/rack_lineprof.rb'
+    - 'lib/gitlab/version_info.rb'
+    - 'spec/factories/lfs_objects.rb'
+    - 'spec/services/issues/move_service_spec.rb'
+
+# Offense count: 236
 # Configuration parameters: MinBodyLength.
 Style/GuardClause:
   Enabled: false
 
 # Offense count: 11
 Style/IfInsideElse:
-  Enabled: false
-
-# Offense count: 174
+  Exclude:
+    - 'app/controllers/projects/forks_controller.rb'
+    - 'app/controllers/projects/imports_controller.rb'
+    - 'app/helpers/milestones_helper.rb'
+    - 'app/helpers/projects_helper.rb'
+    - 'app/services/system_note_service.rb'
+    - 'config/initializers/1_settings.rb'
+    - 'lib/gitlab/auth.rb'
+    - 'lib/gitlab/checks/change_access.rb'
+    - 'lib/gitlab/database.rb'
+    - 'spec/controllers/projects/merge_requests_controller_spec.rb'
+    - 'spec/support/import_export/export_file_helper.rb'
+
+# Offense count: 173
 # Cop supports --auto-correct.
 # Configuration parameters: MaxLineLength.
 Style/IfUnlessModifier:
   Enabled: false
 
-# Offense count: 53
+# Offense count: 55
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
 # SupportedStyles: special_inside_parentheses, consistent, align_brackets
 Style/IndentArray:
   Enabled: false
 
-# Offense count: 95
+# Offense count: 99
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
 # SupportedStyles: special_inside_parentheses, consistent, align_braces
 Style/IndentHash:
   Enabled: false
 
-# Offense count: 29
+# Offense count: 41
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle, SupportedStyles.
 # SupportedStyles: line_count_dependent, lambda, literal
@@ -271,18 +452,49 @@ Style/Lambda:
 # Offense count: 5
 # Cop supports --auto-correct.
 Style/LineEndConcatenation:
-  Enabled: false
+  Exclude:
+    - 'app/helpers/preferences_helper.rb'
+    - 'app/helpers/tree_helper.rb'
+    - 'app/models/merge_request.rb'
+    - 'spec/lib/gitlab/gfm/reference_rewriter_spec.rb'
 
-# Offense count: 15
+# Offense count: 19
 # Cop supports --auto-correct.
 Style/MethodCallParentheses:
-  Enabled: false
+  Exclude:
+    - 'lib/ci/ansi2html.rb'
+    - 'spec/controllers/dashboard/todos_controller_spec.rb'
+    - 'spec/controllers/projects/issues_controller_spec.rb'
+    - 'spec/controllers/projects/merge_requests_controller_spec.rb'
+    - 'spec/controllers/projects/snippets_controller_spec.rb'
+    - 'spec/features/calendar_spec.rb'
+    - 'spec/features/dashboard/datetime_on_tooltips_spec.rb'
+    - 'spec/helpers/submodule_helper_spec.rb'
+    - 'spec/lib/gitlab/git/repository_spec.rb'
+    - 'spec/requests/api/internal_spec.rb'
 
-# Offense count: 8
+# Offense count: 9
 Style/MethodMissing:
-  Enabled: false
+  Exclude:
+    - 'app/controllers/projects/application_controller.rb'
+    - 'app/models/commit.rb'
+    - 'app/models/network/commit.rb'
+    - 'app/models/repository.rb'
+    - 'config/initializers/gollum.rb'
+    - 'lib/bitbucket/collection.rb'
+    - 'lib/gitlab/github_import/client.rb'
+    - 'lib/gitlab/lazy.rb'
+    - 'lib/uploaded_file.rb'
 
-# Offense count: 95
+# Offense count: 3
+# Cop supports --auto-correct.
+Style/MultilineIfModifier:
+  Exclude:
+    - 'app/helpers/snippets_helper.rb'
+    - 'app/models/merge_request.rb'
+    - 'app/models/project_wiki.rb'
+
+# Offense count: 178
 # Cop supports --auto-correct.
 Style/MutableConstant:
   Enabled: false
@@ -290,53 +502,95 @@ Style/MutableConstant:
 # Offense count: 8
 # Cop supports --auto-correct.
 Style/NestedParenthesizedCalls:
-  Enabled: false
+  Exclude:
+    - 'app/helpers/commits_helper.rb'
+    - 'app/workers/irker_worker.rb'
+    - 'spec/lib/gitlab/ci/build/artifacts/metadata/entry_spec.rb'
+    - 'spec/lib/gitlab/email/message/repository_push_spec.rb'
 
 # Offense count: 13
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle, MinBodyLength, SupportedStyles.
 # SupportedStyles: skip_modifier_ifs, always
 Style/Next:
-  Enabled: false
+  Exclude:
+    - 'app/models/namespace.rb'
+    - 'app/models/user.rb'
+    - 'config/initializers/secret_token.rb'
+    - 'db/migrate/20161220141214_remove_dot_git_from_group_names.rb'
+    - 'db/migrate/20161226122833_remove_dot_git_from_usernames.rb'
+    - 'lib/banzai/filter/math_filter.rb'
+    - 'lib/banzai/filter/table_of_contents_filter.rb'
+    - 'lib/gitlab/fogbugz_import/importer.rb'
+    - 'lib/gitlab/metrics/instrumentation.rb'
+    - 'lib/gitlab/metrics/sampler.rb'
+    - 'lib/gitlab/project_search_results.rb'
 
-# Offense count: 12
+# Offense count: 19
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedOctalStyle, SupportedOctalStyles.
 # SupportedOctalStyles: zero_with_o, zero_only
 Style/NumericLiteralPrefix:
-  Enabled: false
+  Exclude:
+    - 'config/initializers/1_settings.rb'
+    - 'config/initializers/secret_token.rb'
+    - 'lib/gitlab/backend/shell.rb'
+    - 'lib/gitlab/import_export/command_line_util.rb'
+    - 'lib/gitlab/workhorse.rb'
+    - 'spec/features/projects/import_export/export_file_spec.rb'
+    - 'spec/lib/gitlab/git/blob_spec.rb'
+    - 'spec/lib/gitlab/git/hook_spec.rb'
+    - 'spec/lib/gitlab/git/repository_spec.rb'
+    - 'spec/lib/gitlab/workhorse_spec.rb'
+    - 'spec/support/import_export/export_file_helper.rb'
+    - 'spec/support/test_env.rb'
+    - 'spec/tasks/gitlab/backup_rake_spec.rb'
 
-# Offense count: 53
+# Offense count: 19
 # Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, SupportedStyles.
+# Configuration parameters: AutoCorrect, EnforcedStyle, SupportedStyles.
 # SupportedStyles: predicate, comparison
 Style/NumericPredicate:
   Enabled: false
 
-# Offense count: 29
+# Offense count: 34
 # Cop supports --auto-correct.
 Style/ParallelAssignment:
   Enabled: false
 
-# Offense count: 294
+# Offense count: 416
 # Cop supports --auto-correct.
 # Configuration parameters: PreferredDelimiters.
 Style/PercentLiteralDelimiters:
   Enabled: false
 
-# Offense count: 11
+# Offense count: 10
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle, SupportedStyles.
 # SupportedStyles: lower_case_q, upper_case_q
 Style/PercentQLiterals:
-  Enabled: false
+  Exclude:
+    - 'spec/lib/gitlab/diff/highlight_spec.rb'
+    - 'spec/models/project_services/bamboo_service_spec.rb'
+    - 'spec/models/project_services/teamcity_service_spec.rb'
+    - 'spec/workers/repository_import_worker_spec.rb'
 
 # Offense count: 13
 # Cop supports --auto-correct.
 Style/PerlBackrefs:
-  Enabled: false
-
-# Offense count: 38
+  Exclude:
+    - 'app/controllers/projects/application_controller.rb'
+    - 'app/helpers/submodule_helper.rb'
+    - 'lib/banzai/filter/abstract_reference_filter.rb'
+    - 'lib/banzai/filter/autolink_filter.rb'
+    - 'lib/banzai/filter/emoji_filter.rb'
+    - 'lib/banzai/filter/gollum_tags_filter.rb'
+    - 'lib/expand_variables.rb'
+    - 'lib/gitlab/diff/highlight.rb'
+    - 'lib/gitlab/search_results.rb'
+    - 'lib/gitlab/sherlock/query.rb'
+
+# Offense count: 63
 # Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist.
 # NamePrefix: is_, has_, have_
 # NamePrefixBlacklist: is_, has_, have_
@@ -344,17 +598,25 @@ Style/PerlBackrefs:
 Style/PredicateName:
   Enabled: false
 
-# Offense count: 26
+# Offense count: 33
 # Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles.
+# SupportedStyles: short, verbose
 Style/PreferredHashMethods:
   Enabled: false
 
-# Offense count: 6
+# Offense count: 8
 # Cop supports --auto-correct.
 Style/Proc:
-  Enabled: false
+  Exclude:
+    - 'app/mailers/base_mailer.rb'
+    - 'app/models/milestone.rb'
+    - 'app/models/service.rb'
+    - 'lib/api/api_guard.rb'
+    - 'lib/gitlab/ldap/config.rb'
+    - 'spec/initializers/trusted_proxies_spec.rb'
 
-# Offense count: 22
+# Offense count: 50
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle, SupportedStyles.
 # SupportedStyles: compact, exploded
@@ -364,107 +626,196 @@ Style/RaiseArgs:
 # Offense count: 4
 # Cop supports --auto-correct.
 Style/RedundantBegin:
-  Enabled: false
+  Exclude:
+    - 'app/models/ci/build.rb'
+    - 'app/models/merge_request.rb'
+    - 'app/services/projects/import_service.rb'
+    - 'lib/gitlab/git/commit.rb'
 
 # Offense count: 1
 # Cop supports --auto-correct.
 Style/RedundantException:
-  Enabled: false
+  Exclude:
+    - 'app/helpers/preferences_helper.rb'
 
-# Offense count: 24
+# Offense count: 29
 # Cop supports --auto-correct.
 Style/RedundantFreeze:
-  Enabled: false
+  Exclude:
+    - 'app/models/merge_request.rb'
+    - 'app/validators/color_validator.rb'
+    - 'app/validators/line_code_validator.rb'
+    - 'lib/api/templates.rb'
+    - 'lib/banzai/filter/blockquote_fence_filter.rb'
+    - 'lib/banzai/filter/gollum_tags_filter.rb'
+    - 'lib/banzai/filter/yaml_front_matter_filter.rb'
+    - 'lib/gitlab/diff/inline_diff.rb'
+    - 'lib/gitlab/ee_compat_check.rb'
+    - 'lib/gitlab/import_export/relation_factory.rb'
+    - 'lib/gitlab/incoming_email.rb'
+    - 'lib/gitlab/middleware/static.rb'
+    - 'lib/gitlab/regex.rb'
 
-# Offense count: 427
+# Offense count: 11
+# Cop supports --auto-correct.
+# Configuration parameters: AllowMultipleReturnValues.
+Style/RedundantReturn:
+  Exclude:
+    - 'app/controllers/concerns/issuable_actions.rb'
+    - 'app/controllers/groups/application_controller.rb'
+    - 'app/controllers/groups_controller.rb'
+    - 'app/controllers/projects/labels_controller.rb'
+    - 'app/controllers/projects/milestones_controller.rb'
+    - 'app/services/access_token_validation_service.rb'
+
+# Offense count: 359
 # Cop supports --auto-correct.
 Style/RedundantSelf:
   Enabled: false
 
-# Offense count: 97
+# Offense count: 105
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle, SupportedStyles, AllowInnerSlashes.
 # SupportedStyles: slashes, percent_r, mixed
 Style/RegexpLiteral:
   Enabled: false
 
-# Offense count: 18
+# Offense count: 19
 # Cop supports --auto-correct.
 Style/RescueModifier:
-  Enabled: false
-
-# Offense count: 114
-# Cop supports --auto-correct.
-Style/SafeNavigation:
-  Enabled: false
+  Exclude:
+    - 'app/controllers/admin/system_info_controller.rb'
+    - 'app/controllers/users_controller.rb'
+    - 'app/helpers/blob_helper.rb'
+    - 'app/helpers/issues_helper.rb'
+    - 'app/models/diff_note.rb'
+    - 'app/models/project_services/external_wiki_service.rb'
+    - 'app/models/sent_notification.rb'
+    - 'app/models/todo.rb'
+    - 'config/initializers/1_settings.rb'
+    - 'config/initializers/attr_encrypted_no_db_connection.rb'
+    - 'lib/gitlab/current_settings.rb'
+    - 'lib/gitlab/diff/parser.rb'
+    - 'lib/gitlab/kubernetes.rb'
+    - 'lib/gitlab/slash_commands/command_definition.rb'
+    - 'spec/support/matchers/be_url.rb'
 
 # Offense count: 7
 # Cop supports --auto-correct.
 Style/SelfAssignment:
-  Enabled: false
+  Exclude:
+    - 'app/models/project_team.rb'
+    - 'app/services/notification_service.rb'
+    - 'lib/api/runners.rb'
+    - 'spec/features/merge_requests/diff_notes_resolve_spec.rb'
+    - 'spec/support/import_export/configuration_helper.rb'
 
 # Offense count: 2
 # Configuration parameters: Methods.
-# Methods: {"reduce"=>["a", "e"]}, {"inject"=>["a", "e"]}
+# Methods: {"reduce"=>["acc", "elem"]}, {"inject"=>["acc", "elem"]}
 Style/SingleLineBlockParams:
-  Enabled: false
+  Exclude:
+    - 'app/models/commit.rb'
+    - 'spec/support/services_shared_context.rb'
 
 # Offense count: 50
 # Cop supports --auto-correct.
 # Configuration parameters: AllowIfMethodIsEmpty.
 Style/SingleLineMethods:
-  Enabled: false
+  Exclude:
+    - 'lib/ci/ansi2html.rb'
 
-# Offense count: 125
+# Offense count: 140
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle, SupportedStyles.
 # SupportedStyles: space, no_space
 Style/SpaceBeforeBlockBraces:
   Enabled: false
 
-# Offense count: 10
+# Offense count: 8
 # Cop supports --auto-correct.
 # Configuration parameters: AllowForAlignment.
 Style/SpaceBeforeFirstArg:
-  Enabled: false
+  Exclude:
+    - 'config/routes/project.rb'
+    - 'features/steps/project/source/browse_files.rb'
+    - 'features/steps/project/source/markdown_render.rb'
+    - 'spec/routing/project_routing_spec.rb'
+    - 'spec/services/system_note_service_spec.rb'
 
-# Offense count: 145
+# Offense count: 37
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles.
+# SupportedStyles: require_no_space, require_space
+Style/SpaceInLambdaLiteral:
+  Exclude:
+    - 'app/models/concerns/mentionable.rb'
+    - 'app/models/issue.rb'
+    - 'app/models/member.rb'
+    - 'lib/api/entities.rb'
+    - 'lib/file_size_validator.rb'
+    - 'lib/gitlab/visibility_level.rb'
+    - 'spec/models/concerns/participable_spec.rb'
+    - 'spec/models/cycle_analytics/code_spec.rb'
+    - 'spec/models/cycle_analytics/issue_spec.rb'
+    - 'spec/models/cycle_analytics/plan_spec.rb'
+    - 'spec/models/cycle_analytics/production_spec.rb'
+    - 'spec/models/cycle_analytics/review_spec.rb'
+    - 'spec/models/cycle_analytics/staging_spec.rb'
+    - 'spec/models/cycle_analytics/test_spec.rb'
+
+# Offense count: 174
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters.
 # SupportedStyles: space, no_space
 Style/SpaceInsideBlockBraces:
   Enabled: false
 
-# Offense count: 99
+# Offense count: 115
 # Cop supports --auto-correct.
 Style/SpaceInsideBrackets:
   Enabled: false
 
-# Offense count: 65
+# Offense count: 77
 # Cop supports --auto-correct.
 Style/SpaceInsideParens:
   Enabled: false
 
-# Offense count: 7
+# Offense count: 4
 # Cop supports --auto-correct.
 Style/SpaceInsidePercentLiteralDelimiters:
-  Enabled: false
+  Exclude:
+    - 'lib/gitlab/git_access.rb'
 
-# Offense count: 41
+# Offense count: 53
 # Cop supports --auto-correct.
 # Configuration parameters: SupportedStyles.
 # SupportedStyles: use_perl_names, use_english_names
 Style/SpecialGlobalVars:
   EnforcedStyle: use_perl_names
 
-# Offense count: 31
+# Offense count: 25
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle, SupportedStyles.
 # SupportedStyles: single_quotes, double_quotes
 Style/StringLiteralsInInterpolation:
-  Enabled: false
+  Exclude:
+    - 'app/helpers/labels_helper.rb'
+    - 'app/helpers/time_helper.rb'
+    - 'app/helpers/todos_helper.rb'
+    - 'app/models/application_setting.rb'
+    - 'app/models/project_services/campfire_service.rb'
+    - 'app/models/project_services/jira_service.rb'
+    - 'db/migrate/20161017125927_add_unique_index_to_labels.rb'
+    - 'features/steps/groups.rb'
+    - 'features/steps/project/merge_requests.rb'
+    - 'lib/banzai/filter/abstract_reference_filter.rb'
+    - 'lib/ci/gitlab_ci_yaml_processor.rb'
+    - 'lib/gitlab/google_code_import/importer.rb'
+    - 'spec/lib/banzai/filter/issue_reference_filter_spec.rb'
+    - 'spec/models/project_services/hipchat_service_spec.rb'
 
-# Offense count: 33
+# Offense count: 52
 # Cop supports --auto-correct.
 # Configuration parameters: IgnoredMethods.
 # IgnoredMethods: respond_to, define_method
@@ -474,18 +825,23 @@ Style/SymbolProc:
 # Offense count: 5
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle, SupportedStyles, AllowSafeAssignment.
-# SupportedStyles: require_parentheses, require_no_parentheses
+# SupportedStyles: require_parentheses, require_no_parentheses, require_parentheses_when_complex
 Style/TernaryParentheses:
-  Enabled: false
+  Exclude:
+    - 'features/support/capybara.rb'
+    - 'lib/api/projects.rb'
+    - 'lib/banzai/filter/table_of_contents_filter.rb'
+    - 'lib/gitlab/ci/build/artifacts/metadata/entry.rb'
+    - 'spec/support/capybara.rb'
 
-# Offense count: 29
+# Offense count: 35
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyleForMultiline, SupportedStyles.
 # SupportedStyles: comma, consistent_comma, no_comma
 Style/TrailingCommaInArguments:
   Enabled: false
 
-# Offense count: 102
+# Offense count: 149
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyleForMultiline, SupportedStyles.
 # SupportedStyles: comma, consistent_comma, no_comma
@@ -496,31 +852,62 @@ Style/TrailingCommaInLiteral:
 # Cop supports --auto-correct.
 # Configuration parameters: AllowNamedUnderscoreVariables.
 Style/TrailingUnderscoreVariable:
-  Enabled: false
+  Exclude:
+    - 'app/controllers/admin/background_jobs_controller.rb'
+    - 'app/controllers/invites_controller.rb'
+    - 'app/controllers/projects/git_http_client_controller.rb'
+    - 'app/helpers/tab_helper.rb'
+    - 'lib/gitlab/git/repository.rb'
+    - 'lib/gitlab/logger.rb'
 
-# Offense count: 76
+# Offense count: 66
 # Cop supports --auto-correct.
 Style/TrailingWhitespace:
   Enabled: false
 
-# Offense count: 2
+# Offense count: 3
 # Cop supports --auto-correct.
 # Configuration parameters: ExactNameMatch, AllowPredicates, AllowDSLWriters, IgnoreClassMethods, Whitelist.
 # Whitelist: to_ary, to_a, to_c, to_enum, to_h, to_hash, to_i, to_int, to_io, to_open, to_path, to_proc, to_r, to_regexp, to_str, to_s, to_sym
 Style/TrivialAccessors:
-  Enabled: false
+  Exclude:
+    - 'app/models/external_issue.rb'
+    - 'app/serializers/base_serializer.rb'
+    - 'lib/gitlab/ldap/person.rb'
 
 # Offense count: 2
 # Cop supports --auto-correct.
 Style/UnlessElse:
-  Enabled: false
+  Exclude:
+    - 'lib/gitlab/project_search_results.rb'
+    - 'spec/features/issues/award_emoji_spec.rb'
 
-# Offense count: 14
+# Offense count: 17
 # Cop supports --auto-correct.
 Style/UnneededInterpolation:
-  Enabled: false
+  Exclude:
+    - 'app/helpers/boards_helper.rb'
+    - 'app/helpers/projects_helper.rb'
+    - 'app/helpers/search_helper.rb'
+    - 'app/helpers/time_helper.rb'
+    - 'app/models/merge_request.rb'
+    - 'app/models/project_services/pushover_service.rb'
+    - 'features/steps/project/forked_merge_requests.rb'
+    - 'spec/features/admin/admin_projects_spec.rb'
+    - 'spec/features/issues_spec.rb'
+    - 'spec/features/projects/branches_spec.rb'
+    - 'spec/features/projects/issuable_templates_spec.rb'
+    - 'spec/lib/banzai/filter/issue_reference_filter_spec.rb'
+    - 'spec/views/projects/commit/_commit_box.html.haml_spec.rb'
 
 # Offense count: 8
 # Cop supports --auto-correct.
 Style/ZeroLengthPredicate:
-  Enabled: false
+  Exclude:
+    - 'app/models/deploy_key.rb'
+    - 'app/models/merge_request.rb'
+    - 'app/models/network/commit.rb'
+    - 'app/models/network/graph.rb'
+    - 'app/models/project_services/asana_service.rb'
+    - 'app/models/repository.rb'
+    - 'lib/extracts_path.rb'
diff --git a/Gemfile b/Gemfile
index 2e8ad75fd715ef9440f049d3eab77b9887612d8c..29695c08e4571885efab23fc610b7c9b57032751 100644
--- a/Gemfile
+++ b/Gemfile
@@ -296,8 +296,8 @@ group :development, :test do
   gem 'spring-commands-spinach',  '~> 1.1.0'
   gem 'spring-commands-teaspoon', '~> 0.0.2'
 
-  gem 'rubocop', '~> 0.43.0', require: false
-  gem 'rubocop-rspec', '~> 1.5.0', require: false
+  gem 'rubocop', '~> 0.46.0', require: false
+  gem 'rubocop-rspec', '~> 1.9.1', require: false
   gem 'scss_lint', '~> 0.47.0', require: false
   gem 'haml_lint', '~> 0.18.2', require: false
   gem 'simplecov', '0.12.0', require: false
diff --git a/Gemfile.lock b/Gemfile.lock
index c99313163a477c531313c3bb55ccb19187590c18..b042e4b1b09249fc77780255b8326fb3d7574542 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -614,14 +614,14 @@ GEM
     rspec-retry (0.4.5)
       rspec-core
     rspec-support (3.5.0)
-    rubocop (0.43.0)
+    rubocop (0.46.0)
       parser (>= 2.3.1.1, < 3.0)
       powerpack (~> 0.1)
       rainbow (>= 1.99.1, < 3.0)
       ruby-progressbar (~> 1.7)
       unicode-display_width (~> 1.0, >= 1.0.1)
-    rubocop-rspec (1.5.0)
-      rubocop (>= 0.40.0)
+    rubocop-rspec (1.9.1)
+      rubocop (>= 0.42.0)
     ruby-fogbugz (0.2.1)
       crack (~> 0.4)
     ruby-prof (0.16.2)
@@ -933,7 +933,7 @@ DEPENDENCIES
   rspec-rails (~> 3.5.0)
   rspec-retry (~> 0.4.5)
   rubocop (~> 0.43.0)
-  rubocop-rspec (~> 1.5.0)
+  rubocop-rspec (~> 1.9.1)
   ruby-fogbugz (~> 0.2.1)
   ruby-prof (~> 0.16.2)
   rugged (~> 0.24.0)