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)
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.
- 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
- Update `omniauth-saml` to 1.5.0 to allow for custom response attributes to be set
- Memoize @group in Admin::GroupsController (Yatish Mehta)
- 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)
- 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
......@@ -40,6 +43,10 @@ v 8.6.0 (unreleased)
- Add ability to show archived projects on dashboard, explore and group pages
- Move group activity to separate page
- 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
- Obtain a lease before querying LDAP
......
......@@ -22,6 +22,7 @@ gem 'devise', '~> 3.5.4'
gem 'devise-async', '~> 0.9.0'
gem 'doorkeeper', '~> 2.2.0'
gem 'omniauth', '~> 1.3.1'
gem 'omniauth-auth0', '~> 1.4.1'
gem 'omniauth-azure-oauth2', '~> 0.0.6'
gem 'omniauth-bitbucket', '~> 0.0.2'
gem 'omniauth-cas3', '~> 1.1.2'
......@@ -58,7 +59,9 @@ gem "gitlab_git", '~> 9.0'
gem 'gitlab_omniauth-ldap', '~> 1.2.1', require: "omniauth-ldap"
# 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
gem "github-linguist", "~> 4.7.0", require: "linguist"
......
......@@ -381,6 +381,9 @@ GEM
rouge (~> 1.9)
sanitize (~> 2.1.0)
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)
actionpack (>= 3.0)
json
......@@ -495,6 +498,8 @@ GEM
omniauth (1.3.1)
hashie (>= 1.2, < 4)
rack (>= 1.0, < 3)
omniauth-auth0 (1.4.1)
omniauth-oauth2 (~> 1.1)
omniauth-azure-oauth2 (0.0.6)
jwt (~> 1.0)
omniauth (~> 1.0)
......@@ -703,7 +708,7 @@ GEM
rubyntlm (0.5.2)
rubypants (0.2.0)
rufus-scheduler (3.1.10)
rugged (0.24.0b13)
rugged (0.24.0)
safe_yaml (1.0.4)
sanitize (2.1.0)
nokogiri (>= 1.4.4)
......@@ -941,6 +946,7 @@ DEPENDENCIES
gitlab_meta (= 7.0)
gitlab_omniauth-ldap (~> 1.2.1)
gollum-lib (~> 4.1.0)
gollum-rugged_adapter (~> 0.4.2)
gon (~> 6.0.1)
grape (~> 0.13.0)
grape-entity (~> 0.4.2)
......@@ -969,6 +975,7 @@ DEPENDENCIES
oauth2 (~> 1.0.0)
octokit (~> 3.8.0)
omniauth (~> 1.3.1)
omniauth-auth0 (~> 1.4.1)
omniauth-azure-oauth2 (~> 0.0.6)
omniauth-bitbucket (~> 0.0.2)
omniauth-cas3 (~> 1.1.2)
......
......@@ -68,7 +68,7 @@ GitLab is a Ruby on Rails application that runs on the following software:
- Ubuntu/Debian/CentOS/RHEL
- Ruby (MRI) 2.1
- Git 1.7.10+
- Git 2.7.3+
- Redis 2.8+
- MySQL or PostgreSQL
......
......@@ -23,7 +23,7 @@
margin-bottom: -$gl-padding;
background-color: $background-color;
padding: $gl-padding;
margin-bottom: 0px;
margin-bottom: 0;
border-top: 1px solid $border-color;
border-bottom: 1px solid $border-color;
color: $gl-gray;
......
......@@ -37,23 +37,23 @@
}
@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 {
@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 {
@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 {
@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 {
@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 {
......@@ -127,7 +127,7 @@
margin-right: 7px;
float: left;
&:last-child {
margin-right: 0px;
margin-right: 0;
}
&.btn-xs {
margin-right: 3px;
......@@ -139,7 +139,6 @@
.caret {
margin-left: 5px;
color: $gray-darkest;
}
}
......@@ -170,7 +169,7 @@
margin-right: 7px;
float: left;
&:last-child {
margin-right: 0px;
margin-right: 0;
}
}
}
......
......@@ -33,19 +33,19 @@
}
.q2 {
fill: #ACD5F2 !important;
fill: #acd5f2 !important;
}
.q3 {
fill: #7FA8D1 !important;
fill: #7fa8d1 !important;
}
.q4 {
fill: #49729B !important;
fill: #49729b !important;
}
.q5 {
fill: #254E77 !important;
fill: #254e77 !important;
}
.domain-background {
......
......@@ -39,6 +39,6 @@
}
.bs-callout-success {
background-color: #dff0d8;
border-color: #5cA64d;
border-color: #5ca64d;
color: #3c763d;
}
/** COLORS **/
.cgray { color: $gl-gray; }
.clgray { color: #BBB }
.clgray { color: #bbb }
.cred { color: $gl-text-red; }
.cgreen { color: $gl-text-green; }
.cdark { color: #444 }
......@@ -51,7 +51,7 @@ pre {
}
&.well-pre {
border: 1px solid #EEE;
border: 1px solid #eee;
background: #f9f9f9;
border-radius: 0;
color: #555;
......@@ -103,7 +103,7 @@ span.update-author {
}
.user-mention {
color: #2FA0BB;
color: #2fa0bb;
font-weight: bold;
}
......@@ -187,9 +187,9 @@ li.note {
.error-message {
padding: 10px;
background: #C67;
background: #c67;
margin: 0;
color: #FFF;
color: #fff;
a {
color: #fff;
......@@ -200,7 +200,7 @@ li.note {
.browser-alert {
padding: 10px;
text-align: center;
background: #C67;
background: #c67;
color: #fff;
font-weight: bold;
a {
......@@ -271,7 +271,7 @@ img.emoji {
table {
td.permission-x {
background: #D9EDF7 !important;
background: #d9edf7 !important;
text-align: center;
}
}
......@@ -280,7 +280,7 @@ table {
float: left;
text-align: center;
font-size: 32px;
color: #AAA;
color: #aaa;
width: 60px;
}
......@@ -347,7 +347,7 @@ table {
.profiler-button,
.profiler-controls {
border-color: #EEE !important;
border-color: #eee !important;
}
}
......
......@@ -4,7 +4,7 @@
height: 0;
margin-left: 2px;
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-left: $caret-width-base solid transparent;
}
......@@ -161,9 +161,8 @@
.dropdown-menu-user-full-name {
display: block;
margin-bottom: 2px;
font-weight: 600;
line-height: 1;
line-height: 16px;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
......@@ -171,7 +170,7 @@
.dropdown-menu-user-username {
display: block;
line-height: 1;
line-height: 16px;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
......@@ -261,7 +260,7 @@
position: absolute;
top: 10px;
right: 10px;
color: #C7C7C7;
color: #c7c7c7;
font-size: 12px;
pointer-events: none;
}
......
......@@ -30,7 +30,7 @@
right: 15px;
.btn {
padding: 0px 10px;
padding: 0 10px;
font-size: 13px;
line-height: 28px;
}
......@@ -84,7 +84,7 @@
&.blob-no-preview {
background: #eee;
text-shadow: 0 1px 2px #FFF;
text-shadow: 0 1px 2px #fff;
padding: 100px 0;
}
......@@ -124,7 +124,7 @@
}
td.line-numbers {
float: none;
border-left: 1px solid #DDD;
border-left: 1px solid #ddd;
}
td.lines {
padding: 0;
......
......@@ -41,8 +41,8 @@ input[type='search'].search-input {
}
input[type='text'].danger {
background: #F2DEDE!important;
border-color: #D66;
background: #f2dede!important;
border-color: #d66;
text-shadow: 0 1px 1px #fff
}
......
......@@ -23,13 +23,13 @@
&:hover {
background-color: $color-darker;
a {
color: #FFF;
color: #fff;
}
}
}
.collapse-nav a {
color: #FFF;
color: #fff;
background: $color;
}
......@@ -42,7 +42,7 @@
&:hover {
background-color: $color-dark;
color: #FFF;
color: #fff;
text-decoration: none;
}
}
......@@ -71,7 +71,7 @@
}
&.active a {
color: #FFF;
color: #fff;
background: $color-dark;
&.no-highlight {
......@@ -79,42 +79,42 @@
}
i {
color: #FFF
color: #fff
}
}
}
}
}
$theme-blue: #2980B9;
$theme-blue: #2980b9;
$theme-charcoal: #333c47;
$theme-graphite: #888888;
$theme-graphite: #888;
$theme-gray: #373737;
$theme-green: #019875;
$theme-violet: #554488;
$theme-violet: #548;
body {
&.ui_blue {
@include gitlab-theme(#BECDE9, $theme-blue, #1970A9, #096099);
@include gitlab-theme(#becde9, $theme-blue, #1970a9, #096099);
}
&.ui_charcoal {
@include gitlab-theme(#c5d0de, $theme-charcoal, #2b333d, #24272D);
@include gitlab-theme(#c5d0de, $theme-charcoal, #2b333d, #24272d);
}
&.ui_graphite {
@include gitlab-theme(#CCCCCC, $theme-graphite, #777777, #666666);
@include gitlab-theme(#ccc, $theme-graphite, #777, #666);
}
&.ui_gray {
@include gitlab-theme(#979797, $theme-gray, #272727, #222222);
@include gitlab-theme(#979797, $theme-gray, #272727, #222);
}
&.ui_green {
@include gitlab-theme(#AADDCC, $theme-green, #018865, #017855);
@include gitlab-theme(#adc, $theme-green, #018865, #017855);
}
&.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 {
&.navbar-empty {
height: 58px;
background: #FFF;
border-bottom: 1px solid #EEE;
background: #fff;
border-bottom: 1px solid #eee;
.center-logo {
margin: 11px 0;
......@@ -28,7 +28,7 @@ header {
min-height: $header-height;
background-color: #fff;
border: none;
border-bottom: 1px solid #EEE;
border-bottom: 1px solid #eee;
.container-fluid {
width: 100% !important;
......@@ -47,7 +47,7 @@ header {
text-align: center;
&:hover, &:focus, &:active {
background-color: #FFF;
background-color: #fff;
}
}
......@@ -59,7 +59,7 @@ header {
right: 2px;
&:hover {
background-color: #EEE;
background-color: #eee;
}
&.active {
color: #7f8fa4;
......@@ -162,7 +162,7 @@ header {
font-size: 18px;
.navbar-nav {
margin: 0px;
margin: 0;
float: none !important;
.visible-xs, .visable-sm {
......
.file-content.code {
border: none;
box-shadow: none;
margin: 0px;
padding: 0px;
margin: 0;
padding: 0;
table-layout: fixed;
pre {
......
......@@ -20,7 +20,7 @@
display: block;
float: left;
margin-right: 10px;
color: #FFF;
color: #fff;
font-size: $gl-font-size;
line-height: 25px;
......
......@@ -3,13 +3,13 @@
font-size: $font-size-base;
&.ui-datepicker-inline {
border: 1px solid #DDD;
border: 1px solid #ddd;
padding: 10px;
width: 270px;
.ui-datepicker-header {
background: #FFF;
border-color: #DDD;
background: #fff;
border-color: #ddd;
}
.ui-datepicker-calendar td a {
......@@ -19,7 +19,7 @@
}
&.ui-autocomplete {
border-color: #DDD;
border-color: #ddd;
padding: 0;
margin-top: 2px;
z-index: 1001;
......@@ -30,20 +30,20 @@
}
.ui-state-default {
border: 1px solid #FFF;
background: #FFF;
border: 1px solid #fff;
background: #fff;
color: #777;
}
.ui-state-highlight {
border: 1px solid #EEE;
background: #EEE;
border: 1px solid #eee;
background: #eee;
}
.ui-state-active {
border: 1px solid $gl-primary;
background: $gl-primary;
color: #FFF;
color: #fff;
}
.ui-state-hover,
......
......@@ -71,7 +71,7 @@
}
.md-preview-holder {
background: #FFF;
background: #fff;
border: 1px solid #ddd;
min-height: 169px;
padding: 5px;
......@@ -80,7 +80,7 @@
.markdown-area {
@include border-radius(0);
background: #FFF;
background: #fff;
border: 1px solid #ddd;
min-height: 140px;
max-height: 500px;
......
......@@ -67,17 +67,17 @@
* Base mixin for lists in GitLab
*/
@mixin basic-list {
margin: 5px 0px;
padding: 0px;
margin: 5px 0;
padding: 0;
list-style: none;
> li {
@include clearfix;
padding: 10px 0;
border-bottom: 1px solid #EEE;
border-bottom: 1px solid #eee;
display: block;
margin: 0px;
margin: 0;
&:last-child {
border-bottom: none;
......
......@@ -128,12 +128,12 @@
.show-aside {
display: none;
position: fixed;
right: 0px;
right: 0;
top: 30%;
padding: 5px 15px;
background: #EEE;
background: #eee;
font-size: 20px;
color: #777;
z-index: 100;
@include box-shadow(0 1px 2px #DDD);
@include box-shadow(0 1px 2px #ddd);
}
......@@ -26,7 +26,7 @@
}
&.active a {
color: #000000;
color: #000;
border-bottom: 2px solid #4688f1;
}
......@@ -41,7 +41,7 @@
.top-area {
@include clearfix;
border-bottom: 1px solid #EEE;
border-bottom: 1px solid #eee;
.nav-text {
padding-top: 16px;
......@@ -59,7 +59,7 @@
.nav-links {
display: inline-block;
width: 50%;
margin-bottom: 0px;
margin-bottom: 0;
border-bottom: none;
/* Small devices (phones, tablets, 768px and lower) */
......@@ -74,7 +74,7 @@
float: right;
text-align: right;
padding: 11px 0;
margin-bottom: 0px;
margin-bottom: 0;
> .dropdown {
margin-right: $gl-padding-top;
......
......@@ -151,7 +151,7 @@
padding: 2px 25px 2px 5px;
background: #fff image-url('select2.png');
background-repeat: no-repeat;
background-position: right 0px bottom 6px;
background-position: right 0 bottom 6px;
border: 1px solid $input-border;
@include border-radius($border-radius-default);
@include transition(border-color ease-in-out .15s, box-shadow ease-in-out .15s);
......@@ -229,7 +229,7 @@
.namespace-result {
.namespace-kind {
color: #AAA;
color: #aaa;
font-weight: normal;
}
.namespace-path {
......
......@@ -16,7 +16,7 @@
.gitlab-text-container-link {
z-index: 1;
position: absolute;
left: 0px;
left: 0;
}
#logo {
......@@ -47,7 +47,7 @@
width: 100%;
.container-fluid {
background: #FFF;
background: #fff;
padding: 0 $gl-padding;
&.container-blank {
......@@ -103,7 +103,7 @@
}
&:hover {
background-color: #EEE;
background-color: #eee;
}
}
......@@ -143,7 +143,7 @@
overflow: hidden;
&.navbar-collapse {
padding: 0px !important;
padding: 0 !important;
}
li {
......@@ -182,7 +182,7 @@
.count {
float: right;
background: #eee;
padding: 0px 8px;
padding: 0 8px;
@include border-radius(6px);
}
......@@ -194,8 +194,8 @@
}
.sidebar-subnav {
margin-left: 0px;
padding-left: 0px;
margin-left: 0;
padding-left: 0;
li {
list-style: none;
......
......@@ -95,7 +95,7 @@
}
&.label-inverse {
background-color: #333333;
background-color: #333;
}
}
......@@ -138,7 +138,7 @@
}
.btn-clipboard {
min-width: 0px;
min-width: 0;
}
}
......
......@@ -57,7 +57,7 @@ $component-active-bg: $brand-info;
$input-color: $text-color;
$input-border: #e7e9ed;
$input-border-focus: #7F8FA4;
$input-border-focus: #7f8fa4;
$legend-color: $text-color;
......@@ -125,8 +125,8 @@ $panel-inner-border: $border-color;
//
//##
$well-bg: #F9F9F9;
$well-border: #EEE;
$well-bg: #f9f9f9;
$well-border: #eee;
//== Code
//
......
......@@ -27,13 +27,13 @@
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #FCFCFC;
background-color: #fcfcfc;
border-width: 1px;
border-style: solid;
border-color: #CCC #CCC #BBB;
border-color: #ccc #ccc #bbb;
border-image: none;
border-radius: 3px;
box-shadow: 0px -1px 0px #BBB inset;
box-shadow: 0 -1px 0 #bbb inset;
}
h1 {
......@@ -187,7 +187,7 @@ body {
}
.page-title-empty {
margin-top: 0px;
margin-top: 0;
line-height: 1.3;
font-size: 1.25em;
font-weight: 600;
......
$row-hover: #f4f8fe;
$gl-text-color: #54565B;
$gl-text-green: #4A2;
$gl-text-red: #D12F19;
$gl-text-orange: #D90;
$gl-text-color: #54565b;
$gl-text-green: #4a2;
$gl-text-red: #d12f19;
$gl-text-orange: #d90;
$gl-header-color: #323232;
$gl-link-color: #333c48;
$md-text-color: #444;
......@@ -30,24 +30,24 @@ $gl-vert-padding: 6px;
$gl-padding-top:10px;
$gl-avatar-size: 40px;
$secondary-text: #7f8fa4;
$error-exclamation-point: #E62958;
$error-exclamation-point: #e62958;
$border-radius-default: 3px;
$list-title-color: #333333;
$list-text-color: #555555;
$list-title-color: #333;
$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;
$provider-btn-group-border: #E5E5E5;
$provider-btn-not-active-color: #4688F1;
$provider-btn-group-border: #e5e5e5;
$provider-btn-not-active-color: #4688f1;
/*
* Color schema
*/
$white-light: #FFFFFF;
$white-light: #fff;
$white-normal: #ededed;
$white-dark: #ededed;
......@@ -57,55 +57,55 @@ $gray-dark: #ededed;
$gray-darkest: #c9c9c9;
$green-light: #38ae67;
$green-normal: #2FAA60;
$green-dark: #2CA05B;
$green-normal: #2faa60;
$green-dark: #2ca05b;
$blue-light: #2EA8E5;
$blue-normal: #2D9FD8;
$blue-dark: #2897CE;
$blue-light: #2ea8e5;
$blue-normal: #2d9fd8;
$blue-dark: #2897ce;
$blue-medium-light: #3498CB;
$blue-medium: #2F8EBF;
$blue-medium-dark: #2D86B4;
$blue-medium-light: #3498cb;
$blue-medium: #2f8ebf;
$blue-medium-dark: #2d86b4;
$orange-light: rgba(252, 109, 38, 0.80);
$orange-normal: #E75E40;
$orange-dark: #CE5237;
$orange-normal: #e75e40;
$orange-dark: #ce5237;
$red-light: #F06559;
$red-normal: #E52C5A;
$red-dark: #D22852;
$red-light: #f06559;
$red-normal: #e52c5a;
$red-dark: #d22852;
$border-white-light: #F1F2F4;
$border-white-normal: #D6DAE2;
$border-white-dark: #C6CACF;
$border-white-light: #f1f2f4;
$border-white-normal: #d6dae2;
$border-white-dark: #c6cacf;
$border-gray-light: rgba(0, 0, 0, 0.06);
$border-gray-normal: rgba(0, 0, 0, 0.10);;
$border-gray-dark: #C6CACF;
$border-gray-dark: #c6cacf;
$border-green-light: #2FAA60;
$border-green-normal: #2CA05B;
$border-green-light: #2faa60;
$border-green-normal: #2ca05b;
$border-green-dark: #279654;
$border-blue-light: #2D9FD8;
$border-blue-normal: #2897CE;
$border-blue-dark: #258DC1;
$border-blue-light: #2d9fd8;
$border-blue-normal: #2897ce;
$border-blue-dark: #258dc1;
$border-orange-light: #fc6d26;
$border-orange-normal: #CE5237;
$border-orange-dark: #C14E35;
$border-orange-normal: #ce5237;
$border-orange-dark: #c14e35;
$border-red-light: #F24F41;
$border-red-normal: #D22852;
$border-red-dark: #CA264F;
$border-red-light: #f24f41;
$border-red-normal: #d22852;
$border-red-dark: #ca264f;
$help-well-bg: #FAFAFA;
$help-well-border: #E5E5E5;
$help-well-bg: #fafafa;
$help-well-border: #e5e5e5;
$warning-message-bg: #FBF2D9;
$warning-message-color: #9E8E60;
$warning-message-border: #F0E2BB;
$warning-message-bg: #fbf2d9;
$warning-message-color: #9e8e60;
$warning-message-border: #f0e2bb;
/* header */
$light-grey-header: #faf9f9;
......@@ -143,23 +143,22 @@ $dropdown-border-color: rgba(#000, .1);
$dropdown-shadow-color: rgba(#000, .1);
$dropdown-divider-color: rgba(#000, .1);
$dropdown-header-color: #959494;
$dropdown-caret-color: #54565B;
$dropdown-title-btn-color: #BFBFBF;
$dropdown-input-color: #C7C7C7;
$dropdown-title-btn-color: #bfbfbf;
$dropdown-input-color: #c7c7c7;
$dropdown-input-focus-border: rgb(58, 171, 240);
$dropdown-input-focus-shadow: rgba(#000, .2);
$dropdown-loading-bg: rgba(#fff, .6);
$dropdown-toggle-bg: #fff;
$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-icon-color: #C4C4C4;
$dropdown-toggle-icon-color: #c4c4c4;
$dropdown-toggle-hover-icon-color: $dropdown-toggle-hover-border-color;
/*
* Award emoji
*/
$award-emoji-menu-bg: #FFF;
$award-emoji-menu-border: #F1F2F4;
$award-emoji-new-btn-icon-color: #DCDCDC;
$award-emoji-menu-bg: #fff;
$award-emoji-menu-border: #f1f2f4;
$award-emoji-new-btn-icon-color: #dcdcdc;
......@@ -2,7 +2,7 @@
a.js-zen-enter {
color: $gl-gray;
position: absolute;
top: 0px;
top: 0;
right: 4px;
line-height: 56px;
}
......
......@@ -43,12 +43,12 @@
// Search result highlight
span.highlight_word {
background-color: #ffe792 !important;
color: #000000 !important;
color: #000 !important;
}
.hll { background-color: #373b41 }
.c { color: #969896 } /* Comment */
.err { color: #cc6666 } /* Error */
.err { color: #c66 } /* Error */
.k { color: #b294bb } /* Keyword */
.l { color: #de935f } /* Literal */
.n { color: #c5c8c6 } /* Name */
......@@ -58,7 +58,7 @@
.cp { color: #969896 } /* Comment.Preproc */
.c1 { color: #969896 } /* Comment.Single */
.cs { color: #969896 } /* Comment.Special */
.gd { color: #cc6666 } /* Generic.Deleted */
.gd { color: #c66 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gh { color: #c5c8c6; font-weight: bold } /* Generic.Heading */
.gi { color: #b5bd68 } /* Generic.Inserted */
......@@ -77,17 +77,17 @@
.na { color: #81a2be } /* Name.Attribute */
.nb { color: #c5c8c6 } /* Name.Builtin */
.nc { color: #f0c674 } /* Name.Class */
.no { color: #cc6666 } /* Name.Constant */
.no { color: #c66 } /* Name.Constant */
.nd { color: #8abeb7 } /* Name.Decorator */
.ni { color: #c5c8c6 } /* Name.Entity */
.ne { color: #cc6666 } /* Name.Exception */
.ne { color: #c66 } /* Name.Exception */
.nf { color: #81a2be } /* Name.Function */
.nl { color: #c5c8c6 } /* Name.Label */
.nn { color: #f0c674 } /* Name.Namespace */
.nx { color: #81a2be } /* Name.Other */
.py { color: #c5c8c6 } /* Name.Property */
.nt { color: #8abeb7 } /* Name.Tag */
.nv { color: #cc6666 } /* Name.Variable */
.nv { color: #c66 } /* Name.Variable */
.ow { color: #8abeb7 } /* Operator.Word */
.w { color: #c5c8c6 } /* Text.Whitespace */
.mf { color: #de935f } /* Literal.Number.Float */
......@@ -106,8 +106,8 @@
.s1 { color: #b5bd68 } /* Literal.String.Single */
.ss { color: #b5bd68 } /* Literal.String.Symbol */
.bp { color: #c5c8c6 } /* Name.Builtin.Pseudo */
.vc { color: #cc6666 } /* Name.Variable.Class */
.vg { color: #cc6666 } /* Name.Variable.Global */
.vi { color: #cc6666 } /* Name.Variable.Instance */
.vc { color: #c66 } /* Name.Variable.Class */
.vg { color: #c66 } /* Name.Variable.Global */
.vi { color: #c66 } /* Name.Variable.Instance */
.il { color: #de935f } /* Literal.Number.Integer.Long */
}
......@@ -43,7 +43,7 @@
// Search result highlight
span.highlight_word {
background-color: #ffe792 !important;
color: #000000 !important;
color: #000 !important;
}
.hll { background-color: #49483e }
......
......@@ -96,7 +96,7 @@
.m { color: #2aa198 } /* Literal.Number */
.s { color: #2aa198 } /* Literal.String */
.na { color: #93a1a1 } /* Name.Attribute */
.nb { color: #B58900 } /* Name.Builtin */
.nb { color: #b58900 } /* Name.Builtin */
.nc { color: #268bd2 } /* Name.Class */
.no { color: #cb4b16 } /* Name.Constant */
.nd { color: #268bd2 } /* Name.Decorator */
......
......@@ -96,7 +96,7 @@
.m { color: #2aa198 } /* Literal.Number */
.s { color: #2aa198 } /* Literal.String */
.na { color: #586e75 } /* Name.Attribute */
.nb { color: #B58900 } /* Name.Builtin */
.nb { color: #b58900 } /* Name.Builtin */
.nc { color: #268bd2 } /* Name.Class */
.no { color: #cb4b16 } /* Name.Constant */
.nd { color: #268bd2 } /* Name.Decorator */
......
......@@ -23,7 +23,7 @@
.line_holder {
.diff-line-num {
&.old {
background: #ffdddd;
background: #fdd;
border-color: #f1c0c0;
}
......@@ -68,66 +68,66 @@
}
.hll { background-color: #f8f8f8 }
.c { color: #999988; font-style: italic; }
.c { color: #998; font-style: italic; }
.err { color: #a61717; background-color: #e3d2d2; }
.k { font-weight: bold; }
.o { font-weight: bold; }
.cm { color: #999988; font-style: italic; }
.cp { color: #999999; font-weight: bold; }
.c1 { color: #999988; font-style: italic; }
.cs { color: #999999; font-weight: bold; font-style: italic; }
.gd { color: #000000; background-color: #ffdddd; }
.gd .x { color: #000000; background-color: #ffaaaa; }
.cm { color: #998; font-style: italic; }
.cp { color: #999; font-weight: bold; }
.c1 { color: #998; font-style: italic; }
.cs { color: #999; font-weight: bold; font-style: italic; }
.gd { color: #000; background-color: #fdd; }
.gd .x { color: #000; background-color: #faa; }
.ge { font-style: italic; }
.gr { color: #aa0000; }
.gh { color: #999999; }
.gi { color: #000000; background-color: #ddffdd; }
.gi .x { color: #000000; background-color: #aaffaa; }
.go { color: #888888; }
.gp { color: #555555; }
.gr { color: #a00; }
.gh { color: #999; }
.gi { color: #000; background-color: #dfd; }
.gi .x { color: #000; background-color: #afa; }
.go { color: #888; }
.gp { color: #555; }
.gs { font-weight: bold; }
.gu { color: #800080; font-weight: bold; }
.gt { color: #aa0000; }
.gt { color: #a00; }
.kc { font-weight: bold; }
.kd { font-weight: bold; }
.kn { font-weight: bold; }
.kp { font-weight: bold; }
.kr { font-weight: bold; }
.kt { color: #445588; font-weight: bold; }
.m { color: #009999; }
.s { color: #dd1144; }
.n { color: #333333; }
.kt { color: #458; font-weight: bold; }
.m { color: #099; }
.s { color: #d14; }
.n { color: #333; }
.na { color: teal; }
.nb { color: #0086b3; }
.nc { color: #445588; font-weight: bold; }
.nc { color: #458; font-weight: bold; }
.no { color: teal; }
.ni { color: purple; }
.ne { color: #990000; font-weight: bold; }
.nf { color: #990000; font-weight: bold; }
.nn { color: #555555; }
.ne { color: #900; font-weight: bold; }
.nf { color: #900; font-weight: bold; }
.nn { color: #555; }
.nt { color: navy; }
.nv { color: teal; }
.ow { font-weight: bold; }
.w { color: #bbbbbb; }
.mf { color: #009999; }
.mh { color: #009999; }
.mi { color: #009999; }
.mo { color: #009999; }
.sb { color: #dd1144; }
.sc { color: #dd1144; }
.sd { color: #dd1144; }
.s2 { color: #dd1144; }
.se { color: #dd1144; }
.sh { color: #dd1144; }
.si { color: #dd1144; }
.sx { color: #dd1144; }
.w { color: #bbb; }
.mf { color: #099; }
.mh { color: #099; }
.mi { color: #099; }
.mo { color: #099; }
.sb { color: #d14; }
.sc { color: #d14; }
.sd { color: #d14; }
.s2 { color: #d14; }
.se { color: #d14; }
.sh { color: #d14; }
.si { color: #d14; }
.sx { color: #d14; }
.sr { color: #009926; }
.s1 { color: #dd1144; }
.s1 { color: #d14; }
.ss { color: #990073; }
.bp { color: #999999; }
.bp { color: #999; }
.vc { color: teal; }
.vg { color: teal; }
.vi { color: teal; }
.il { color: #009999; }
.gc { color: #999; background-color: #EAF2F5; }
.il { color: #099; }
.gc { color: #999; background-color: #eaf2f5; }
}
.build-page {
pre.trace {
background: #111111;
background: #111;
color: #fff;
font-family: $monospace_font;
white-space: pre;
......
......@@ -55,7 +55,7 @@
padding: 10px 0;
li {
padding: 3px 0px;
padding: 3px 0;
line-height: 20px;
}
}
......
......@@ -9,7 +9,7 @@
.lists-separator {
margin: 10px 0;
border-color: #DDD;
border-color: #ddd;
}
.commits-row {
......@@ -76,7 +76,7 @@ li.commit {
.commit-row-description {
font-size: 14px;
border-left: 1px solid #EEE;
border-left: 1px solid #eee;
padding: 10px 15px;
margin: 5px 0 10px 5px;
background: #f9f9f9;
......@@ -152,7 +152,7 @@ li.commit {
.count {
padding-top: 6px;
padding-bottom: 0px;
padding-bottom: 0;
font-size: 12px;
color: #333;
display: block;
......
......@@ -29,7 +29,7 @@
.diff-content {
overflow: auto;
overflow-y: hidden;
background: #FFF;
background: #fff;
color: #333;
.unfold {
......@@ -57,8 +57,8 @@
font-family: $monospace_font;
border: none;
border-collapse: separate;
margin: 0px;
padding: 0px;
margin: 0;
padding: 0;
.line_holder td {
line-height: $code_line_height;
font-size: $code_font_size;
......@@ -76,10 +76,10 @@
}
.old_line, .new_line {
margin: 0px;
padding: 0px;
margin: 0;
padding: 0;
border: none;
padding: 0px 5px;
padding: 0 5px;
border-right: 1px solid;
text-align: right;
min-width: 35px;
......@@ -97,8 +97,8 @@
}
.line_content {
display: block;
margin: 0px;
padding: 0px 0.5em;
margin: 0;
padding: 0 0.5em;
border: none;
&.parallel {
display: table-cell;
......@@ -118,7 +118,7 @@
background-color: #fff;
line-height: 0;
img {
border: 1px solid #FFF;
border: 1px solid #fff;
background: image-url('trans_bg.gif');
max-width: 100%;
}
......@@ -183,7 +183,7 @@
height: 14px;
width: 15px;
position: absolute;
top: 0px;
top: 0;
background: image-url('swipemode_sprites.gif') 0 3px no-repeat;
}
.bottom-handle {
......@@ -191,7 +191,7 @@
height: 14px;
width: 15px;
position: absolute;
bottom: 0px;
bottom: 0;
background: image-url('swipemode_sprites.gif') 0 -11px no-repeat;
}
}
......@@ -206,8 +206,8 @@
.frame.added, .frame.deleted {
position: absolute;
display: block;
top: 0px;
left: 0px;
top: 0;
left: 0;
}
.controls {
display: block;
......@@ -215,7 +215,7 @@
width: 300px;
z-index: 100;
position: absolute;
bottom: 0px;
bottom: 0;
left: 50%;
margin-left: -150px;
......@@ -231,11 +231,11 @@
.dragger {
display: block;
position: absolute;
left: 0px;
top: 0px;
left: 0;
top: 0;
height: 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;
}
......@@ -243,17 +243,17 @@
display: block;
position: absolute;
top: 2px;
right: 0px;
right: 0;
height: 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 {
display: block;
position: absolute;
top: 2px;
left: 0px;
left: 0;
height: 10px;
width: 10px;
background: image-url('onion_skin_sprites.gif') -2px -10px no-repeat;
......@@ -265,7 +265,7 @@
.view-modes {
padding: 10px;
text-align: center;
background: #EEE;
background: #eee;
ul, li {
list-style: none;
......
......@@ -14,9 +14,9 @@
}
.cancel-btn {
color: #B94A48;
color: #b94a48;
&:hover {
color: #B94A48;
color: #b94a48;
}
}
......
This diff is collapsed.
......@@ -63,7 +63,7 @@
.note-image-attach {
margin-top: 4px;
margin-left: 0px;
margin-left: 0;
max-width: 200px;
float: none;
}
......@@ -83,10 +83,10 @@
.event_icon {
position: relative;
float: right;
border: 1px solid #EEE;
border: 1px solid #eee;
padding: 5px;
@include border-radius(5px);
background: #F9F9F9;
background: #f9f9f9;
margin-left: 10px;
top: -6px;
img {
......@@ -160,7 +160,7 @@
.event-body {
margin: 0;
border-left: 2px solid #DDD;
border-left: 2px solid #ddd;
padding-left: 10px;
}
......
......@@ -6,11 +6,11 @@
font-size: 14px;
padding: 5px;
border-bottom: 1px solid $border-color;
background: #EEE;
background: #eee;
}
.network-graph {
background: #FFF;
background: #fff;
height: 500px;
overflow-y: scroll;
overflow-x: hidden;
......
i.icon-gitorious {
display: inline-block;
background-position: 0px 0px;
background-position: 0 0;
background-size: contain;
background-repeat: no-repeat;
}
......
......@@ -222,7 +222,7 @@
width: 100%;
text-align: center;
padding-bottom: 10px;
color: #999999;
color: #999;
span {
display: block;
......@@ -237,7 +237,7 @@
}
i {
color: #999999;
color: #999;
}
}
}
......
......@@ -68,18 +68,18 @@ form.edit-issue {
.merge-request,
.issue {
&.today {
background: #EFE;
border-color: #CEC;
background: #efe;
border-color: #cec;
}
&.closed {
background: #F9F9F9;
border-color: #E5E5E5;
background: #f9f9f9;
border-color: #e5e5e5;
}
&.merged {
background: #F9F9F9;
border-color: #E5E5E5;
background: #f9f9f9;
border-color: #e5e5e5;
}
}
......
......@@ -39,7 +39,7 @@
.login-box{
background: #fafafa;
border-radius: 10px;
box-shadow: 0 0px 2px #CCC;
box-shadow: 0 0 2px #ccc;
padding: 15px;
.login-heading h3 {
......@@ -74,7 +74,7 @@
&.top {
@include border-radius(5px 5px 0 0);
margin-bottom: 0px;
margin-bottom: 0;
}
&.bottom {
......@@ -85,12 +85,12 @@
&.middle {
border-top: 0;
margin-bottom:0px;
margin-bottom:0;
@include border-radius(0);
}
&:active, &:focus {
background-color: #FFF;
background-color: #fff;
}
}
......
......@@ -113,7 +113,7 @@
}
.mr-widget-footer {
border-top: 1px solid #EEE;
border-top: 1px solid #eee;
}
.ci-coverage {
......@@ -222,7 +222,7 @@
margin-bottom: 20px;
span {
color: #B2B2B2;
color: #b2b2b2;
a {
color: $md-link-color;
......
......@@ -156,7 +156,7 @@
.comment-hints {
color: #999;
background: #FFF;
background: #fff;
padding: 7px;
margin-top: -7px;
border: 1px solid $border-color;
......
......@@ -11,8 +11,8 @@
ul.notes {
display: block;
list-style: none;
margin: 0px;
padding: 0px;
margin: 0;
padding: 0;
.timeline-icon {
float: left;
......@@ -30,7 +30,7 @@ ul.notes {
font-size: 14px;
padding-top: 10px;
padding-bottom: 10px;
background: #FDFDFD;
background: #fdfdfd;
.timeline-icon {
.avatar {
......@@ -129,7 +129,7 @@ ul.notes {
hr {
// 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;
}
}
......@@ -166,7 +166,7 @@ ul.notes {
vertical-align: middle;
text-align: center;
padding: 10px 0;
background: #FFF;
background: #fff;
color: $text-color;
}
&.notes_line2 {
......@@ -232,7 +232,7 @@ ul.notes {
.add-diff-note {
margin-top: -4px;
@include border-radius(40px);
background: #FFF;
background: #fff;
padding: 4px;
font-size: 16px;
color: $gl-link-color;
......@@ -249,7 +249,7 @@ ul.notes {
&:hover {
background: $gl-info;
color: #FFF;
color: #fff;
@include show-add-diff-note;
}
}
......
......@@ -30,7 +30,7 @@
.btn {
line-height: 40px;
height: 42px;
padding: 0px 12px;
padding: 0 12px;
img {
width: 32px;
......
......@@ -85,7 +85,7 @@
.project-repo-buttons {
margin-top: 20px;
margin-bottom: 0px;
margin-bottom: 0;
.count-buttons {
display: block;
......@@ -140,7 +140,7 @@
left: 1px;
margin-top: -9px;
border-width: 10px 7px 10px 0;
border-right-color: #FFF;
border-right-color: #fff;
}
}
.count {
......@@ -162,10 +162,10 @@
cursor: pointer;
background-image: none;
white-space: nowrap;
margin: 0 11px 0px 4px;
margin: 0 11px 0 4px;
&:hover {
background: #FFF;
background: #fff;
}
}
}
......@@ -210,7 +210,7 @@
}
.project_member_row form {
margin: 0px;
margin: 0;
}
.transfer-project .select2-container {
......@@ -462,7 +462,7 @@ pre.light-well {
.form-control {
@extend .monospace;
background: #FFF;
background: #fff;
font-size: 14px;
margin-left: -1px;
cursor: auto;
......@@ -472,16 +472,16 @@ pre.light-well {
.cannot-be-merged,
.cannot-be-merged:hover {
color: #E62958;
color: #e62958;
margin-top: 2px;
}
.private-forks-notice .private-fork-icon {
i:nth-child(1) {
color: #2AA056;
color: #2aa056;
}
i:nth-child(2) {
color: #FFFFFF;
color: #fff;
}
}
.runner-state {
padding: 6px 12px;
margin-right: 10px;
color: #FFF;
color: #fff;
&.runner-state-shared {
background: #32b186;
......
......@@ -16,7 +16,7 @@
margin-bottom: 20px;
input {
border-color: #BBB;
border-color: #bbb;
font-weight: bold;
}
}
......
......@@ -13,13 +13,13 @@ table .sherlock-code {
}
.sherlock-line-samples-table {
margin-bottom: 0px !important;
margin-bottom: 0 !important;
thead tr th,
tbody tr td {
font-size: 13px !important;
text-align: right;
padding: 0px 10px !important;
padding: 0 10px !important;
}
}
......
.ci-status {
padding: 2px 7px;
margin-right: 5px;
border: 1px solid #EEE;
border: 1px solid #eee;
white-space: nowrap;
@include border-radius(4px);
......
......@@ -61,7 +61,7 @@
.note-image-attach {
margin-top: 4px;
margin-left: 0px;
margin-left: 0;
max-width: 200px;
float: none;
}
......@@ -89,7 +89,7 @@
.todo-body {
margin: 0;
border-left: 2px solid #DDD;
border-left: 2px solid #ddd;
padding-left: 10px;
}
}
......
......@@ -7,7 +7,7 @@
.example {
&:before {
content: "Example";
color: #BBB;
color: #bbb;
}
padding: 15px;
......
......@@ -2,23 +2,23 @@
// color codes are based on http://en.wikipedia.org/wiki/File:Xterm_256color_chart.svg
// see also: https://gist.github.com/jasonm23/2868981
$black: #000000;
$black: #000;
$red: #cd0000;
$green: #00cd00;
$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)
$magenta: #cd00cd;
$cyan: #00cdcd;
$white: #e5e5e5;
$l-black: #7f7f7f;
$l-red: #ff0000;
$l-green: #00ff00;
$l-yellow: #ffff00;
$l-red: #f00;
$l-green: #0f0;
$l-yellow: #ff0;
$l-blue: #5c5cff;
$l-magenta: #ff00ff;
$l-cyan: #00ffff;
$l-white: #ffffff;
$l-magenta: #f0f;
$l-cyan: #0ff;
$l-white: #fff;
.term-bold {
font-weight: bold;
......@@ -136,7 +136,7 @@
.xterm-fg-0 {
color: #000000;
color: #000;
}
.xterm-fg-1 {
color: #800000;
......@@ -163,28 +163,28 @@
color: #808080;
}
.xterm-fg-9 {
color: #ff0000;
color: #f00;
}
.xterm-fg-10 {
color: #00ff00;
color: #0f0;
}
.xterm-fg-11 {
color: #ffff00;
color: #ff0;
}
.xterm-fg-12 {
color: #0000ff;
color: #00f;
}
.xterm-fg-13 {
color: #ff00ff;
color: #f0f;
}
.xterm-fg-14 {
color: #00ffff;
color: #0ff;
}
.xterm-fg-15 {
color: #ffffff;
color: #fff;
}
.xterm-fg-16 {
color: #000000;
color: #000;
}
.xterm-fg-17 {
color: #00005f;
......@@ -199,7 +199,7 @@
color: #0000d7;
}
.xterm-fg-21 {
color: #0000ff;
color: #00f;
}
.xterm-fg-22 {
color: #005f00;
......@@ -274,7 +274,7 @@
color: #00d7ff;
}
.xterm-fg-46 {
color: #00ff00;
color: #0f0;
}
.xterm-fg-47 {
color: #00ff5f;
......@@ -289,7 +289,7 @@
color: #00ffd7;
}
.xterm-fg-51 {
color: #00ffff;
color: #0ff;
}
.xterm-fg-52 {
color: #5f0000;
......@@ -724,7 +724,7 @@
color: #d7ffff;
}
.xterm-fg-196 {
color: #ff0000;
color: #f00;
}
.xterm-fg-197 {
color: #ff005f;
......@@ -739,7 +739,7 @@
color: #ff00d7;
}
.xterm-fg-201 {
color: #ff00ff;
color: #f0f;
}
.xterm-fg-202 {
color: #ff5f00;
......@@ -814,7 +814,7 @@
color: #ffd7ff;
}
.xterm-fg-226 {
color: #ffff00;
color: #ff0;
}
.xterm-fg-227 {
color: #ffff5f;
......@@ -829,7 +829,7 @@
color: #ffffd7;
}
.xterm-fg-231 {
color: #ffffff;
color: #fff;
}
.xterm-fg-232 {
color: #080808;
......@@ -850,7 +850,7 @@
color: #3a3a3a;
}
.xterm-fg-238 {
color: #444444;
color: #444;
}
.xterm-fg-239 {
color: #4e4e4e;
......@@ -901,6 +901,6 @@
color: #e4e4e4;
}
.xterm-fg-255 {
color: #eeeeee;
color: #eee;
}
}
......@@ -6,7 +6,7 @@ class Admin::AbuseReportsController < Admin::ApplicationController
def destroy
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
render nothing: true
......
......@@ -119,10 +119,10 @@ class Admin::UsersController < Admin::ApplicationController
end
def destroy
DeleteUserService.new(current_user).execute(user)
DeleteUserWorker.perform_async(current_user.id, user.id)
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 }
end
end
......
......@@ -19,9 +19,9 @@ class AbuseReport < ActiveRecord::Base
validates :message, presence: true
validates :user_id, uniqueness: { message: 'has already been reported' }
def remove_user
def remove_user(deleted_by:)
user.block
user.destroy
DeleteUserWorker.perform_async(deleted_by.id, user.id, delete_solo_owned_groups: true)
end
def notify
......
......@@ -2,7 +2,7 @@ class ProjectWiki
include Gitlab::ShellAdapter
MARKUPS = {
'Markdown' => :md,
'Markdown' => :markdown,
'RDoc' => :rdoc,
'AsciiDoc' => :asciidoc
} unless defined?(MARKUPS)
......@@ -47,7 +47,7 @@ class ProjectWiki
def wiki
@wiki ||= begin
Gollum::Wiki.new(path_to_repo)
rescue Gollum::NoSuchPathError
rescue Rugged::OSError
create_repo!
end
end
......@@ -90,7 +90,7 @@ class ProjectWiki
def create_page(title, content, format = :markdown, message = nil)
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
rescue Gollum::DuplicatePageError => e
......@@ -101,7 +101,7 @@ class ProjectWiki
def update_page(page, content, format = :markdown, message = nil)
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
end
......
......@@ -758,12 +758,15 @@ class Repository
def parse_search_result(result)
ref = nil
filename = nil
basename = nil
startline = 0
result.each_line.each_with_index do |line, index|
if line =~ /^.*:.*:\d+:/
ref, filename, startline = line.split(':')
startline = startline.to_i - index
extname = File.extname(filename)
basename = filename.sub(/#{extname}$/, '')
break
end
end
......@@ -776,6 +779,7 @@ class Repository
OpenStruct.new(
filename: filename,
basename: basename,
ref: ref,
startline: startline,
data: data
......
......@@ -62,7 +62,7 @@ class WikiPage
# The raw content of this page.
def content
@attributes[:content] ||= if @page
@page.raw_data
@page.text_data
end
end
......
......@@ -5,11 +5,16 @@ class DeleteUserService
@current_user = current_user
end
def execute(user)
if user.solo_owned_groups.present?
def execute(user, options = {})
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
else
return user
end
user.solo_owned_groups.each do |group|
DestroyGroupService.new(group, current_user).execute
end
user.personal_projects.each do |project|
# Skip repository removal because we remove directory with namespace
# that contain all this repositories
......@@ -18,5 +23,4 @@ class DeleteUserService
user.destroy
end
end
end
......@@ -6,12 +6,12 @@ class DestroyGroupService
end
def execute
@group.projects.each do |project|
group.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
@group.destroy
group.destroy
end
end
......@@ -2,9 +2,9 @@
.blob-result
.file-holder
.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
%strong
= wiki_blob.filename
= wiki_blob.basename
.file-content.code.term
= render 'shared/file_highlight', blob: wiki_blob, first_line_number: wiki_blob.startline
......@@ -16,7 +16,7 @@
- if 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",
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
- 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
# crowd_server_url: 'CROWD SERVER URL',
# application_name: 'YOUR_APP_NAME',
# 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.
# 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 @@
#
# 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
enable_extension "plpgsql"
......@@ -260,6 +260,7 @@ ActiveRecord::Schema.define(version: 20160314143402) do
end
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"}
create_table "ci_services", force: :cascade do |t|
......@@ -775,9 +776,9 @@ ActiveRecord::Schema.define(version: 20160314143402) do
t.string "type"
t.string "title"
t.integer "project_id"
t.datetime "created_at"
t.datetime "updated_at"
t.boolean "active", default: false, null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.boolean "active", null: false
t.text "properties"
t.boolean "template", default: false
t.boolean "push_events", default: true
......
......@@ -89,7 +89,7 @@ We also use two 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`.
**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.
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
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).
......@@ -76,7 +76,7 @@ Make sure you have the right version of Git installed
# Install Git
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
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
cd /tmp
curl -L --progress https://www.kernel.org/pub/software/scm/git/git-2.4.3.tar.gz | tar xz
cd git-2.4.3/
curl -O --progress https://www.kernel.org/pub/software/scm/git/git-2.7.3.tar.gz
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
make prefix=/usr/local all
......@@ -143,7 +144,7 @@ use 64-bit Linux. You can find downloads for other platforms at the [Go download
page](https://golang.org/dl).
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 ln -sf /usr/local/go/bin/{go,godoc,gofmt} /usr/local/bin/
rm go1.5.3.linux-amd64.tar.gz
......@@ -161,18 +162,11 @@ We recommend using a PostgreSQL database. For MySQL check [MySQL setup guide](da
# Install the database packages
sudo apt-get install -y postgresql postgresql-client libpq-dev
# Login to PostgreSQL
sudo -u postgres psql -d template1
# Create a user for GitLab
# Do not type the 'template1=#', this is part of the prompt
template1=# CREATE USER git CREATEDB;
sudo -u postgres psql -d template1 -c "CREATE USER git CREATEDB;"
# Create the GitLab production database & grant all privileges on database
template1=# CREATE DATABASE gitlabhq_production OWNER git;
# Quit the database session
template1=# \q
sudo -u postgres psql -d template1 -c "CREATE DATABASE gitlabhq_production OWNER git;"
# Try connecting to the new database with the new user
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
- FreeBSD
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
......
# 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.
- [SAML](saml.md)
- [Crowd](crowd.md)
- [Azure](azure.md)
- [Auth0](auth0.md)
## Initial OmniAuth Configuration
......
......@@ -100,7 +100,7 @@ class Spinach::Features::Search < Spinach::FeatureSteps
step 'I should see "test_wiki" link in the search 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
......
......@@ -9,7 +9,7 @@ Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, js_errors: true, timeout: timeout, window_size: [1366, 768])
end
Capybara.default_wait_time = timeout
Capybara.default_max_wait_time = timeout
Capybara.ignore_hidden_elements = false
unless ENV['CI'] || ENV['CI_SERVER']
......
......@@ -4,6 +4,8 @@ module Gitlab
include Enumerable
def parse(lines)
return [] if lines.blank?
@lines = lines
line_obj_index = 0
line_old = 1
......
......@@ -47,6 +47,7 @@ namespace :gemojione do
# 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/ no-repeat//" #{style_path}))
system(%Q(sed -i '' "s/ 0px/ 0/" #{style_path}))
# Append a generic rule that applies to all Emojis
File.open(style_path, 'a') do |f|
......
......@@ -913,7 +913,7 @@ namespace :gitlab do
end
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)))
puts "Your git bin path is \"#{Gitlab.config.git.bin_path}\""
......
......@@ -90,4 +90,9 @@ eos
end
end
end
context 'when lines is empty' do
it { expect(parser.parse([])).to eq([]) }
it { expect(parser.parse(nil)).to eq([]) }
end
end
......@@ -14,6 +14,7 @@ require 'rails_helper'
RSpec.describe AbuseReport, type: :model do
subject { create(:abuse_report) }
let(:user) { create(:user) }
it { expect(subject).to be_valid }
......@@ -31,17 +32,14 @@ RSpec.describe AbuseReport, type: :model do
describe '#remove_user' do
it 'blocks the user' do
report = build(:abuse_report)
allow(report.user).to receive(:destroy)
expect { report.remove_user }.to change { report.user.blocked? }.to(true)
expect { subject.remove_user(deleted_by: user) }.to change { subject.user.blocked? }.to(true)
end
it 'removes the user' do
report = build(:abuse_report)
it 'lets a worker delete the user' do
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
......
......@@ -101,13 +101,29 @@ describe Repository, models: true do
end
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 { expect(subject.filename).to eq('CHANGELOG') }
it { expect(subject.basename).to eq('CHANGELOG') }
it { expect(subject.ref).to eq('master') }
it { expect(subject.startline).to eq(186) }
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
......
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|
Capybara::Poltergeist::Driver.new(app, js_errors: true, timeout: timeout, window_size: [1366, 768])
end
Capybara.default_wait_time = timeout
Capybara.default_max_wait_time = timeout
Capybara.ignore_hidden_elements = true
unless ENV['CI'] || ENV['CI_SERVER']
......
module WaitForAjax
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?
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