Commit 863f3873 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'rubycop-improvements' into 'master'

Rubycop improvements

See merge request !1463
parents 8c577a57 61cc6a92
Style/AccessModifierIndentation: Style/AccessModifierIndentation:
Description: Check indentation of private/protected visibility modifiers. Description: Check indentation of private/protected visibility modifiers.
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#indent-public-private-protected' StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#indent-public-private-protected'
Enabled: false Enabled: true
Style/AccessorMethodName: Style/AccessorMethodName:
Description: Check the naming of accessor methods for get_/set_. Description: Check the naming of accessor methods for get_/set_.
...@@ -10,20 +10,20 @@ Style/AccessorMethodName: ...@@ -10,20 +10,20 @@ Style/AccessorMethodName:
Style/Alias: Style/Alias:
Description: 'Use alias_method instead of alias.' Description: 'Use alias_method instead of alias.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#alias-method' StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#alias-method'
Enabled: false Enabled: true
Style/AlignArray: Style/AlignArray:
Description: >- Description: >-
Align the elements of an array literal if they span more than Align the elements of an array literal if they span more than
one line. one line.
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#align-multiline-arrays' StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#align-multiline-arrays'
Enabled: false Enabled: true
Style/AlignHash: Style/AlignHash:
Description: >- Description: >-
Align the elements of a hash literal if they span more than Align the elements of a hash literal if they span more than
one line. one line.
Enabled: false Enabled: true
Style/AlignParameters: Style/AlignParameters:
Description: >- Description: >-
...@@ -45,12 +45,12 @@ Style/ArrayJoin: ...@@ -45,12 +45,12 @@ Style/ArrayJoin:
Style/AsciiComments: Style/AsciiComments:
Description: 'Use only ascii symbols in comments.' Description: 'Use only ascii symbols in comments.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#english-comments' StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#english-comments'
Enabled: false Enabled: true
Style/AsciiIdentifiers: Style/AsciiIdentifiers:
Description: 'Use only ascii symbols in identifiers.' Description: 'Use only ascii symbols in identifiers.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#english-identifiers' StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#english-identifiers'
Enabled: false Enabled: true
Style/Attr: Style/Attr:
Description: 'Checks for uses of Module#attr.' Description: 'Checks for uses of Module#attr.'
...@@ -60,7 +60,7 @@ Style/Attr: ...@@ -60,7 +60,7 @@ Style/Attr:
Style/BeginBlock: Style/BeginBlock:
Description: 'Avoid the use of BEGIN blocks.' Description: 'Avoid the use of BEGIN blocks.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-BEGIN-blocks' StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-BEGIN-blocks'
Enabled: false Enabled: true
Style/BarePercentLiterals: Style/BarePercentLiterals:
Description: 'Checks if usage of %() or %Q() matches configuration.' Description: 'Checks if usage of %() or %Q() matches configuration.'
...@@ -74,7 +74,7 @@ Style/BlockComments: ...@@ -74,7 +74,7 @@ Style/BlockComments:
Style/BlockEndNewline: Style/BlockEndNewline:
Description: 'Put end statement of multiline block on its own line.' Description: 'Put end statement of multiline block on its own line.'
Enabled: false Enabled: true
Style/Blocks: Style/Blocks:
Description: >- Description: >-
...@@ -82,7 +82,7 @@ Style/Blocks: ...@@ -82,7 +82,7 @@ Style/Blocks:
always ugly). always ugly).
Prefer {...} over do...end for single-line blocks. Prefer {...} over do...end for single-line blocks.
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#single-line-blocks' StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#single-line-blocks'
Enabled: false Enabled: true
Style/BracesAroundHashParameters: Style/BracesAroundHashParameters:
Description: 'Enforce braces style around hash parameters.' Description: 'Enforce braces style around hash parameters.'
...@@ -96,17 +96,17 @@ Style/CaseEquality: ...@@ -96,17 +96,17 @@ Style/CaseEquality:
Style/CaseIndentation: Style/CaseIndentation:
Description: 'Indentation of when in a case/when/[else/]end.' Description: 'Indentation of when in a case/when/[else/]end.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#indent-when-to-case' StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#indent-when-to-case'
Enabled: false Enabled: true
Style/CharacterLiteral: Style/CharacterLiteral:
Description: 'Checks for uses of character literals.' Description: 'Checks for uses of character literals.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-character-literals' StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-character-literals'
Enabled: false Enabled: true
Style/ClassAndModuleCamelCase: Style/ClassAndModuleCamelCase:
Description: 'Use CamelCase for classes and modules.' Description: 'Use CamelCase for classes and modules.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#camelcase-classes' StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#camelcase-classes'
Enabled: false Enabled: true
Style/ClassAndModuleChildren: Style/ClassAndModuleChildren:
Description: 'Checks style of children classes and modules.' Description: 'Checks style of children classes and modules.'
...@@ -124,7 +124,7 @@ Style/ClassMethods: ...@@ -124,7 +124,7 @@ Style/ClassMethods:
Style/ClassVars: Style/ClassVars:
Description: 'Avoid the use of class variables.' Description: 'Avoid the use of class variables.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-class-vars' StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-class-vars'
Enabled: false Enabled: true
Style/ColonMethodCall: Style/ColonMethodCall:
Description: 'Do not use :: for method call.' Description: 'Do not use :: for method call.'
...@@ -140,12 +140,12 @@ Style/CommentAnnotation: ...@@ -140,12 +140,12 @@ Style/CommentAnnotation:
Style/CommentIndentation: Style/CommentIndentation:
Description: 'Indentation of comments.' Description: 'Indentation of comments.'
Enabled: false Enabled: true
Style/ConstantName: Style/ConstantName:
Description: 'Constants should use SCREAMING_SNAKE_CASE.' Description: 'Constants should use SCREAMING_SNAKE_CASE.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#screaming-snake-case' StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#screaming-snake-case'
Enabled: false Enabled: true
Style/DefWithParentheses: Style/DefWithParentheses:
Description: 'Use def with parentheses when there are arguments.' Description: 'Use def with parentheses when there are arguments.'
...@@ -177,7 +177,7 @@ Style/EachWithObject: ...@@ -177,7 +177,7 @@ Style/EachWithObject:
Style/ElseAlignment: Style/ElseAlignment:
Description: 'Align elses and elsifs correctly.' Description: 'Align elses and elsifs correctly.'
Enabled: false Enabled: true
Style/EmptyElse: Style/EmptyElse:
Description: 'Avoid empty else-clauses.' Description: 'Avoid empty else-clauses.'
...@@ -283,12 +283,12 @@ Style/IfWithSemicolon: ...@@ -283,12 +283,12 @@ Style/IfWithSemicolon:
Style/IndentationConsistency: Style/IndentationConsistency:
Description: 'Keep indentation straight.' Description: 'Keep indentation straight.'
Enabled: false Enabled: true
Style/IndentationWidth: Style/IndentationWidth:
Description: 'Use 2 spaces for indentation.' Description: 'Use 2 spaces for indentation.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#spaces-indentation' StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#spaces-indentation'
Enabled: false Enabled: true
Style/IndentArray: Style/IndentArray:
Description: >- Description: >-
...@@ -657,7 +657,7 @@ Style/Tab: ...@@ -657,7 +657,7 @@ Style/Tab:
Style/TrailingBlankLines: Style/TrailingBlankLines:
Description: 'Checks trailing blank lines and final newline.' Description: 'Checks trailing blank lines and final newline.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#newline-eof' StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#newline-eof'
Enabled: false Enabled: true
Style/TrailingComma: Style/TrailingComma:
Description: 'Checks for trailing comma in parameter lists and literals.' Description: 'Checks for trailing comma in parameter lists and literals.'
...@@ -909,7 +909,7 @@ Lint/StringConversionInInterpolation: ...@@ -909,7 +909,7 @@ Lint/StringConversionInInterpolation:
Lint/UnderscorePrefixedVariableName: Lint/UnderscorePrefixedVariableName:
Description: 'Do not use prefix `_` for a variable that is used.' Description: 'Do not use prefix `_` for a variable that is used.'
Enabled: false Enabled: true
Lint/UnusedBlockArgument: Lint/UnusedBlockArgument:
Description: 'Checks for unused block arguments.' Description: 'Checks for unused block arguments.'
...@@ -966,11 +966,11 @@ Rails/Delegate: ...@@ -966,11 +966,11 @@ Rails/Delegate:
Rails/HasAndBelongsToMany: Rails/HasAndBelongsToMany:
Description: 'Prefer has_many :through to has_and_belongs_to_many.' Description: 'Prefer has_many :through to has_and_belongs_to_many.'
Enabled: false Enabled: true
Rails/Output: Rails/Output:
Description: 'Checks for calls to puts, print, etc.' Description: 'Checks for calls to puts, print, etc.'
Enabled: false Enabled: true
Rails/ReadWriteAttribute: Rails/ReadWriteAttribute:
Description: >- Description: >-
...@@ -991,6 +991,7 @@ Rails/Validation: ...@@ -991,6 +991,7 @@ Rails/Validation:
# #
# #
AllCops: AllCops:
RunRailsCops: true
Exclude: Exclude:
- 'spec/**/*' - 'spec/**/*'
- 'features/**/*' - 'features/**/*'
...@@ -1000,3 +1001,6 @@ AllCops: ...@@ -1000,3 +1001,6 @@ AllCops:
- 'bin/**/*' - 'bin/**/*'
- 'lib/backup/**/*' - 'lib/backup/**/*'
- 'lib/tasks/**/*' - 'lib/tasks/**/*'
- 'lib/email_validator.rb'
- 'lib/gitlab/upgrader.rb'
- 'lib/gitlab/seeder.rb'
...@@ -15,4 +15,3 @@ class NamespacesController < ApplicationController ...@@ -15,4 +15,3 @@ class NamespacesController < ApplicationController
end end
end end
end end
...@@ -59,8 +59,7 @@ class Projects::BlobController < Projects::ApplicationController ...@@ -59,8 +59,7 @@ class Projects::BlobController < Projects::ApplicationController
def preview def preview
@content = params[:content] @content = params[:content]
diffy = Diffy::Diff.new(@blob.data, @content, diff: '-U 3', diffy = Diffy::Diff.new(@blob.data, @content, diff: '-U 3', include_diff_info: true)
include_diff_info: true)
@diff_lines = Gitlab::Diff::Parser.new.parse(diffy.diff.scan(/.*\n/)) @diff_lines = Gitlab::Diff::Parser.new.parse(diffy.diff.scan(/.*\n/))
render layout: false render layout: false
......
...@@ -35,4 +35,3 @@ class Projects::RawController < Projects::ApplicationController ...@@ -35,4 +35,3 @@ class Projects::RawController < Projects::ApplicationController
end end
end end
end end
...@@ -31,10 +31,10 @@ class Projects::RefsController < Projects::ApplicationController ...@@ -31,10 +31,10 @@ class Projects::RefsController < Projects::ApplicationController
def logs_tree def logs_tree
@offset = if params[:offset].present? @offset = if params[:offset].present?
params[:offset].to_i params[:offset].to_i
else else
0 0
end end
@limit = 25 @limit = 25
......
...@@ -16,16 +16,16 @@ class Projects::WikisController < Projects::ApplicationController ...@@ -16,16 +16,16 @@ class Projects::WikisController < Projects::ApplicationController
if @page if @page
render 'show' render 'show'
elsif file = @project_wiki.find_file(params[:id], params[:version_id]) elsif file = @project_wiki.find_file(params[:id], params[:version_id])
if file.on_disk? if file.on_disk?
send_file file.on_disk_path, disposition: 'inline' send_file file.on_disk_path, disposition: 'inline'
else else
send_data( send_data(
file.raw_data, file.raw_data,
type: file.mime_type, type: file.mime_type,
disposition: 'inline', disposition: 'inline',
filename: file.name filename: file.name
) )
end end
else else
return render('empty') unless can?(current_user, :write_wiki, @project) return render('empty') unless can?(current_user, :write_wiki, @project)
@page = WikiPage.new(@project_wiki) @page = WikiPage.new(@project_wiki)
......
...@@ -7,18 +7,19 @@ class NotesFinder ...@@ -7,18 +7,19 @@ class NotesFinder
# Default to 0 to remain compatible with old clients # Default to 0 to remain compatible with old clients
last_fetched_at = Time.at(params.fetch(:last_fetched_at, 0).to_i) last_fetched_at = Time.at(params.fetch(:last_fetched_at, 0).to_i)
notes = case target_type notes =
when "commit" case target_type
project.notes.for_commit_id(target_id).not_inline.fresh when "commit"
when "issue" project.notes.for_commit_id(target_id).not_inline.fresh
project.issues.find(target_id).notes.inc_author.fresh when "issue"
when "merge_request" project.issues.find(target_id).notes.inc_author.fresh
project.merge_requests.find(target_id).mr_and_commit_notes.inc_author.fresh when "merge_request"
when "snippet", "project_snippet" project.merge_requests.find(target_id).mr_and_commit_notes.inc_author.fresh
project.snippets.find(target_id).notes.fresh when "snippet", "project_snippet"
else project.snippets.find(target_id).notes.fresh
raise 'invalid target_type' else
end raise 'invalid target_type'
end
# Use overlapping intervals to avoid worrying about race conditions # Use overlapping intervals to avoid worrying about race conditions
notes.where('updated_at > ?', last_fetched_at - FETCH_OVERLAP) notes.where('updated_at > ?', last_fetched_at - FETCH_OVERLAP)
......
...@@ -40,7 +40,7 @@ class SnippetsFinder ...@@ -40,7 +40,7 @@ class SnippetsFinder
when 'are_public' then when 'are_public' then
snippets.are_public snippets.are_public
else else
snippets snippets
end end
else else
snippets.public_and_internal snippets.public_and_internal
......
...@@ -75,10 +75,10 @@ module ApplicationHelper ...@@ -75,10 +75,10 @@ module ApplicationHelper
options[:class] ||= '' options[:class] ||= ''
options[:class] << ' identicon' options[:class] << ' identicon'
bg_key = project.id % 7 bg_key = project.id % 7
style = "background-color: ##{ allowed_colors.values[bg_key] }; color: #555"
content_tag(:div, class: options[:class], content_tag(:div, class: options[:class], style: style) do
style: "background-color: ##{ allowed_colors.values[bg_key] }; color: #555") do project.name[0, 1].upcase
project.name[0, 1].upcase
end end
end end
......
...@@ -112,12 +112,13 @@ module CommitsHelper ...@@ -112,12 +112,13 @@ module CommitsHelper
person_name = user.nil? ? source_name : user.name person_name = user.nil? ? source_name : user.name
person_email = user.nil? ? source_email : user.email person_email = user.nil? ? source_email : user.email
text = if options[:avatar] text =
avatar = image_tag(avatar_icon(person_email, options[:size]), class: "avatar #{"s#{options[:size]}" if options[:size]}", width: options[:size], alt: "") if options[:avatar]
%Q{#{avatar} <span class="commit-#{options[:source]}-name">#{person_name}</span>} avatar = image_tag(avatar_icon(person_email, options[:size]), class: "avatar #{"s#{options[:size]}" if options[:size]}", width: options[:size], alt: "")
else %Q{#{avatar} <span class="commit-#{options[:source]}-name">#{person_name}</span>}
person_name else
end person_name
end
options = { options = {
class: "commit-#{options[:source]}-link has_tooltip", class: "commit-#{options[:source]}-link has_tooltip",
......
module NotesHelper module NotesHelper
# Helps to distinguish e.g. commit notes in mr notes list # Helps to distinguish e.g. commit notes in mr notes list
def note_for_main_target?(note) def note_for_main_target?(note)
(@noteable.class.name == note.noteable_type && !note.for_diff_line?) (@noteable.class.name == note.noteable_type && !note.for_diff_line?)
end end
......
...@@ -254,4 +254,3 @@ module ProjectsHelper ...@@ -254,4 +254,3 @@ module ProjectsHelper
enabled_oauth_providers.include?(:github) enabled_oauth_providers.include?(:github)
end end
end end
...@@ -90,7 +90,7 @@ module TabHelper ...@@ -90,7 +90,7 @@ module TabHelper
return "active" if current_page?(controller: "/projects", action: :edit, id: @project) return "active" if current_page?(controller: "/projects", action: :edit, id: @project)
if ['services', 'hooks', 'deploy_keys', 'team_members', 'protected_branches'].include? controller.controller_name if ['services', 'hooks', 'deploy_keys', 'team_members', 'protected_branches'].include? controller.controller_name
"active" "active"
end end
end end
......
...@@ -14,7 +14,8 @@ ...@@ -14,7 +14,8 @@
# #
class ApplicationSetting < ActiveRecord::Base class ApplicationSetting < ActiveRecord::Base
validates :home_page_url, allow_blank: true, validates :home_page_url,
allow_blank: true,
format: { with: URI::regexp(%w(http https)), message: "should be a valid url" }, format: { with: URI::regexp(%w(http https)), message: "should be a valid url" },
if: :home_page_url_column_exist if: :home_page_url_column_exist
......
...@@ -88,11 +88,12 @@ class Commit ...@@ -88,11 +88,12 @@ class Commit
# cut off, ellipses (`&hellp;`) are prepended to the commit message. # cut off, ellipses (`&hellp;`) are prepended to the commit message.
def description def description
title_end = safe_message.index("\n") title_end = safe_message.index("\n")
@description ||= if (!title_end && safe_message.length > 100) || (title_end && title_end > 100) @description ||=
"&hellip;".html_safe << safe_message[80..-1] if (!title_end && safe_message.length > 100) || (title_end && title_end > 100)
else "&hellip;".html_safe << safe_message[80..-1]
safe_message.split("\n", 2)[1].try(:chomp) else
end safe_message.split("\n", 2)[1].try(:chomp)
end
end end
def description? def description?
......
...@@ -20,15 +20,20 @@ class Namespace < ActiveRecord::Base ...@@ -20,15 +20,20 @@ class Namespace < ActiveRecord::Base
belongs_to :owner, class_name: "User" belongs_to :owner, class_name: "User"
validates :owner, presence: true, unless: ->(n) { n.type == "Group" } validates :owner, presence: true, unless: ->(n) { n.type == "Group" }
validates :name, presence: true, uniqueness: true, validates :name,
length: { within: 0..255 }, presence: true, uniqueness: true,
format: { with: Gitlab::Regex.name_regex, length: { within: 0..255 },
message: Gitlab::Regex.name_regex_message } format: { with: Gitlab::Regex.name_regex,
message: Gitlab::Regex.name_regex_message }
validates :description, length: { within: 0..255 } validates :description, length: { within: 0..255 }
validates :path, uniqueness: { case_sensitive: false }, presence: true, length: { within: 1..255 }, validates :path,
exclusion: { in: Gitlab::Blacklist.path }, uniqueness: { case_sensitive: false },
format: { with: Gitlab::Regex.path_regex, presence: true,
message: Gitlab::Regex.path_regex_message } length: { within: 1..255 },
exclusion: { in: Gitlab::Blacklist.path },
format: { with: Gitlab::Regex.path_regex,
message: Gitlab::Regex.path_regex_message }
delegate :name, to: :owner, allow_nil: true, prefix: true delegate :name, to: :owner, allow_nil: true, prefix: true
......
...@@ -108,13 +108,17 @@ class Project < ActiveRecord::Base ...@@ -108,13 +108,17 @@ class Project < ActiveRecord::Base
# Validations # Validations
validates :creator, presence: true, on: :create validates :creator, presence: true, on: :create
validates :description, length: { maximum: 2000 }, allow_blank: true validates :description, length: { maximum: 2000 }, allow_blank: true
validates :name, presence: true, length: { within: 0..255 }, validates :name,
format: { with: Gitlab::Regex.project_name_regex, presence: true,
message: Gitlab::Regex.project_regex_message } length: { within: 0..255 },
validates :path, presence: true, length: { within: 0..255 }, format: { with: Gitlab::Regex.project_name_regex,
exclusion: { in: Gitlab::Blacklist.path }, message: Gitlab::Regex.project_regex_message }
format: { with: Gitlab::Regex.path_regex, validates :path,
message: Gitlab::Regex.path_regex_message } presence: true,
length: { within: 0..255 },
exclusion: { in: Gitlab::Blacklist.path },
format: { with: Gitlab::Regex.path_regex,
message: Gitlab::Regex.path_regex_message }
validates :issues_enabled, :merge_requests_enabled, validates :issues_enabled, :merge_requests_enabled,
:wiki_enabled, inclusion: { in: [true, false] } :wiki_enabled, inclusion: { in: [true, false] }
validates :visibility_level, validates :visibility_level,
......
...@@ -17,13 +17,19 @@ class BambooService < CiService ...@@ -17,13 +17,19 @@ class BambooService < CiService
prop_accessor :bamboo_url, :build_key, :username, :password prop_accessor :bamboo_url, :build_key, :username, :password
validates :bamboo_url, presence: true, validates :bamboo_url,
format: { with: URI::regexp }, if: :activated? presence: true,
format: { with: URI::regexp },
if: :activated?
validates :build_key, presence: true, if: :activated? validates :build_key, presence: true, if: :activated?
validates :username, presence: true, validates :username,
if: ->(service) { service.password? }, if: :activated? presence: true,
validates :password, presence: true, if: ->(service) { service.password? },
if: ->(service) { service.username? }, if: :activated? if: :activated?
validates :password,
presence: true,
if: ->(service) { service.username? },
if: :activated?
attr_accessor :response attr_accessor :response
......
...@@ -17,13 +17,16 @@ class TeamcityService < CiService ...@@ -17,13 +17,16 @@ class TeamcityService < CiService
prop_accessor :teamcity_url, :build_type, :username, :password prop_accessor :teamcity_url, :build_type, :username, :password
validates :teamcity_url, presence: true, validates :teamcity_url,
format: { with: URI::regexp }, if: :activated? presence: true,
format: { with: URI::regexp }, if: :activated?
validates :build_type, presence: true, if: :activated? validates :build_type, presence: true, if: :activated?
validates :username, presence: true, validates :username,
if: ->(service) { service.password? }, if: :activated? presence: true,
validates :password, presence: true, if: ->(service) { service.password? }, if: :activated?
if: ->(service) { service.username? }, if: :activated? validates :password,
presence: true,
if: ->(service) { service.username? }, if: :activated?
attr_accessor :response attr_accessor :response
......
...@@ -29,9 +29,11 @@ class Snippet < ActiveRecord::Base ...@@ -29,9 +29,11 @@ class Snippet < ActiveRecord::Base
validates :author, presence: true validates :author, presence: true
validates :title, presence: true, length: { within: 0..255 } validates :title, presence: true, length: { within: 0..255 }
validates :file_name, presence: true, length: { within: 0..255 }, validates :file_name,
format: { with: Gitlab::Regex.path_regex, presence: true,
message: Gitlab::Regex.path_regex_message } length: { within: 0..255 },
format: { with: Gitlab::Regex.path_regex,
message: Gitlab::Regex.path_regex_message }
validates :content, presence: true validates :content, presence: true
validates :visibility_level, inclusion: { in: Gitlab::VisibilityLevel.values } validates :visibility_level, inclusion: { in: Gitlab::VisibilityLevel.values }
......
...@@ -116,10 +116,12 @@ class User < ActiveRecord::Base ...@@ -116,10 +116,12 @@ class User < ActiveRecord::Base
validates :email, presence: true, email: { strict_mode: true }, uniqueness: true validates :email, presence: true, email: { strict_mode: true }, uniqueness: true
validates :bio, length: { maximum: 255 }, allow_blank: true validates :bio, length: { maximum: 255 }, allow_blank: true
validates :projects_limit, presence: true, numericality: { greater_than_or_equal_to: 0 } validates :projects_limit, presence: true, numericality: { greater_than_or_equal_to: 0 }
validates :username, presence: true, uniqueness: { case_sensitive: false }, validates :username,
exclusion: { in: Gitlab::Blacklist.path }, presence: true,
format: { with: Gitlab::Regex.username_regex, uniqueness: { case_sensitive: false },
message: Gitlab::Regex.username_regex_message } exclusion: { in: Gitlab::Blacklist.path },
format: { with: Gitlab::Regex.username_regex,
message: Gitlab::Regex.username_regex_message }
validates :notification_level, inclusion: { in: Notification.notification_levels }, presence: true validates :notification_level, inclusion: { in: Notification.notification_levels }, presence: true
validate :namespace_uniq, if: ->(user) { user.username_changed? } validate :namespace_uniq, if: ->(user) { user.username_changed? }
......
...@@ -43,7 +43,7 @@ class WikiPage ...@@ -43,7 +43,7 @@ class WikiPage
@attributes[:slug] @attributes[:slug]
end end
alias :to_param :slug alias_method :to_param, :slug
# The formatted title of this page. # The formatted title of this page.
def title def title
......
...@@ -38,4 +38,4 @@ module Oauth2::AccessTokenValidationService ...@@ -38,4 +38,4 @@ module Oauth2::AccessTokenValidationService
end end
end end
end end
end end
\ No newline at end of file
...@@ -14,14 +14,14 @@ module Projects ...@@ -14,14 +14,14 @@ module Projects
uploader.store!(image) uploader.store!(image)
link = { link = {
'alt' => File.basename(alt, '.*'), 'alt' => File.basename(alt, '.*'),
'url' => File.join(@root_url, uploader.url) 'url' => File.join(@root_url, uploader.url)
} }
else else
link = nil link = nil
end end
end end
protected protected
def upload_path def upload_path
base_dir = FileUploader.generate_dir base_dir = FileUploader.generate_dir
......
...@@ -5,11 +5,12 @@ module Projects ...@@ -5,11 +5,12 @@ module Projects
end end
def execute(note_type, note_id) def execute(note_type, note_id)
participating = if note_type && note_id participating =
participants_in(note_type, note_id) if note_type && note_id
else participants_in(note_type, note_id)
[] else
end []
end
team_members = sorted(@project.team.members) team_members = sorted(@project.team.members)
participants = all_members + team_members + participating participants = all_members + team_members + participating
participants.uniq participants.uniq
......
...@@ -9,4 +9,4 @@ if Gitlab::LDAP::Config.enabled? ...@@ -9,4 +9,4 @@ if Gitlab::LDAP::Config.enabled?
server = Gitlab.config.ldap.servers.values.first server = Gitlab.config.ldap.servers.values.first
alias_method server['provider_name'], :ldap alias_method server['provider_name'], :ldap
end end
end end
\ No newline at end of file
...@@ -42,11 +42,12 @@ module ActsAsTaggableOn::Taggable ...@@ -42,11 +42,12 @@ module ActsAsTaggableOn::Taggable
elsif options.delete(:any) elsif options.delete(:any)
# get tags, drop out if nothing returned (we need at least one) # get tags, drop out if nothing returned (we need at least one)
tags = if options.delete(:wild) tags =
ActsAsTaggableOn::Tag.named_like_any(tag_list) if options.delete(:wild)
else ActsAsTaggableOn::Tag.named_like_any(tag_list)
ActsAsTaggableOn::Tag.named_any(tag_list) else
end ActsAsTaggableOn::Tag.named_any(tag_list)
end
return empty_result unless tags.length > 0 return empty_result unless tags.length > 0
...@@ -68,12 +69,12 @@ module ActsAsTaggableOn::Taggable ...@@ -68,12 +69,12 @@ module ActsAsTaggableOn::Taggable
select_clause = "DISTINCT #{table_name}.*" unless context and tag_types.one? select_clause = "DISTINCT #{table_name}.*" unless context and tag_types.one?
if owned_by if owned_by
tagging_join << " AND " + tagging_join << " AND " +
sanitize_sql([ sanitize_sql([
"#{taggings_alias}.tagger_id = ? AND #{taggings_alias}.tagger_type = ?", "#{taggings_alias}.tagger_id = ? AND #{taggings_alias}.tagger_type = ?",
owned_by.id, owned_by.id,
owned_by.class.base_class.to_s owned_by.class.base_class.to_s
]) ])
end end
joins << tagging_join joins << tagging_join
...@@ -92,12 +93,12 @@ module ActsAsTaggableOn::Taggable ...@@ -92,12 +93,12 @@ module ActsAsTaggableOn::Taggable
tagging_join << " AND " + sanitize_sql(["#{taggings_alias}.context = ?", context.to_s]) if context tagging_join << " AND " + sanitize_sql(["#{taggings_alias}.context = ?", context.to_s]) if context
if owned_by if owned_by
tagging_join << " AND " + tagging_join << " AND " +
sanitize_sql([ sanitize_sql([
"#{taggings_alias}.tagger_id = ? AND #{taggings_alias}.tagger_type = ?", "#{taggings_alias}.tagger_id = ? AND #{taggings_alias}.tagger_type = ?",
owned_by.id, owned_by.id,
owned_by.class.base_class.to_s owned_by.class.base_class.to_s
]) ])
end end
joins << tagging_join joins << tagging_join
......
...@@ -12,11 +12,19 @@ if File.exists?(aws_file) ...@@ -12,11 +12,19 @@ if File.exists?(aws_file)
aws_secret_access_key: AWS_CONFIG['secret_access_key'], # required aws_secret_access_key: AWS_CONFIG['secret_access_key'], # required
region: AWS_CONFIG['region'], # optional, defaults to 'us-east-1' region: AWS_CONFIG['region'], # optional, defaults to 'us-east-1'
} }
config.fog_directory = AWS_CONFIG['bucket'] # required
config.fog_public = false # optional, defaults to true # required
config.fog_attributes = { 'Cache-Control'=>'max-age=315576000' } # optional, defaults to {} config.fog_directory = AWS_CONFIG['bucket']
config.fog_authenticated_url_expiration = 1 << 29 # optional time (in seconds) that authenticated urls will be valid.
# when fog_public is false and provider is AWS or Google, defaults to 600 # optional, defaults to true
config.fog_public = false
# optional, defaults to {}
config.fog_attributes = { 'Cache-Control'=>'max-age=315576000' }
# optional time (in seconds) that authenticated urls will be valid.
# when fog_public is false and provider is AWS or Google, defaults to 600
config.fog_authenticated_url_expiration = 1 << 29
end end
# Mocking Fog requests, based on: https://github.com/carrierwaveuploader/carrierwave/wiki/How-to%3A-Test-Fog-based-uploaders # Mocking Fog requests, based on: https://github.com/carrierwaveuploader/carrierwave/wiki/How-to%3A-Test-Fog-based-uploaders
......
...@@ -16,4 +16,4 @@ end ...@@ -16,4 +16,4 @@ end
if File.exist?(Gitlab.config.gitlab_shell.path) && !File.exist?(gitlab_shell_symlink) if File.exist?(Gitlab.config.gitlab_shell.path) && !File.exist?(gitlab_shell_symlink)
FileUtils.symlink(secret_file, gitlab_shell_symlink) FileUtils.symlink(secret_file, gitlab_shell_symlink)
end end
\ No newline at end of file
...@@ -294,12 +294,10 @@ Gitlab::Application.routes.draw do ...@@ -294,12 +294,10 @@ Gitlab::Application.routes.draw do
member do member do
# tree viewer logs # tree viewer logs
get 'logs_tree', constraints: { id: Gitlab::Regex.git_reference_regex } get 'logs_tree', constraints: { id: Gitlab::Regex.git_reference_regex }
get 'logs_tree/:path' => 'refs#logs_tree', get 'logs_tree/:path' => 'refs#logs_tree', as: :logs_file, constraints: {
as: :logs_file, id: Gitlab::Regex.git_reference_regex,
constraints: { path: /.*/
id: Gitlab::Regex.git_reference_regex, }
path: /.*/
}
end end
end end
......
...@@ -47,16 +47,12 @@ module APIGuard ...@@ -47,16 +47,12 @@ module APIGuard
case validate_access_token(access_token, scopes) case validate_access_token(access_token, scopes)
when Oauth2::AccessTokenValidationService::INSUFFICIENT_SCOPE when Oauth2::AccessTokenValidationService::INSUFFICIENT_SCOPE
raise InsufficientScopeError.new(scopes) raise InsufficientScopeError.new(scopes)
when Oauth2::AccessTokenValidationService::EXPIRED when Oauth2::AccessTokenValidationService::EXPIRED
raise ExpiredError raise ExpiredError
when Oauth2::AccessTokenValidationService::REVOKED when Oauth2::AccessTokenValidationService::REVOKED
raise RevokedError raise RevokedError
when Oauth2::AccessTokenValidationService::VALID when Oauth2::AccessTokenValidationService::VALID
@current_user = User.find(access_token.resource_owner_id) @current_user = User.find(access_token.resource_owner_id)
end end
end end
end end
...@@ -120,8 +116,9 @@ module APIGuard ...@@ -120,8 +116,9 @@ module APIGuard
end end
def oauth2_bearer_token_error_handler def oauth2_bearer_token_error_handler
Proc.new {|e| Proc.new do |e|
response = case e response =
case e
when MissingTokenError when MissingTokenError
Rack::OAuth2::Server::Resource::Bearer::Unauthorized.new Rack::OAuth2::Server::Resource::Bearer::Unauthorized.new
...@@ -150,7 +147,7 @@ module APIGuard ...@@ -150,7 +147,7 @@ module APIGuard
end end
response.finish response.finish
} end
end end
end end
......
module API module API
# Internal access API # Internal access API
class Internal < Grape::API class Internal < Grape::API
before { before { authenticate_by_gitlab_shell_token! }
authenticate_by_gitlab_shell_token!
}
namespace 'internal' do namespace 'internal' do
# Check if git command is allowed to project # Check if git command is allowed to project
......
module API module API
# namespaces API # namespaces API
class Namespaces < Grape::API class Namespaces < Grape::API
before { before do
authenticate! authenticate!
authenticated_as_admin! authenticated_as_admin!
} end
resource :namespaces do resource :namespaces do
# Get a namespaces list # Get a namespaces list
......
module API module API
# Hooks API # Hooks API
class SystemHooks < Grape::API class SystemHooks < Grape::API
before { before do
authenticate! authenticate!
authenticated_as_admin! authenticated_as_admin!
} end
resource :hooks do resource :hooks do
# Get the list of system hooks # Get the list of system hooks
......
# Based on https://github.com/balexand/email_validator # Based on https://github.com/balexand/email_validator
# #
# Extended to use only strict mode with following allowed characters: # Extended to use only strict mode with following allowed characters:
# ' - apostrophe # ' - apostrophe
# #
......
...@@ -9,4 +9,3 @@ module Gitlab ...@@ -9,4 +9,3 @@ module Gitlab
end end
end end
end end
...@@ -4,7 +4,7 @@ module Gitlab ...@@ -4,7 +4,7 @@ module Gitlab
include Enumerable include Enumerable
def parse(lines) def parse(lines)
@lines = lines, @lines = lines
lines_obj = [] lines_obj = []
line_obj_index = 0 line_obj_index = 0
line_old = 1 line_old = 1
...@@ -74,7 +74,7 @@ module Gitlab ...@@ -74,7 +74,7 @@ module Gitlab
def html_escape(str) def html_escape(str)
replacements = { '&' => '&amp;', '>' => '&gt;', '<' => '&lt;', '"' => '&quot;', "'" => '&#39;' } replacements = { '&' => '&amp;', '>' => '&gt;', '<' => '&lt;', '"' => '&quot;', "'" => '&#39;' }
str.gsub(/[&"'><]/, replacements) str.gsub(/[&"'><]/, replacements)
end end
end end
end end
......
...@@ -12,4 +12,3 @@ module Gitlab ...@@ -12,4 +12,3 @@ module Gitlab
end end
end end
end end
...@@ -112,14 +112,14 @@ module Gitlab ...@@ -112,14 +112,14 @@ module Gitlab
def protected_branch_action(project, oldrev, newrev, branch_name) def protected_branch_action(project, oldrev, newrev, branch_name)
# we dont allow force push to protected branch # we dont allow force push to protected branch
if forced_push?(project, oldrev, newrev) if forced_push?(project, oldrev, newrev)
:force_push_code_to_protected_branches :force_push_code_to_protected_branches
# and we dont allow remove of protected branch
elsif newrev == Gitlab::Git::BLANK_SHA elsif newrev == Gitlab::Git::BLANK_SHA
:remove_protected_branches # and we dont allow remove of protected branch
:remove_protected_branches
elsif project.developers_can_push_to_protected_branch?(branch_name) elsif project.developers_can_push_to_protected_branch?(branch_name)
:push_code :push_code
else else
:push_code_to_protected_branches :push_code_to_protected_branches
end end
end end
......
...@@ -63,8 +63,10 @@ module Gitlab ...@@ -63,8 +63,10 @@ module Gitlab
end end
def dn_matches_filter?(dn, filter) def dn_matches_filter?(dn, filter)
ldap_search(base: dn, filter: filter, ldap_search(base: dn,
scope: Net::LDAP::SearchScope_BaseObject, attributes: %w{dn}).any? filter: filter,
scope: Net::LDAP::SearchScope_BaseObject,
attributes: %w{dn}).any?
end end
def ldap_search(*args) def ldap_search(*args)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment