Commit a653c8ea authored by Kamil Trzciński's avatar Kamil Trzciński

Merge branch 'master' into 'backstage/gb/rename-ci-cd-processing-sidekiq-queues'

# Conflicts:
#   db/schema.rb
parents faf92651 676f7726
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
}, },
"extends": "airbnb-base", "extends": "airbnb-base",
"globals": { "globals": {
"__webpack_public_path__": true,
"_": false, "_": false,
"gl": false, "gl": false,
"gon": false, "gon": false,
......
This diff is collapsed.
...@@ -207,9 +207,6 @@ gem 'kubeclient', '~> 2.2.0' ...@@ -207,9 +207,6 @@ gem 'kubeclient', '~> 2.2.0'
# d3 # d3
gem 'd3_rails', '~> 3.5.0' gem 'd3_rails', '~> 3.5.0'
# underscore-rails
gem 'underscore-rails', '~> 1.8.0'
# Sanitize user input # Sanitize user input
gem 'sanitize', '~> 2.0' gem 'sanitize', '~> 2.0'
gem 'babosa', '~> 1.0.2' gem 'babosa', '~> 1.0.2'
...@@ -396,12 +393,12 @@ gem 'net-ssh', '~> 4.1.0' ...@@ -396,12 +393,12 @@ gem 'net-ssh', '~> 4.1.0'
# Required for ED25519 SSH host key support # Required for ED25519 SSH host key support
group :ed25519 do group :ed25519 do
gem 'rbnacl-libsodium' gem 'rbnacl-libsodium'
gem 'rbnacl', '~> 3.2' gem 'rbnacl', '~> 4.0'
gem 'bcrypt_pbkdf', '~> 1.0' gem 'bcrypt_pbkdf', '~> 1.0'
end end
# Gitaly GRPC client # Gitaly GRPC client
gem 'gitaly', '~> 0.29.0' gem 'gitaly-proto', '~> 0.31.0', require: 'gitaly'
gem 'toml-rb', '~> 0.3.15', require: false gem 'toml-rb', '~> 0.3.15', require: false
......
...@@ -203,7 +203,7 @@ GEM ...@@ -203,7 +203,7 @@ GEM
multi_json multi_json
fast_gettext (1.4.0) fast_gettext (1.4.0)
ffaker (2.4.0) ffaker (2.4.0)
ffi (1.9.10) ffi (1.9.18)
flay (2.8.1) flay (2.8.1)
erubis (~> 2.7.0) erubis (~> 2.7.0)
path_expander (~> 1.0) path_expander (~> 1.0)
...@@ -275,7 +275,7 @@ GEM ...@@ -275,7 +275,7 @@ GEM
po_to_json (>= 1.0.0) po_to_json (>= 1.0.0)
rails (>= 3.2.0) rails (>= 3.2.0)
gherkin-ruby (0.3.2) gherkin-ruby (0.3.2)
gitaly (0.29.0) gitaly-proto (0.31.0)
google-protobuf (~> 3.1) google-protobuf (~> 3.1)
grpc (~> 1.0) grpc (~> 1.0)
github-linguist (4.7.6) github-linguist (4.7.6)
...@@ -682,7 +682,7 @@ GEM ...@@ -682,7 +682,7 @@ GEM
rake (12.0.0) rake (12.0.0)
rblineprof (0.3.6) rblineprof (0.3.6)
debugger-ruby_core_source (~> 1.3) debugger-ruby_core_source (~> 1.3)
rbnacl (3.4.0) rbnacl (4.0.2)
ffi ffi
rbnacl-libsodium (1.0.11) rbnacl-libsodium (1.0.11)
rbnacl (>= 3.0.1) rbnacl (>= 3.0.1)
...@@ -899,7 +899,6 @@ GEM ...@@ -899,7 +899,6 @@ GEM
uglifier (2.7.2) uglifier (2.7.2)
execjs (>= 0.3.0) execjs (>= 0.3.0)
json (>= 1.8.0) json (>= 1.8.0)
underscore-rails (1.8.3)
unf (0.1.4) unf (0.1.4)
unf_ext unf_ext
unf_ext (0.0.7.2) unf_ext (0.0.7.2)
...@@ -1019,7 +1018,7 @@ DEPENDENCIES ...@@ -1019,7 +1018,7 @@ DEPENDENCIES
gettext (~> 3.2.2) gettext (~> 3.2.2)
gettext_i18n_rails (~> 1.8.0) gettext_i18n_rails (~> 1.8.0)
gettext_i18n_rails_js (~> 1.2.0) gettext_i18n_rails_js (~> 1.2.0)
gitaly (~> 0.29.0) gitaly-proto (~> 0.31.0)
github-linguist (~> 4.7.0) github-linguist (~> 4.7.0)
gitlab-flowdock-git-hook (~> 1.0.1) gitlab-flowdock-git-hook (~> 1.0.1)
gitlab-markup (~> 1.5.1) gitlab-markup (~> 1.5.1)
...@@ -1107,7 +1106,7 @@ DEPENDENCIES ...@@ -1107,7 +1106,7 @@ DEPENDENCIES
rainbow (~> 2.2) rainbow (~> 2.2)
raindrops (~> 0.18) raindrops (~> 0.18)
rblineprof (~> 0.3.6) rblineprof (~> 0.3.6)
rbnacl (~> 3.2) rbnacl (~> 4.0)
rbnacl-libsodium rbnacl-libsodium
rdoc (~> 4.2) rdoc (~> 4.2)
re2 (~> 1.1.1) re2 (~> 1.1.1)
...@@ -1163,7 +1162,6 @@ DEPENDENCIES ...@@ -1163,7 +1162,6 @@ DEPENDENCIES
truncato (~> 0.7.8) truncato (~> 0.7.8)
u2f (~> 0.2.1) u2f (~> 0.2.1)
uglifier (~> 2.7.2) uglifier (~> 2.7.2)
underscore-rails (~> 1.8.0)
unf (~> 0.1.4) unf (~> 0.1.4)
unicorn (~> 5.1.0) unicorn (~> 5.1.0)
unicorn-worker-killer (~> 0.4.4) unicorn-worker-killer (~> 0.4.4)
......
9.5.0-pre 9.6.0-pre
...@@ -96,18 +96,17 @@ const Api = { ...@@ -96,18 +96,17 @@ const Api = {
.done(projects => callback(projects)); .done(projects => callback(projects));
}, },
commitMultiple(id, data, callback) { commitMultiple(id, data) {
// see https://docs.gitlab.com/ce/api/commits.html#create-a-commit-with-multiple-files-and-actions
const url = Api.buildUrl(Api.commitPath) const url = Api.buildUrl(Api.commitPath)
.replace(':id', id); .replace(':id', id);
return $.ajax({ return this.wrapAjaxCall({
url, url,
type: 'POST', type: 'POST',
contentType: 'application/json; charset=utf-8', contentType: 'application/json; charset=utf-8',
data: JSON.stringify(data), data: JSON.stringify(data),
dataType: 'json', dataType: 'json',
}) });
.done(commitData => callback(commitData))
.fail(message => callback(message.responseJSON));
}, },
// Return text for a specific license // Return text for a specific license
......
...@@ -42,7 +42,9 @@ export default { ...@@ -42,7 +42,9 @@ export default {
actions, actions,
}; };
Store.submitCommitsLoading = true; Store.submitCommitsLoading = true;
Service.commitFiles(payload, this.resetCommitState); Service.commitFiles(payload)
.then(this.resetCommitState)
.catch(() => Flash('An error occured while committing your changes'));
}, },
resetCommitState() { resetCommitState() {
......
/* eslint-disable no-underscore-dangle, camelcase */
/* global __webpack_public_path__ */
import monacoContext from 'monaco-editor/dev/vs/loader'; import monacoContext from 'monaco-editor/dev/vs/loader';
monacoContext.require.config({ monacoContext.require.config({
paths: { paths: {
vs: `${__webpack_public_path__}monaco-editor/vs`, vs: `${__webpack_public_path__}monaco-editor/vs`, // eslint-disable-line camelcase
}, },
}); });
// eslint-disable-next-line no-underscore-dangle
window.__monaco_context__ = monacoContext; window.__monaco_context__ = monacoContext;
export default monacoContext.require; export default monacoContext.require;
...@@ -65,15 +65,17 @@ const RepoService = { ...@@ -65,15 +65,17 @@ const RepoService = {
return urlArray.join('/'); return urlArray.join('/');
}, },
commitFiles(payload, cb) { commitFiles(payload) {
Api.commitMultiple(Store.projectId, payload, (data) => { return Api.commitMultiple(Store.projectId, payload)
if (data.short_id && data.stats) { .then(this.commitFlash);
Flash(`Your changes have been committed. Commit ${data.short_id} with ${data.stats.additions} additions, ${data.stats.deletions} deletions.`, 'notice'); },
} else {
Flash(data.message); commitFlash(data) {
} if (data.short_id && data.stats) {
cb(); window.Flash(`Your changes have been committed. Commit ${data.short_id} with ${data.stats.additions} additions, ${data.stats.deletions} deletions.`, 'notice');
}); } else {
window.Flash(data.message);
}
}, },
}; };
......
...@@ -588,9 +588,10 @@ function UsersSelect(currentUser, els) { ...@@ -588,9 +588,10 @@ function UsersSelect(currentUser, els) {
if (showEmailUser && data.results.length === 0 && query.term.match(/^[^@]+@[^@]+$/)) { if (showEmailUser && data.results.length === 0 && query.term.match(/^[^@]+@[^@]+$/)) {
var trimmed = query.term.trim(); var trimmed = query.term.trim();
emailUser = { emailUser = {
name: "Invite \"" + query.term + "\"", name: "Invite \"" + query.term + "\" by email",
username: trimmed, username: trimmed,
id: trimmed id: trimmed,
invite: true
}; };
data.results.unshift(emailUser); data.results.unshift(emailUser);
} }
...@@ -642,7 +643,7 @@ UsersSelect.prototype.formatResult = function(user) { ...@@ -642,7 +643,7 @@ UsersSelect.prototype.formatResult = function(user) {
} else { } else {
avatar = gon.default_avatar_url; avatar = gon.default_avatar_url;
} }
return "<div class='user-result " + (!user.username ? 'no-username' : void 0) + "'> <div class='user-image'><img class='avatar avatar-inline s32' src='" + avatar + "'></div> <div class='user-name dropdown-menu-user-full-name'>" + user.name + "</div> <div class='user-username dropdown-menu-user-username'>" + ("@" + user.username || "") + "</div> </div>"; return "<div class='user-result " + (!user.username ? 'no-username' : void 0) + "'> <div class='user-image'><img class='avatar avatar-inline s32' src='" + avatar + "'></div> <div class='user-name dropdown-menu-user-full-name'>" + user.name + "</div> <div class='user-username dropdown-menu-user-username'>" + (!user.invite ? "@" + _.escape(user.username) : "") + "</div> </div>";
}; };
UsersSelect.prototype.formatSelection = function(user) { UsersSelect.prototype.formatSelection = function(user) {
......
...@@ -5,5 +5,5 @@ ...@@ -5,5 +5,5 @@
*/ */
if (gon && gon.webpack_public_path) { if (gon && gon.webpack_public_path) {
__webpack_public_path__ = gon.webpack_public_path; // eslint-disable-line __webpack_public_path__ = gon.webpack_public_path; // eslint-disable-line camelcase
} }
...@@ -78,7 +78,7 @@ ...@@ -78,7 +78,7 @@
&.s60 { font-size: 32px; line-height: 58px; } &.s60 { font-size: 32px; line-height: 58px; }
&.s70 { font-size: 34px; line-height: 70px; } &.s70 { font-size: 34px; line-height: 70px; }
&.s90 { font-size: 36px; line-height: 88px; } &.s90 { font-size: 36px; line-height: 88px; }
&.s110 { font-size: 40px; line-height: 108px; font-weight: 300; } &.s110 { font-size: 40px; line-height: 108px; font-weight: $gl-font-weight-normal; }
&.s140 { font-size: 72px; line-height: 138px; } &.s140 { font-size: 72px; line-height: 138px; }
&.s160 { font-size: 96px; line-height: 158px; } &.s160 { font-size: 96px; line-height: 158px; }
} }
......
.badge { .badge {
font-weight: normal; font-weight: $gl-font-weight-normal;
background-color: $badge-bg; background-color: $badge-bg;
color: $badge-color; color: $badge-color;
vertical-align: baseline; vertical-align: baseline;
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
text-align: center; text-align: center;
padding: 20px; padding: 20px;
color: $gl-text-color; color: $gl-text-color;
font-weight: normal; font-weight: $gl-font-weight-normal;
font-size: 14px; font-size: 14px;
line-height: 36px; line-height: 36px;
...@@ -213,7 +213,7 @@ ...@@ -213,7 +213,7 @@
h1 { h1 {
display: inline; display: inline;
font-weight: normal; font-weight: $gl-font-weight-normal;
font-size: 24px; font-size: 24px;
color: $gl-text-color; color: $gl-text-color;
} }
......
@mixin btn-default { @mixin btn-default {
border-radius: 3px; border-radius: 3px;
font-size: $gl-font-size; font-size: $gl-font-size;
font-weight: 400; font-weight: $gl-font-weight-normal;
padding: $gl-vert-padding $gl-btn-padding; padding: $gl-vert-padding $gl-btn-padding;
&:focus, &:focus,
......
...@@ -52,13 +52,13 @@ ...@@ -52,13 +52,13 @@
.pika-label { .pika-label {
color: $gl-text-color-secondary; color: $gl-text-color-secondary;
font-size: 14px; font-size: 14px;
font-weight: normal; font-weight: $gl-font-weight-normal;
} }
th { th {
padding: 2px 0; padding: 2px 0;
color: $note-disabled-comment-color; color: $note-disabled-comment-color;
font-weight: normal; font-weight: $gl-font-weight-normal;
text-transform: lowercase; text-transform: lowercase;
border-top: 1px solid $calendar-border-color; border-top: 1px solid $calendar-border-color;
} }
...@@ -88,7 +88,7 @@ ...@@ -88,7 +88,7 @@
.is-today { .is-today {
.pika-day { .pika-day {
color: inherit; color: inherit;
font-weight: normal; font-weight: $gl-font-weight-normal;
} }
} }
......
...@@ -36,12 +36,12 @@ ...@@ -36,12 +36,12 @@
color: $common-gray; color: $common-gray;
font-size: 14px; font-size: 14px;
margin-bottom: 12px; margin-bottom: 12px;
font-weight: normal; font-weight: $gl-font-weight-normal;
line-height: 24px; line-height: 24px;
} }
.bold { .bold {
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
.tab-content { .tab-content {
...@@ -89,7 +89,7 @@ hr { ...@@ -89,7 +89,7 @@ hr {
} }
} }
.item-title { font-weight: 600; } .item-title { font-weight: $gl-font-weight-bold; }
/** FLASH message **/ /** FLASH message **/
.author_link, .author_link,
...@@ -118,18 +118,18 @@ table a code { ...@@ -118,18 +118,18 @@ table a code {
span.update-author { span.update-author {
display: block; display: block;
color: $update-author-color; color: $update-author-color;
font-weight: normal; font-weight: $gl-font-weight-normal;
font-style: italic; font-style: italic;
strong { strong {
font-weight: bold; font-weight: $gl-font-weight-bold;
font-style: normal; font-style: normal;
} }
} }
.user-mention { .user-mention {
color: $user-mention-color; color: $user-mention-color;
font-weight: bold; font-weight: $gl-font-weight-bold;
} }
.field_with_errors { .field_with_errors {
...@@ -222,7 +222,7 @@ li.note { ...@@ -222,7 +222,7 @@ li.note {
text-align: center; text-align: center;
background: $error-bg; background: $error-bg;
color: $white-light; color: $white-light;
font-weight: bold; font-weight: $gl-font-weight-bold;
a { a {
color: $white-light; color: $white-light;
...@@ -339,7 +339,7 @@ table { ...@@ -339,7 +339,7 @@ table {
.header-with-avatar { .header-with-avatar {
h3 { h3 {
margin: 0; margin: 0;
font-weight: bold; font-weight: $gl-font-weight-bold;
} }
.username { .username {
......
...@@ -195,7 +195,7 @@ ...@@ -195,7 +195,7 @@
margin-top: 2px; margin-top: 2px;
margin-bottom: 0; margin-bottom: 0;
font-size: 14px; font-size: 14px;
font-weight: normal; font-weight: $gl-font-weight-normal;
padding: 8px 0; padding: 8px 0;
background-color: $white-light; background-color: $white-light;
border: 1px solid $dropdown-border-color; border: 1px solid $dropdown-border-color;
...@@ -268,7 +268,7 @@ ...@@ -268,7 +268,7 @@
} }
.dropdown-bold-header { .dropdown-bold-header {
font-weight: 600; font-weight: $gl-font-weight-bold;
line-height: 22px; line-height: 22px;
padding: 0 16px; padding: 0 16px;
} }
...@@ -432,7 +432,7 @@ ...@@ -432,7 +432,7 @@
.dropdown-menu-user-full-name { .dropdown-menu-user-full-name {
display: block; display: block;
font-weight: 500; font-weight: $gl-font-weight-normal;
line-height: 16px; line-height: 16px;
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden; overflow: hidden;
...@@ -468,7 +468,7 @@ ...@@ -468,7 +468,7 @@
&.is-indeterminate, &.is-indeterminate,
&.is-active { &.is-active {
font-weight: 600; font-weight: $gl-font-weight-bold;
color: $gl-text-color; color: $gl-text-color;
&::before { &::before {
...@@ -502,7 +502,7 @@ ...@@ -502,7 +502,7 @@
position: relative; position: relative;
padding: 2px 25px 10px; padding: 2px 25px 10px;
margin: 0 10px 10px; margin: 0 10px 10px;
font-weight: 600; font-weight: $gl-font-weight-bold;
line-height: 1; line-height: 1;
text-align: center; text-align: center;
text-overflow: ellipsis; text-overflow: ellipsis;
...@@ -685,7 +685,7 @@ ...@@ -685,7 +685,7 @@
.dropdown-menu-inner-title { .dropdown-menu-inner-title {
display: block; display: block;
color: $gl-text-color; color: $gl-text-color;
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
.dropdown-menu-inner-content { .dropdown-menu-inner-content {
......
...@@ -371,7 +371,7 @@ ...@@ -371,7 +371,7 @@
} }
> .value { > .value {
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
} }
...@@ -452,7 +452,7 @@ ...@@ -452,7 +452,7 @@
.dropdown-light-content { .dropdown-light-content {
font-size: 14px; font-size: 14px;
font-weight: 400; font-weight: $gl-font-weight-normal;
} }
.dropdown-user { .dropdown-user {
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
a.flash-action { a.flash-action {
margin-left: 5px; margin-left: 5px;
text-decoration: none; text-decoration: none;
font-weight: normal; font-weight: $gl-font-weight-normal;
border-bottom: 1px solid; border-bottom: 1px solid;
&:hover { &:hover {
......
...@@ -32,7 +32,7 @@ label { ...@@ -32,7 +32,7 @@ label {
} }
&.label-light { &.label-light {
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
} }
...@@ -73,7 +73,7 @@ label { ...@@ -73,7 +73,7 @@ label {
margin-right: 0; margin-right: 0;
.control-label { .control-label {
font-weight: bold; font-weight: $gl-font-weight-bold;
padding-top: 4px; padding-top: 4px;
} }
...@@ -157,7 +157,7 @@ label { ...@@ -157,7 +157,7 @@ label {
.form-group .control-label, .form-group .control-label,
.form-group .control-label-full-width { .form-group .control-label-full-width {
font-weight: normal; font-weight: $gl-font-weight-normal;
} }
.form-control::-webkit-input-placeholder { .form-control::-webkit-input-placeholder {
......
...@@ -160,7 +160,7 @@ header { ...@@ -160,7 +160,7 @@ header {
li { li {
&.active a { &.active a {
font-weight: bold; font-weight: $gl-font-weight-bold;
} }
} }
} }
...@@ -250,7 +250,7 @@ header { ...@@ -250,7 +250,7 @@ header {
font-size: 18px; font-size: 18px;
line-height: 22px; line-height: 22px;
display: inline-block; display: inline-block;
font-weight: normal; font-weight: $gl-font-weight-normal;
color: $gl-text-color; color: $gl-text-color;
vertical-align: top; vertical-align: top;
white-space: nowrap; white-space: nowrap;
...@@ -326,7 +326,7 @@ header { ...@@ -326,7 +326,7 @@ header {
.badge { .badge {
position: inherit; position: inherit;
top: -8px; top: -8px;
font-weight: normal; font-weight: $gl-font-weight-normal;
margin-left: -11px; margin-left: -11px;
font-size: 11px; font-size: 11px;
color: $white-light; color: $white-light;
......
...@@ -113,7 +113,7 @@ ul.content-list { ...@@ -113,7 +113,7 @@ ul.content-list {
} }
.title { .title {
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
a { a {
...@@ -212,7 +212,7 @@ ul.content-list { ...@@ -212,7 +212,7 @@ ul.content-list {
} }
.row-title { .row-title {
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
.row-second-line { .row-second-line {
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
background: $gray-light; background: $gray-light;
a { a {
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
} }
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
} }
.text-danger { .text-danger {
font-weight: bold; font-weight: $gl-font-weight-bold;
} }
} }
......
...@@ -70,7 +70,7 @@ ...@@ -70,7 +70,7 @@
&.active a { &.active a {
border-bottom: 2px solid $link-underline-blue; border-bottom: 2px solid $link-underline-blue;
color: $black; color: $black;
font-weight: 600; font-weight: $gl-font-weight-bold;
.badge { .badge {
color: $black; color: $black;
...@@ -352,7 +352,7 @@ ...@@ -352,7 +352,7 @@
z-index: 300; z-index: 300;
li.active { li.active {
font-weight: bold; font-weight: $gl-font-weight-bold;
} }
} }
} }
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
.commit-committer-link, .commit-committer-link,
.commit-author-link { .commit-author-link {
color: $gl-text-color; color: $gl-text-color;
font-weight: bold; font-weight: $gl-font-weight-bold;
} }
.commit-info { .commit-info {
......
...@@ -76,7 +76,7 @@ ...@@ -76,7 +76,7 @@
} }
.select2-results li.select2-result-with-children > .select2-result-label { .select2-results li.select2-result-with-children > .select2-result-label {
font-weight: 600; font-weight: $gl-font-weight-bold;
color: $gl-text-color; color: $gl-text-color;
} }
...@@ -227,7 +227,7 @@ ...@@ -227,7 +227,7 @@
} }
.group-name { .group-name {
font-weight: bold; font-weight: $gl-font-weight-bold;
} }
.group-path { .group-path {
...@@ -252,12 +252,12 @@ ...@@ -252,12 +252,12 @@
.namespace-result { .namespace-result {
.namespace-kind { .namespace-kind {
color: $namespace-kind-color; color: $namespace-kind-color;
font-weight: normal; font-weight: $gl-font-weight-normal;
} }
.namespace-path { .namespace-path {
margin-left: 10px; margin-left: 10px;
font-weight: bolder; font-weight: $gl-font-weight-bold;
} }
} }
...@@ -283,7 +283,7 @@ ...@@ -283,7 +283,7 @@
padding: 0 1px; padding: 0 1px;
.select2-match { .select2-match {
font-weight: bold; font-weight: $gl-font-weight-bold;
text-decoration: none; text-decoration: none;
} }
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
.snippet-title { .snippet-title {
font-size: 24px; font-size: 24px;
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
.snippet-edited-ago { .snippet-edited-ago {
......
...@@ -32,7 +32,7 @@ table { ...@@ -32,7 +32,7 @@ table {
th { th {
background-color: $gray-light; background-color: $gray-light;
font-weight: normal; font-weight: $gl-font-weight-normal;
border-bottom: none; border-bottom: none;
&.wide { &.wide {
......
...@@ -103,7 +103,7 @@ summary { ...@@ -103,7 +103,7 @@ summary {
padding: 4px 5px; padding: 4px 5px;
font-size: 12px; font-size: 12px;
font-style: normal; font-style: normal;
font-weight: normal; font-weight: $gl-font-weight-normal;
display: inline-block; display: inline-block;
&.label-gray { &.label-gray {
...@@ -165,7 +165,7 @@ summary { ...@@ -165,7 +165,7 @@ summary {
.panel-heading { .panel-heading {
padding: 6px 15px; padding: 6px 15px;
font-size: 13px; font-size: 13px;
font-weight: normal; font-weight: $gl-font-weight-normal;
a { a {
color: $panel-heading-link-color; color: $panel-heading-link-color;
......
...@@ -13,6 +13,9 @@ ...@@ -13,6 +13,9 @@
img { img {
/*max-width: 100%;*/ /*max-width: 100%;*/
margin: 0 0 8px; margin: 0 0 8px;
}
img.lazy {
min-width: 200px; min-width: 200px;
min-height: 100px; min-height: 100px;
background-color: $gray-lightest; background-color: $gray-lightest;
...@@ -71,7 +74,7 @@ ...@@ -71,7 +74,7 @@
h1 { h1 {
font-size: 1.75em; font-size: 1.75em;
font-weight: 600; font-weight: $gl-font-weight-bold;
margin: 24px 0 16px; margin: 24px 0 16px;
padding-bottom: 0.3em; padding-bottom: 0.3em;
border-bottom: 1px solid $white-dark; border-bottom: 1px solid $white-dark;
...@@ -84,7 +87,7 @@ ...@@ -84,7 +87,7 @@
h2 { h2 {
font-size: 1.5em; font-size: 1.5em;
font-weight: 600; font-weight: $gl-font-weight-bold;
margin: 24px 0 16px; margin: 24px 0 16px;
padding-bottom: 0.3em; padding-bottom: 0.3em;
border-bottom: 1px solid $white-dark; border-bottom: 1px solid $white-dark;
...@@ -277,7 +280,7 @@ body { ...@@ -277,7 +280,7 @@ body {
margin-top: $gl-padding; margin-top: $gl-padding;
line-height: 1.3; line-height: 1.3;
font-size: 1.25em; font-size: 1.25em;
font-weight: 600; font-weight: $gl-font-weight-bold;
&:last-child { &:last-child {
margin-bottom: 0; margin-bottom: 0;
...@@ -288,7 +291,7 @@ body { ...@@ -288,7 +291,7 @@ body {
margin-top: 0; margin-top: 0;
line-height: 1.3; line-height: 1.3;
font-size: 1.25em; font-size: 1.25em;
font-weight: 600; font-weight: $gl-font-weight-bold;
margin: 12px 7px; margin: 12px 7px;
} }
...@@ -299,11 +302,11 @@ h4, ...@@ -299,11 +302,11 @@ h4,
h5, h5,
h6 { h6 {
color: $gl-text-color; color: $gl-text-color;
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
.light-header { .light-header {
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
/** CODE **/ /** CODE **/
......
...@@ -111,6 +111,8 @@ $well-light-text-color: #5b6169; ...@@ -111,6 +111,8 @@ $well-light-text-color: #5b6169;
* Text * Text
*/ */
$gl-font-size: 14px; $gl-font-size: 14px;
$gl-font-weight-normal: 400;
$gl-font-weight-bold: 600;
$gl-text-color: #2e2e2e; $gl-text-color: #2e2e2e;
$gl-text-color-secondary: #707070; $gl-text-color-secondary: #707070;
$gl-text-color-tertiary: #949494; $gl-text-color-tertiary: #949494;
......
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
.well-centered { .well-centered {
h1 { h1 {
font-weight: normal; font-weight: $gl-font-weight-normal;
text-align: center; text-align: center;
font-size: 48px; font-size: 48px;
} }
......
...@@ -204,11 +204,11 @@ $dark-il: #de935f; ...@@ -204,11 +204,11 @@ $dark-il: #de935f;
.cs { color: $dark-cs; } /* Comment.Special */ .cs { color: $dark-cs; } /* Comment.Special */
.gd { color: $dark-gd; } /* Generic.Deleted */ .gd { color: $dark-gd; } /* Generic.Deleted */
.ge { font-style: italic; } /* Generic.Emph */ .ge { font-style: italic; } /* Generic.Emph */
.gh { color: $dark-gh; font-weight: bold; } /* Generic.Heading */ .gh { color: $dark-gh; font-weight: $gl-font-weight-bold; } /* Generic.Heading */
.gi { color: $dark-gi; } /* Generic.Inserted */ .gi { color: $dark-gi; } /* Generic.Inserted */
.gp { color: $dark-gp; font-weight: bold; } /* Generic.Prompt */ .gp { color: $dark-gp; font-weight: $gl-font-weight-bold; } /* Generic.Prompt */
.gs { font-weight: bold; } /* Generic.Strong */ .gs { font-weight: $gl-font-weight-bold; } /* Generic.Strong */
.gu { color: $dark-gu; font-weight: bold; } /* Generic.Subheading */ .gu { color: $dark-gu; font-weight: $gl-font-weight-bold; } /* Generic.Subheading */
.kc { color: $dark-kc; } /* Keyword.Constant */ .kc { color: $dark-kc; } /* Keyword.Constant */
.kd { color: $dark-kd; } /* Keyword.Declaration */ .kd { color: $dark-kd; } /* Keyword.Declaration */
.kn { color: $dark-kn; } /* Keyword.Namespace */ .kn { color: $dark-kn; } /* Keyword.Namespace */
......
...@@ -203,7 +203,7 @@ $monokai-gi: #a6e22e; ...@@ -203,7 +203,7 @@ $monokai-gi: #a6e22e;
.c1 { color: $monokai-c1; } /* Comment.Single */ .c1 { color: $monokai-c1; } /* Comment.Single */
.cs { color: $monokai-cs; } /* Comment.Special */ .cs { color: $monokai-cs; } /* Comment.Special */
.ge { font-style: italic; } /* Generic.Emph */ .ge { font-style: italic; } /* Generic.Emph */
.gs { font-weight: bold; } /* Generic.Strong */ .gs { font-weight: $gl-font-weight-bold; } /* Generic.Strong */
.kc { color: $monokai-kc; } /* Keyword.Constant */ .kc { color: $monokai-kc; } /* Keyword.Constant */
.kd { color: $monokai-kd; } /* Keyword.Declaration */ .kd { color: $monokai-kd; } /* Keyword.Declaration */
.kn { color: $monokai-kn; } /* Keyword.Namespace */ .kn { color: $monokai-kn; } /* Keyword.Namespace */
......
...@@ -231,7 +231,7 @@ $solarized-dark-il: #2aa198; ...@@ -231,7 +231,7 @@ $solarized-dark-il: #2aa198;
.gi { color: $solarized-dark-gi; } /* Generic.Inserted */ .gi { color: $solarized-dark-gi; } /* Generic.Inserted */
.go { color: $solarized-dark-go; } /* Generic.Output */ .go { color: $solarized-dark-go; } /* Generic.Output */
.gp { color: $solarized-dark-gp; } /* Generic.Prompt */ .gp { color: $solarized-dark-gp; } /* Generic.Prompt */
.gs { color: $solarized-dark-gs; font-weight: bold; } /* Generic.Strong */ .gs { color: $solarized-dark-gs; font-weight: $gl-font-weight-bold; } /* Generic.Strong */
.gu { color: $solarized-dark-gu; } /* Generic.Subheading */ .gu { color: $solarized-dark-gu; } /* Generic.Subheading */
.gt { color: $solarized-dark-gt; } /* Generic.Traceback */ .gt { color: $solarized-dark-gt; } /* Generic.Traceback */
.kc { color: $solarized-dark-kc; } /* Keyword.Constant */ .kc { color: $solarized-dark-kc; } /* Keyword.Constant */
......
...@@ -239,7 +239,7 @@ $solarized-light-il: #2aa198; ...@@ -239,7 +239,7 @@ $solarized-light-il: #2aa198;
.gi { color: $solarized-light-gi; } /* Generic.Inserted */ .gi { color: $solarized-light-gi; } /* Generic.Inserted */
.go { color: $solarized-light-go; } /* Generic.Output */ .go { color: $solarized-light-go; } /* Generic.Output */
.gp { color: $solarized-light-gp; } /* Generic.Prompt */ .gp { color: $solarized-light-gp; } /* Generic.Prompt */
.gs { color: $solarized-light-gs; font-weight: bold; } /* Generic.Strong */ .gs { color: $solarized-light-gs; font-weight: $gl-font-weight-bold; } /* Generic.Strong */
.gu { color: $solarized-light-gu; } /* Generic.Subheading */ .gu { color: $solarized-light-gu; } /* Generic.Subheading */
.gt { color: $solarized-light-gt; } /* Generic.Traceback */ .gt { color: $solarized-light-gt; } /* Generic.Traceback */
.kc { color: $solarized-light-kc; } /* Keyword.Constant */ .kc { color: $solarized-light-kc; } /* Keyword.Constant */
......
...@@ -211,12 +211,12 @@ $white-gc-bg: #eaf2f5; ...@@ -211,12 +211,12 @@ $white-gc-bg: #eaf2f5;
.hll { background-color: $white-hll-bg; } .hll { background-color: $white-hll-bg; }
.c { color: $white-c; font-style: italic; } .c { color: $white-c; font-style: italic; }
.err { color: $white-err; background-color: $white-err-bg; } .err { color: $white-err; background-color: $white-err-bg; }
.k { font-weight: bold; } .k { font-weight: $gl-font-weight-bold; }
.o { font-weight: bold; } .o { font-weight: $gl-font-weight-bold; }
.cm { color: $white-cm; font-style: italic; } .cm { color: $white-cm; font-style: italic; }
.cp { color: $white-cp; font-weight: bold; } .cp { color: $white-cp; font-weight: $gl-font-weight-bold; }
.c1 { color: $white-c1; font-style: italic; } .c1 { color: $white-c1; font-style: italic; }
.cs { color: $white-cs; font-weight: bold; font-style: italic; } .cs { color: $white-cs; font-weight: $gl-font-weight-bold; font-style: italic; }
.gd { color: $white-gd; background-color: $white-gd-bg; } .gd { color: $white-gd; background-color: $white-gd-bg; }
.gd .x { color: $white-gd-x; background-color: $white-gd-x-bg; } .gd .x { color: $white-gd-x; background-color: $white-gd-x-bg; }
.ge { font-style: italic; } .ge { font-style: italic; }
...@@ -226,29 +226,29 @@ $white-gc-bg: #eaf2f5; ...@@ -226,29 +226,29 @@ $white-gc-bg: #eaf2f5;
.gi .x { color: $white-gi-x; background-color: $white-gi-x-bg; } .gi .x { color: $white-gi-x; background-color: $white-gi-x-bg; }
.go { color: $white-go; } .go { color: $white-go; }
.gp { color: $white-gp; } .gp { color: $white-gp; }
.gs { font-weight: bold; } .gs { font-weight: $gl-font-weight-bold; }
.gu { color: $white-gu; font-weight: bold; } .gu { color: $white-gu; font-weight: $gl-font-weight-bold; }
.gt { color: $white-gt; } .gt { color: $white-gt; }
.kc { font-weight: bold; } .kc { font-weight: $gl-font-weight-bold; }
.kd { font-weight: bold; } .kd { font-weight: $gl-font-weight-bold; }
.kn { font-weight: bold; } .kn { font-weight: $gl-font-weight-bold; }
.kp { font-weight: bold; } .kp { font-weight: $gl-font-weight-bold; }
.kr { font-weight: bold; } .kr { font-weight: $gl-font-weight-bold; }
.kt { color: $white-kt; font-weight: bold; } .kt { color: $white-kt; font-weight: $gl-font-weight-bold; }
.m { color: $white-m; } .m { color: $white-m; }
.s { color: $white-s; } .s { color: $white-s; }
.n { color: $white-n; } .n { color: $white-n; }
.na { color: $white-na; } .na { color: $white-na; }
.nb { color: $white-nb; } .nb { color: $white-nb; }
.nc { color: $white-nc; font-weight: bold; } .nc { color: $white-nc; font-weight: $gl-font-weight-bold; }
.no { color: $white-no; } .no { color: $white-no; }
.ni { color: $white-ni; } .ni { color: $white-ni; }
.ne { color: $white-ne; font-weight: bold; } .ne { color: $white-ne; font-weight: $gl-font-weight-bold; }
.nf { color: $white-nf; font-weight: bold; } .nf { color: $white-nf; font-weight: $gl-font-weight-bold; }
.nn { color: $white-nn; } .nn { color: $white-nn; }
.nt { color: $white-nt; } .nt { color: $white-nt; }
.nv { color: $white-nv; } .nv { color: $white-nv; }
.ow { font-weight: bold; } .ow { font-weight: $gl-font-weight-bold; }
.w { color: $white-w; } .w { color: $white-w; }
.mf { color: $white-mf; } .mf { color: $white-mf; }
.mh { color: $white-mh; } .mh { color: $white-mh; }
......
...@@ -152,12 +152,12 @@ span.highlight_word { ...@@ -152,12 +152,12 @@ span.highlight_word {
.hll { background-color: $highlighted-hll-bg; } .hll { background-color: $highlighted-hll-bg; }
.c { color: $highlighted-c; font-style: italic; } .c { color: $highlighted-c; font-style: italic; }
.err { color: $highlighted-err; background-color: $highlighted-err-bg; } .err { color: $highlighted-err; background-color: $highlighted-err-bg; }
.k { font-weight: bold; } .k { font-weight: $gl-font-weight-bold; }
.o { font-weight: bold; } .o { font-weight: $gl-font-weight-bold; }
.cm { color: $highlighted-cm; font-style: italic; } .cm { color: $highlighted-cm; font-style: italic; }
.cp { color: $highlighted-cp; font-weight: bold; } .cp { color: $highlighted-cp; font-weight: $gl-font-weight-bold; }
.c1 { color: $highlighted-c1; font-style: italic; } .c1 { color: $highlighted-c1; font-style: italic; }
.cs { color: $highlighted-cs; font-weight: bold; font-style: italic; } .cs { color: $highlighted-cs; font-weight: $gl-font-weight-bold; font-style: italic; }
.gd { color: $highlighted-gd; background-color: $highlighted-gd-bg; } .gd { color: $highlighted-gd; background-color: $highlighted-gd-bg; }
.gd .x { color: $highlighted-gd; background-color: $highlighted-gd-x-bg; } .gd .x { color: $highlighted-gd; background-color: $highlighted-gd-x-bg; }
.ge { font-style: italic; } .ge { font-style: italic; }
...@@ -167,29 +167,29 @@ span.highlight_word { ...@@ -167,29 +167,29 @@ span.highlight_word {
.gi .x { color: $highlighted-gi; background-color: $highlighted-gi-x-bg; } .gi .x { color: $highlighted-gi; background-color: $highlighted-gi-x-bg; }
.go { color: $highlighted-go; } .go { color: $highlighted-go; }
.gp { color: $highlighted-gp; } .gp { color: $highlighted-gp; }
.gs { font-weight: bold; } .gs { font-weight: $gl-font-weight-bold; }
.gu { color: $highlighted-gu; font-weight: bold; } .gu { color: $highlighted-gu; font-weight: $gl-font-weight-bold; }
.gt { color: $highlighted-gt; } .gt { color: $highlighted-gt; }
.kc { font-weight: bold; } .kc { font-weight: $gl-font-weight-bold; }
.kd { font-weight: bold; } .kd { font-weight: $gl-font-weight-bold; }
.kn { font-weight: bold; } .kn { font-weight: $gl-font-weight-bold; }
.kp { font-weight: bold; } .kp { font-weight: $gl-font-weight-bold; }
.kr { font-weight: bold; } .kr { font-weight: $gl-font-weight-bold; }
.kt { color: $highlighted-kt; font-weight: bold; } .kt { color: $highlighted-kt; font-weight: $gl-font-weight-bold; }
.m { color: $highlighted-m; } .m { color: $highlighted-m; }
.s { color: $highlighted-s; } .s { color: $highlighted-s; }
.n { color: $highlighted-n; } .n { color: $highlighted-n; }
.na { color: $highlighted-na; } .na { color: $highlighted-na; }
.nb { color: $highlighted-nb; } .nb { color: $highlighted-nb; }
.nc { color: $highlighted-nc; font-weight: bold; } .nc { color: $highlighted-nc; font-weight: $gl-font-weight-bold; }
.no { color: $highlighted-no; } .no { color: $highlighted-no; }
.ni { color: $highlighted-ni; } .ni { color: $highlighted-ni; }
.ne { color: $highlighted-ne; font-weight: bold; } .ne { color: $highlighted-ne; font-weight: $gl-font-weight-bold; }
.nf { color: $highlighted-nf; font-weight: bold; } .nf { color: $highlighted-nf; font-weight: $gl-font-weight-bold; }
.nn { color: $highlighted-nn; } .nn { color: $highlighted-nn; }
.nt { color: $highlighted-nt; } .nt { color: $highlighted-nt; }
.nv { color: $highlighted-nv; } .nv { color: $highlighted-nv; }
.ow { font-weight: bold; } .ow { font-weight: $gl-font-weight-bold; }
.w { color: $highlighted-w; } .w { color: $highlighted-w; }
.mf { color: $highlighted-mf; } .mf { color: $highlighted-mf; }
.mh { color: $highlighted-mh; } .mh { color: $highlighted-mh; }
......
...@@ -134,7 +134,7 @@ header.navbar-gitlab-new { ...@@ -134,7 +134,7 @@ header.navbar-gitlab-new {
li { li {
.badge { .badge {
box-shadow: none; box-shadow: none;
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
} }
} }
...@@ -193,7 +193,7 @@ header.navbar-gitlab-new { ...@@ -193,7 +193,7 @@ header.navbar-gitlab-new {
&.active > a { &.active > a {
box-shadow: inset 0 -3px 0 $indigo-500; box-shadow: inset 0 -3px 0 $indigo-500;
color: $white-light; color: $white-light;
font-weight: 700; font-weight: $gl-font-weight-bold;
} }
> a { > a {
...@@ -371,7 +371,7 @@ header.navbar-gitlab-new { ...@@ -371,7 +371,7 @@ header.navbar-gitlab-new {
> a { > a {
&:last-of-type:not(:first-child) { &:last-of-type:not(:first-child) {
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
} }
} }
...@@ -411,7 +411,7 @@ header.navbar-gitlab-new { ...@@ -411,7 +411,7 @@ header.navbar-gitlab-new {
.breadcrumbs-sub-title { .breadcrumbs-sub-title {
margin: 2px 0; margin: 2px 0;
font-size: 16px; font-size: 16px;
font-weight: normal; font-weight: $gl-font-weight-normal;
line-height: 1; line-height: 1;
ul { ul {
...@@ -430,7 +430,7 @@ header.navbar-gitlab-new { ...@@ -430,7 +430,7 @@ header.navbar-gitlab-new {
} }
&:last-child a { &:last-child a {
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
} }
......
...@@ -46,7 +46,7 @@ $new-sidebar-collapsed-width: 50px; ...@@ -46,7 +46,7 @@ $new-sidebar-collapsed-width: 50px;
a { a {
border-bottom: 1px solid $border-color; border-bottom: 1px solid $border-color;
font-weight: 600; font-weight: $gl-font-weight-bold;
display: flex; display: flex;
align-items: center; align-items: center;
padding: 10px 16px 10px 10px; padding: 10px 16px 10px 10px;
...@@ -70,8 +70,7 @@ $new-sidebar-collapsed-width: 50px; ...@@ -70,8 +70,7 @@ $new-sidebar-collapsed-width: 50px;
background-color: $white-light; background-color: $white-light;
} }
.project-title, .sidebar-context-title {
.group-title {
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
...@@ -109,7 +108,7 @@ $new-sidebar-collapsed-width: 50px; ...@@ -109,7 +108,7 @@ $new-sidebar-collapsed-width: 50px;
} }
.badge, .badge,
.project-title { .sidebar-context-title {
display: none; display: none;
} }
...@@ -160,7 +159,7 @@ $new-sidebar-collapsed-width: 50px; ...@@ -160,7 +159,7 @@ $new-sidebar-collapsed-width: 50px;
> a { > a {
color: $active-color; color: $active-color;
font-weight: 700; font-weight: $gl-font-weight-bold;
} }
svg { svg {
...@@ -308,7 +307,7 @@ $new-sidebar-collapsed-width: 50px; ...@@ -308,7 +307,7 @@ $new-sidebar-collapsed-width: 50px;
.badge { .badge {
color: $active-color; color: $active-color;
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
.sidebar-sub-level-items { .sidebar-sub-level-items {
...@@ -474,6 +473,6 @@ $new-sidebar-collapsed-width: 50px; ...@@ -474,6 +473,6 @@ $new-sidebar-collapsed-width: 50px;
border-bottom-color: $active-border; border-bottom-color: $active-border;
.badge { .badge {
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
} }
...@@ -471,7 +471,7 @@ ...@@ -471,7 +471,7 @@
padding-right: 35px; padding-right: 35px;
> strong { > strong {
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
} }
} }
......
...@@ -277,7 +277,7 @@ ...@@ -277,7 +277,7 @@
} }
.trigger-build-variable { .trigger-build-variable {
font-weight: normal; font-weight: $gl-font-weight-normal;
color: $code-color; color: $code-color;
} }
...@@ -378,7 +378,7 @@ ...@@ -378,7 +378,7 @@
} }
&.active { &.active {
font-weight: bold; font-weight: $gl-font-weight-bold;
.fa-arrow-right { .fa-arrow-right {
display: block; display: block;
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
vertical-align: middle !important; vertical-align: middle !important;
a { a {
font-weight: normal; font-weight: $gl-font-weight-normal;
text-decoration: none; text-decoration: none;
} }
} }
......
...@@ -213,7 +213,7 @@ ...@@ -213,7 +213,7 @@
.commit-sha { .commit-sha {
font-size: 14px; font-size: 14px;
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
} }
...@@ -286,6 +286,9 @@ ...@@ -286,6 +286,9 @@
.gpg-status-box { .gpg-status-box {
padding: 2px 10px;
margin-right: $gl-padding;
&:empty { &:empty {
display: none; display: none;
} }
...@@ -303,7 +306,7 @@ ...@@ -303,7 +306,7 @@
.gpg-popover-status { .gpg-popover-status {
display: flex; display: flex;
align-items: center; align-items: center;
font-weight: normal; font-weight: $gl-font-weight-normal;
line-height: 1.5; line-height: 1.5;
} }
...@@ -314,7 +317,6 @@ ...@@ -314,7 +317,6 @@
&.valid { &.valid {
svg { svg {
border: 1px solid $brand-success; border: 1px solid $brand-success;
fill: $brand-success; fill: $brand-success;
} }
} }
...@@ -322,7 +324,6 @@ ...@@ -322,7 +324,6 @@
&.invalid { &.invalid {
svg { svg {
border: 1px solid $common-gray-light; border: 1px solid $common-gray-light;
fill: $common-gray-light; fill: $common-gray-light;
} }
} }
......
...@@ -23,7 +23,7 @@ $space-between-cards: 8px; ...@@ -23,7 +23,7 @@ $space-between-cards: 8px;
line-height: 1; line-height: 1;
color: $gl-text-color-secondary; color: $gl-text-color-secondary;
margin-left: 8px; margin-left: 8px;
font-weight: 500; font-weight: $gl-font-weight-normal;
a { a {
font-size: 18px; font-size: 18px;
...@@ -139,7 +139,7 @@ $space-between-cards: 8px; ...@@ -139,7 +139,7 @@ $space-between-cards: 8px;
.card-score-value { .card-score-value {
font-size: 16px; font-size: 16px;
color: $gl-text-color; color: $gl-text-color;
font-weight: 500; font-weight: $gl-font-weight-normal;
} }
.card-score-big { .card-score-big {
...@@ -147,7 +147,7 @@ $space-between-cards: 8px; ...@@ -147,7 +147,7 @@ $space-between-cards: 8px;
border-bottom: 1px solid $border-color; border-bottom: 1px solid $border-color;
font-size: 22px; font-size: 22px;
padding: 10px 0; padding: 10px 0;
font-weight: 500; font-weight: $gl-font-weight-normal;
} }
.card-buttons { .card-buttons {
......
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
} }
.stage-name { .stage-name {
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
} }
...@@ -93,7 +93,7 @@ ...@@ -93,7 +93,7 @@
.header { .header {
font-size: 30px; font-size: 30px;
line-height: 38px; line-height: 38px;
font-weight: normal; font-weight: $gl-font-weight-normal;
margin: 0; margin: 0;
} }
...@@ -130,7 +130,7 @@ ...@@ -130,7 +130,7 @@
&.title { &.title {
line-height: 19px; line-height: 19px;
font-size: 14px; font-size: 14px;
font-weight: 600; font-weight: $gl-font-weight-bold;
color: $gl-text-color; color: $gl-text-color;
} }
...@@ -211,7 +211,7 @@ ...@@ -211,7 +211,7 @@
box-shadow: inset 2px 0 0 0 $active-item-blue; box-shadow: inset 2px 0 0 0 $active-item-blue;
.stage-name { .stage-name {
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
} }
...@@ -404,7 +404,7 @@ ...@@ -404,7 +404,7 @@
color: $gl-link-color; color: $gl-link-color;
line-height: 1.3; line-height: 1.3;
vertical-align: top; vertical-align: top;
font-weight: normal; font-weight: $gl-font-weight-normal;
} }
.fa { .fa {
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
// "Changes suppressed. Click to show." link // "Changes suppressed. Click to show." link
.show-suppressed-diff { .show-suppressed-diff {
font-size: 110%; font-size: 110%;
font-weight: bold; font-weight: $gl-font-weight-bold;
} }
} }
...@@ -104,7 +104,7 @@ ...@@ -104,7 +104,7 @@
a { a {
float: left; float: left;
width: 35px; width: 35px;
font-weight: normal; font-weight: $gl-font-weight-normal;
&[disabled] { &[disabled] {
cursor: default; cursor: default;
...@@ -395,7 +395,7 @@ ...@@ -395,7 +395,7 @@
background-color: transparent; background-color: transparent;
border: 0; border: 0;
color: $gl-link-color; color: $gl-link-color;
font-weight: 600; font-weight: $gl-font-weight-bold;
&:hover, &:hover,
&:focus { &:focus {
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
} }
.environments-folder-name { .environments-folder-name {
font-weight: normal; font-weight: $gl-font-weight-normal;
padding-top: 20px; padding-top: 20px;
} }
...@@ -246,13 +246,13 @@ ...@@ -246,13 +246,13 @@
} }
.text-metric-bold { .text-metric-bold {
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
.label-axis-text, .label-axis-text,
.text-metric-usage { .text-metric-usage {
fill: $black; fill: $black;
font-weight: 500; font-weight: $gl-font-weight-normal;
font-size: 12px; font-size: 12px;
} }
......
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
.event-title { .event-title {
@include str-truncated(calc(100% - 174px)); @include str-truncated(calc(100% - 174px));
font-weight: 600; font-weight: $gl-font-weight-bold;
color: $list-text-color; color: $list-text-color;
} }
......
...@@ -271,7 +271,7 @@ ...@@ -271,7 +271,7 @@
} }
.light { .light {
font-weight: normal; font-weight: $gl-font-weight-normal;
} }
.no-value { .no-value {
...@@ -306,7 +306,7 @@ ...@@ -306,7 +306,7 @@
display: block; display: block;
margin-top: 4px; margin-top: 4px;
font-size: 13px; font-size: 13px;
font-weight: normal; font-weight: $gl-font-weight-normal;
} }
.hide-expanded { .hide-expanded {
...@@ -689,7 +689,7 @@ ...@@ -689,7 +689,7 @@
.issuable-info, .issuable-info,
.task-status, .task-status,
.issuable-updated-at { .issuable-updated-at {
font-weight: normal; font-weight: $gl-font-weight-normal;
color: $gl-text-color-secondary; color: $gl-text-color-secondary;
a { a {
......
...@@ -75,7 +75,7 @@ ul.related-merge-requests > li { ...@@ -75,7 +75,7 @@ ul.related-merge-requests > li {
.merge-requests-title, .merge-requests-title,
.related-branches-title { .related-branches-title {
font-size: 16px; font-size: 16px;
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
.merge-request-id { .merge-request-id {
...@@ -244,7 +244,7 @@ ul.related-merge-requests > li { ...@@ -244,7 +244,7 @@ ul.related-merge-requests > li {
strong { strong {
display: block; display: block;
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
} }
} }
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
} }
h1:first-child { h1:first-child {
font-weight: normal; font-weight: $gl-font-weight-normal;
margin-bottom: 0.68em; margin-bottom: 0.68em;
margin-top: 0; margin-top: 0;
font-size: 34px; font-size: 34px;
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
} }
a { a {
font-weight: bold; font-weight: $gl-font-weight-bold;
} }
} }
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
padding: 15px; padding: 15px;
.login-heading h3 { .login-heading h3 {
font-weight: 300; font-weight: $gl-font-weight-normal;
line-height: 1.5; line-height: 1.5;
margin: 0 0 10px; margin: 0 0 10px;
} }
...@@ -186,7 +186,7 @@ ...@@ -186,7 +186,7 @@
} }
label { label {
font-weight: normal; font-weight: $gl-font-weight-normal;
} }
.submit-container { .submit-container {
......
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
} }
strong { strong {
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
} }
...@@ -221,7 +221,7 @@ ...@@ -221,7 +221,7 @@
} }
.member { .member {
font-weight: bold; font-weight: $gl-font-weight-bold;
overflow-wrap: break-word; overflow-wrap: break-word;
word-break: break-all; word-break: break-all;
} }
......
...@@ -197,7 +197,7 @@ ...@@ -197,7 +197,7 @@
@extend .ref-name; @extend .ref-name;
color: $gl-text-color; color: $gl-text-color;
font-weight: 600; font-weight: $gl-font-weight-bold;
overflow: hidden; overflow: hidden;
word-break: break-all; word-break: break-all;
...@@ -228,7 +228,7 @@ ...@@ -228,7 +228,7 @@
.mr-widget-body { .mr-widget-body {
h4 { h4 {
float: left; float: left;
font-weight: 600; font-weight: $gl-font-weight-bold;
font-size: 14px; font-size: 14px;
line-height: inherit; line-height: inherit;
margin-top: 0; margin-top: 0;
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
} }
time { time {
font-weight: normal; font-weight: $gl-font-weight-normal;
} }
} }
...@@ -249,7 +249,7 @@ ...@@ -249,7 +249,7 @@
} }
label { label {
font-weight: normal; font-weight: $gl-font-weight-normal;
} }
.spacing { .spacing {
...@@ -257,12 +257,12 @@ ...@@ -257,12 +257,12 @@
} }
.bold { .bold {
font-weight: 600; font-weight: $gl-font-weight-bold;
color: $gl-gray-light; color: $gl-gray-light;
} }
.state-label { .state-label {
font-weight: 600; font-weight: $gl-font-weight-bold;
padding-right: 10px; padding-right: 10px;
} }
...@@ -336,7 +336,7 @@ ...@@ -336,7 +336,7 @@
.text { .text {
span { span {
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
p { p {
...@@ -505,7 +505,7 @@ ...@@ -505,7 +505,7 @@
.panel-new-merge-request { .panel-new-merge-request {
.panel-heading { .panel-heading {
padding: 5px 10px; padding: 5px 10px;
font-weight: 600; font-weight: $gl-font-weight-bold;
line-height: 25px; line-height: 25px;
} }
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
padding: 10px 16px; padding: 10px 16px;
h4 { h4 {
font-weight: bold; font-weight: $gl-font-weight-bold;
} }
.progress { .progress {
...@@ -81,7 +81,7 @@ ...@@ -81,7 +81,7 @@
} }
.remaining-days strong { .remaining-days strong {
font-weight: normal; font-weight: $gl-font-weight-normal;
} }
.milestone-stat { .milestone-stat {
......
...@@ -188,7 +188,7 @@ ...@@ -188,7 +188,7 @@
.close { .close {
color: $white-light; color: $white-light;
opacity: 0.85; opacity: 0.85;
font-weight: normal; font-weight: $gl-font-weight-normal;
&:hover { &:hover {
opacity: 1; opacity: 1;
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
.interval-pattern-form-group { .interval-pattern-form-group {
label { label {
margin-right: 10px; margin-right: 10px;
font-weight: normal; font-weight: $gl-font-weight-normal;
&[for='custom'] { &[for='custom'] {
margin-right: 0; margin-right: 0;
......
...@@ -128,7 +128,7 @@ ...@@ -128,7 +128,7 @@
.branch-commit { .branch-commit {
.ref-name { .ref-name {
font-weight: bold; font-weight: $gl-font-weight-bold;
max-width: 120px; max-width: 120px;
overflow: hidden; overflow: hidden;
display: inline-block; display: inline-block;
...@@ -272,7 +272,7 @@ ...@@ -272,7 +272,7 @@
.build-name { .build-name {
float: right; float: right;
font-weight: 500; font-weight: $gl-font-weight-normal;
} }
.ci-status-icon-failed svg { .ci-status-icon-failed svg {
...@@ -281,7 +281,7 @@ ...@@ -281,7 +281,7 @@
.stage { .stage {
color: $gl-text-color-secondary; color: $gl-text-color-secondary;
font-weight: 500; font-weight: $gl-font-weight-normal;
vertical-align: middle; vertical-align: middle;
} }
} }
...@@ -420,7 +420,7 @@ ...@@ -420,7 +420,7 @@
.stage-name { .stage-name {
margin: 0 0 15px 10px; margin: 0 0 15px 10px;
font-weight: bold; font-weight: $gl-font-weight-bold;
width: 176px; width: 176px;
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
...@@ -580,7 +580,7 @@ ...@@ -580,7 +580,7 @@
vertical-align: bottom; vertical-align: bottom;
display: inline-block; display: inline-block;
position: relative; position: relative;
font-weight: normal; font-weight: $gl-font-weight-normal;
} }
@mixin mini-pipeline-graph-color($color-light, $color-main, $color-dark) { @mixin mini-pipeline-graph-color($color-light, $color-main, $color-dark) {
...@@ -724,7 +724,7 @@ button.mini-pipeline-graph-dropdown-toggle { ...@@ -724,7 +724,7 @@ button.mini-pipeline-graph-dropdown-toggle {
.mini-pipeline-graph-dropdown-item { .mini-pipeline-graph-dropdown-item {
padding: 3px 7px 4px; padding: 3px 7px 4px;
clear: both; clear: both;
font-weight: normal; font-weight: $gl-font-weight-normal;
line-height: 1.428571429; line-height: 1.428571429;
white-space: nowrap; white-space: nowrap;
margin: 0 5px; margin: 0 5px;
......
...@@ -83,7 +83,7 @@ ...@@ -83,7 +83,7 @@
&::after { &::after {
content: "\00B7"; // Middle Dot content: "\00B7"; // Middle Dot
padding: 0 6px; padding: 0 6px;
font-weight: bold; font-weight: $gl-font-weight-bold;
} }
&:last-child { &:last-child {
...@@ -277,7 +277,7 @@ table.u2f-registrations { ...@@ -277,7 +277,7 @@ table.u2f-registrations {
.oauth-application-show { .oauth-application-show {
.scope-name { .scope-name {
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
.scopes-list { .scopes-list {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
margin: -16px; margin: -16px;
.alert-link { .alert-link {
font-weight: normal; font-weight: $gl-font-weight-normal;
} }
} }
...@@ -114,7 +114,7 @@ ...@@ -114,7 +114,7 @@
margin-top: 10px; margin-top: 10px;
margin-bottom: 10px; margin-bottom: 10px;
font-size: 24px; font-size: 24px;
font-weight: 400; font-weight: $gl-font-weight-normal;
line-height: 1; line-height: 1;
word-wrap: break-word; word-wrap: break-word;
...@@ -259,7 +259,7 @@ ...@@ -259,7 +259,7 @@
border-width: 1px; border-width: 1px;
border-style: solid; border-style: solid;
font-size: 13px; font-size: 13px;
font-weight: 600; font-weight: $gl-font-weight-bold;
line-height: 13px; line-height: 13px;
letter-spacing: .4px; letter-spacing: .4px;
padding: 6px 14px; padding: 6px 14px;
...@@ -309,7 +309,7 @@ ...@@ -309,7 +309,7 @@
} }
.option-title { .option-title {
font-weight: normal; font-weight: $gl-font-weight-normal;
display: inline-block; display: inline-block;
color: $gl-text-color; color: $gl-text-color;
} }
...@@ -575,7 +575,7 @@ a.deploy-project-label { ...@@ -575,7 +575,7 @@ a.deploy-project-label {
color: $gl-text-color-tertiary; color: $gl-text-color-tertiary;
transform: translateY(-50%); transform: translateY(-50%);
font-size: 12px; font-size: 12px;
font-weight: bold; font-weight: $gl-font-weight-bold;
line-height: 20px; line-height: 20px;
// Mobile // Mobile
...@@ -826,7 +826,7 @@ pre.light-well { ...@@ -826,7 +826,7 @@ pre.light-well {
.new-protected-tag { .new-protected-tag {
label { label {
margin-top: 6px; margin-top: 6px;
font-weight: normal; font-weight: $gl-font-weight-normal;
} }
} }
...@@ -853,7 +853,7 @@ pre.light-well { ...@@ -853,7 +853,7 @@ pre.light-well {
} }
&.is-active { &.is-active {
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
} }
...@@ -952,7 +952,7 @@ pre.light-well { ...@@ -952,7 +952,7 @@ pre.light-well {
&::before { &::before {
font-family: FontAwesome; font-family: FontAwesome;
font-weight: normal; font-weight: $gl-font-weight-normal;
font-style: normal; font-style: normal;
} }
} }
......
...@@ -267,7 +267,7 @@ ...@@ -267,7 +267,7 @@
display: inline-block; display: inline-block;
font-size: 10px; font-size: 10px;
text-transform: uppercase; text-transform: uppercase;
font-weight: bold; font-weight: $gl-font-weight-bold;
color: $gray-darkest; color: $gray-darkest;
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
} }
h4 { h4 {
font-weight: normal; font-weight: $gl-font-weight-normal;
} }
} }
......
...@@ -94,7 +94,7 @@ input[type="checkbox"]:hover { ...@@ -94,7 +94,7 @@ input[type="checkbox"]:hover {
&::before { &::before {
font-family: FontAwesome; font-family: FontAwesome;
font-weight: normal; font-weight: $gl-font-weight-normal;
font-style: normal; font-style: normal;
} }
} }
......
...@@ -29,5 +29,5 @@ table .sherlock-code { ...@@ -29,5 +29,5 @@ table .sherlock-code {
.sherlock-line-samples-table .slow { .sherlock-line-samples-table .slow {
color: $red-500; color: $red-500;
font-weight: bold; font-weight: $gl-font-weight-bold;
} }
...@@ -108,14 +108,14 @@ ...@@ -108,14 +108,14 @@
margin: 0; margin: 0;
float: none; float: none;
display: inline-block; display: inline-block;
font-weight: normal; font-weight: $gl-font-weight-normal;
padding: 0 5px; padding: 0 5px;
line-height: inherit; line-height: inherit;
font-size: 14px; font-size: 14px;
} }
.action-name { .action-name {
font-weight: normal; font-weight: $gl-font-weight-normal;
} }
.todo-body { .todo-body {
...@@ -262,6 +262,6 @@ ...@@ -262,6 +262,6 @@
} }
a { a {
font-weight: 600; font-weight: $gl-font-weight-bold;
} }
} }
...@@ -231,7 +231,7 @@ ...@@ -231,7 +231,7 @@
} }
.upload-link { .upload-link {
font-weight: normal; font-weight: $gl-font-weight-normal;
color: $md-link-color; color: $md-link-color;
} }
......
.gitlab-ui-dev-kit { .gitlab-ui-dev-kit {
> h2 { > h2 {
margin: 35px 0 20px; margin: 35px 0 20px;
font-weight: bold; font-weight: $gl-font-weight-bold;
} }
.example { .example {
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
} }
.light { .light {
font-weight: normal; font-weight: $gl-font-weight-normal;
color: $gl-text-color-secondary; color: $gl-text-color-secondary;
} }
...@@ -89,7 +89,7 @@ ...@@ -89,7 +89,7 @@
h3 { h3 {
font-size: 19px; font-size: 19px;
font-weight: normal; font-weight: $gl-font-weight-normal;
margin: $gl-padding 0; margin: $gl-padding 0;
} }
} }
......
...@@ -281,7 +281,7 @@ ...@@ -281,7 +281,7 @@
$xterm-fg-255: #eee; $xterm-fg-255: #eee;
.term-bold { .term-bold {
font-weight: bold; font-weight: $gl-font-weight-bold;
} }
.term-italic { .term-italic {
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
.wiki h3 { .wiki h3 {
font-size: 18px; font-size: 18px;
font-weight: bold; font-weight: 600;
} }
header, header,
......
class Admin::LogsController < Admin::ApplicationController class Admin::LogsController < Admin::ApplicationController
def show
@loggers = [
Gitlab::AppLogger,
Gitlab::GitLogger,
Gitlab::EnvironmentLogger,
Gitlab::SidekiqLogger,
Gitlab::RepositoryCheckLogger
]
end
end end
...@@ -3,9 +3,9 @@ class Admin::ProjectsController < Admin::ApplicationController ...@@ -3,9 +3,9 @@ class Admin::ProjectsController < Admin::ApplicationController
before_action :group, only: [:show, :transfer] before_action :group, only: [:show, :transfer]
def index def index
finder = Admin::ProjectsFinder.new(params: params, current_user: current_user) params[:sort] ||= 'latest_activity_desc'
@projects = finder.execute @sort = params[:sort]
@sort = finder.sort @projects = Admin::ProjectsFinder.new(params: params, current_user: current_user).execute
respond_to do |format| respond_to do |format|
format.html format.html
......
...@@ -10,6 +10,14 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController ...@@ -10,6 +10,14 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController
end end
end end
if Gitlab::LDAP::Config.enabled?
Gitlab::LDAP::Config.available_servers.each do |server|
define_method server['provider_name'] do
ldap
end
end
end
# Extend the standard message generation to accept our custom exception # Extend the standard message generation to accept our custom exception
def failure_message def failure_message
exception = env["omniauth.error"] exception = env["omniauth.error"]
......
...@@ -4,7 +4,6 @@ class Projects::ServicesController < Projects::ApplicationController ...@@ -4,7 +4,6 @@ class Projects::ServicesController < Projects::ApplicationController
# Authorize # Authorize
before_action :authorize_admin_project! before_action :authorize_admin_project!
before_action :service, only: [:edit, :update, :test] before_action :service, only: [:edit, :update, :test]
before_action :update_service, only: [:update, :test]
respond_to :html respond_to :html
...@@ -14,6 +13,8 @@ class Projects::ServicesController < Projects::ApplicationController ...@@ -14,6 +13,8 @@ class Projects::ServicesController < Projects::ApplicationController
end end
def update def update
@service.attributes = service_params[:service]
if @service.save(context: :manual_change) if @service.save(context: :manual_change)
redirect_to(project_settings_integrations_path(@project), notice: success_message) redirect_to(project_settings_integrations_path(@project), notice: success_message)
else else
...@@ -24,7 +25,7 @@ class Projects::ServicesController < Projects::ApplicationController ...@@ -24,7 +25,7 @@ class Projects::ServicesController < Projects::ApplicationController
def test def test
message = {} message = {}
if @service.can_test? if @service.can_test? && @service.update_attributes(service_params[:service])
data = @service.test_data(project, current_user) data = @service.test_data(project, current_user)
outcome = @service.test(data) outcome = @service.test(data)
...@@ -50,10 +51,6 @@ class Projects::ServicesController < Projects::ApplicationController ...@@ -50,10 +51,6 @@ class Projects::ServicesController < Projects::ApplicationController
end end
end end
def update_service
@service.assign_attributes(service_params[:service])
end
def service def service
@service ||= @project.find_or_initialize_service(params[:id]) @service ||= @project.find_or_initialize_service(params[:id])
end end
......
...@@ -5,14 +5,6 @@ class SessionsController < Devise::SessionsController ...@@ -5,14 +5,6 @@ class SessionsController < Devise::SessionsController
skip_before_action :check_two_factor_requirement, only: [:destroy] skip_before_action :check_two_factor_requirement, only: [:destroy]
# Explicitly call protect from forgery before anything else. Otherwise the
# CSFR-token might be cleared before authentication is done. This was the case
# when LDAP was enabled and the `OmniauthCallbacksController` is loaded
#
# *Note:* `prepend: true` is the default for rails4, but this will be changed
# to `prepend: false` in rails5.
protect_from_forgery prepend: true, with: :exception
prepend_before_action :check_initial_setup, only: [:new] prepend_before_action :check_initial_setup, only: [:new]
prepend_before_action :authenticate_with_two_factor, prepend_before_action :authenticate_with_two_factor,
if: :two_factor_enabled?, only: [:create] if: :two_factor_enabled?, only: [:create]
......
class Admin::ProjectsFinder class Admin::ProjectsFinder
attr_reader :sort, :namespace_id, :visibility_level, :with_push, attr_reader :params, :current_user
:abandoned, :last_repository_check_failed, :archived,
:personal, :name, :page, :current_user
def initialize(params:, current_user:) def initialize(params:, current_user:)
@params = params
@current_user = current_user @current_user = current_user
@sort = params.fetch(:sort) { 'latest_activity_desc' }
@namespace_id = params[:namespace_id]
@visibility_level = params[:visibility_level]
@with_push = params[:with_push]
@abandoned = params[:abandoned]
@last_repository_check_failed = params[:last_repository_check_failed]
@archived = params[:archived]
@personal = params[:personal]
@name = params[:name]
@page = params[:page]
end end
def execute def execute
items = Project.without_deleted.with_statistics items = Project.without_deleted.with_statistics
items = items.in_namespace(namespace_id) if namespace_id.present? items = by_namespace_id(items)
items = items.where(visibility_level: visibility_level) if visibility_level.present? items = by_visibilty_level(items)
items = items.with_push if with_push.present? items = by_with_push(items)
items = items.abandoned if abandoned.present? items = by_abandoned(items)
items = items.where(last_repository_check_failed: true) if last_repository_check_failed.present? items = by_last_repository_check_failed(items)
items = items.non_archived unless archived.present? items = by_archived(items)
items = items.personal(current_user) if personal.present? items = by_personal(items)
items = items.search(name) if name.present? items = by_name(items)
items = items.sort(sort) items = sort(items)
items.includes(:namespace).order("namespaces.path, projects.name ASC").page(page) items.includes(:namespace).order("namespaces.path, projects.name ASC").page(params[:page])
end
private
def by_namespace_id(items)
params[:namespace_id].present? ? items.in_namespace(params[:namespace_id]) : items
end
def by_visibilty_level(items)
params[:visibility_level].present? ? items.where(visibility_level: params[:visibility_level]) : items
end
def by_with_push(items)
params[:with_push].present? ? items.with_push : items
end
def by_abandoned(items)
params[:abandoned].present? ? items.abandoned : items
end
def by_last_repository_check_failed(items)
params[:last_repository_check_failed].present? ? items.where(last_repository_check_failed: true) : items
end
def by_archived(items)
if params[:archived] == 'only'
items.archived
elsif params[:archived].blank?
items.non_archived
else
items
end
end
def by_personal(items)
params[:personal].present? ? items.personal(current_user) : items
end
def by_name(items)
params[:name].present? ? items.search(params[:name]) : items
end
def sort(items)
sort = params.fetch(:sort) { 'latest_activity_desc' }
items.sort(sort)
end end
end end
...@@ -125,9 +125,18 @@ class ProjectsFinder < UnionFinder ...@@ -125,9 +125,18 @@ class ProjectsFinder < UnionFinder
end end
def by_archived(projects) def by_archived(projects)
# Back-compatibility with the places where `params[:archived]` can be set explicitly to `false` if params[:non_archived]
params[:non_archived] = !Gitlab::Utils.to_boolean(params[:archived]) if params.key?(:archived) projects.non_archived
elsif params.key?(:archived) # Back-compatibility with the places where `params[:archived]` can be set explicitly to `false`
params[:non_archived] ? projects.non_archived : projects if params[:archived] == 'only'
projects.archived
elsif Gitlab::Utils.to_boolean(params[:archived])
projects
else
projects.non_archived
end
else
projects
end
end end
end end
...@@ -12,11 +12,18 @@ module AvatarsHelper ...@@ -12,11 +12,18 @@ module AvatarsHelper
avatar_size = options[:size] || 16 avatar_size = options[:size] || 16
user_name = options[:user].try(:name) || options[:user_name] user_name = options[:user].try(:name) || options[:user_name]
avatar_url = options[:url] || avatar_icon(options[:user] || options[:user_email], avatar_size) avatar_url = options[:url] || avatar_icon(options[:user] || options[:user_email], avatar_size)
data_attributes = { container: 'body' } has_tooltip = options[:has_tooltip].nil? ? true : options[:has_tooltip]
data_attributes = {}
css_class = %W[avatar s#{avatar_size}].push(*options[:css_class])
if has_tooltip
css_class.push('has-tooltip')
data_attributes = { container: 'body' }
end
image_tag( image_tag(
avatar_url, avatar_url,
class: %W[avatar has-tooltip s#{avatar_size}].push(*options[:css_class]), class: css_class,
alt: "#{user_name}'s avatar", alt: "#{user_name}'s avatar",
title: user_name, title: user_name,
data: data_attributes, data: data_attributes,
......
...@@ -114,7 +114,7 @@ module CommitsHelper ...@@ -114,7 +114,7 @@ module CommitsHelper
end end
def commit_signature_badge_classes(additional_classes) def commit_signature_badge_classes(additional_classes)
%w(btn status-box gpg-status-box) + Array(additional_classes) %w(btn gpg-status-box) + Array(additional_classes)
end end
protected protected
......
...@@ -181,6 +181,7 @@ module EventsHelper ...@@ -181,6 +181,7 @@ module EventsHelper
end end
def event_commit_title(message) def event_commit_title(message)
message ||= ''
(message.split("\n").first || "").truncate(70) (message.split("\n").first || "").truncate(70)
rescue rescue
"--broken encoding" "--broken encoding"
......
...@@ -19,11 +19,21 @@ class BroadcastMessage < ActiveRecord::Base ...@@ -19,11 +19,21 @@ class BroadcastMessage < ActiveRecord::Base
after_commit :flush_redis_cache after_commit :flush_redis_cache
def self.current def self.current
Rails.cache.fetch(CACHE_KEY) do messages = Rails.cache.fetch(CACHE_KEY) { current_and_future_messages.to_a }
where('ends_at > :now AND starts_at <= :now', now: Time.zone.now)
.reorder(id: :asc) return messages if messages.empty?
.to_a
end now_or_future = messages.select(&:now_or_future?)
# If there are cached entries but none are to be displayed we'll purge the
# cache so we don't keep running this code all the time.
Rails.cache.delete(CACHE_KEY) if now_or_future.empty?
now_or_future.select(&:now?)
end
def self.current_and_future_messages
where('ends_at > :now', now: Time.zone.now).reorder(id: :asc)
end end
def active? def active?
...@@ -38,6 +48,18 @@ class BroadcastMessage < ActiveRecord::Base ...@@ -38,6 +48,18 @@ class BroadcastMessage < ActiveRecord::Base
ends_at < Time.zone.now ends_at < Time.zone.now
end end
def now?
(starts_at..ends_at).cover?(Time.zone.now)
end
def future?
starts_at > Time.zone.now
end
def now_or_future?
now? || future?
end
def flush_redis_cache def flush_redis_cache
Rails.cache.delete(CACHE_KEY) Rails.cache.delete(CACHE_KEY)
end end
......
...@@ -46,7 +46,10 @@ module Ci ...@@ -46,7 +46,10 @@ module Ci
before_save :ensure_token before_save :ensure_token
before_destroy { unscoped_project } before_destroy { unscoped_project }
after_create :execute_hooks after_create do |build|
run_after_commit { BuildHooksWorker.perform_async(build.id) }
end
after_commit :update_project_statistics_after_save, on: [:create, :update] after_commit :update_project_statistics_after_save, on: [:create, :update]
after_commit :update_project_statistics, on: :destroy after_commit :update_project_statistics, on: :destroy
......
...@@ -393,7 +393,8 @@ module Ci ...@@ -393,7 +393,8 @@ module Ci
def predefined_variables def predefined_variables
[ [
{ key: 'CI_PIPELINE_ID', value: id.to_s, public: true }, { key: 'CI_PIPELINE_ID', value: id.to_s, public: true },
{ key: 'CI_CONFIG_PATH', value: ci_yaml_file_path, public: true } { key: 'CI_CONFIG_PATH', value: ci_yaml_file_path, public: true },
{ key: 'CI_PIPELINE_SOURCE', value: source.to_s, public: true }
] ]
end end
......
...@@ -17,6 +17,10 @@ module Ci ...@@ -17,6 +17,10 @@ module Ci
validates :pipeline, presence: true, unless: :importing? validates :pipeline, presence: true, unless: :importing?
validates :name, presence: true, unless: :importing? validates :name, presence: true, unless: :importing?
after_initialize do |stage|
self.status = DEFAULT_STATUS if self.status.nil?
end
state_machine :status, initial: :created do state_machine :status, initial: :created do
event :enqueue do event :enqueue do
transition created: :pending transition created: :pending
......
...@@ -406,7 +406,7 @@ class Event < ActiveRecord::Base ...@@ -406,7 +406,7 @@ class Event < ActiveRecord::Base
def body? def body?
if push? if push?
push_with_commits? || rm_ref? push_with_commits?
elsif note? elsif note?
true true
else else
......
...@@ -50,7 +50,10 @@ class Issue < ActiveRecord::Base ...@@ -50,7 +50,10 @@ class Issue < ActiveRecord::Base
scope :preload_associations, -> { preload(:labels, project: :namespace) } scope :preload_associations, -> { preload(:labels, project: :namespace) }
scope :public_only, -> { where(confidential: false) }
after_save :expire_etag_cache after_save :expire_etag_cache
after_commit :update_project_counter_caches, on: :destroy
attr_spammable :title, spam_title: true attr_spammable :title, spam_title: true
attr_spammable :description, spam_description: true attr_spammable :description, spam_description: true
...@@ -266,6 +269,10 @@ class Issue < ActiveRecord::Base ...@@ -266,6 +269,10 @@ class Issue < ActiveRecord::Base
end end
end end
def update_project_counter_caches
Projects::OpenIssuesCountService.new(project).refresh_cache
end
private private
# Returns `true` if the given User can read the current Issue. # Returns `true` if the given User can read the current Issue.
......
...@@ -31,6 +31,7 @@ class MergeRequest < ActiveRecord::Base ...@@ -31,6 +31,7 @@ class MergeRequest < ActiveRecord::Base
after_create :ensure_merge_request_diff, unless: :importing? after_create :ensure_merge_request_diff, unless: :importing?
after_update :reload_diff_if_branch_changed after_update :reload_diff_if_branch_changed
after_commit :update_project_counter_caches, on: :destroy
# When this attribute is true some MR validation is ignored # When this attribute is true some MR validation is ignored
# It allows us to close or modify broken merge requests # It allows us to close or modify broken merge requests
...@@ -682,9 +683,8 @@ class MergeRequest < ActiveRecord::Base ...@@ -682,9 +683,8 @@ class MergeRequest < ActiveRecord::Base
if !include_description && closes_issues_references.present? if !include_description && closes_issues_references.present?
message << "Closes #{closes_issues_references.to_sentence}" message << "Closes #{closes_issues_references.to_sentence}"
end end
message << "#{description}" if include_description && description.present? message << "#{description}" if include_description && description.present?
message << "See merge request #{to_reference}" message << "See merge request #{to_reference(full: true)}"
message.join("\n\n") message.join("\n\n")
end end
...@@ -936,6 +936,10 @@ class MergeRequest < ActiveRecord::Base ...@@ -936,6 +936,10 @@ class MergeRequest < ActiveRecord::Base
true true
end end
def update_project_counter_caches
Projects::OpenMergeRequestsCountService.new(target_project).refresh_cache
end
private private
def write_ref def write_ref
......
...@@ -247,6 +247,7 @@ class Project < ActiveRecord::Base ...@@ -247,6 +247,7 @@ class Project < ActiveRecord::Base
scope :joined, ->(user) { where('namespace_id != ?', user.namespace_id) } scope :joined, ->(user) { where('namespace_id != ?', user.namespace_id) }
scope :starred_by, ->(user) { joins(:users_star_projects).where('users_star_projects.user_id': user.id) } scope :starred_by, ->(user) { joins(:users_star_projects).where('users_star_projects.user_id': user.id) }
scope :visible_to_user, ->(user) { where(id: user.authorized_projects.select(:id).reorder(nil)) } scope :visible_to_user, ->(user) { where(id: user.authorized_projects.select(:id).reorder(nil)) }
scope :archived, -> { where(archived: true) }
scope :non_archived, -> { where(archived: false) } scope :non_archived, -> { where(archived: false) }
scope :for_milestones, ->(ids) { joins(:milestones).where('milestones.id' => ids).distinct } scope :for_milestones, ->(ids) { joins(:milestones).where('milestones.id' => ids).distinct }
scope :with_push, -> { joins(:events).where('events.action = ?', Event::PUSHED) } scope :with_push, -> { joins(:events).where('events.action = ?', Event::PUSHED) }
...@@ -1017,7 +1018,7 @@ class Project < ActiveRecord::Base ...@@ -1017,7 +1018,7 @@ class Project < ActiveRecord::Base
name: name, name: name,
description: description, description: description,
web_url: web_url, web_url: web_url,
avatar_url: avatar_url, avatar_url: avatar_url(only_path: false),
git_ssh_url: ssh_url_to_repo, git_ssh_url: ssh_url_to_repo,
git_http_url: http_url_to_repo, git_http_url: http_url_to_repo,
namespace: namespace.name, namespace: namespace.name,
...@@ -1167,7 +1168,11 @@ class Project < ActiveRecord::Base ...@@ -1167,7 +1168,11 @@ class Project < ActiveRecord::Base
end end
def open_issues_count def open_issues_count
issues.opened.count Projects::OpenIssuesCountService.new(self).count
end
def open_merge_requests_count
Projects::OpenMergeRequestsCountService.new(self).count
end end
def visibility_level_allowed_as_fork?(level = self.visibility_level) def visibility_level_allowed_as_fork?(level = self.visibility_level)
......
...@@ -24,6 +24,8 @@ class KubernetesService < DeploymentService ...@@ -24,6 +24,8 @@ class KubernetesService < DeploymentService
validates :token validates :token
end end
before_validation :enforce_namespace_to_lower_case
validates :namespace, validates :namespace,
allow_blank: true, allow_blank: true,
length: 1..63, length: 1..63,
...@@ -207,4 +209,8 @@ class KubernetesService < DeploymentService ...@@ -207,4 +209,8 @@ class KubernetesService < DeploymentService
max_session_time: current_application_settings.terminal_max_session_time max_session_time: current_application_settings.terminal_max_session_time
} }
end end
def enforce_namespace_to_lower_case
self.namespace = self.namespace&.downcase
end
end end
...@@ -206,12 +206,18 @@ class Repository ...@@ -206,12 +206,18 @@ class Repository
end end
def branch_exists?(branch_name) def branch_exists?(branch_name)
branch_names.include?(branch_name) return false unless raw_repository
@branch_exists_memo ||= Hash.new do |hash, key|
hash[key] = raw_repository.branch_exists?(key)
end
@branch_exists_memo[branch_name]
end end
def ref_exists?(ref) def ref_exists?(ref)
rugged.references.exist?(ref) !!raw_repository&.ref_exists?(ref)
rescue Rugged::ReferenceError rescue ArgumentError
false false
end end
...@@ -266,6 +272,7 @@ class Repository ...@@ -266,6 +272,7 @@ class Repository
def expire_branches_cache def expire_branches_cache
expire_method_caches(%i(branch_names branch_count)) expire_method_caches(%i(branch_names branch_count))
@local_branches = nil @local_branches = nil
@branch_exists_memo = nil
end end
def expire_statistics_caches def expire_statistics_caches
...@@ -1185,7 +1192,7 @@ class Repository ...@@ -1185,7 +1192,7 @@ class Repository
end end
def initialize_raw_repository def initialize_raw_repository
Gitlab::Git::Repository.new(project.repository_storage, disk_path + '.git') Gitlab::Git::Repository.new(project.repository_storage, disk_path + '.git', Gitlab::GlRepository.gl_repository(project, false))
end end
def circuit_breaker def circuit_breaker
......
...@@ -17,7 +17,7 @@ module Commits ...@@ -17,7 +17,7 @@ module Commits
new_commit = create_commit! new_commit = create_commit!
success(result: new_commit) success(result: new_commit)
rescue ValidationError, ChangeError, Gitlab::Git::Index::IndexError, Repository::CommitError, GitHooksService::PreReceiveError => ex rescue ValidationError, ChangeError, Gitlab::Git::Index::IndexError, Repository::CommitError, Gitlab::Git::HooksService::PreReceiveError => ex
error(ex.message) error(ex.message)
end end
......
...@@ -14,7 +14,7 @@ class CreateBranchService < BaseService ...@@ -14,7 +14,7 @@ class CreateBranchService < BaseService
else else
error('Invalid reference name') error('Invalid reference name')
end end
rescue GitHooksService::PreReceiveError => ex rescue Gitlab::Git::HooksService::PreReceiveError => ex
error(ex.message) error(ex.message)
end end
......
...@@ -16,7 +16,7 @@ class DeleteBranchService < BaseService ...@@ -16,7 +16,7 @@ class DeleteBranchService < BaseService
else else
error('Failed to remove branch') error('Failed to remove branch')
end end
rescue GitHooksService::PreReceiveError => ex rescue Gitlab::Git::HooksService::PreReceiveError => ex
error(ex.message) error(ex.message)
end end
......
class GitHooksService
PreReceiveError = Class.new(StandardError)
attr_accessor :oldrev, :newrev, :ref
def execute(user, project, oldrev, newrev, ref)
@project = project
@user = Gitlab::GlId.gl_id(user)
@oldrev = oldrev
@newrev = newrev
@ref = ref
%w(pre-receive update).each do |hook_name|
status, message = run_hook(hook_name)
unless status
raise PreReceiveError, message
end
end
yield(self).tap do
run_hook('post-receive')
end
end
private
def run_hook(name)
hook = Gitlab::Git::Hook.new(name, @project)
hook.trigger(@user, oldrev, newrev, ref)
end
end
class GitOperationService class GitOperationService
attr_reader :user, :repository attr_reader :committer, :repository
def initialize(committer, new_repository)
committer = Gitlab::Git::Committer.from_user(committer) if committer.is_a?(User)
@committer = committer
def initialize(new_user, new_repository)
@user = new_user
@repository = new_repository @repository = new_repository
end end
...@@ -118,9 +120,9 @@ class GitOperationService ...@@ -118,9 +120,9 @@ class GitOperationService
end end
def with_hooks(ref, newrev, oldrev) def with_hooks(ref, newrev, oldrev)
GitHooksService.new.execute( Gitlab::Git::HooksService.new.execute(
user, committer,
repository.project, repository,
oldrev, oldrev,
newrev, newrev,
ref) do |service| ref) do |service|
......
module Groups
class NestedCreateService < Groups::BaseService
attr_reader :group_path
def initialize(user, params)
@current_user, @params = user, params.dup
@group_path = @params.delete(:group_path)
end
def execute
return nil unless group_path
if group = Group.find_by_full_path(group_path)
return group
end
create_group_path
end
private
def create_group_path
group_path_segments = group_path.split('/')
last_group = nil
partial_path_segments = []
while subgroup_name = group_path_segments.shift
partial_path_segments << subgroup_name
partial_path = partial_path_segments.join('/')
new_params = params.reverse_merge(
path: subgroup_name,
name: subgroup_name,
parent: last_group
)
new_params[:visibility_level] ||= Gitlab::CurrentSettings.current_application_settings.default_group_visibility
last_group = Group.find_by_full_path(partial_path) || Groups::CreateService.new(current_user, new_params).execute
end
last_group
end
end
end
...@@ -192,6 +192,8 @@ class IssuableBaseService < BaseService ...@@ -192,6 +192,8 @@ class IssuableBaseService < BaseService
def after_create(issuable) def after_create(issuable)
# To be overridden by subclasses # To be overridden by subclasses
issuable.update_project_counter_caches
end end
def before_update(issuable) def before_update(issuable)
...@@ -200,6 +202,8 @@ class IssuableBaseService < BaseService ...@@ -200,6 +202,8 @@ class IssuableBaseService < BaseService
def after_update(issuable) def after_update(issuable)
# To be overridden by subclasses # To be overridden by subclasses
issuable.update_project_counter_caches
end end
def update(issuable) def update(issuable)
......
...@@ -27,6 +27,8 @@ module Issues ...@@ -27,6 +27,8 @@ module Issues
todo_service.new_issue(issuable, current_user) todo_service.new_issue(issuable, current_user)
user_agent_detail_service.create user_agent_detail_service.create
resolve_discussions_with_issue(issuable) resolve_discussions_with_issue(issuable)
super
end end
def resolve_discussions_with_issue(issue) def resolve_discussions_with_issue(issue)
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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