Commit 481e73fb authored by Zeger-Jan van de Weg's avatar Zeger-Jan van de Weg

Merge branch 'master' into new-branch-button-issue

parents 48274581 4171933c
...@@ -11,10 +11,13 @@ v 8.6.0 (unreleased) ...@@ -11,10 +11,13 @@ v 8.6.0 (unreleased)
setup. A password can be provided during setup (see installation docs), or setup. A password can be provided during setup (see installation docs), or
GitLab will ask the user to create a new one upon first visit. GitLab will ask the user to create a new one upon first visit.
- Fix issue when pushing to projects ending in .wiki - Fix issue when pushing to projects ending in .wiki
- Add support for wiki with UTF-8 page names (Hiroyuki Sato)
- Fix wiki search results point to raw source (Hiroyuki Sato)
- Don't load all of GitLab in mail_room - Don't load all of GitLab in mail_room
- Update `omniauth-saml` to 1.5.0 to allow for custom response attributes to be set - Update `omniauth-saml` to 1.5.0 to allow for custom response attributes to be set
- Memoize @group in Admin::GroupsController (Yatish Mehta) - Memoize @group in Admin::GroupsController (Yatish Mehta)
- Indicate how much an MR diverged from the target branch (Pierre de La Morinerie) - Indicate how much an MR diverged from the target branch (Pierre de La Morinerie)
- Added omniauth-auth0 Gem (Daniel Carraro)
- Strip leading and trailing spaces in URL validator (evuez) - Strip leading and trailing spaces in URL validator (evuez)
- Add "last_sign_in_at" and "confirmed_at" to GET /users/* API endpoints for admins (evuez) - Add "last_sign_in_at" and "confirmed_at" to GET /users/* API endpoints for admins (evuez)
- Return empty array instead of 404 when commit has no statuses in commit status API - Return empty array instead of 404 when commit has no statuses in commit status API
...@@ -40,6 +43,10 @@ v 8.6.0 (unreleased) ...@@ -40,6 +43,10 @@ v 8.6.0 (unreleased)
- Add ability to show archived projects on dashboard, explore and group pages - Add ability to show archived projects on dashboard, explore and group pages
- Move group activity to separate page - Move group activity to separate page
- Continue parameters are checked to ensure redirection goes to the same instance - Continue parameters are checked to ensure redirection goes to the same instance
- User deletion is now done in the background so the request can not time out
v 8.5.7
- Bump Git version requirement to 2.7.3
v 8.5.6 v 8.5.6
- Obtain a lease before querying LDAP - Obtain a lease before querying LDAP
......
...@@ -22,6 +22,7 @@ gem 'devise', '~> 3.5.4' ...@@ -22,6 +22,7 @@ gem 'devise', '~> 3.5.4'
gem 'devise-async', '~> 0.9.0' gem 'devise-async', '~> 0.9.0'
gem 'doorkeeper', '~> 2.2.0' gem 'doorkeeper', '~> 2.2.0'
gem 'omniauth', '~> 1.3.1' gem 'omniauth', '~> 1.3.1'
gem 'omniauth-auth0', '~> 1.4.1'
gem 'omniauth-azure-oauth2', '~> 0.0.6' gem 'omniauth-azure-oauth2', '~> 0.0.6'
gem 'omniauth-bitbucket', '~> 0.0.2' gem 'omniauth-bitbucket', '~> 0.0.2'
gem 'omniauth-cas3', '~> 1.1.2' gem 'omniauth-cas3', '~> 1.1.2'
...@@ -58,7 +59,9 @@ gem "gitlab_git", '~> 9.0' ...@@ -58,7 +59,9 @@ gem "gitlab_git", '~> 9.0'
gem 'gitlab_omniauth-ldap', '~> 1.2.1', require: "omniauth-ldap" gem 'gitlab_omniauth-ldap', '~> 1.2.1', require: "omniauth-ldap"
# Git Wiki # Git Wiki
gem 'gollum-lib', '~> 4.1.0' # Required manually in config/initializers/gollum.rb to control load order
gem 'gollum-lib', '~> 4.1.0', require: false
gem 'gollum-rugged_adapter', '~> 0.4.2', require: false
# Language detection # Language detection
gem "github-linguist", "~> 4.7.0", require: "linguist" gem "github-linguist", "~> 4.7.0", require: "linguist"
......
...@@ -381,6 +381,9 @@ GEM ...@@ -381,6 +381,9 @@ GEM
rouge (~> 1.9) rouge (~> 1.9)
sanitize (~> 2.1.0) sanitize (~> 2.1.0)
stringex (~> 2.5.1) stringex (~> 2.5.1)
gollum-rugged_adapter (0.4.2)
mime-types (>= 1.15)
rugged (~> 0.24.0, >= 0.21.3)
gon (6.0.1) gon (6.0.1)
actionpack (>= 3.0) actionpack (>= 3.0)
json json
...@@ -495,6 +498,8 @@ GEM ...@@ -495,6 +498,8 @@ GEM
omniauth (1.3.1) omniauth (1.3.1)
hashie (>= 1.2, < 4) hashie (>= 1.2, < 4)
rack (>= 1.0, < 3) rack (>= 1.0, < 3)
omniauth-auth0 (1.4.1)
omniauth-oauth2 (~> 1.1)
omniauth-azure-oauth2 (0.0.6) omniauth-azure-oauth2 (0.0.6)
jwt (~> 1.0) jwt (~> 1.0)
omniauth (~> 1.0) omniauth (~> 1.0)
...@@ -703,7 +708,7 @@ GEM ...@@ -703,7 +708,7 @@ GEM
rubyntlm (0.5.2) rubyntlm (0.5.2)
rubypants (0.2.0) rubypants (0.2.0)
rufus-scheduler (3.1.10) rufus-scheduler (3.1.10)
rugged (0.24.0b13) rugged (0.24.0)
safe_yaml (1.0.4) safe_yaml (1.0.4)
sanitize (2.1.0) sanitize (2.1.0)
nokogiri (>= 1.4.4) nokogiri (>= 1.4.4)
...@@ -941,6 +946,7 @@ DEPENDENCIES ...@@ -941,6 +946,7 @@ DEPENDENCIES
gitlab_meta (= 7.0) gitlab_meta (= 7.0)
gitlab_omniauth-ldap (~> 1.2.1) gitlab_omniauth-ldap (~> 1.2.1)
gollum-lib (~> 4.1.0) gollum-lib (~> 4.1.0)
gollum-rugged_adapter (~> 0.4.2)
gon (~> 6.0.1) gon (~> 6.0.1)
grape (~> 0.13.0) grape (~> 0.13.0)
grape-entity (~> 0.4.2) grape-entity (~> 0.4.2)
...@@ -969,6 +975,7 @@ DEPENDENCIES ...@@ -969,6 +975,7 @@ DEPENDENCIES
oauth2 (~> 1.0.0) oauth2 (~> 1.0.0)
octokit (~> 3.8.0) octokit (~> 3.8.0)
omniauth (~> 1.3.1) omniauth (~> 1.3.1)
omniauth-auth0 (~> 1.4.1)
omniauth-azure-oauth2 (~> 0.0.6) omniauth-azure-oauth2 (~> 0.0.6)
omniauth-bitbucket (~> 0.0.2) omniauth-bitbucket (~> 0.0.2)
omniauth-cas3 (~> 1.1.2) omniauth-cas3 (~> 1.1.2)
......
...@@ -68,7 +68,7 @@ GitLab is a Ruby on Rails application that runs on the following software: ...@@ -68,7 +68,7 @@ GitLab is a Ruby on Rails application that runs on the following software:
- Ubuntu/Debian/CentOS/RHEL - Ubuntu/Debian/CentOS/RHEL
- Ruby (MRI) 2.1 - Ruby (MRI) 2.1
- Git 1.7.10+ - Git 2.7.3+
- Redis 2.8+ - Redis 2.8+
- MySQL or PostgreSQL - MySQL or PostgreSQL
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
margin-bottom: -$gl-padding; margin-bottom: -$gl-padding;
background-color: $background-color; background-color: $background-color;
padding: $gl-padding; padding: $gl-padding;
margin-bottom: 0px; margin-bottom: 0;
border-top: 1px solid $border-color; border-top: 1px solid $border-color;
border-bottom: 1px solid $border-color; border-bottom: 1px solid $border-color;
color: $gl-gray; color: $gl-gray;
......
...@@ -37,23 +37,23 @@ ...@@ -37,23 +37,23 @@
} }
@mixin btn-green { @mixin btn-green {
@include btn-color($green-light, $border-green-light, $green-normal, $border-green-normal, $green-dark, $border-green-dark, #FFFFFF); @include btn-color($green-light, $border-green-light, $green-normal, $border-green-normal, $green-dark, $border-green-dark, #fff);
} }
@mixin btn-blue { @mixin btn-blue {
@include btn-color($blue-light, $border-blue-light, $blue-normal, $border-blue-normal, $blue-dark, $border-blue-dark, #FFFFFF); @include btn-color($blue-light, $border-blue-light, $blue-normal, $border-blue-normal, $blue-dark, $border-blue-dark, #fff);
} }
@mixin btn-blue-medium { @mixin btn-blue-medium {
@include btn-color($blue-medium-light, $border-blue-light, $blue-medium, $border-blue-normal, $blue-medium-dark, $border-blue-dark, #FFFFFF); @include btn-color($blue-medium-light, $border-blue-light, $blue-medium, $border-blue-normal, $blue-medium-dark, $border-blue-dark, #fff);
} }
@mixin btn-orange { @mixin btn-orange {
@include btn-color($orange-light, $border-orange-light, $orange-normal, $border-orange-normal, $orange-dark, $border-orange-dark, #FFFFFF); @include btn-color($orange-light, $border-orange-light, $orange-normal, $border-orange-normal, $orange-dark, $border-orange-dark, #fff);
} }
@mixin btn-red { @mixin btn-red {
@include btn-color($red-light, $border-red-light, $red-normal, $border-red-normal, $red-dark, $border-red-dark, #FFFFFF); @include btn-color($red-light, $border-red-light, $red-normal, $border-red-normal, $red-dark, $border-red-dark, #fff);
} }
@mixin btn-gray { @mixin btn-gray {
...@@ -127,7 +127,7 @@ ...@@ -127,7 +127,7 @@
margin-right: 7px; margin-right: 7px;
float: left; float: left;
&:last-child { &:last-child {
margin-right: 0px; margin-right: 0;
} }
&.btn-xs { &.btn-xs {
margin-right: 3px; margin-right: 3px;
...@@ -139,7 +139,6 @@ ...@@ -139,7 +139,6 @@
.caret { .caret {
margin-left: 5px; margin-left: 5px;
color: $gray-darkest;
} }
} }
...@@ -170,7 +169,7 @@ ...@@ -170,7 +169,7 @@
margin-right: 7px; margin-right: 7px;
float: left; float: left;
&:last-child { &:last-child {
margin-right: 0px; margin-right: 0;
} }
} }
} }
......
...@@ -33,19 +33,19 @@ ...@@ -33,19 +33,19 @@
} }
.q2 { .q2 {
fill: #ACD5F2 !important; fill: #acd5f2 !important;
} }
.q3 { .q3 {
fill: #7FA8D1 !important; fill: #7fa8d1 !important;
} }
.q4 { .q4 {
fill: #49729B !important; fill: #49729b !important;
} }
.q5 { .q5 {
fill: #254E77 !important; fill: #254e77 !important;
} }
.domain-background { .domain-background {
......
...@@ -39,6 +39,6 @@ ...@@ -39,6 +39,6 @@
} }
.bs-callout-success { .bs-callout-success {
background-color: #dff0d8; background-color: #dff0d8;
border-color: #5cA64d; border-color: #5ca64d;
color: #3c763d; color: #3c763d;
} }
/** COLORS **/ /** COLORS **/
.cgray { color: $gl-gray; } .cgray { color: $gl-gray; }
.clgray { color: #BBB } .clgray { color: #bbb }
.cred { color: $gl-text-red; } .cred { color: $gl-text-red; }
.cgreen { color: $gl-text-green; } .cgreen { color: $gl-text-green; }
.cdark { color: #444 } .cdark { color: #444 }
...@@ -51,7 +51,7 @@ pre { ...@@ -51,7 +51,7 @@ pre {
} }
&.well-pre { &.well-pre {
border: 1px solid #EEE; border: 1px solid #eee;
background: #f9f9f9; background: #f9f9f9;
border-radius: 0; border-radius: 0;
color: #555; color: #555;
...@@ -103,7 +103,7 @@ span.update-author { ...@@ -103,7 +103,7 @@ span.update-author {
} }
.user-mention { .user-mention {
color: #2FA0BB; color: #2fa0bb;
font-weight: bold; font-weight: bold;
} }
...@@ -187,9 +187,9 @@ li.note { ...@@ -187,9 +187,9 @@ li.note {
.error-message { .error-message {
padding: 10px; padding: 10px;
background: #C67; background: #c67;
margin: 0; margin: 0;
color: #FFF; color: #fff;
a { a {
color: #fff; color: #fff;
...@@ -200,7 +200,7 @@ li.note { ...@@ -200,7 +200,7 @@ li.note {
.browser-alert { .browser-alert {
padding: 10px; padding: 10px;
text-align: center; text-align: center;
background: #C67; background: #c67;
color: #fff; color: #fff;
font-weight: bold; font-weight: bold;
a { a {
...@@ -271,7 +271,7 @@ img.emoji { ...@@ -271,7 +271,7 @@ img.emoji {
table { table {
td.permission-x { td.permission-x {
background: #D9EDF7 !important; background: #d9edf7 !important;
text-align: center; text-align: center;
} }
} }
...@@ -280,7 +280,7 @@ table { ...@@ -280,7 +280,7 @@ table {
float: left; float: left;
text-align: center; text-align: center;
font-size: 32px; font-size: 32px;
color: #AAA; color: #aaa;
width: 60px; width: 60px;
} }
...@@ -347,7 +347,7 @@ table { ...@@ -347,7 +347,7 @@ table {
.profiler-button, .profiler-button,
.profiler-controls { .profiler-controls {
border-color: #EEE !important; border-color: #eee !important;
} }
} }
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
height: 0; height: 0;
margin-left: 2px; margin-left: 2px;
vertical-align: middle; vertical-align: middle;
border-top: $caret-width-base dashed $dropdown-caret-color; border-top: $caret-width-base dashed;
border-right: $caret-width-base solid transparent; border-right: $caret-width-base solid transparent;
border-left: $caret-width-base solid transparent; border-left: $caret-width-base solid transparent;
} }
...@@ -161,9 +161,8 @@ ...@@ -161,9 +161,8 @@
.dropdown-menu-user-full-name { .dropdown-menu-user-full-name {
display: block; display: block;
margin-bottom: 2px;
font-weight: 600; font-weight: 600;
line-height: 1; line-height: 16px;
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
...@@ -171,7 +170,7 @@ ...@@ -171,7 +170,7 @@
.dropdown-menu-user-username { .dropdown-menu-user-username {
display: block; display: block;
line-height: 1; line-height: 16px;
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
...@@ -261,7 +260,7 @@ ...@@ -261,7 +260,7 @@
position: absolute; position: absolute;
top: 10px; top: 10px;
right: 10px; right: 10px;
color: #C7C7C7; color: #c7c7c7;
font-size: 12px; font-size: 12px;
pointer-events: none; pointer-events: none;
} }
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
right: 15px; right: 15px;
.btn { .btn {
padding: 0px 10px; padding: 0 10px;
font-size: 13px; font-size: 13px;
line-height: 28px; line-height: 28px;
} }
...@@ -84,7 +84,7 @@ ...@@ -84,7 +84,7 @@
&.blob-no-preview { &.blob-no-preview {
background: #eee; background: #eee;
text-shadow: 0 1px 2px #FFF; text-shadow: 0 1px 2px #fff;
padding: 100px 0; padding: 100px 0;
} }
...@@ -124,7 +124,7 @@ ...@@ -124,7 +124,7 @@
} }
td.line-numbers { td.line-numbers {
float: none; float: none;
border-left: 1px solid #DDD; border-left: 1px solid #ddd;
} }
td.lines { td.lines {
padding: 0; padding: 0;
......
...@@ -41,8 +41,8 @@ input[type='search'].search-input { ...@@ -41,8 +41,8 @@ input[type='search'].search-input {
} }
input[type='text'].danger { input[type='text'].danger {
background: #F2DEDE!important; background: #f2dede!important;
border-color: #D66; border-color: #d66;
text-shadow: 0 1px 1px #fff text-shadow: 0 1px 1px #fff
} }
......
...@@ -23,13 +23,13 @@ ...@@ -23,13 +23,13 @@
&:hover { &:hover {
background-color: $color-darker; background-color: $color-darker;
a { a {
color: #FFF; color: #fff;
} }
} }
} }
.collapse-nav a { .collapse-nav a {
color: #FFF; color: #fff;
background: $color; background: $color;
} }
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
&:hover { &:hover {
background-color: $color-dark; background-color: $color-dark;
color: #FFF; color: #fff;
text-decoration: none; text-decoration: none;
} }
} }
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
} }
&.active a { &.active a {
color: #FFF; color: #fff;
background: $color-dark; background: $color-dark;
&.no-highlight { &.no-highlight {
...@@ -79,42 +79,42 @@ ...@@ -79,42 +79,42 @@
} }
i { i {
color: #FFF color: #fff
} }
} }
} }
} }
} }
$theme-blue: #2980B9; $theme-blue: #2980b9;
$theme-charcoal: #333c47; $theme-charcoal: #333c47;
$theme-graphite: #888888; $theme-graphite: #888;
$theme-gray: #373737; $theme-gray: #373737;
$theme-green: #019875; $theme-green: #019875;
$theme-violet: #554488; $theme-violet: #548;
body { body {
&.ui_blue { &.ui_blue {
@include gitlab-theme(#BECDE9, $theme-blue, #1970A9, #096099); @include gitlab-theme(#becde9, $theme-blue, #1970a9, #096099);
} }
&.ui_charcoal { &.ui_charcoal {
@include gitlab-theme(#c5d0de, $theme-charcoal, #2b333d, #24272D); @include gitlab-theme(#c5d0de, $theme-charcoal, #2b333d, #24272d);
} }
&.ui_graphite { &.ui_graphite {
@include gitlab-theme(#CCCCCC, $theme-graphite, #777777, #666666); @include gitlab-theme(#ccc, $theme-graphite, #777, #666);
} }
&.ui_gray { &.ui_gray {
@include gitlab-theme(#979797, $theme-gray, #272727, #222222); @include gitlab-theme(#979797, $theme-gray, #272727, #222);
} }
&.ui_green { &.ui_green {
@include gitlab-theme(#AADDCC, $theme-green, #018865, #017855); @include gitlab-theme(#adc, $theme-green, #018865, #017855);
} }
&.ui_violet { &.ui_violet {
@include gitlab-theme(#9988CC, $theme-violet, #443366, #332255); @include gitlab-theme(#98c, $theme-violet, #436, #325);
} }
} }
\ No newline at end of file
...@@ -7,8 +7,8 @@ header { ...@@ -7,8 +7,8 @@ header {
&.navbar-empty { &.navbar-empty {
height: 58px; height: 58px;
background: #FFF; background: #fff;
border-bottom: 1px solid #EEE; border-bottom: 1px solid #eee;
.center-logo { .center-logo {
margin: 11px 0; margin: 11px 0;
...@@ -28,7 +28,7 @@ header { ...@@ -28,7 +28,7 @@ header {
min-height: $header-height; min-height: $header-height;
background-color: #fff; background-color: #fff;
border: none; border: none;
border-bottom: 1px solid #EEE; border-bottom: 1px solid #eee;
.container-fluid { .container-fluid {
width: 100% !important; width: 100% !important;
...@@ -47,7 +47,7 @@ header { ...@@ -47,7 +47,7 @@ header {
text-align: center; text-align: center;
&:hover, &:focus, &:active { &:hover, &:focus, &:active {
background-color: #FFF; background-color: #fff;
} }
} }
...@@ -59,7 +59,7 @@ header { ...@@ -59,7 +59,7 @@ header {
right: 2px; right: 2px;
&:hover { &:hover {
background-color: #EEE; background-color: #eee;
} }
&.active { &.active {
color: #7f8fa4; color: #7f8fa4;
...@@ -162,7 +162,7 @@ header { ...@@ -162,7 +162,7 @@ header {
font-size: 18px; font-size: 18px;
.navbar-nav { .navbar-nav {
margin: 0px; margin: 0;
float: none !important; float: none !important;
.visible-xs, .visable-sm { .visible-xs, .visable-sm {
......
.file-content.code { .file-content.code {
border: none; border: none;
box-shadow: none; box-shadow: none;
margin: 0px; margin: 0;
padding: 0px; padding: 0;
table-layout: fixed; table-layout: fixed;
pre { pre {
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
display: block; display: block;
float: left; float: left;
margin-right: 10px; margin-right: 10px;
color: #FFF; color: #fff;
font-size: $gl-font-size; font-size: $gl-font-size;
line-height: 25px; line-height: 25px;
......
...@@ -3,13 +3,13 @@ ...@@ -3,13 +3,13 @@
font-size: $font-size-base; font-size: $font-size-base;
&.ui-datepicker-inline { &.ui-datepicker-inline {
border: 1px solid #DDD; border: 1px solid #ddd;
padding: 10px; padding: 10px;
width: 270px; width: 270px;
.ui-datepicker-header { .ui-datepicker-header {
background: #FFF; background: #fff;
border-color: #DDD; border-color: #ddd;
} }
.ui-datepicker-calendar td a { .ui-datepicker-calendar td a {
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
} }
&.ui-autocomplete { &.ui-autocomplete {
border-color: #DDD; border-color: #ddd;
padding: 0; padding: 0;
margin-top: 2px; margin-top: 2px;
z-index: 1001; z-index: 1001;
...@@ -30,20 +30,20 @@ ...@@ -30,20 +30,20 @@
} }
.ui-state-default { .ui-state-default {
border: 1px solid #FFF; border: 1px solid #fff;
background: #FFF; background: #fff;
color: #777; color: #777;
} }
.ui-state-highlight { .ui-state-highlight {
border: 1px solid #EEE; border: 1px solid #eee;
background: #EEE; background: #eee;
} }
.ui-state-active { .ui-state-active {
border: 1px solid $gl-primary; border: 1px solid $gl-primary;
background: $gl-primary; background: $gl-primary;
color: #FFF; color: #fff;
} }
.ui-state-hover, .ui-state-hover,
......
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
} }
.md-preview-holder { .md-preview-holder {
background: #FFF; background: #fff;
border: 1px solid #ddd; border: 1px solid #ddd;
min-height: 169px; min-height: 169px;
padding: 5px; padding: 5px;
...@@ -80,7 +80,7 @@ ...@@ -80,7 +80,7 @@
.markdown-area { .markdown-area {
@include border-radius(0); @include border-radius(0);
background: #FFF; background: #fff;
border: 1px solid #ddd; border: 1px solid #ddd;
min-height: 140px; min-height: 140px;
max-height: 500px; max-height: 500px;
......
...@@ -67,17 +67,17 @@ ...@@ -67,17 +67,17 @@
* Base mixin for lists in GitLab * Base mixin for lists in GitLab
*/ */
@mixin basic-list { @mixin basic-list {
margin: 5px 0px; margin: 5px 0;
padding: 0px; padding: 0;
list-style: none; list-style: none;
> li { > li {
@include clearfix; @include clearfix;
padding: 10px 0; padding: 10px 0;
border-bottom: 1px solid #EEE; border-bottom: 1px solid #eee;
display: block; display: block;
margin: 0px; margin: 0;
&:last-child { &:last-child {
border-bottom: none; border-bottom: none;
......
...@@ -128,12 +128,12 @@ ...@@ -128,12 +128,12 @@
.show-aside { .show-aside {
display: none; display: none;
position: fixed; position: fixed;
right: 0px; right: 0;
top: 30%; top: 30%;
padding: 5px 15px; padding: 5px 15px;
background: #EEE; background: #eee;
font-size: 20px; font-size: 20px;
color: #777; color: #777;
z-index: 100; z-index: 100;
@include box-shadow(0 1px 2px #DDD); @include box-shadow(0 1px 2px #ddd);
} }
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
} }
&.active a { &.active a {
color: #000000; color: #000;
border-bottom: 2px solid #4688f1; border-bottom: 2px solid #4688f1;
} }
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
.top-area { .top-area {
@include clearfix; @include clearfix;
border-bottom: 1px solid #EEE; border-bottom: 1px solid #eee;
.nav-text { .nav-text {
padding-top: 16px; padding-top: 16px;
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
.nav-links { .nav-links {
display: inline-block; display: inline-block;
width: 50%; width: 50%;
margin-bottom: 0px; margin-bottom: 0;
border-bottom: none; border-bottom: none;
/* Small devices (phones, tablets, 768px and lower) */ /* Small devices (phones, tablets, 768px and lower) */
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
float: right; float: right;
text-align: right; text-align: right;
padding: 11px 0; padding: 11px 0;
margin-bottom: 0px; margin-bottom: 0;
> .dropdown { > .dropdown {
margin-right: $gl-padding-top; margin-right: $gl-padding-top;
......
...@@ -151,7 +151,7 @@ ...@@ -151,7 +151,7 @@
padding: 2px 25px 2px 5px; padding: 2px 25px 2px 5px;
background: #fff image-url('select2.png'); background: #fff image-url('select2.png');
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: right 0px bottom 6px; background-position: right 0 bottom 6px;
border: 1px solid $input-border; border: 1px solid $input-border;
@include border-radius($border-radius-default); @include border-radius($border-radius-default);
@include transition(border-color ease-in-out .15s, box-shadow ease-in-out .15s); @include transition(border-color ease-in-out .15s, box-shadow ease-in-out .15s);
...@@ -229,7 +229,7 @@ ...@@ -229,7 +229,7 @@
.namespace-result { .namespace-result {
.namespace-kind { .namespace-kind {
color: #AAA; color: #aaa;
font-weight: normal; font-weight: normal;
} }
.namespace-path { .namespace-path {
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
.gitlab-text-container-link { .gitlab-text-container-link {
z-index: 1; z-index: 1;
position: absolute; position: absolute;
left: 0px; left: 0;
} }
#logo { #logo {
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
width: 100%; width: 100%;
.container-fluid { .container-fluid {
background: #FFF; background: #fff;
padding: 0 $gl-padding; padding: 0 $gl-padding;
&.container-blank { &.container-blank {
...@@ -103,7 +103,7 @@ ...@@ -103,7 +103,7 @@
} }
&:hover { &:hover {
background-color: #EEE; background-color: #eee;
} }
} }
...@@ -143,7 +143,7 @@ ...@@ -143,7 +143,7 @@
overflow: hidden; overflow: hidden;
&.navbar-collapse { &.navbar-collapse {
padding: 0px !important; padding: 0 !important;
} }
li { li {
...@@ -182,7 +182,7 @@ ...@@ -182,7 +182,7 @@
.count { .count {
float: right; float: right;
background: #eee; background: #eee;
padding: 0px 8px; padding: 0 8px;
@include border-radius(6px); @include border-radius(6px);
} }
...@@ -194,8 +194,8 @@ ...@@ -194,8 +194,8 @@
} }
.sidebar-subnav { .sidebar-subnav {
margin-left: 0px; margin-left: 0;
padding-left: 0px; padding-left: 0;
li { li {
list-style: none; list-style: none;
......
...@@ -95,7 +95,7 @@ ...@@ -95,7 +95,7 @@
} }
&.label-inverse { &.label-inverse {
background-color: #333333; background-color: #333;
} }
} }
...@@ -138,7 +138,7 @@ ...@@ -138,7 +138,7 @@
} }
.btn-clipboard { .btn-clipboard {
min-width: 0px; min-width: 0;
} }
} }
......
...@@ -57,7 +57,7 @@ $component-active-bg: $brand-info; ...@@ -57,7 +57,7 @@ $component-active-bg: $brand-info;
$input-color: $text-color; $input-color: $text-color;
$input-border: #e7e9ed; $input-border: #e7e9ed;
$input-border-focus: #7F8FA4; $input-border-focus: #7f8fa4;
$legend-color: $text-color; $legend-color: $text-color;
...@@ -125,8 +125,8 @@ $panel-inner-border: $border-color; ...@@ -125,8 +125,8 @@ $panel-inner-border: $border-color;
// //
//## //##
$well-bg: #F9F9F9; $well-bg: #f9f9f9;
$well-border: #EEE; $well-border: #eee;
//== Code //== Code
// //
......
...@@ -27,13 +27,13 @@ ...@@ -27,13 +27,13 @@
line-height: 10px; line-height: 10px;
color: #555; color: #555;
vertical-align: middle; vertical-align: middle;
background-color: #FCFCFC; background-color: #fcfcfc;
border-width: 1px; border-width: 1px;
border-style: solid; border-style: solid;
border-color: #CCC #CCC #BBB; border-color: #ccc #ccc #bbb;
border-image: none; border-image: none;
border-radius: 3px; border-radius: 3px;
box-shadow: 0px -1px 0px #BBB inset; box-shadow: 0 -1px 0 #bbb inset;
} }
h1 { h1 {
...@@ -187,7 +187,7 @@ body { ...@@ -187,7 +187,7 @@ body {
} }
.page-title-empty { .page-title-empty {
margin-top: 0px; margin-top: 0;
line-height: 1.3; line-height: 1.3;
font-size: 1.25em; font-size: 1.25em;
font-weight: 600; font-weight: 600;
......
$row-hover: #f4f8fe; $row-hover: #f4f8fe;
$gl-text-color: #54565B; $gl-text-color: #54565b;
$gl-text-green: #4A2; $gl-text-green: #4a2;
$gl-text-red: #D12F19; $gl-text-red: #d12f19;
$gl-text-orange: #D90; $gl-text-orange: #d90;
$gl-header-color: #323232; $gl-header-color: #323232;
$gl-link-color: #333c48; $gl-link-color: #333c48;
$md-text-color: #444; $md-text-color: #444;
...@@ -30,24 +30,24 @@ $gl-vert-padding: 6px; ...@@ -30,24 +30,24 @@ $gl-vert-padding: 6px;
$gl-padding-top:10px; $gl-padding-top:10px;
$gl-avatar-size: 40px; $gl-avatar-size: 40px;
$secondary-text: #7f8fa4; $secondary-text: #7f8fa4;
$error-exclamation-point: #E62958; $error-exclamation-point: #e62958;
$border-radius-default: 3px; $border-radius-default: 3px;
$list-title-color: #333333; $list-title-color: #333;
$list-text-color: #555555; $list-text-color: #555;
$btn-transparent-color: #8F8F8F; $btn-transparent-color: #8f8f8f;
$ssh-key-icon-color: #8F8F8F; $ssh-key-icon-color: #8f8f8f;
$ssh-key-icon-size: 18px; $ssh-key-icon-size: 18px;
$provider-btn-group-border: #E5E5E5; $provider-btn-group-border: #e5e5e5;
$provider-btn-not-active-color: #4688F1; $provider-btn-not-active-color: #4688f1;
/* /*
* Color schema * Color schema
*/ */
$white-light: #FFFFFF; $white-light: #fff;
$white-normal: #ededed; $white-normal: #ededed;
$white-dark: #ededed; $white-dark: #ededed;
...@@ -57,55 +57,55 @@ $gray-dark: #ededed; ...@@ -57,55 +57,55 @@ $gray-dark: #ededed;
$gray-darkest: #c9c9c9; $gray-darkest: #c9c9c9;
$green-light: #38ae67; $green-light: #38ae67;
$green-normal: #2FAA60; $green-normal: #2faa60;
$green-dark: #2CA05B; $green-dark: #2ca05b;
$blue-light: #2EA8E5; $blue-light: #2ea8e5;
$blue-normal: #2D9FD8; $blue-normal: #2d9fd8;
$blue-dark: #2897CE; $blue-dark: #2897ce;
$blue-medium-light: #3498CB; $blue-medium-light: #3498cb;
$blue-medium: #2F8EBF; $blue-medium: #2f8ebf;
$blue-medium-dark: #2D86B4; $blue-medium-dark: #2d86b4;
$orange-light: rgba(252, 109, 38, 0.80); $orange-light: rgba(252, 109, 38, 0.80);
$orange-normal: #E75E40; $orange-normal: #e75e40;
$orange-dark: #CE5237; $orange-dark: #ce5237;
$red-light: #F06559; $red-light: #f06559;
$red-normal: #E52C5A; $red-normal: #e52c5a;
$red-dark: #D22852; $red-dark: #d22852;
$border-white-light: #F1F2F4; $border-white-light: #f1f2f4;
$border-white-normal: #D6DAE2; $border-white-normal: #d6dae2;
$border-white-dark: #C6CACF; $border-white-dark: #c6cacf;
$border-gray-light: rgba(0, 0, 0, 0.06); $border-gray-light: rgba(0, 0, 0, 0.06);
$border-gray-normal: rgba(0, 0, 0, 0.10);; $border-gray-normal: rgba(0, 0, 0, 0.10);;
$border-gray-dark: #C6CACF; $border-gray-dark: #c6cacf;
$border-green-light: #2FAA60; $border-green-light: #2faa60;
$border-green-normal: #2CA05B; $border-green-normal: #2ca05b;
$border-green-dark: #279654; $border-green-dark: #279654;
$border-blue-light: #2D9FD8; $border-blue-light: #2d9fd8;
$border-blue-normal: #2897CE; $border-blue-normal: #2897ce;
$border-blue-dark: #258DC1; $border-blue-dark: #258dc1;
$border-orange-light: #fc6d26; $border-orange-light: #fc6d26;
$border-orange-normal: #CE5237; $border-orange-normal: #ce5237;
$border-orange-dark: #C14E35; $border-orange-dark: #c14e35;
$border-red-light: #F24F41; $border-red-light: #f24f41;
$border-red-normal: #D22852; $border-red-normal: #d22852;
$border-red-dark: #CA264F; $border-red-dark: #ca264f;
$help-well-bg: #FAFAFA; $help-well-bg: #fafafa;
$help-well-border: #E5E5E5; $help-well-border: #e5e5e5;
$warning-message-bg: #FBF2D9; $warning-message-bg: #fbf2d9;
$warning-message-color: #9E8E60; $warning-message-color: #9e8e60;
$warning-message-border: #F0E2BB; $warning-message-border: #f0e2bb;
/* header */ /* header */
$light-grey-header: #faf9f9; $light-grey-header: #faf9f9;
...@@ -143,23 +143,22 @@ $dropdown-border-color: rgba(#000, .1); ...@@ -143,23 +143,22 @@ $dropdown-border-color: rgba(#000, .1);
$dropdown-shadow-color: rgba(#000, .1); $dropdown-shadow-color: rgba(#000, .1);
$dropdown-divider-color: rgba(#000, .1); $dropdown-divider-color: rgba(#000, .1);
$dropdown-header-color: #959494; $dropdown-header-color: #959494;
$dropdown-caret-color: #54565B; $dropdown-title-btn-color: #bfbfbf;
$dropdown-title-btn-color: #BFBFBF; $dropdown-input-color: #c7c7c7;
$dropdown-input-color: #C7C7C7;
$dropdown-input-focus-border: rgb(58, 171, 240); $dropdown-input-focus-border: rgb(58, 171, 240);
$dropdown-input-focus-shadow: rgba(#000, .2); $dropdown-input-focus-shadow: rgba(#000, .2);
$dropdown-loading-bg: rgba(#fff, .6); $dropdown-loading-bg: rgba(#fff, .6);
$dropdown-toggle-bg: #fff; $dropdown-toggle-bg: #fff;
$dropdown-toggle-color: #626262; $dropdown-toggle-color: #626262;
$dropdown-toggle-border-color: #EAEAEA; $dropdown-toggle-border-color: #eaeaea;
$dropdown-toggle-hover-border-color: darken($dropdown-toggle-border-color, 15%); $dropdown-toggle-hover-border-color: darken($dropdown-toggle-border-color, 15%);
$dropdown-toggle-icon-color: #C4C4C4; $dropdown-toggle-icon-color: #c4c4c4;
$dropdown-toggle-hover-icon-color: $dropdown-toggle-hover-border-color; $dropdown-toggle-hover-icon-color: $dropdown-toggle-hover-border-color;
/* /*
* Award emoji * Award emoji
*/ */
$award-emoji-menu-bg: #FFF; $award-emoji-menu-bg: #fff;
$award-emoji-menu-border: #F1F2F4; $award-emoji-menu-border: #f1f2f4;
$award-emoji-new-btn-icon-color: #DCDCDC; $award-emoji-new-btn-icon-color: #dcdcdc;
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
a.js-zen-enter { a.js-zen-enter {
color: $gl-gray; color: $gl-gray;
position: absolute; position: absolute;
top: 0px; top: 0;
right: 4px; right: 4px;
line-height: 56px; line-height: 56px;
} }
......
...@@ -43,12 +43,12 @@ ...@@ -43,12 +43,12 @@
// Search result highlight // Search result highlight
span.highlight_word { span.highlight_word {
background-color: #ffe792 !important; background-color: #ffe792 !important;
color: #000000 !important; color: #000 !important;
} }
.hll { background-color: #373b41 } .hll { background-color: #373b41 }
.c { color: #969896 } /* Comment */ .c { color: #969896 } /* Comment */
.err { color: #cc6666 } /* Error */ .err { color: #c66 } /* Error */
.k { color: #b294bb } /* Keyword */ .k { color: #b294bb } /* Keyword */
.l { color: #de935f } /* Literal */ .l { color: #de935f } /* Literal */
.n { color: #c5c8c6 } /* Name */ .n { color: #c5c8c6 } /* Name */
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
.cp { color: #969896 } /* Comment.Preproc */ .cp { color: #969896 } /* Comment.Preproc */
.c1 { color: #969896 } /* Comment.Single */ .c1 { color: #969896 } /* Comment.Single */
.cs { color: #969896 } /* Comment.Special */ .cs { color: #969896 } /* Comment.Special */
.gd { color: #cc6666 } /* Generic.Deleted */ .gd { color: #c66 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */ .ge { font-style: italic } /* Generic.Emph */
.gh { color: #c5c8c6; font-weight: bold } /* Generic.Heading */ .gh { color: #c5c8c6; font-weight: bold } /* Generic.Heading */
.gi { color: #b5bd68 } /* Generic.Inserted */ .gi { color: #b5bd68 } /* Generic.Inserted */
...@@ -77,17 +77,17 @@ ...@@ -77,17 +77,17 @@
.na { color: #81a2be } /* Name.Attribute */ .na { color: #81a2be } /* Name.Attribute */
.nb { color: #c5c8c6 } /* Name.Builtin */ .nb { color: #c5c8c6 } /* Name.Builtin */
.nc { color: #f0c674 } /* Name.Class */ .nc { color: #f0c674 } /* Name.Class */
.no { color: #cc6666 } /* Name.Constant */ .no { color: #c66 } /* Name.Constant */
.nd { color: #8abeb7 } /* Name.Decorator */ .nd { color: #8abeb7 } /* Name.Decorator */
.ni { color: #c5c8c6 } /* Name.Entity */ .ni { color: #c5c8c6 } /* Name.Entity */
.ne { color: #cc6666 } /* Name.Exception */ .ne { color: #c66 } /* Name.Exception */
.nf { color: #81a2be } /* Name.Function */ .nf { color: #81a2be } /* Name.Function */
.nl { color: #c5c8c6 } /* Name.Label */ .nl { color: #c5c8c6 } /* Name.Label */
.nn { color: #f0c674 } /* Name.Namespace */ .nn { color: #f0c674 } /* Name.Namespace */
.nx { color: #81a2be } /* Name.Other */ .nx { color: #81a2be } /* Name.Other */
.py { color: #c5c8c6 } /* Name.Property */ .py { color: #c5c8c6 } /* Name.Property */
.nt { color: #8abeb7 } /* Name.Tag */ .nt { color: #8abeb7 } /* Name.Tag */
.nv { color: #cc6666 } /* Name.Variable */ .nv { color: #c66 } /* Name.Variable */
.ow { color: #8abeb7 } /* Operator.Word */ .ow { color: #8abeb7 } /* Operator.Word */
.w { color: #c5c8c6 } /* Text.Whitespace */ .w { color: #c5c8c6 } /* Text.Whitespace */
.mf { color: #de935f } /* Literal.Number.Float */ .mf { color: #de935f } /* Literal.Number.Float */
...@@ -106,8 +106,8 @@ ...@@ -106,8 +106,8 @@
.s1 { color: #b5bd68 } /* Literal.String.Single */ .s1 { color: #b5bd68 } /* Literal.String.Single */
.ss { color: #b5bd68 } /* Literal.String.Symbol */ .ss { color: #b5bd68 } /* Literal.String.Symbol */
.bp { color: #c5c8c6 } /* Name.Builtin.Pseudo */ .bp { color: #c5c8c6 } /* Name.Builtin.Pseudo */
.vc { color: #cc6666 } /* Name.Variable.Class */ .vc { color: #c66 } /* Name.Variable.Class */
.vg { color: #cc6666 } /* Name.Variable.Global */ .vg { color: #c66 } /* Name.Variable.Global */
.vi { color: #cc6666 } /* Name.Variable.Instance */ .vi { color: #c66 } /* Name.Variable.Instance */
.il { color: #de935f } /* Literal.Number.Integer.Long */ .il { color: #de935f } /* Literal.Number.Integer.Long */
} }
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
// Search result highlight // Search result highlight
span.highlight_word { span.highlight_word {
background-color: #ffe792 !important; background-color: #ffe792 !important;
color: #000000 !important; color: #000 !important;
} }
.hll { background-color: #49483e } .hll { background-color: #49483e }
......
...@@ -96,7 +96,7 @@ ...@@ -96,7 +96,7 @@
.m { color: #2aa198 } /* Literal.Number */ .m { color: #2aa198 } /* Literal.Number */
.s { color: #2aa198 } /* Literal.String */ .s { color: #2aa198 } /* Literal.String */
.na { color: #93a1a1 } /* Name.Attribute */ .na { color: #93a1a1 } /* Name.Attribute */
.nb { color: #B58900 } /* Name.Builtin */ .nb { color: #b58900 } /* Name.Builtin */
.nc { color: #268bd2 } /* Name.Class */ .nc { color: #268bd2 } /* Name.Class */
.no { color: #cb4b16 } /* Name.Constant */ .no { color: #cb4b16 } /* Name.Constant */
.nd { color: #268bd2 } /* Name.Decorator */ .nd { color: #268bd2 } /* Name.Decorator */
......
...@@ -96,7 +96,7 @@ ...@@ -96,7 +96,7 @@
.m { color: #2aa198 } /* Literal.Number */ .m { color: #2aa198 } /* Literal.Number */
.s { color: #2aa198 } /* Literal.String */ .s { color: #2aa198 } /* Literal.String */
.na { color: #586e75 } /* Name.Attribute */ .na { color: #586e75 } /* Name.Attribute */
.nb { color: #B58900 } /* Name.Builtin */ .nb { color: #b58900 } /* Name.Builtin */
.nc { color: #268bd2 } /* Name.Class */ .nc { color: #268bd2 } /* Name.Class */
.no { color: #cb4b16 } /* Name.Constant */ .no { color: #cb4b16 } /* Name.Constant */
.nd { color: #268bd2 } /* Name.Decorator */ .nd { color: #268bd2 } /* Name.Decorator */
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
.line_holder { .line_holder {
.diff-line-num { .diff-line-num {
&.old { &.old {
background: #ffdddd; background: #fdd;
border-color: #f1c0c0; border-color: #f1c0c0;
} }
...@@ -68,66 +68,66 @@ ...@@ -68,66 +68,66 @@
} }
.hll { background-color: #f8f8f8 } .hll { background-color: #f8f8f8 }
.c { color: #999988; font-style: italic; } .c { color: #998; font-style: italic; }
.err { color: #a61717; background-color: #e3d2d2; } .err { color: #a61717; background-color: #e3d2d2; }
.k { font-weight: bold; } .k { font-weight: bold; }
.o { font-weight: bold; } .o { font-weight: bold; }
.cm { color: #999988; font-style: italic; } .cm { color: #998; font-style: italic; }
.cp { color: #999999; font-weight: bold; } .cp { color: #999; font-weight: bold; }
.c1 { color: #999988; font-style: italic; } .c1 { color: #998; font-style: italic; }
.cs { color: #999999; font-weight: bold; font-style: italic; } .cs { color: #999; font-weight: bold; font-style: italic; }
.gd { color: #000000; background-color: #ffdddd; } .gd { color: #000; background-color: #fdd; }
.gd .x { color: #000000; background-color: #ffaaaa; } .gd .x { color: #000; background-color: #faa; }
.ge { font-style: italic; } .ge { font-style: italic; }
.gr { color: #aa0000; } .gr { color: #a00; }
.gh { color: #999999; } .gh { color: #999; }
.gi { color: #000000; background-color: #ddffdd; } .gi { color: #000; background-color: #dfd; }
.gi .x { color: #000000; background-color: #aaffaa; } .gi .x { color: #000; background-color: #afa; }
.go { color: #888888; } .go { color: #888; }
.gp { color: #555555; } .gp { color: #555; }
.gs { font-weight: bold; } .gs { font-weight: bold; }
.gu { color: #800080; font-weight: bold; } .gu { color: #800080; font-weight: bold; }
.gt { color: #aa0000; } .gt { color: #a00; }
.kc { font-weight: bold; } .kc { font-weight: bold; }
.kd { font-weight: bold; } .kd { font-weight: bold; }
.kn { font-weight: bold; } .kn { font-weight: bold; }
.kp { font-weight: bold; } .kp { font-weight: bold; }
.kr { font-weight: bold; } .kr { font-weight: bold; }
.kt { color: #445588; font-weight: bold; } .kt { color: #458; font-weight: bold; }
.m { color: #009999; } .m { color: #099; }
.s { color: #dd1144; } .s { color: #d14; }
.n { color: #333333; } .n { color: #333; }
.na { color: teal; } .na { color: teal; }
.nb { color: #0086b3; } .nb { color: #0086b3; }
.nc { color: #445588; font-weight: bold; } .nc { color: #458; font-weight: bold; }
.no { color: teal; } .no { color: teal; }
.ni { color: purple; } .ni { color: purple; }
.ne { color: #990000; font-weight: bold; } .ne { color: #900; font-weight: bold; }
.nf { color: #990000; font-weight: bold; } .nf { color: #900; font-weight: bold; }
.nn { color: #555555; } .nn { color: #555; }
.nt { color: navy; } .nt { color: navy; }
.nv { color: teal; } .nv { color: teal; }
.ow { font-weight: bold; } .ow { font-weight: bold; }
.w { color: #bbbbbb; } .w { color: #bbb; }
.mf { color: #009999; } .mf { color: #099; }
.mh { color: #009999; } .mh { color: #099; }
.mi { color: #009999; } .mi { color: #099; }
.mo { color: #009999; } .mo { color: #099; }
.sb { color: #dd1144; } .sb { color: #d14; }
.sc { color: #dd1144; } .sc { color: #d14; }
.sd { color: #dd1144; } .sd { color: #d14; }
.s2 { color: #dd1144; } .s2 { color: #d14; }
.se { color: #dd1144; } .se { color: #d14; }
.sh { color: #dd1144; } .sh { color: #d14; }
.si { color: #dd1144; } .si { color: #d14; }
.sx { color: #dd1144; } .sx { color: #d14; }
.sr { color: #009926; } .sr { color: #009926; }
.s1 { color: #dd1144; } .s1 { color: #d14; }
.ss { color: #990073; } .ss { color: #990073; }
.bp { color: #999999; } .bp { color: #999; }
.vc { color: teal; } .vc { color: teal; }
.vg { color: teal; } .vg { color: teal; }
.vi { color: teal; } .vi { color: teal; }
.il { color: #009999; } .il { color: #099; }
.gc { color: #999; background-color: #EAF2F5; } .gc { color: #999; background-color: #eaf2f5; }
} }
.build-page { .build-page {
pre.trace { pre.trace {
background: #111111; background: #111;
color: #fff; color: #fff;
font-family: $monospace_font; font-family: $monospace_font;
white-space: pre; white-space: pre;
......
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
padding: 10px 0; padding: 10px 0;
li { li {
padding: 3px 0px; padding: 3px 0;
line-height: 20px; line-height: 20px;
} }
} }
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
.lists-separator { .lists-separator {
margin: 10px 0; margin: 10px 0;
border-color: #DDD; border-color: #ddd;
} }
.commits-row { .commits-row {
...@@ -76,7 +76,7 @@ li.commit { ...@@ -76,7 +76,7 @@ li.commit {
.commit-row-description { .commit-row-description {
font-size: 14px; font-size: 14px;
border-left: 1px solid #EEE; border-left: 1px solid #eee;
padding: 10px 15px; padding: 10px 15px;
margin: 5px 0 10px 5px; margin: 5px 0 10px 5px;
background: #f9f9f9; background: #f9f9f9;
...@@ -152,7 +152,7 @@ li.commit { ...@@ -152,7 +152,7 @@ li.commit {
.count { .count {
padding-top: 6px; padding-top: 6px;
padding-bottom: 0px; padding-bottom: 0;
font-size: 12px; font-size: 12px;
color: #333; color: #333;
display: block; display: block;
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
.diff-content { .diff-content {
overflow: auto; overflow: auto;
overflow-y: hidden; overflow-y: hidden;
background: #FFF; background: #fff;
color: #333; color: #333;
.unfold { .unfold {
...@@ -57,8 +57,8 @@ ...@@ -57,8 +57,8 @@
font-family: $monospace_font; font-family: $monospace_font;
border: none; border: none;
border-collapse: separate; border-collapse: separate;
margin: 0px; margin: 0;
padding: 0px; padding: 0;
.line_holder td { .line_holder td {
line-height: $code_line_height; line-height: $code_line_height;
font-size: $code_font_size; font-size: $code_font_size;
...@@ -76,10 +76,10 @@ ...@@ -76,10 +76,10 @@
} }
.old_line, .new_line { .old_line, .new_line {
margin: 0px; margin: 0;
padding: 0px; padding: 0;
border: none; border: none;
padding: 0px 5px; padding: 0 5px;
border-right: 1px solid; border-right: 1px solid;
text-align: right; text-align: right;
min-width: 35px; min-width: 35px;
...@@ -97,8 +97,8 @@ ...@@ -97,8 +97,8 @@
} }
.line_content { .line_content {
display: block; display: block;
margin: 0px; margin: 0;
padding: 0px 0.5em; padding: 0 0.5em;
border: none; border: none;
&.parallel { &.parallel {
display: table-cell; display: table-cell;
...@@ -118,7 +118,7 @@ ...@@ -118,7 +118,7 @@
background-color: #fff; background-color: #fff;
line-height: 0; line-height: 0;
img { img {
border: 1px solid #FFF; border: 1px solid #fff;
background: image-url('trans_bg.gif'); background: image-url('trans_bg.gif');
max-width: 100%; max-width: 100%;
} }
...@@ -183,7 +183,7 @@ ...@@ -183,7 +183,7 @@
height: 14px; height: 14px;
width: 15px; width: 15px;
position: absolute; position: absolute;
top: 0px; top: 0;
background: image-url('swipemode_sprites.gif') 0 3px no-repeat; background: image-url('swipemode_sprites.gif') 0 3px no-repeat;
} }
.bottom-handle { .bottom-handle {
...@@ -191,7 +191,7 @@ ...@@ -191,7 +191,7 @@
height: 14px; height: 14px;
width: 15px; width: 15px;
position: absolute; position: absolute;
bottom: 0px; bottom: 0;
background: image-url('swipemode_sprites.gif') 0 -11px no-repeat; background: image-url('swipemode_sprites.gif') 0 -11px no-repeat;
} }
} }
...@@ -206,8 +206,8 @@ ...@@ -206,8 +206,8 @@
.frame.added, .frame.deleted { .frame.added, .frame.deleted {
position: absolute; position: absolute;
display: block; display: block;
top: 0px; top: 0;
left: 0px; left: 0;
} }
.controls { .controls {
display: block; display: block;
...@@ -215,7 +215,7 @@ ...@@ -215,7 +215,7 @@
width: 300px; width: 300px;
z-index: 100; z-index: 100;
position: absolute; position: absolute;
bottom: 0px; bottom: 0;
left: 50%; left: 50%;
margin-left: -150px; margin-left: -150px;
...@@ -231,11 +231,11 @@ ...@@ -231,11 +231,11 @@
.dragger { .dragger {
display: block; display: block;
position: absolute; position: absolute;
left: 0px; left: 0;
top: 0px; top: 0;
height: 14px; height: 14px;
width: 14px; width: 14px;
background: image-url('onion_skin_sprites.gif') 0px -34px repeat-x; background: image-url('onion_skin_sprites.gif') 0 -34px repeat-x;
cursor: pointer; cursor: pointer;
} }
...@@ -243,17 +243,17 @@ ...@@ -243,17 +243,17 @@
display: block; display: block;
position: absolute; position: absolute;
top: 2px; top: 2px;
right: 0px; right: 0;
height: 10px; height: 10px;
width: 10px; width: 10px;
background: image-url('onion_skin_sprites.gif') -2px 0px no-repeat; background: image-url('onion_skin_sprites.gif') -2px 0 no-repeat;
} }
.opaque { .opaque {
display: block; display: block;
position: absolute; position: absolute;
top: 2px; top: 2px;
left: 0px; left: 0;
height: 10px; height: 10px;
width: 10px; width: 10px;
background: image-url('onion_skin_sprites.gif') -2px -10px no-repeat; background: image-url('onion_skin_sprites.gif') -2px -10px no-repeat;
...@@ -265,7 +265,7 @@ ...@@ -265,7 +265,7 @@
.view-modes { .view-modes {
padding: 10px; padding: 10px;
text-align: center; text-align: center;
background: #EEE; background: #eee;
ul, li { ul, li {
list-style: none; list-style: none;
......
...@@ -14,9 +14,9 @@ ...@@ -14,9 +14,9 @@
} }
.cancel-btn { .cancel-btn {
color: #B94A48; color: #b94a48;
&:hover { &:hover {
color: #B94A48; color: #b94a48;
} }
} }
......
This diff is collapsed.
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
.note-image-attach { .note-image-attach {
margin-top: 4px; margin-top: 4px;
margin-left: 0px; margin-left: 0;
max-width: 200px; max-width: 200px;
float: none; float: none;
} }
...@@ -83,10 +83,10 @@ ...@@ -83,10 +83,10 @@
.event_icon { .event_icon {
position: relative; position: relative;
float: right; float: right;
border: 1px solid #EEE; border: 1px solid #eee;
padding: 5px; padding: 5px;
@include border-radius(5px); @include border-radius(5px);
background: #F9F9F9; background: #f9f9f9;
margin-left: 10px; margin-left: 10px;
top: -6px; top: -6px;
img { img {
...@@ -160,7 +160,7 @@ ...@@ -160,7 +160,7 @@
.event-body { .event-body {
margin: 0; margin: 0;
border-left: 2px solid #DDD; border-left: 2px solid #ddd;
padding-left: 10px; padding-left: 10px;
} }
......
...@@ -6,11 +6,11 @@ ...@@ -6,11 +6,11 @@
font-size: 14px; font-size: 14px;
padding: 5px; padding: 5px;
border-bottom: 1px solid $border-color; border-bottom: 1px solid $border-color;
background: #EEE; background: #eee;
} }
.network-graph { .network-graph {
background: #FFF; background: #fff;
height: 500px; height: 500px;
overflow-y: scroll; overflow-y: scroll;
overflow-x: hidden; overflow-x: hidden;
......
i.icon-gitorious { i.icon-gitorious {
display: inline-block; display: inline-block;
background-position: 0px 0px; background-position: 0 0;
background-size: contain; background-size: contain;
background-repeat: no-repeat; background-repeat: no-repeat;
} }
......
...@@ -222,7 +222,7 @@ ...@@ -222,7 +222,7 @@
width: 100%; width: 100%;
text-align: center; text-align: center;
padding-bottom: 10px; padding-bottom: 10px;
color: #999999; color: #999;
span { span {
display: block; display: block;
...@@ -237,7 +237,7 @@ ...@@ -237,7 +237,7 @@
} }
i { i {
color: #999999; color: #999;
} }
} }
} }
......
...@@ -68,18 +68,18 @@ form.edit-issue { ...@@ -68,18 +68,18 @@ form.edit-issue {
.merge-request, .merge-request,
.issue { .issue {
&.today { &.today {
background: #EFE; background: #efe;
border-color: #CEC; border-color: #cec;
} }
&.closed { &.closed {
background: #F9F9F9; background: #f9f9f9;
border-color: #E5E5E5; border-color: #e5e5e5;
} }
&.merged { &.merged {
background: #F9F9F9; background: #f9f9f9;
border-color: #E5E5E5; border-color: #e5e5e5;
} }
} }
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
.login-box{ .login-box{
background: #fafafa; background: #fafafa;
border-radius: 10px; border-radius: 10px;
box-shadow: 0 0px 2px #CCC; box-shadow: 0 0 2px #ccc;
padding: 15px; padding: 15px;
.login-heading h3 { .login-heading h3 {
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
&.top { &.top {
@include border-radius(5px 5px 0 0); @include border-radius(5px 5px 0 0);
margin-bottom: 0px; margin-bottom: 0;
} }
&.bottom { &.bottom {
...@@ -85,12 +85,12 @@ ...@@ -85,12 +85,12 @@
&.middle { &.middle {
border-top: 0; border-top: 0;
margin-bottom:0px; margin-bottom:0;
@include border-radius(0); @include border-radius(0);
} }
&:active, &:focus { &:active, &:focus {
background-color: #FFF; background-color: #fff;
} }
} }
......
...@@ -113,7 +113,7 @@ ...@@ -113,7 +113,7 @@
} }
.mr-widget-footer { .mr-widget-footer {
border-top: 1px solid #EEE; border-top: 1px solid #eee;
} }
.ci-coverage { .ci-coverage {
...@@ -222,7 +222,7 @@ ...@@ -222,7 +222,7 @@
margin-bottom: 20px; margin-bottom: 20px;
span { span {
color: #B2B2B2; color: #b2b2b2;
a { a {
color: $md-link-color; color: $md-link-color;
......
...@@ -156,7 +156,7 @@ ...@@ -156,7 +156,7 @@
.comment-hints { .comment-hints {
color: #999; color: #999;
background: #FFF; background: #fff;
padding: 7px; padding: 7px;
margin-top: -7px; margin-top: -7px;
border: 1px solid $border-color; border: 1px solid $border-color;
......
...@@ -11,8 +11,8 @@ ...@@ -11,8 +11,8 @@
ul.notes { ul.notes {
display: block; display: block;
list-style: none; list-style: none;
margin: 0px; margin: 0;
padding: 0px; padding: 0;
.timeline-icon { .timeline-icon {
float: left; float: left;
...@@ -30,7 +30,7 @@ ul.notes { ...@@ -30,7 +30,7 @@ ul.notes {
font-size: 14px; font-size: 14px;
padding-top: 10px; padding-top: 10px;
padding-bottom: 10px; padding-bottom: 10px;
background: #FDFDFD; background: #fdfdfd;
.timeline-icon { .timeline-icon {
.avatar { .avatar {
...@@ -129,7 +129,7 @@ ul.notes { ...@@ -129,7 +129,7 @@ ul.notes {
hr { hr {
// Darken 'whitesmoke' a bit to make it more visible in note bodies // Darken 'whitesmoke' a bit to make it more visible in note bodies
border-color: darken(#F5F5F5, 8%); border-color: darken(#f5f5f5, 8%);
margin: 10px 0; margin: 10px 0;
} }
} }
...@@ -166,7 +166,7 @@ ul.notes { ...@@ -166,7 +166,7 @@ ul.notes {
vertical-align: middle; vertical-align: middle;
text-align: center; text-align: center;
padding: 10px 0; padding: 10px 0;
background: #FFF; background: #fff;
color: $text-color; color: $text-color;
} }
&.notes_line2 { &.notes_line2 {
...@@ -232,7 +232,7 @@ ul.notes { ...@@ -232,7 +232,7 @@ ul.notes {
.add-diff-note { .add-diff-note {
margin-top: -4px; margin-top: -4px;
@include border-radius(40px); @include border-radius(40px);
background: #FFF; background: #fff;
padding: 4px; padding: 4px;
font-size: 16px; font-size: 16px;
color: $gl-link-color; color: $gl-link-color;
...@@ -249,7 +249,7 @@ ul.notes { ...@@ -249,7 +249,7 @@ ul.notes {
&:hover { &:hover {
background: $gl-info; background: $gl-info;
color: #FFF; color: #fff;
@include show-add-diff-note; @include show-add-diff-note;
} }
} }
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
.btn { .btn {
line-height: 40px; line-height: 40px;
height: 42px; height: 42px;
padding: 0px 12px; padding: 0 12px;
img { img {
width: 32px; width: 32px;
......
...@@ -85,7 +85,7 @@ ...@@ -85,7 +85,7 @@
.project-repo-buttons { .project-repo-buttons {
margin-top: 20px; margin-top: 20px;
margin-bottom: 0px; margin-bottom: 0;
.count-buttons { .count-buttons {
display: block; display: block;
...@@ -140,7 +140,7 @@ ...@@ -140,7 +140,7 @@
left: 1px; left: 1px;
margin-top: -9px; margin-top: -9px;
border-width: 10px 7px 10px 0; border-width: 10px 7px 10px 0;
border-right-color: #FFF; border-right-color: #fff;
} }
} }
.count { .count {
...@@ -162,10 +162,10 @@ ...@@ -162,10 +162,10 @@
cursor: pointer; cursor: pointer;
background-image: none; background-image: none;
white-space: nowrap; white-space: nowrap;
margin: 0 11px 0px 4px; margin: 0 11px 0 4px;
&:hover { &:hover {
background: #FFF; background: #fff;
} }
} }
} }
...@@ -210,7 +210,7 @@ ...@@ -210,7 +210,7 @@
} }
.project_member_row form { .project_member_row form {
margin: 0px; margin: 0;
} }
.transfer-project .select2-container { .transfer-project .select2-container {
...@@ -462,7 +462,7 @@ pre.light-well { ...@@ -462,7 +462,7 @@ pre.light-well {
.form-control { .form-control {
@extend .monospace; @extend .monospace;
background: #FFF; background: #fff;
font-size: 14px; font-size: 14px;
margin-left: -1px; margin-left: -1px;
cursor: auto; cursor: auto;
...@@ -472,16 +472,16 @@ pre.light-well { ...@@ -472,16 +472,16 @@ pre.light-well {
.cannot-be-merged, .cannot-be-merged,
.cannot-be-merged:hover { .cannot-be-merged:hover {
color: #E62958; color: #e62958;
margin-top: 2px; margin-top: 2px;
} }
.private-forks-notice .private-fork-icon { .private-forks-notice .private-fork-icon {
i:nth-child(1) { i:nth-child(1) {
color: #2AA056; color: #2aa056;
} }
i:nth-child(2) { i:nth-child(2) {
color: #FFFFFF; color: #fff;
} }
} }
.runner-state { .runner-state {
padding: 6px 12px; padding: 6px 12px;
margin-right: 10px; margin-right: 10px;
color: #FFF; color: #fff;
&.runner-state-shared { &.runner-state-shared {
background: #32b186; background: #32b186;
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
margin-bottom: 20px; margin-bottom: 20px;
input { input {
border-color: #BBB; border-color: #bbb;
font-weight: bold; font-weight: bold;
} }
} }
......
...@@ -13,13 +13,13 @@ table .sherlock-code { ...@@ -13,13 +13,13 @@ table .sherlock-code {
} }
.sherlock-line-samples-table { .sherlock-line-samples-table {
margin-bottom: 0px !important; margin-bottom: 0 !important;
thead tr th, thead tr th,
tbody tr td { tbody tr td {
font-size: 13px !important; font-size: 13px !important;
text-align: right; text-align: right;
padding: 0px 10px !important; padding: 0 10px !important;
} }
} }
......
.ci-status { .ci-status {
padding: 2px 7px; padding: 2px 7px;
margin-right: 5px; margin-right: 5px;
border: 1px solid #EEE; border: 1px solid #eee;
white-space: nowrap; white-space: nowrap;
@include border-radius(4px); @include border-radius(4px);
......
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
.note-image-attach { .note-image-attach {
margin-top: 4px; margin-top: 4px;
margin-left: 0px; margin-left: 0;
max-width: 200px; max-width: 200px;
float: none; float: none;
} }
...@@ -89,7 +89,7 @@ ...@@ -89,7 +89,7 @@
.todo-body { .todo-body {
margin: 0; margin: 0;
border-left: 2px solid #DDD; border-left: 2px solid #ddd;
padding-left: 10px; padding-left: 10px;
} }
} }
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
.example { .example {
&:before { &:before {
content: "Example"; content: "Example";
color: #BBB; color: #bbb;
} }
padding: 15px; padding: 15px;
......
...@@ -2,23 +2,23 @@ ...@@ -2,23 +2,23 @@
// color codes are based on http://en.wikipedia.org/wiki/File:Xterm_256color_chart.svg // color codes are based on http://en.wikipedia.org/wiki/File:Xterm_256color_chart.svg
// see also: https://gist.github.com/jasonm23/2868981 // see also: https://gist.github.com/jasonm23/2868981
$black: #000000; $black: #000;
$red: #cd0000; $red: #cd0000;
$green: #00cd00; $green: #00cd00;
$yellow: #cdcd00; $yellow: #cdcd00;
$blue: #0000ee; // according to wikipedia, this is the xterm standard $blue: #00e; // according to wikipedia, this is the xterm standard
//$blue: #1e90ff; // this is used by all the terminals I tried (when configured with the xterm color profile) //$blue: #1e90ff; // this is used by all the terminals I tried (when configured with the xterm color profile)
$magenta: #cd00cd; $magenta: #cd00cd;
$cyan: #00cdcd; $cyan: #00cdcd;
$white: #e5e5e5; $white: #e5e5e5;
$l-black: #7f7f7f; $l-black: #7f7f7f;
$l-red: #ff0000; $l-red: #f00;
$l-green: #00ff00; $l-green: #0f0;
$l-yellow: #ffff00; $l-yellow: #ff0;
$l-blue: #5c5cff; $l-blue: #5c5cff;
$l-magenta: #ff00ff; $l-magenta: #f0f;
$l-cyan: #00ffff; $l-cyan: #0ff;
$l-white: #ffffff; $l-white: #fff;
.term-bold { .term-bold {
font-weight: bold; font-weight: bold;
...@@ -136,7 +136,7 @@ ...@@ -136,7 +136,7 @@
.xterm-fg-0 { .xterm-fg-0 {
color: #000000; color: #000;
} }
.xterm-fg-1 { .xterm-fg-1 {
color: #800000; color: #800000;
...@@ -163,28 +163,28 @@ ...@@ -163,28 +163,28 @@
color: #808080; color: #808080;
} }
.xterm-fg-9 { .xterm-fg-9 {
color: #ff0000; color: #f00;
} }
.xterm-fg-10 { .xterm-fg-10 {
color: #00ff00; color: #0f0;
} }
.xterm-fg-11 { .xterm-fg-11 {
color: #ffff00; color: #ff0;
} }
.xterm-fg-12 { .xterm-fg-12 {
color: #0000ff; color: #00f;
} }
.xterm-fg-13 { .xterm-fg-13 {
color: #ff00ff; color: #f0f;
} }
.xterm-fg-14 { .xterm-fg-14 {
color: #00ffff; color: #0ff;
} }
.xterm-fg-15 { .xterm-fg-15 {
color: #ffffff; color: #fff;
} }
.xterm-fg-16 { .xterm-fg-16 {
color: #000000; color: #000;
} }
.xterm-fg-17 { .xterm-fg-17 {
color: #00005f; color: #00005f;
...@@ -199,7 +199,7 @@ ...@@ -199,7 +199,7 @@
color: #0000d7; color: #0000d7;
} }
.xterm-fg-21 { .xterm-fg-21 {
color: #0000ff; color: #00f;
} }
.xterm-fg-22 { .xterm-fg-22 {
color: #005f00; color: #005f00;
...@@ -274,7 +274,7 @@ ...@@ -274,7 +274,7 @@
color: #00d7ff; color: #00d7ff;
} }
.xterm-fg-46 { .xterm-fg-46 {
color: #00ff00; color: #0f0;
} }
.xterm-fg-47 { .xterm-fg-47 {
color: #00ff5f; color: #00ff5f;
...@@ -289,7 +289,7 @@ ...@@ -289,7 +289,7 @@
color: #00ffd7; color: #00ffd7;
} }
.xterm-fg-51 { .xterm-fg-51 {
color: #00ffff; color: #0ff;
} }
.xterm-fg-52 { .xterm-fg-52 {
color: #5f0000; color: #5f0000;
...@@ -724,7 +724,7 @@ ...@@ -724,7 +724,7 @@
color: #d7ffff; color: #d7ffff;
} }
.xterm-fg-196 { .xterm-fg-196 {
color: #ff0000; color: #f00;
} }
.xterm-fg-197 { .xterm-fg-197 {
color: #ff005f; color: #ff005f;
...@@ -739,7 +739,7 @@ ...@@ -739,7 +739,7 @@
color: #ff00d7; color: #ff00d7;
} }
.xterm-fg-201 { .xterm-fg-201 {
color: #ff00ff; color: #f0f;
} }
.xterm-fg-202 { .xterm-fg-202 {
color: #ff5f00; color: #ff5f00;
...@@ -814,7 +814,7 @@ ...@@ -814,7 +814,7 @@
color: #ffd7ff; color: #ffd7ff;
} }
.xterm-fg-226 { .xterm-fg-226 {
color: #ffff00; color: #ff0;
} }
.xterm-fg-227 { .xterm-fg-227 {
color: #ffff5f; color: #ffff5f;
...@@ -829,7 +829,7 @@ ...@@ -829,7 +829,7 @@
color: #ffffd7; color: #ffffd7;
} }
.xterm-fg-231 { .xterm-fg-231 {
color: #ffffff; color: #fff;
} }
.xterm-fg-232 { .xterm-fg-232 {
color: #080808; color: #080808;
...@@ -850,7 +850,7 @@ ...@@ -850,7 +850,7 @@
color: #3a3a3a; color: #3a3a3a;
} }
.xterm-fg-238 { .xterm-fg-238 {
color: #444444; color: #444;
} }
.xterm-fg-239 { .xterm-fg-239 {
color: #4e4e4e; color: #4e4e4e;
...@@ -901,6 +901,6 @@ ...@@ -901,6 +901,6 @@
color: #e4e4e4; color: #e4e4e4;
} }
.xterm-fg-255 { .xterm-fg-255 {
color: #eeeeee; color: #eee;
} }
} }
...@@ -6,7 +6,7 @@ class Admin::AbuseReportsController < Admin::ApplicationController ...@@ -6,7 +6,7 @@ class Admin::AbuseReportsController < Admin::ApplicationController
def destroy def destroy
abuse_report = AbuseReport.find(params[:id]) abuse_report = AbuseReport.find(params[:id])
abuse_report.remove_user if params[:remove_user] abuse_report.remove_user(deleted_by: current_user) if params[:remove_user]
abuse_report.destroy abuse_report.destroy
render nothing: true render nothing: true
......
...@@ -119,10 +119,10 @@ class Admin::UsersController < Admin::ApplicationController ...@@ -119,10 +119,10 @@ class Admin::UsersController < Admin::ApplicationController
end end
def destroy def destroy
DeleteUserService.new(current_user).execute(user) DeleteUserWorker.perform_async(current_user.id, user.id)
respond_to do |format| respond_to do |format|
format.html { redirect_to admin_users_path } format.html { redirect_to admin_users_path, notice: "The user is being deleted." }
format.json { head :ok } format.json { head :ok }
end end
end end
......
...@@ -19,9 +19,9 @@ class AbuseReport < ActiveRecord::Base ...@@ -19,9 +19,9 @@ class AbuseReport < ActiveRecord::Base
validates :message, presence: true validates :message, presence: true
validates :user_id, uniqueness: { message: 'has already been reported' } validates :user_id, uniqueness: { message: 'has already been reported' }
def remove_user def remove_user(deleted_by:)
user.block user.block
user.destroy DeleteUserWorker.perform_async(deleted_by.id, user.id, delete_solo_owned_groups: true)
end end
def notify def notify
......
...@@ -2,7 +2,7 @@ class ProjectWiki ...@@ -2,7 +2,7 @@ class ProjectWiki
include Gitlab::ShellAdapter include Gitlab::ShellAdapter
MARKUPS = { MARKUPS = {
'Markdown' => :md, 'Markdown' => :markdown,
'RDoc' => :rdoc, 'RDoc' => :rdoc,
'AsciiDoc' => :asciidoc 'AsciiDoc' => :asciidoc
} unless defined?(MARKUPS) } unless defined?(MARKUPS)
...@@ -47,7 +47,7 @@ class ProjectWiki ...@@ -47,7 +47,7 @@ class ProjectWiki
def wiki def wiki
@wiki ||= begin @wiki ||= begin
Gollum::Wiki.new(path_to_repo) Gollum::Wiki.new(path_to_repo)
rescue Gollum::NoSuchPathError rescue Rugged::OSError
create_repo! create_repo!
end end
end end
...@@ -90,7 +90,7 @@ class ProjectWiki ...@@ -90,7 +90,7 @@ class ProjectWiki
def create_page(title, content, format = :markdown, message = nil) def create_page(title, content, format = :markdown, message = nil)
commit = commit_details(:created, message, title) commit = commit_details(:created, message, title)
wiki.write_page(title, format, content, commit) wiki.write_page(title, format.to_sym, content, commit)
update_project_activity update_project_activity
rescue Gollum::DuplicatePageError => e rescue Gollum::DuplicatePageError => e
...@@ -101,7 +101,7 @@ class ProjectWiki ...@@ -101,7 +101,7 @@ class ProjectWiki
def update_page(page, content, format = :markdown, message = nil) def update_page(page, content, format = :markdown, message = nil)
commit = commit_details(:updated, message, page.title) commit = commit_details(:updated, message, page.title)
wiki.update_page(page, page.name, format, content, commit) wiki.update_page(page, page.name, format.to_sym, content, commit)
update_project_activity update_project_activity
end end
......
...@@ -758,12 +758,15 @@ class Repository ...@@ -758,12 +758,15 @@ class Repository
def parse_search_result(result) def parse_search_result(result)
ref = nil ref = nil
filename = nil filename = nil
basename = nil
startline = 0 startline = 0
result.each_line.each_with_index do |line, index| result.each_line.each_with_index do |line, index|
if line =~ /^.*:.*:\d+:/ if line =~ /^.*:.*:\d+:/
ref, filename, startline = line.split(':') ref, filename, startline = line.split(':')
startline = startline.to_i - index startline = startline.to_i - index
extname = File.extname(filename)
basename = filename.sub(/#{extname}$/, '')
break break
end end
end end
...@@ -776,6 +779,7 @@ class Repository ...@@ -776,6 +779,7 @@ class Repository
OpenStruct.new( OpenStruct.new(
filename: filename, filename: filename,
basename: basename,
ref: ref, ref: ref,
startline: startline, startline: startline,
data: data data: data
......
...@@ -62,7 +62,7 @@ class WikiPage ...@@ -62,7 +62,7 @@ class WikiPage
# The raw content of this page. # The raw content of this page.
def content def content
@attributes[:content] ||= if @page @attributes[:content] ||= if @page
@page.raw_data @page.text_data
end end
end end
......
...@@ -5,18 +5,22 @@ class DeleteUserService ...@@ -5,18 +5,22 @@ class DeleteUserService
@current_user = current_user @current_user = current_user
end end
def execute(user) def execute(user, options = {})
if user.solo_owned_groups.present? if !options[:delete_solo_owned_groups] && user.solo_owned_groups.present?
user.errors[:base] << 'You must transfer ownership or delete groups before you can remove user' user.errors[:base] << 'You must transfer ownership or delete groups before you can remove user'
user return user
else end
user.personal_projects.each do |project|
# Skip repository removal because we remove directory with namespace user.solo_owned_groups.each do |group|
# that contain all this repositories DestroyGroupService.new(group, current_user).execute
::Projects::DestroyService.new(project, current_user, skip_repo: true).pending_delete! end
end
user.destroy user.personal_projects.each do |project|
# Skip repository removal because we remove directory with namespace
# that contain all this repositories
::Projects::DestroyService.new(project, current_user, skip_repo: true).pending_delete!
end end
user.destroy
end end
end end
...@@ -6,12 +6,12 @@ class DestroyGroupService ...@@ -6,12 +6,12 @@ class DestroyGroupService
end end
def execute def execute
@group.projects.each do |project| group.projects.each do |project|
# Skip repository removal because we remove directory with namespace # Skip repository removal because we remove directory with namespace
# that contain all this repositories # that contain all this repositories
::Projects::DestroyService.new(project, current_user, skip_repo: true).pending_delete! ::Projects::DestroyService.new(project, current_user, skip_repo: true).pending_delete!
end end
@group.destroy group.destroy
end end
end end
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
.blob-result .blob-result
.file-holder .file-holder
.file-title .file-title
= link_to namespace_project_wiki_path(@project.namespace, @project, wiki_blob.filename) do = link_to namespace_project_wiki_path(@project.namespace, @project, wiki_blob.basename) do
%i.fa.fa-file %i.fa.fa-file
%strong %strong
= wiki_blob.filename = wiki_blob.basename
.file-content.code.term .file-content.code.term
= render 'shared/file_highlight', blob: wiki_blob, first_line_number: wiki_blob.startline = render 'shared/file_highlight', blob: wiki_blob, first_line_number: wiki_blob.startline
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
- if params[:assignee_id] - if params[:assignee_id]
= hidden_field_tag(:assignee_id, params[:assignee_id]) = hidden_field_tag(:assignee_id, params[:assignee_id])
= dropdown_tag("Assignee", options: { toggle_class: "js-user-search js-filter-submit js-assignee-search", title: "Filter by assignee", filter: true, dropdown_class: "dropdown-menu-user dropdown-menu-selectable dropdown-menu-assignee", = dropdown_tag("Assignee", options: { toggle_class: "js-user-search js-filter-submit js-assignee-search", title: "Filter by assignee", filter: true, dropdown_class: "dropdown-menu-user dropdown-menu-selectable dropdown-menu-assignee",
placeholder: "Search assignee", data: { any_user: "Any Author", first_user: (current_user.username if current_user), null_user: true, current_user: true, project_id: (@project.id if @project), selected: params[:assignee_id], field_name: "assignee_id" } }) placeholder: "Search assignee", data: { any_user: "Any Assignee", first_user: (current_user.username if current_user), null_user: true, current_user: true, project_id: (@project.id if @project), selected: params[:assignee_id], field_name: "assignee_id" } })
.filter-item.inline.milestone-filter .filter-item.inline.milestone-filter
- if params[:milestone_title] - if params[:milestone_title]
......
class DeleteUserWorker
include Sidekiq::Worker
def perform(current_user_id, delete_user_id, options = {})
delete_user = User.find(delete_user_id)
current_user = User.find(current_user_id)
DeleteUserService.new(current_user).execute(delete_user, options.symbolize_keys)
end
end
...@@ -357,6 +357,12 @@ production: &base ...@@ -357,6 +357,12 @@ production: &base
# crowd_server_url: 'CROWD SERVER URL', # crowd_server_url: 'CROWD SERVER URL',
# application_name: 'YOUR_APP_NAME', # application_name: 'YOUR_APP_NAME',
# application_password: 'YOUR_APP_PASSWORD' } } # application_password: 'YOUR_APP_PASSWORD' } }
#
# - { name: 'auth0',
# args: {
# client_id: 'YOUR_AUTH0_CLIENT_ID',
# client_secret: 'YOUR_AUTH0_CLIENT_SECRET',
# namespace: 'YOUR_AUTH0_DOMAIN' } }
# SSO maximum session duration in seconds. Defaults to CAS default of 8 hours. # SSO maximum session duration in seconds. Defaults to CAS default of 8 hours.
# cas3: # cas3:
......
module Gollum
GIT_ADAPTER = "rugged"
end
require "gollum-lib"
module Gollum
class Committer
# Patch for UTF-8 path
def method_missing(name, *args)
index.send(name, *args)
end
end
end
class CiRunnersTokenIndex < ActiveRecord::Migration
disable_ddl_transaction!
def change
args = [:ci_runners, :token]
if Gitlab::Database.postgresql?
args << { algorithm: :concurrently }
end
add_index(*args)
end
end
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20160314143402) do ActiveRecord::Schema.define(version: 20160316123110) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
...@@ -260,6 +260,7 @@ ActiveRecord::Schema.define(version: 20160314143402) do ...@@ -260,6 +260,7 @@ ActiveRecord::Schema.define(version: 20160314143402) do
end end
add_index "ci_runners", ["description"], name: "index_ci_runners_on_description_trigram", using: :gin, opclasses: {"description"=>"gin_trgm_ops"} add_index "ci_runners", ["description"], name: "index_ci_runners_on_description_trigram", using: :gin, opclasses: {"description"=>"gin_trgm_ops"}
add_index "ci_runners", ["token"], name: "index_ci_runners_on_token", using: :btree
add_index "ci_runners", ["token"], name: "index_ci_runners_on_token_trigram", using: :gin, opclasses: {"token"=>"gin_trgm_ops"} add_index "ci_runners", ["token"], name: "index_ci_runners_on_token_trigram", using: :gin, opclasses: {"token"=>"gin_trgm_ops"}
create_table "ci_services", force: :cascade do |t| create_table "ci_services", force: :cascade do |t|
...@@ -775,9 +776,9 @@ ActiveRecord::Schema.define(version: 20160314143402) do ...@@ -775,9 +776,9 @@ ActiveRecord::Schema.define(version: 20160314143402) do
t.string "type" t.string "type"
t.string "title" t.string "title"
t.integer "project_id" t.integer "project_id"
t.datetime "created_at" t.datetime "created_at", null: false
t.datetime "updated_at" t.datetime "updated_at", null: false
t.boolean "active", default: false, null: false t.boolean "active", null: false
t.text "properties" t.text "properties"
t.boolean "template", default: false t.boolean "template", default: false
t.boolean "push_events", default: true t.boolean "push_events", default: true
......
...@@ -89,7 +89,7 @@ We also use two secure variables: ...@@ -89,7 +89,7 @@ We also use two secure variables:
In GitLab CI 7.12 a new feature was introduced: Secure Variables. In GitLab CI 7.12 a new feature was introduced: Secure Variables.
Secure Variables can added by going to `Project > Variables > Add Variable`. Secure Variables can added by going to `Project > Variables > Add Variable`.
**This feature requires `gitlab-runner` with version equal or greater than 0.4.0.** **This feature requires `gitlab-runner` with version equal or greater than 0.4.0.**
The variables that are defined in the project settings are send along with the build script to the runner. The variables that are defined in the project settings are sent along with the build script to the runner.
The secure variables are stored out of the repository. Never store secrets in your projects' .gitlab-ci.yml. The secure variables are stored out of the repository. Never store secrets in your projects' .gitlab-ci.yml.
It is also important that secret's value is hidden in the build log. It is also important that secret's value is hidden in the build log.
......
...@@ -22,7 +22,7 @@ If the highest number stable branch is unclear please check the [GitLab Blog](ht ...@@ -22,7 +22,7 @@ If the highest number stable branch is unclear please check the [GitLab Blog](ht
This guide is long because it covers many cases and includes all commands you need, this is [one of the few installation scripts that actually works out of the box](https://twitter.com/robinvdvleuten/status/424163226532986880). This guide is long because it covers many cases and includes all commands you need, this is [one of the few installation scripts that actually works out of the box](https://twitter.com/robinvdvleuten/status/424163226532986880).
This installation guide was created for and tested on **Debian/Ubuntu** operating systems. Please read [doc/install/requirements.md](./requirements.md) for hardware and operating system requirements. If you want to install on RHEL/CentOS we recommend using the [Omnibus packages](https://about.gitlab.com/downloads/). This installation guide was created for and tested on **Debian/Ubuntu** operating systems. Please read [requirements.md](requirements.md) for hardware and operating system requirements. If you want to install on RHEL/CentOS we recommend using the [Omnibus packages](https://about.gitlab.com/downloads/).
This is the official installation guide to set up a production server. To set up a **development installation** or for many other installation options please see [the installation section of the readme](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/README.md#installation). This is the official installation guide to set up a production server. To set up a **development installation** or for many other installation options please see [the installation section of the readme](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/README.md#installation).
...@@ -76,7 +76,7 @@ Make sure you have the right version of Git installed ...@@ -76,7 +76,7 @@ Make sure you have the right version of Git installed
# Install Git # Install Git
sudo apt-get install -y git-core sudo apt-get install -y git-core
# Make sure Git is version 1.7.10 or higher, for example 1.7.12 or 2.0.0 # Make sure Git is version 2.7.3 or higher
git --version git --version
Is the system packaged Git too old? Remove it and compile from source. Is the system packaged Git too old? Remove it and compile from source.
...@@ -89,8 +89,9 @@ Is the system packaged Git too old? Remove it and compile from source. ...@@ -89,8 +89,9 @@ Is the system packaged Git too old? Remove it and compile from source.
# Download and compile from source # Download and compile from source
cd /tmp cd /tmp
curl -L --progress https://www.kernel.org/pub/software/scm/git/git-2.4.3.tar.gz | tar xz curl -O --progress https://www.kernel.org/pub/software/scm/git/git-2.7.3.tar.gz
cd git-2.4.3/ echo '30d067499b61caddedaf1a407b4947244f14d10842d100f7c7c6ea1c288280cd git-2.7.3.tar.gz' | shasum -a256 -c - && tar -xzf git-2.7.3.tar.gz
cd git-2.7.3/
./configure ./configure
make prefix=/usr/local all make prefix=/usr/local all
...@@ -143,7 +144,7 @@ use 64-bit Linux. You can find downloads for other platforms at the [Go download ...@@ -143,7 +144,7 @@ use 64-bit Linux. You can find downloads for other platforms at the [Go download
page](https://golang.org/dl). page](https://golang.org/dl).
curl -O --progress https://storage.googleapis.com/golang/go1.5.3.linux-amd64.tar.gz curl -O --progress https://storage.googleapis.com/golang/go1.5.3.linux-amd64.tar.gz
echo '43afe0c5017e502630b1aea4d44b8a7f059bf60d7f29dfd58db454d4e4e0ae53 go1.5.3.linux-amd64.tar.gz' | shasum -c - && \ echo '43afe0c5017e502630b1aea4d44b8a7f059bf60d7f29dfd58db454d4e4e0ae53 go1.5.3.linux-amd64.tar.gz' | shasum -a256 -c - && \
sudo tar -C /usr/local -xzf go1.5.3.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.5.3.linux-amd64.tar.gz
sudo ln -sf /usr/local/go/bin/{go,godoc,gofmt} /usr/local/bin/ sudo ln -sf /usr/local/go/bin/{go,godoc,gofmt} /usr/local/bin/
rm go1.5.3.linux-amd64.tar.gz rm go1.5.3.linux-amd64.tar.gz
...@@ -160,19 +161,12 @@ We recommend using a PostgreSQL database. For MySQL check [MySQL setup guide](da ...@@ -160,19 +161,12 @@ We recommend using a PostgreSQL database. For MySQL check [MySQL setup guide](da
# Install the database packages # Install the database packages
sudo apt-get install -y postgresql postgresql-client libpq-dev sudo apt-get install -y postgresql postgresql-client libpq-dev
# Login to PostgreSQL
sudo -u postgres psql -d template1
# Create a user for GitLab # Create a user for GitLab
# Do not type the 'template1=#', this is part of the prompt sudo -u postgres psql -d template1 -c "CREATE USER git CREATEDB;"
template1=# CREATE USER git CREATEDB;
# Create the GitLab production database & grant all privileges on database # Create the GitLab production database & grant all privileges on database
template1=# CREATE DATABASE gitlabhq_production OWNER git; sudo -u postgres psql -d template1 -c "CREATE DATABASE gitlabhq_production OWNER git;"
# Quit the database session
template1=# \q
# Try connecting to the new database with the new user # Try connecting to the new database with the new user
sudo -u git -H psql -d gitlabhq_production sudo -u git -H psql -d gitlabhq_production
......
...@@ -22,7 +22,7 @@ For the installations options please see [the installation page on the GitLab we ...@@ -22,7 +22,7 @@ For the installations options please see [the installation page on the GitLab we
- FreeBSD - FreeBSD
On the above unsupported distributions is still possible to install GitLab yourself. On the above unsupported distributions is still possible to install GitLab yourself.
Please see the [installation from source guide](https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/installation.md) and the [unofficial installation guides](https://github.com/gitlabhq/gitlab-public-wiki/wiki/Unofficial-Installation-Guides) on the public wiki for more information. Please see the [installation from source guide](installation.md) and the [installation guides](https://about.gitlab.com/installation/) for more information.
### Non-Unix operating systems such as Windows ### Non-Unix operating systems such as Windows
......
# Auth0 OmniAuth Provider
To enable the Auth0 OmniAuth provider, you must create an Auth0 account, and an
application.
1. Sign in to the [Auth0 Console](https://manage.auth0.com). If you need to
create an account, you can do so at the same link.
1. Select "New App/API".
1. Provide the Application Name ('GitLab' works fine).
1. Once created, you should see the Quick Start options. Disregard them and
select 'Settings' above the Quick Start options.
1. At the top of the Settings screen, you should see your Domain, Client ID and
Client Secret. Take note of these as you'll need to put them in the
configuration file. For example:
- Domain: `test1234.auth0.com`
- Client ID: `t6X8L2465bNePWLOvt9yi41i`
- Client Secret: `KbveM3nqfjwCbrhaUy_gDu2dss8TIlHIdzlyf33pB7dEK5u_NyQdp65O_o02hXs2`
1. Fill in the Allowed Callback URLs:
- http://`YOUR_GITLAB_URL`/users/auth/auth0/callback (or)
- https://`YOUR_GITLAB_URL`/users/auth/auth0/callback
1. Fill in the Allowed Origins (CORS):
- http://`YOUR_GITLAB_URL` (or)
- https://`YOUR_GITLAB_URL`
1. On your GitLab server, open the configuration file.
For omnibus package:
```sh
sudo editor /etc/gitlab/gitlab.rb
```
For installations from source:
```sh
cd /home/git/gitlab
sudo -u git -H editor config/gitlab.yml
```
1. See [Initial OmniAuth Configuration](omniauth.md#initial-omniauth-configuration)
for initial settings.
1. Add the provider configuration:
For omnibus package:
```ruby
gitlab_rails['omniauth_providers'] = [
{
"name" => "auth0",
"args" => { client_id: 'YOUR_AUTH0_CLIENT_ID'',
client_secret: 'YOUR_AUTH0_CLIENT_SECRET',
namespace: 'YOUR_AUTH0_DOMAIN'
}
}
]
```
For installations from source:
```yaml
- { name: 'auth0',
args: {
client_id: 'YOUR_AUTH0_CLIENT_ID',
client_secret: 'YOUR_AUTH0_CLIENT_SECRET',
namespace: 'YOUR_AUTH0_DOMAIN'
}
}
```
1. Change `YOUR_AUTH0_CLIENT_ID` to the client ID from the Auth0 Console page
from step 5.
1. Change `YOUR_AUTH0_CLIENT_SECRET` to the client secret from the Auth0 Console
page from step 5.
1. Save the file and [reconfigure GitLab](../administration/restart_gitlab.md)
for the changes to take effect.
On the sign in page there should now be an Auth0 icon below the regular sign in
form. Click the icon to begin the authentication process. Auth0 will ask the
user to sign in and authorize the GitLab application. If everything goes well
the user will be returned to GitLab and will be signed in.
...@@ -28,6 +28,7 @@ contains some settings that are common for all providers. ...@@ -28,6 +28,7 @@ contains some settings that are common for all providers.
- [SAML](saml.md) - [SAML](saml.md)
- [Crowd](crowd.md) - [Crowd](crowd.md)
- [Azure](azure.md) - [Azure](azure.md)
- [Auth0](auth0.md)
## Initial OmniAuth Configuration ## Initial OmniAuth Configuration
......
...@@ -100,7 +100,7 @@ class Spinach::Features::Search < Spinach::FeatureSteps ...@@ -100,7 +100,7 @@ class Spinach::Features::Search < Spinach::FeatureSteps
step 'I should see "test_wiki" link in the search results' do step 'I should see "test_wiki" link in the search results' do
page.within('.results') do page.within('.results') do
find(:css, '.search-results').should have_link 'test_wiki.md' expect(find(:css, '.search-results')).to have_link 'test_wiki'
end end
end end
......
...@@ -9,7 +9,7 @@ Capybara.register_driver :poltergeist do |app| ...@@ -9,7 +9,7 @@ Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, js_errors: true, timeout: timeout, window_size: [1366, 768]) Capybara::Poltergeist::Driver.new(app, js_errors: true, timeout: timeout, window_size: [1366, 768])
end end
Capybara.default_wait_time = timeout Capybara.default_max_wait_time = timeout
Capybara.ignore_hidden_elements = false Capybara.ignore_hidden_elements = false
unless ENV['CI'] || ENV['CI_SERVER'] unless ENV['CI'] || ENV['CI_SERVER']
......
...@@ -4,6 +4,8 @@ module Gitlab ...@@ -4,6 +4,8 @@ module Gitlab
include Enumerable include Enumerable
def parse(lines) def parse(lines)
return [] if lines.blank?
@lines = lines @lines = lines
line_obj_index = 0 line_obj_index = 0
line_old = 1 line_old = 1
......
...@@ -47,6 +47,7 @@ namespace :gemojione do ...@@ -47,6 +47,7 @@ namespace :gemojione do
# let's simplify it # let's simplify it
system(%Q(sed -i '' "s/width: #{SIZE}px; height: #{SIZE}px; background: image-url('emoji.png')/background-position:/" #{style_path})) system(%Q(sed -i '' "s/width: #{SIZE}px; height: #{SIZE}px; background: image-url('emoji.png')/background-position:/" #{style_path}))
system(%Q(sed -i '' "s/ no-repeat//" #{style_path})) system(%Q(sed -i '' "s/ no-repeat//" #{style_path}))
system(%Q(sed -i '' "s/ 0px/ 0/" #{style_path}))
# Append a generic rule that applies to all Emojis # Append a generic rule that applies to all Emojis
File.open(style_path, 'a') do |f| File.open(style_path, 'a') do |f|
......
...@@ -913,7 +913,7 @@ namespace :gitlab do ...@@ -913,7 +913,7 @@ namespace :gitlab do
end end
def check_git_version def check_git_version
required_version = Gitlab::VersionInfo.new(1, 7, 10) required_version = Gitlab::VersionInfo.new(2, 7, 3)
current_version = Gitlab::VersionInfo.parse(run(%W(#{Gitlab.config.git.bin_path} --version))) current_version = Gitlab::VersionInfo.parse(run(%W(#{Gitlab.config.git.bin_path} --version)))
puts "Your git bin path is \"#{Gitlab.config.git.bin_path}\"" puts "Your git bin path is \"#{Gitlab.config.git.bin_path}\""
......
...@@ -90,4 +90,9 @@ eos ...@@ -90,4 +90,9 @@ eos
end end
end end
end end
context 'when lines is empty' do
it { expect(parser.parse([])).to eq([]) }
it { expect(parser.parse(nil)).to eq([]) }
end
end end
...@@ -13,7 +13,8 @@ ...@@ -13,7 +13,8 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe AbuseReport, type: :model do RSpec.describe AbuseReport, type: :model do
subject { create(:abuse_report) } subject { create(:abuse_report) }
let(:user) { create(:user) }
it { expect(subject).to be_valid } it { expect(subject).to be_valid }
...@@ -31,17 +32,14 @@ RSpec.describe AbuseReport, type: :model do ...@@ -31,17 +32,14 @@ RSpec.describe AbuseReport, type: :model do
describe '#remove_user' do describe '#remove_user' do
it 'blocks the user' do it 'blocks the user' do
report = build(:abuse_report) expect { subject.remove_user(deleted_by: user) }.to change { subject.user.blocked? }.to(true)
allow(report.user).to receive(:destroy)
expect { report.remove_user }.to change { report.user.blocked? }.to(true)
end end
it 'removes the user' do it 'lets a worker delete the user' do
report = build(:abuse_report) expect(DeleteUserWorker).to receive(:perform_async).with(user.id, subject.user.id,
delete_solo_owned_groups: true)
expect { report.remove_user }.to change { User.count }.by(-1) subject.remove_user(deleted_by: user)
end end
end end
......
...@@ -101,13 +101,29 @@ describe Repository, models: true do ...@@ -101,13 +101,29 @@ describe Repository, models: true do
end end
describe 'parsing result' do describe 'parsing result' do
subject { repository.parse_search_result(results.first) } subject { repository.parse_search_result(search_result) }
let(:search_result) { results.first }
it { is_expected.to be_an OpenStruct } it { is_expected.to be_an OpenStruct }
it { expect(subject.filename).to eq('CHANGELOG') } it { expect(subject.filename).to eq('CHANGELOG') }
it { expect(subject.basename).to eq('CHANGELOG') }
it { expect(subject.ref).to eq('master') } it { expect(subject.ref).to eq('master') }
it { expect(subject.startline).to eq(186) } it { expect(subject.startline).to eq(186) }
it { expect(subject.data.lines[2]).to eq(" - Feature: Replace teams with group membership\n") } it { expect(subject.data.lines[2]).to eq(" - Feature: Replace teams with group membership\n") }
context "when filename has extension" do
let(:search_result) { "master:CONTRIBUTE.md:5:- [Contribute to GitLab](#contribute-to-gitlab)\n" }
it { expect(subject.filename).to eq('CONTRIBUTE.md') }
it { expect(subject.basename).to eq('CONTRIBUTE') }
end
context "when file under directory" do
let(:search_result) { "master:a/b/c.md:5:a b c\n" }
it { expect(subject.filename).to eq('a/b/c.md') }
it { expect(subject.basename).to eq('a/b/c') }
end
end end
end end
......
require 'spec_helper'
describe DeleteUserService, services: true do
describe "Deletes a user and all their personal projects" do
let!(:user) { create(:user) }
let!(:current_user) { create(:user) }
let!(:namespace) { create(:namespace, owner: user) }
let!(:project) { create(:project, namespace: namespace) }
context 'no options are given' do
it 'deletes the user' do
DeleteUserService.new(current_user).execute(user)
expect { User.find(user.id) }.to raise_error(ActiveRecord::RecordNotFound)
end
it 'will delete the project in the near future' do
expect_any_instance_of(Projects::DestroyService).to receive(:pending_delete!).once
DeleteUserService.new(current_user).execute(user)
end
end
context "solo owned groups present" do
let(:solo_owned) { create(:group) }
let(:member) { create(:group_member) }
let(:user) { member.user }
before do
solo_owned.group_members = [member]
DeleteUserService.new(current_user).execute(user)
end
it 'does not delete the user' do
expect(User.find(user.id)).to eq user
end
end
context "deletions with solo owned groups" do
let(:solo_owned) { create(:group) }
let(:member) { create(:group_member) }
let(:user) { member.user }
before do
solo_owned.group_members = [member]
DeleteUserService.new(current_user).execute(user, delete_solo_owned_groups: true)
end
it 'deletes solo owned groups' do
expect { Project.find(solo_owned.id) }.to raise_error(ActiveRecord::RecordNotFound)
end
it 'deletes the user' do
expect { User.find(user.id) }.to raise_error(ActiveRecord::RecordNotFound)
end
end
end
end
...@@ -10,7 +10,7 @@ Capybara.register_driver :poltergeist do |app| ...@@ -10,7 +10,7 @@ Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, js_errors: true, timeout: timeout, window_size: [1366, 768]) Capybara::Poltergeist::Driver.new(app, js_errors: true, timeout: timeout, window_size: [1366, 768])
end end
Capybara.default_wait_time = timeout Capybara.default_max_wait_time = timeout
Capybara.ignore_hidden_elements = true Capybara.ignore_hidden_elements = true
unless ENV['CI'] || ENV['CI_SERVER'] unless ENV['CI'] || ENV['CI_SERVER']
......
module WaitForAjax module WaitForAjax
def wait_for_ajax def wait_for_ajax
Timeout.timeout(Capybara.default_wait_time) do Timeout.timeout(Capybara.default_max_wait_time) do
loop until finished_all_ajax_requests? loop until finished_all_ajax_requests?
end end
end end
......
require 'spec_helper'
describe DeleteUserWorker do
let!(:user) { create(:user) }
let!(:current_user) { create(:user) }
it "calls the DeleteUserWorker with the params it was given" do
expect_any_instance_of(DeleteUserService).to receive(:execute).
with(user, {})
DeleteUserWorker.new.perform(current_user.id, user.id)
end
it "uses symbolized keys" do
expect_any_instance_of(DeleteUserService).to receive(:execute).
with(user, test: "test")
DeleteUserWorker.new.perform(current_user.id, user.id, "test" => "test")
end
end
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