summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/api/deploy_keys.rb4
-rw-r--r--lib/api/entities.rb14
-rw-r--r--lib/api/files.rb10
-rw-r--r--lib/api/groups.rb6
-rw-r--r--lib/api/helpers.rb4
-rw-r--r--lib/api/merge_requests.rb2
-rw-r--r--lib/api/project_snippets.rb4
-rw-r--r--lib/api/projects.rb11
-rw-r--r--lib/api/repositories.rb24
-rw-r--r--lib/api/users.rb6
-rw-r--r--lib/gitlab/auth.rb2
-rw-r--r--lib/gitlab/backend/grack_auth.rb3
-rw-r--r--lib/gitlab/identifier.rb6
-rw-r--r--lib/gitlab/ldap/user.rb4
-rw-r--r--lib/gitlab/regex.rb7
-rw-r--r--lib/gitlab/satellite/files/edit_file_action.rb5
-rw-r--r--lib/gitlab/satellite/files/file_action.rb8
-rw-r--r--lib/gitlab/satellite/files/new_file_action.rb4
-rw-r--r--lib/gitlab/satellite/merge_action.rb44
-rw-r--r--lib/gitlab/theme.rb2
-rwxr-xr-xlib/support/init.d/gitlab2
-rwxr-xr-xlib/support/init.d/gitlab.default.example17
-rw-r--r--lib/support/nginx/gitlab4
-rw-r--r--lib/tasks/gitlab/bulk_add_permission.rake2
-rw-r--r--lib/tasks/gitlab/check.rake4
-rw-r--r--lib/tasks/gitlab/enable_namespaces.rake4
-rw-r--r--lib/tasks/gitlab/import.rake12
27 files changed, 118 insertions, 97 deletions
diff --git a/lib/api/deploy_keys.rb b/lib/api/deploy_keys.rb
index b5997608997..7f5a125038c 100644
--- a/lib/api/deploy_keys.rb
+++ b/lib/api/deploy_keys.rb
@@ -38,14 +38,14 @@ module API
attrs[:key].strip!
# check if key already exist in project
- key = user_project.deploy_keys.find_by_key(attrs[:key])
+ key = user_project.deploy_keys.find_by(key: attrs[:key])
if key
present key, with: Entities::SSHKey
return
end
# Check for available deploy keys in other projects
- key = current_user.accessible_deploy_keys.find_by_key(attrs[:key])
+ key = current_user.accessible_deploy_keys.find_by(key: attrs[:key])
if key
user_project.deploy_keys << key
present key, with: Entities::SSHKey
diff --git a/lib/api/entities.rb b/lib/api/entities.rb
index 7daf8ace242..4f636fc54a3 100644
--- a/lib/api/entities.rb
+++ b/lib/api/entities.rb
@@ -1,7 +1,7 @@
module API
module Entities
class User < Grape::Entity
- expose :id, :username, :email, :name, :bio, :skype, :linkedin, :twitter,
+ expose :id, :username, :email, :name, :bio, :skype, :linkedin, :twitter, :website_url,
:theme_id, :color_scheme_id, :state, :created_at, :extern_uid, :provider
expose :is_admin?, as: :is_admin
expose :can_create_group?, as: :can_create_group
@@ -48,19 +48,19 @@ module API
class ProjectMember < UserBasic
expose :project_access, as: :access_level do |user, options|
- options[:project].users_projects.find_by_user_id(user.id).project_access
+ options[:project].users_projects.find_by(user_id: user.id).project_access
end
end
class TeamMember < UserBasic
expose :permission, as: :access_level do |user, options|
- options[:user_team].user_team_user_relationships.find_by_user_id(user.id).permission
+ options[:user_team].user_team_user_relationships.find_by(user_id: user.id).permission
end
end
class TeamProject < Project
expose :greatest_access, as: :greatest_access_level do |project, options|
- options[:user_team].user_team_project_relationships.find_by_project_id(project.id).greatest_access
+ options[:user_team].user_team_project_relationships.find_by(project_id: project.id).greatest_access
end
end
@@ -74,7 +74,7 @@ module API
class GroupMember < UserBasic
expose :group_access, as: :access_level do |user, options|
- options[:group].users_groups.find_by_user_id(user.id).group_access
+ options[:group].users_groups.find_by(user_id: user.id).group_access
end
end
@@ -91,6 +91,10 @@ module API
expose :id, :short_id, :title, :author_name, :author_email, :created_at
end
+ class RepoCommitDetail < RepoCommit
+ expose :parent_ids, :committed_date, :authored_date
+ end
+
class ProjectSnippet < Grape::Entity
expose :id, :title, :file_name
expose :author, using: Entities::UserBasic
diff --git a/lib/api/files.rb b/lib/api/files.rb
index 6a5419a580f..213604915a6 100644
--- a/lib/api/files.rb
+++ b/lib/api/files.rb
@@ -18,10 +18,10 @@ module API
#
post ":id/repository/files" do
required_attributes! [:file_path, :branch_name, :content, :commit_message]
- attrs = attributes_for_keys [:file_path, :branch_name, :content, :commit_message]
+ attrs = attributes_for_keys [:file_path, :branch_name, :content, :commit_message, :encoding]
branch_name = attrs.delete(:branch_name)
file_path = attrs.delete(:file_path)
- result = ::Files::CreateContext.new(user_project, current_user, attrs, branch_name, file_path).execute
+ result = ::Files::CreateService.new(user_project, current_user, attrs, branch_name, file_path).execute
if result[:status] == :success
status(201)
@@ -48,10 +48,10 @@ module API
#
put ":id/repository/files" do
required_attributes! [:file_path, :branch_name, :content, :commit_message]
- attrs = attributes_for_keys [:file_path, :branch_name, :content, :commit_message]
+ attrs = attributes_for_keys [:file_path, :branch_name, :content, :commit_message, :encoding]
branch_name = attrs.delete(:branch_name)
file_path = attrs.delete(:file_path)
- result = ::Files::UpdateContext.new(user_project, current_user, attrs, branch_name, file_path).execute
+ result = ::Files::UpdateService.new(user_project, current_user, attrs, branch_name, file_path).execute
if result[:status] == :success
status(200)
@@ -81,7 +81,7 @@ module API
attrs = attributes_for_keys [:file_path, :branch_name, :commit_message]
branch_name = attrs.delete(:branch_name)
file_path = attrs.delete(:file_path)
- result = ::Files::DeleteContext.new(user_project, current_user, attrs, branch_name, file_path).execute
+ result = ::Files::DeleteService.new(user_project, current_user, attrs, branch_name, file_path).execute
if result[:status] == :success
status(200)
diff --git a/lib/api/groups.rb b/lib/api/groups.rb
index 290b78d8017..03f027706de 100644
--- a/lib/api/groups.rb
+++ b/lib/api/groups.rb
@@ -121,11 +121,11 @@ module API
render_api_error!("Wrong access level", 422)
end
group = find_group(params[:id])
- if group.users_groups.find_by_user_id(params[:user_id])
+ if group.users_groups.find_by(user_id: params[:user_id])
render_api_error!("Already exists", 409)
end
group.add_users([params[:user_id]], params[:access_level])
- member = group.users_groups.find_by_user_id(params[:user_id])
+ member = group.users_groups.find_by(user_id: params[:user_id])
present member.user, with: Entities::GroupMember, group: group
end
@@ -139,7 +139,7 @@ module API
# DELETE /groups/:id/members/:user_id
delete ":id/members/:user_id" do
group = find_group(params[:id])
- member = group.users_groups.find_by_user_id(params[:user_id])
+ member = group.users_groups.find_by(user_id: params[:user_id])
if member.nil?
render_api_error!("404 Not Found - user_id:#{params[:user_id]} not a member of group #{group.name}",404)
else
diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb
index b0f8d5a6da9..f8c48e2f3b2 100644
--- a/lib/api/helpers.rb
+++ b/lib/api/helpers.rb
@@ -7,7 +7,7 @@ module API
def current_user
private_token = (params[PRIVATE_TOKEN_PARAM] || env[PRIVATE_TOKEN_HEADER]).to_s
- @current_user ||= User.find_by_authentication_token(private_token)
+ @current_user ||= User.find_by(authentication_token: private_token)
identifier = sudo_identifier()
# If the sudo is the current user do nothing
@@ -47,7 +47,7 @@ module API
end
def find_project(id)
- project = Project.find_by_id(id) || Project.find_with_namespace(id)
+ project = Project.find_by(id: id) || Project.find_with_namespace(id)
if project && can?(current_user, :read_project, project)
project
diff --git a/lib/api/merge_requests.rb b/lib/api/merge_requests.rb
index 3f4bec895bf..cbaf22f265d 100644
--- a/lib/api/merge_requests.rb
+++ b/lib/api/merge_requests.rb
@@ -81,7 +81,7 @@ module API
merge_request.target_project = user_project
else
if target_matches_fork(target_project_id,user_project)
- merge_request.target_project = Project.find_by_id(attrs[:target_project_id])
+ merge_request.target_project = Project.find_by(id: attrs[:target_project_id])
else
render_api_error!('(Bad Request) Specified target project that is not the source project, or the source fork of the project.', 400)
end
diff --git a/lib/api/project_snippets.rb b/lib/api/project_snippets.rb
index bee6544ea3d..8e09fff6843 100644
--- a/lib/api/project_snippets.rb
+++ b/lib/api/project_snippets.rb
@@ -41,7 +41,6 @@ module API
# id (required) - The ID of a project
# title (required) - The title of a snippet
# file_name (required) - The name of a snippet file
- # lifetime (optional) - The expiration date of a snippet
# code (required) - The content of a snippet
# Example Request:
# POST /projects/:id/snippets
@@ -50,7 +49,6 @@ module API
required_attributes! [:title, :file_name, :code]
attrs = attributes_for_keys [:title, :file_name]
- attrs[:expires_at] = params[:lifetime] if params[:lifetime].present?
attrs[:content] = params[:code] if params[:code].present?
@snippet = user_project.snippets.new attrs
@snippet.author = current_user
@@ -69,7 +67,6 @@ module API
# snippet_id (required) - The ID of a project snippet
# title (optional) - The title of a snippet
# file_name (optional) - The name of a snippet file
- # lifetime (optional) - The expiration date of a snippet
# code (optional) - The content of a snippet
# Example Request:
# PUT /projects/:id/snippets/:snippet_id
@@ -78,7 +75,6 @@ module API
authorize! :modify_project_snippet, @snippet
attrs = attributes_for_keys [:title, :file_name]
- attrs[:expires_at] = params[:lifetime] if params[:lifetime].present?
attrs[:content] = params[:code] if params[:code].present?
if @snippet.update_attributes attrs
diff --git a/lib/api/projects.rb b/lib/api/projects.rb
index 003533fb59a..888aa7e77d2 100644
--- a/lib/api/projects.rb
+++ b/lib/api/projects.rb
@@ -99,9 +99,10 @@ module API
:snippets_enabled,
:namespace_id,
:public,
- :visibility_level]
+ :visibility_level,
+ :import_url]
attrs = map_public_to_visibility_level(attrs)
- @project = ::Projects::CreateContext.new(current_user, attrs).execute
+ @project = ::Projects::CreateService.new(current_user, attrs).execute
if @project.saved?
present @project, with: Entities::Project
else
@@ -142,7 +143,7 @@ module API
:public,
:visibility_level]
attrs = map_public_to_visibility_level(attrs)
- @project = ::Projects::CreateContext.new(user, attrs).execute
+ @project = ::Projects::CreateService.new(user, attrs).execute
if @project.saved?
present @project, with: Entities::Project
else
@@ -265,7 +266,7 @@ module API
authorize! :admin_project, user_project
required_attributes! [:access_level]
- team_member = user_project.users_projects.find_by_user_id(params[:user_id])
+ team_member = user_project.users_projects.find_by(user_id: params[:user_id])
not_found!("User can not be found") if team_member.nil?
if team_member.update_attributes(project_access: params[:access_level])
@@ -285,7 +286,7 @@ module API
# DELETE /projects/:id/members/:user_id
delete ":id/members/:user_id" do
authorize! :admin_project, user_project
- team_member = user_project.users_projects.find_by_user_id(params[:user_id])
+ team_member = user_project.users_projects.find_by(user_id: params[:user_id])
unless team_member.nil?
team_member.destroy
else
diff --git a/lib/api/repositories.rb b/lib/api/repositories.rb
index 6a9dc9a39f1..878929b8032 100644
--- a/lib/api/repositories.rb
+++ b/lib/api/repositories.rb
@@ -1,3 +1,5 @@
+require 'mime/types'
+
module API
# Projects API
class Repositories < Grape::API
@@ -49,7 +51,7 @@ module API
@branch = user_project.repository.find_branch(params[:branch])
not_found! unless @branch
- protected_branch = user_project.protected_branches.find_by_name(@branch.name)
+ protected_branch = user_project.protected_branches.find_by(name: @branch.name)
user_project.protected_branches.create(name: @branch.name) unless protected_branch
present @branch, with: Entities::RepoObject, project: user_project
@@ -67,7 +69,7 @@ module API
@branch = user_project.repository.find_branch(params[:branch])
not_found! unless @branch
- protected_branch = user_project.protected_branches.find_by_name(@branch.name)
+ protected_branch = user_project.protected_branches.find_by(name: @branch.name)
protected_branch.destroy if protected_branch
present @branch, with: Entities::RepoObject, project: user_project
@@ -110,7 +112,7 @@ module API
sha = params[:sha]
commit = user_project.repository.commit(sha)
not_found! "Commit" unless commit
- present commit, with: Entities::RepoCommit
+ present commit, with: Entities::RepoCommitDetail
end
# Get the diff for a specific commit of a project
@@ -122,9 +124,9 @@ module API
# GET /projects/:id/repository/commits/:sha/diff
get ":id/repository/commits/:sha/diff" do
sha = params[:sha]
- result = CommitLoadContext.new(user_project, current_user, {id: sha}).execute
- not_found! "Commit" unless result[:commit]
- result[:commit].diffs
+ commit = user_project.repository.commit(sha)
+ not_found! "Commit" unless commit
+ commit.diffs
end
# Get a project repository tree
@@ -206,18 +208,20 @@ module API
# sha (optional) - the commit sha to download defaults to the tip of the default branch
# Example Request:
# GET /projects/:id/repository/archive
- get ":id/repository/archive" do
+ get ":id/repository/archive", requirements: { format: Gitlab::Regex.archive_formats_regex } do
authorize! :download_code, user_project
repo = user_project.repository
ref = params[:sha]
+ format = params[:format]
storage_path = Rails.root.join("tmp", "repositories")
- file_path = repo.archive_repo(ref, storage_path)
+ file_path = repo.archive_repo(ref, storage_path, format)
if file_path && File.exists?(file_path)
data = File.open(file_path, 'rb').read
- header "Content-Disposition:", " infile; filename=\"#{File.basename(file_path)}\""
- content_type 'application/x-gzip'
+ header["Content-Disposition"] = "attachment; filename=\"#{File.basename(file_path)}\""
+
+ content_type MIME::Types.type_for(file_path).first.content_type
env['api.format'] = :binary
diff --git a/lib/api/users.rb b/lib/api/users.rb
index 475343a3edf..ae808b6272b 100644
--- a/lib/api/users.rb
+++ b/lib/api/users.rb
@@ -36,6 +36,7 @@ module API
# skype - Skype ID
# linkedin - Linkedin
# twitter - Twitter account
+ # website_url - Website url
# projects_limit - Number of projects user can create
# extern_uid - External authentication provider UID
# provider - External provider
@@ -67,6 +68,7 @@ module API
# skype - Skype ID
# linkedin - Linkedin
# twitter - Twitter account
+ # website_url - Website url
# projects_limit - Limit projects each user can create
# extern_uid - External authentication provider UID
# provider - External provider
@@ -78,7 +80,7 @@ module API
put ":id" do
authenticated_as_admin!
- attrs = attributes_for_keys [:email, :name, :password, :skype, :linkedin, :twitter, :projects_limit, :username, :extern_uid, :provider, :bio, :can_create_group, :admin]
+ attrs = attributes_for_keys [:email, :name, :password, :skype, :linkedin, :twitter, :website_url, :projects_limit, :username, :extern_uid, :provider, :bio, :can_create_group, :admin]
user = User.find(params[:id])
not_found!("User not found") unless user
@@ -117,7 +119,7 @@ module API
# DELETE /users/:id
delete ":id" do
authenticated_as_admin!
- user = User.find_by_id(params[:id])
+ user = User.find_by(id: params[:id])
if user
user.destroy
diff --git a/lib/gitlab/auth.rb b/lib/gitlab/auth.rb
index 0f196297477..955abc1bedd 100644
--- a/lib/gitlab/auth.rb
+++ b/lib/gitlab/auth.rb
@@ -1,7 +1,7 @@
module Gitlab
class Auth
def find(login, password)
- user = User.find_by_email(login) || User.find_by_username(login)
+ user = User.find_by(email: login) || User.find_by(username: login)
if user.nil? || user.ldap_user?
# Second chance - try LDAP authentication
diff --git a/lib/gitlab/backend/grack_auth.rb b/lib/gitlab/backend/grack_auth.rb
index c629144118c..60c03ce1c04 100644
--- a/lib/gitlab/backend/grack_auth.rb
+++ b/lib/gitlab/backend/grack_auth.rb
@@ -92,6 +92,9 @@ module Grack
return false unless can?(user, action, project)
end
+ # Never let git-receive-pack trough unauthenticated; it's
+ # harmless but git < 1.8 doesn't like it
+ return false if user.nil?
true
else
false
diff --git a/lib/gitlab/identifier.rb b/lib/gitlab/identifier.rb
index a1ff248a77f..6e4de197eeb 100644
--- a/lib/gitlab/identifier.rb
+++ b/lib/gitlab/identifier.rb
@@ -6,17 +6,17 @@ module Gitlab
if identifier.blank?
# Local push from gitlab
email = project.repository.commit(newrev).author_email rescue nil
- User.find_by_email(email) if email
+ User.find_by(email: email) if email
elsif identifier =~ /\Auser-\d+\Z/
# git push over http
user_id = identifier.gsub("user-", "")
- User.find_by_id(user_id)
+ User.find_by(id: user_id)
elsif identifier =~ /\Akey-\d+\Z/
# git push over ssh
key_id = identifier.gsub("key-", "")
- Key.find_by_id(key_id).try(:user)
+ Key.find_by(id: key_id).try(:user)
end
end
end
diff --git a/lib/gitlab/ldap/user.rb b/lib/gitlab/ldap/user.rb
index 59f0fa64a6a..fd36dda7d22 100644
--- a/lib/gitlab/ldap/user.rb
+++ b/lib/gitlab/ldap/user.rb
@@ -44,13 +44,13 @@ module Gitlab
end
def find_user(email)
- user = model.find_by_email(email)
+ user = model.find_by(email: email)
# If no user found and allow_username_or_email_login is true
# we look for user by extracting part of their email
if !user && email && ldap_conf['allow_username_or_email_login']
uname = email.partition('@').first
- user = model.find_by_username(uname)
+ user = model.find_by(username: uname)
end
user
diff --git a/lib/gitlab/regex.rb b/lib/gitlab/regex.rb
index 93e013ab1b3..d18fc8bf2ce 100644
--- a/lib/gitlab/regex.rb
+++ b/lib/gitlab/regex.rb
@@ -18,6 +18,11 @@ module Gitlab
default_regex
end
+ def archive_formats_regex
+ #|zip|tar| tar.gz | tar.bz2 |
+ /(zip|tar|tar\.gz|tgz|gz|tar\.bz2|tbz|tbz2|tb2|bz2)/
+ end
+
def git_reference_regex
# Valid git ref regex, see:
# https://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html
@@ -44,7 +49,7 @@ module Gitlab
protected
def default_regex
- /\A[a-zA-Z0-9][a-zA-Z0-9_\-\.]*(?<!\.git)\z/
+ /\A[.?]?[a-zA-Z0-9][a-zA-Z0-9_\-\.]*(?<!\.git)\z/
end
end
end
diff --git a/lib/gitlab/satellite/files/edit_file_action.rb b/lib/gitlab/satellite/files/edit_file_action.rb
index f410ecb7984..cbdf70f7d12 100644
--- a/lib/gitlab/satellite/files/edit_file_action.rb
+++ b/lib/gitlab/satellite/files/edit_file_action.rb
@@ -10,7 +10,7 @@ module Gitlab
# Returns false if committing the change fails
# Returns false if pushing from the satellite to bare repo failed or was rejected
# Returns true otherwise
- def commit!(content, commit_message)
+ def commit!(content, commit_message, encoding)
in_locked_and_timed_satellite do |repo|
prepare_satellite!(repo)
@@ -26,7 +26,8 @@ module Gitlab
return false
end
- File.open(file_path_in_satellite, 'w') { |f| f.write(content) }
+ # Write file
+ write_file(file_path_in_satellite, content, encoding)
# commit the changes
# will raise CommandFailed when commit fails
diff --git a/lib/gitlab/satellite/files/file_action.rb b/lib/gitlab/satellite/files/file_action.rb
index 0f7afde647d..7701a6d5d60 100644
--- a/lib/gitlab/satellite/files/file_action.rb
+++ b/lib/gitlab/satellite/files/file_action.rb
@@ -12,6 +12,14 @@ module Gitlab
def safe_path?(path)
File.absolute_path(path) == path
end
+
+ def write_file(abs_file_path, content, file_encoding = 'text')
+ if file_encoding == 'base64'
+ File.open(abs_file_path, 'wb') { |f| f.write(Base64.decode64(content)) }
+ else
+ File.open(abs_file_path, 'w') { |f| f.write(content) }
+ end
+ end
end
end
end
diff --git a/lib/gitlab/satellite/files/new_file_action.rb b/lib/gitlab/satellite/files/new_file_action.rb
index 57d101ff535..15e9b7a6f77 100644
--- a/lib/gitlab/satellite/files/new_file_action.rb
+++ b/lib/gitlab/satellite/files/new_file_action.rb
@@ -9,7 +9,7 @@ module Gitlab
# Returns false if committing the change fails
# Returns false if pushing from the satellite to bare repo failed or was rejected
# Returns true otherwise
- def commit!(content, commit_message)
+ def commit!(content, commit_message, encoding)
in_locked_and_timed_satellite do |repo|
prepare_satellite!(repo)
@@ -29,7 +29,7 @@ module Gitlab
FileUtils.mkdir_p(dir_name_in_satellite)
# Write file
- File.open(file_path_in_satellite, 'w') { |f| f.write(content) }
+ write_file(file_path_in_satellite, content, encoding)
# add new file
repo.add(file_path_in_satellite)
diff --git a/lib/gitlab/satellite/merge_action.rb b/lib/gitlab/satellite/merge_action.rb
index 54afd6ab95c..85615f282c4 100644
--- a/lib/gitlab/satellite/merge_action.rb
+++ b/lib/gitlab/satellite/merge_action.rb
@@ -24,10 +24,10 @@ module Gitlab
# Returns false if the merge produced conflicts
# Returns false if pushing from the satellite to the repository failed or was rejected
# Returns true otherwise
- def merge!
+ def merge!(merge_commit_message = nil)
in_locked_and_timed_satellite do |merge_repo|
prepare_satellite!(merge_repo)
- if merge_in_satellite!(merge_repo)
+ if merge_in_satellite!(merge_repo, merge_commit_message)
# push merge back to bare repo
# will raise CommandFailed when push fails
merge_repo.git.push(default_options, :origin, merge_request.target_branch)
@@ -49,14 +49,7 @@ module Gitlab
in_locked_and_timed_satellite do |merge_repo|
prepare_satellite!(merge_repo)
update_satellite_source_and_target!(merge_repo)
-
- if merge_request.for_fork?
- diff = merge_repo.git.native(:diff, default_options, "origin/#{merge_request.target_branch}", "source/#{merge_request.source_branch}")
- else
- diff = merge_repo.git.native(:diff, default_options, "#{merge_request.target_branch}", "#{merge_request.source_branch}")
- end
-
- return diff
+ diff = merge_repo.git.native(:diff, default_options, "origin/#{merge_request.target_branch}", "source/#{merge_request.source_branch}")
end
rescue Grit::Git::CommandFailed => ex
handle_exception(ex)
@@ -88,14 +81,7 @@ module Gitlab
in_locked_and_timed_satellite do |merge_repo|
prepare_satellite!(merge_repo)
update_satellite_source_and_target!(merge_repo)
-
- if (merge_request.for_fork?)
- patch = merge_repo.git.format_patch(default_options({stdout: true}), "origin/#{merge_request.target_branch}..source/#{merge_request.source_branch}")
- else
- patch = merge_repo.git.format_patch(default_options({stdout: true}), "#{merge_request.target_branch}..#{merge_request.source_branch}")
- end
-
- return patch
+ patch = merge_repo.git.format_patch(default_options({stdout: true}), "origin/#{merge_request.target_branch}..source/#{merge_request.source_branch}")
end
rescue Grit::Git::CommandFailed => ex
handle_exception(ex)
@@ -125,34 +111,26 @@ module Gitlab
#
# Returns false if the merge produced conflicts
# Returns true otherwise
- def merge_in_satellite!(repo)
+ def merge_in_satellite!(repo, message = nil)
update_satellite_source_and_target!(repo)
+ message ||= "Merge branch '#{merge_request.source_branch}' into '#{merge_request.target_branch}'"
+
# merge the source branch into the satellite
# will raise CommandFailed when merge fails
- if merge_request.for_fork?
- repo.git.pull(default_options({no_ff: true}), 'source', merge_request.source_branch)
- else
- repo.git.pull(default_options({no_ff: true}), 'origin', merge_request.source_branch)
- end
+ repo.git.merge(default_options({no_ff: true}), "-m #{message}", "source/#{merge_request.source_branch}")
rescue Grit::Git::CommandFailed => ex
handle_exception(ex)
end
# Assumes a satellite exists that is a fresh clone of the projects repo, prepares satellite for merges, diffs etc
def update_satellite_source_and_target!(repo)
- if merge_request.for_fork?
- repo.remote_add('source', merge_request.source_project.repository.path_to_repo)
- repo.remote_fetch('source')
- repo.git.checkout(default_options({b: true}), merge_request.target_branch, "origin/#{merge_request.target_branch}")
- else
- repo.git.checkout(default_options, "#{merge_request.source_branch}")
- repo.git.checkout(default_options({t: true}), "origin/#{merge_request.target_branch}")
- end
+ repo.remote_add('source', merge_request.source_project.repository.path_to_repo)
+ repo.remote_fetch('source')
+ repo.git.checkout(default_options({b: true}), merge_request.target_branch, "origin/#{merge_request.target_branch}")
rescue Grit::Git::CommandFailed => ex
handle_exception(ex)
end
-
end
end
end
diff --git a/lib/gitlab/theme.rb b/lib/gitlab/theme.rb
index 89604162304..44237a062fc 100644
--- a/lib/gitlab/theme.rb
+++ b/lib/gitlab/theme.rb
@@ -15,7 +15,7 @@ module Gitlab
COLOR => "ui_color"
}
- id ||= 1
+ id ||= Gitlab.config.gitlab.default_theme
return themes[id]
end
diff --git a/lib/support/init.d/gitlab b/lib/support/init.d/gitlab
index f1b94087b6a..cb2db44c97c 100755
--- a/lib/support/init.d/gitlab
+++ b/lib/support/init.d/gitlab
@@ -20,7 +20,7 @@
# DO NOT EDIT THIS FILE!
# This file will be overwritten on update.
# Instead add/change your variables in /etc/default/gitlab
-# An example defaults file can be found in lib/support/default/gitlab
+# An example defaults file can be found in lib/support/init.d/gitlab.default.example
###
diff --git a/lib/support/init.d/gitlab.default.example b/lib/support/init.d/gitlab.default.example
index 4230783a9d7..9951bacedf5 100755
--- a/lib/support/init.d/gitlab.default.example
+++ b/lib/support/init.d/gitlab.default.example
@@ -12,3 +12,20 @@ app_user="git"
# app_root defines the folder in which gitlab and it's components are installed.
# The default is "/home/$app_user/gitlab"
app_root="/home/$app_user/gitlab"
+
+# pid_path defines a folder in which the gitlab and it's components place their pids.
+# This variable is also used below to define the relevant pids for the gitlab components.
+# The default is "$app_root/tmp/pids"
+pid_path="$app_root/tmp/pids"
+
+# socket_path defines the folder in which gitlab places the sockets
+#The default is "$app_root/tmp/sockets"
+socket_path="$app_root/tmp/sockets"
+
+# web_server_pid_path defines the path in which to create the pid file fo the web_server
+# The default is "$pid_path/unicorn.pid"
+web_server_pid_path="$pid_path/unicorn.pid"
+
+# sidekiq_pid_path defines the path in which to create the pid file for sidekiq
+# The default is "$pid_path/sidekiq.pid"
+sidekiq_pid_path="$pid_path/sidekiq.pid"
diff --git a/lib/support/nginx/gitlab b/lib/support/nginx/gitlab
index 9f5155b3916..d1d959e152e 100644
--- a/lib/support/nginx/gitlab
+++ b/lib/support/nginx/gitlab
@@ -28,8 +28,8 @@ server {
# if a file, which is not found in the root folder is requested,
# then the proxy pass the request to the upsteam (gitlab unicorn)
location @gitlab {
- proxy_read_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694
- proxy_connect_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694
+ proxy_read_timeout 300; # Some requests take more than 30 seconds.
+ proxy_connect_timeout 300; # Some requests take more than 30 seconds.
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
diff --git a/lib/tasks/gitlab/bulk_add_permission.rake b/lib/tasks/gitlab/bulk_add_permission.rake
index c270232edba..612a9ba93a8 100644
--- a/lib/tasks/gitlab/bulk_add_permission.rake
+++ b/lib/tasks/gitlab/bulk_add_permission.rake
@@ -15,7 +15,7 @@ namespace :gitlab do
desc "GITLAB | Add a specific user to all projects (as a developer)"
task :user_to_projects, [:email] => :environment do |t, args|
- user = User.find_by_email args.email
+ user = User.find_by(email: args.email)
project_ids = Project.pluck(:id)
puts "Importing #{user.email} users into #{project_ids.size} projects"
UsersProject.add_users_into_projects(project_ids, Array.wrap(user.id), UsersProject::DEVELOPER)
diff --git a/lib/tasks/gitlab/check.rake b/lib/tasks/gitlab/check.rake
index 20d5f03d6ef..f48d26433c0 100644
--- a/lib/tasks/gitlab/check.rake
+++ b/lib/tasks/gitlab/check.rake
@@ -682,6 +682,8 @@ namespace :gitlab do
namespace :ldap do
task :check, [:limit] => :environment do |t, args|
+ # Only show up to 100 results because LDAP directories can be very big.
+ # This setting only affects the `rake gitlab:check` script.
args.with_defaults(limit: 100)
warn_user_is_not_gitlab
start_checking "LDAP"
@@ -696,7 +698,7 @@ namespace :gitlab do
end
def print_users(limit)
- puts "LDAP users with access to your GitLab server (limit: #{limit}):"
+ puts "LDAP users with access to your GitLab server (only showing the first #{limit} results)"
ldap.search(attributes: attributes, filter: filter, size: limit, return_result: false) do |entry|
puts "DN: #{entry.dn}\t#{ldap_config.uid}: #{entry[ldap_config.uid]}"
end
diff --git a/lib/tasks/gitlab/enable_namespaces.rake b/lib/tasks/gitlab/enable_namespaces.rake
index 927748c0fd5..201f34ab546 100644
--- a/lib/tasks/gitlab/enable_namespaces.rake
+++ b/lib/tasks/gitlab/enable_namespaces.rake
@@ -43,13 +43,13 @@ namespace :gitlab do
username.gsub!("+", ".")
# return username if no matches
- return username unless User.find_by_username(username)
+ return username unless User.find_by(username: username)
# look for same username
(1..10).each do |i|
suffixed_username = "#{username}#{i}"
- return suffixed_username unless User.find_by_username(suffixed_username)
+ return suffixed_username unless User.find_by(username: suffixed_username)
end
end
diff --git a/lib/tasks/gitlab/import.rake b/lib/tasks/gitlab/import.rake
index 8fa89270854..cbfa736c84c 100644
--- a/lib/tasks/gitlab/import.rake
+++ b/lib/tasks/gitlab/import.rake
@@ -2,12 +2,12 @@ namespace :gitlab do
namespace :import do
# How to use:
#
- # 1. copy your bare repos under git repos_path
- # 2. run bundle exec rake gitlab:import:repos RAILS_ENV=production
+ # 1. copy the bare repos under the repos_path (commonly /home/git/repositories)
+ # 2. run: bundle exec rake gitlab:import:repos RAILS_ENV=production
#
# Notes:
- # * project owner will be a first admin
- # * existing projects will be skipped
+ # * The project owner will set to the first administator of the system
+ # * Existing projects will be skipped
#
desc "GITLAB | Import bare repositories from gitlab_shell -> repos_path into GitLab project instance"
task repos: :environment do
@@ -50,7 +50,7 @@ namespace :gitlab do
# find group namespace
if group_name
- group = Group.find_by_path(group_name)
+ group = Group.find_by(path: group_name)
# create group namespace
if !group
group = Group.new(:name => group_name)
@@ -66,7 +66,7 @@ namespace :gitlab do
project_params[:namespace_id] = group.id
end
- project = Projects::CreateContext.new(user, project_params).execute
+ project = Projects::CreateService.new(user, project_params).execute
if project.valid?
puts " * Created #{project.name} (#{repo_path})".green