Commit 1cfb48dd authored by Guilherme Garnier's avatar Guilherme Garnier
Browse files

Merge remote-tracking branch 'upstream/master'

Please view this file on the master branch, on stable branches it's out of date.
v 8.1.0 (unreleased)
- Fix bug where transferring a project would result in stale commit links (Stan Hu)
- Include full path of source and target branch names in New Merge Request page (Stan Hu)
- Fix Message-ID header to be RFC 2111-compliant to prevent e-mails being dropped (Stan Hu)
- Add user preference to view activities as default dashboard (Stan Hu)
......@@ -26,6 +27,8 @@ v 8.1.0 (unreleased)
- Show additions/deletions stats on merge request diff
- Remove footer text in emails (Zeger-Jan van de Weg)
- Ensure code blocks are properly highlighted after a note is updated
- Fix wrong access level badge on MR comments
- Hide password in the service settings form
v 8.0.3
- Fix URL shown in Slack notifications
......
......@@ -270,6 +270,8 @@ group :development, :test do
gem 'rubocop', '~> 0.28.0', require: false
gem 'coveralls', '~> 0.8.2', require: false
gem 'simplecov', '~> 0.10.0', require: false
gem 'benchmark-ips', require: false
end
group :test do
......
......@@ -66,6 +66,7 @@ GEM
ice_nine (~> 0.11.0)
thread_safe (~> 0.3, >= 0.3.1)
bcrypt (3.1.10)
benchmark-ips (2.3.0)
better_errors (1.0.1)
coderay (>= 1.0.0)
erubis (>= 2.6.6)
......@@ -795,6 +796,7 @@ DEPENDENCIES
asciidoctor (~> 1.5.2)
attr_encrypted (~> 1.3.4)
awesome_print (~> 1.2.0)
benchmark-ips
better_errors (~> 1.0.1)
binding_of_caller (~> 0.7.2)
bootstrap-sass (~> 3.0)
......
html {
overflow-y: scroll;
height: 100%;
margin: 0;
&.touch .tooltip { display: none !important; }
body {
padding-top: $header-height;
height: 100%;
margin: 0;
}
}
.container {
padding-top: 0;
height: 100%;
width: 100%;
z-index: 5;
}
.content {
height: 100%;
width: 100%;
}
.content section {
height: 100%;
display: table-row;
}
.container .content {
margin: 0 0;
}
......@@ -24,3 +40,9 @@ html {
.container-limited {
max-width: $fixed-layout-width;
}
.max-height {
height: 100%;
display: table;
width: 100%;
}
\ No newline at end of file
......@@ -94,6 +94,7 @@ body {
@mixin btn-info {
@include border-radius(2px);
@include transition (all 0.2s ease 0s);
border-width: 1px;
border-style: solid;
......@@ -116,6 +117,7 @@ body {
&:active {
@include box-shadow(inset 0 0 4px rgba(0, 0, 0, 0.12));
border-width: 1px;
border-style: solid;
}
......@@ -123,6 +125,7 @@ body {
@mixin btn-middle {
@include border-radius(2px);
@include transition (all 0.2s ease 0s);
border-width: 1px;
border-style: solid;
......@@ -145,6 +148,7 @@ body {
&:active {
@include box-shadow(inset 0 0 4px rgba(0, 0, 0, 0.12));
border-width: 1px;
border-style: solid;
}
......
.page-with-sidebar {
min-height: 100%;
height: 100%;
.sidebar-wrapper {
position: fixed;
top: 0;
......@@ -18,15 +21,19 @@
}
.content-wrapper {
min-height: 100vh;
min-height: 900px;
display: table;
width: 100%;
padding: 20px;
background: #EAEBEC;
height: 100%;
width: 100%;
.container-fluid {
background: #FFF;
padding: $gl-padding;
min-height: 90vh;
height: 100%;
min-height: 100%;
&.container-blank {
background: none;
......
......@@ -510,4 +510,3 @@ pre.light-well {
.inline-form {
display: inline-block;
}
......@@ -20,6 +20,7 @@ def starred
@projects = current_user.starred_projects
@projects = @projects.includes(:namespace, :forked_from_project, :tags)
@projects = @projects.sort(@sort = params[:sort])
@last_push = current_user.recent_push
@groups = []
respond_to do |format|
......
class PasswordsController < Devise::PasswordsController
def create
email = resource_params[:email]
resource_found = resource_class.find_by_email(email)
if resource_found && resource_found.ldap_user?
flash[:alert] = "Cannot reset password for LDAP user."
respond_with({}, location: after_sending_reset_password_instructions_path_for(resource_name)) and return
end
self.resource = resource_class.send_reset_password_instructions(resource_params)
if successfully_sent?(resource)
respond_with({}, location: after_sending_reset_password_instructions_path_for(resource_name))
else
respond_with(resource)
end
end
before_action :resource_from_email, only: [:create]
before_action :prevent_ldap_reset, only: [:create]
before_action :throttle_reset, only: [:create]
def edit
super
......@@ -35,4 +22,25 @@ def edit
end
end
end
protected
def resource_from_email
email = resource_params[:email]
self.resource = resource_class.find_by_email(email)
end
def prevent_ldap_reset
return unless resource && resource.ldap_user?
redirect_to after_sending_reset_password_instructions_path_for(resource_name),
alert: "Cannot reset password for LDAP user."
end
def throttle_reset
return unless resource && resource.recently_sent_password_reset?
redirect_to new_password_path(resource_name),
alert: I18n.t('devise.passwords.recently_reset')
end
end
......@@ -58,6 +58,8 @@ def service
end
def service_params
params.require(:service).permit(ALLOWED_PARAMS)
service_params = params.require(:service).permit(ALLOWED_PARAMS)
service_params.delete("password") if service_params["password"].blank?
service_params
end
end
......@@ -296,7 +296,7 @@ def last_push_event
def readme_cache_key
sha = @project.commit.try(:sha) || 'nil'
[@project.id, sha, "readme"].join('-')
[@project.path_with_namespace, sha, "readme"].join('-')
end
def round_commit_count(project)
......
......@@ -751,13 +751,9 @@ def ensure_gitlab_ci_project
gitlab_ci_project || create_gitlab_ci_project
end
def enable_ci(user)
# Enable service
def enable_ci
service = gitlab_ci_service || create_gitlab_ci_service
service.active = true
service.save
# Create Ci::Project
Ci::CreateProjectService.new.execute(user, self)
end
end
......@@ -22,12 +22,17 @@ class GitlabCiService < CiService
include Gitlab::Application.routes.url_helpers
after_save :compose_service_hook, if: :activated?
after_save :ensure_gitlab_ci_project, if: :activated?
def compose_service_hook
hook = service_hook || build_service_hook
hook.save
end
def ensure_gitlab_ci_project
project.ensure_gitlab_ci_project
end
def supported_events
%w(push tag_push)
end
......@@ -67,21 +72,6 @@ def commit_status(sha, ref)
:error
end
def fork_registration(new_project, current_user)
params = OpenStruct.new({
id: new_project.id,
default_branch: new_project.default_branch
})
ci_project = Ci::Project.find_by!(gitlab_id: project.id)
Ci::CreateProjectService.new.execute(
current_user,
params,
ci_project
)
end
def commit_coverage(sha, ref)
get_ci_commit(sha, ref).coverage
rescue ActiveRecord::RecordNotFound
......
......@@ -135,6 +135,10 @@ def member?(user_id)
!!find_member(user_id)
end
def human_max_access(user_id)
Gitlab::Access.options.key max_member_access(user_id)
end
def max_member_access(user_id)
access = []
access << project.project_members.find_by(user_id: user_id).try(:access_field)
......
......@@ -328,6 +328,10 @@ def generate_reset_token
@reset_token
end
def recently_sent_password_reset?
reset_password_sent_at.present? && reset_password_sent_at >= 1.minute.ago
end
def disable_two_factor!
update_attributes(
two_factor_enabled: false,
......
module Ci
class CreateProjectService
include Gitlab::Application.routes.url_helpers
def execute(current_user, params, forked_project = nil)
@project = Ci::Project.parse(params)
Ci::Project.transaction do
@project.save!
gl_project = ::Project.find(@project.gitlab_id)
gl_project.build_missing_services
gl_project.gitlab_ci_service.update_attributes(active: true)
end
if forked_project
# Copy settings
settings = forked_project.attributes.select do |attr_name, value|
["public", "shared_runners_enabled", "allow_git_fetch"].include? attr_name
end
@project.update(settings)
end
Ci::EventService.new.create_project(current_user, @project)
@project
end
end
end
......@@ -58,7 +58,7 @@ def execute(project, user, oldrev, newrev, ref)
# If CI was disabled but .gitlab-ci.yml file was pushed
# we enable CI automatically
if !project.gitlab_ci? && gitlab_ci_yaml?(newrev)
project.enable_ci(user)
project.enable_ci
end
EventCreateService.new.push(project, user, @push_data)
......
......@@ -18,7 +18,13 @@ def execute
if new_project.persisted?
if @project.gitlab_ci?
@project.gitlab_ci_service.fork_registration(new_project, @current_user)
new_project.enable_ci
settings = @project.gitlab_ci_project.attributes.select do |attr_name, value|
["public", "shared_runners_enabled", "allow_git_fetch"].include? attr_name
end
new_project.gitlab_ci_project.update(settings)
end
end
......
......@@ -3,6 +3,9 @@
= render 'dashboard/projects_head'
- if @last_push
= render "events/event_last_push", event: @last_push
- if @projects.any?
= render 'projects'
- else
......
......@@ -6,7 +6,7 @@
.devise-errors
= devise_error_messages!
.clearfix.append-bottom-20
= f.email_field :email, placeholder: "Email", class: "form-control", required: true, value: params[:user_email]
= f.email_field :email, placeholder: "Email", class: "form-control", required: true, value: params[:user_email], autofocus: true
.clearfix
= f.submit "Reset password", class: "btn-primary btn"
......
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