Merge branch 'master' into ci-and-ce-sitting-in-a-tree-k-i-s-s-i-n-g
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
This commit is contained in:
commit
e3c30bf2e8
15
CHANGELOG
15
CHANGELOG
|
@ -1,13 +1,15 @@
|
||||||
Please view this file on the master branch, on stable branches it's out of date.
|
Please view this file on the master branch, on stable branches it's out of date.
|
||||||
|
|
||||||
v 8.0.0 (unreleased)
|
v 8.0.0 (unreleased)
|
||||||
|
- Bump rouge to 1.10.1 to remove warning noise and fix other syntax highlighting bugs (Stan Hu)
|
||||||
|
- Gracefully handle errors in syntax highlighting by leaving the block unformatted (Stan Hu)
|
||||||
- Fix URL construction for merge requests, issues, notes, and commits for relative URL config (Stan Hu)
|
- Fix URL construction for merge requests, issues, notes, and commits for relative URL config (Stan Hu)
|
||||||
|
- Fix emoji URLs in Markdown when relative_url_root is used (Stan Hu)
|
||||||
- Omit filename in Content-Disposition header in raw file download to avoid RFC 6266 encoding issues (Stan HU)
|
- Omit filename in Content-Disposition header in raw file download to avoid RFC 6266 encoding issues (Stan HU)
|
||||||
- Fix broken Wiki Page History (Stan Hu)
|
- Fix broken Wiki Page History (Stan Hu)
|
||||||
- Prevent anchors from being hidden by header (Stan Hu)
|
- Prevent anchors from being hidden by header (Stan Hu)
|
||||||
- Fix bug where only the first 15 Bitbucket issues would be imported (Stan Hu)
|
- Fix bug where only the first 15 Bitbucket issues would be imported (Stan Hu)
|
||||||
- Sort issues by creation date in Bitbucket importer (Stan Hu)
|
- Sort issues by creation date in Bitbucket importer (Stan Hu)
|
||||||
- Upgrade gitlab_git to 7.2.15 to fix `git blame` errors with ISO-encoded files (Stan Hu)
|
|
||||||
- Prevent too many redirects upon login when home page URL is set to external_url (Stan Hu)
|
- Prevent too many redirects upon login when home page URL is set to external_url (Stan Hu)
|
||||||
- Improve dropdown positioning on the project home page (Hannes Rosenögger)
|
- Improve dropdown positioning on the project home page (Hannes Rosenögger)
|
||||||
- Upgrade browser gem to 1.0.0 to avoid warning in IE11 compatibilty mode (Stan Hu)
|
- Upgrade browser gem to 1.0.0 to avoid warning in IE11 compatibilty mode (Stan Hu)
|
||||||
|
@ -41,14 +43,23 @@ v 8.0.0 (unreleased)
|
||||||
- Fix bug which IE cannot show image at markdown when the image is raw file of gitlab
|
- Fix bug which IE cannot show image at markdown when the image is raw file of gitlab
|
||||||
- Add support for Crowd
|
- Add support for Crowd
|
||||||
- Global Labels that are available to all projects
|
- Global Labels that are available to all projects
|
||||||
|
- Fix highlighting of deleted lines in diffs.
|
||||||
|
- Added service API endpoint to retrieve service parameters (Petheő Bence)
|
||||||
|
- Add FogBugz project import (Jared Szechy)
|
||||||
|
|
||||||
|
v 7.14.3
|
||||||
|
- No changes
|
||||||
|
|
||||||
|
v 7.14.2
|
||||||
|
- Upgrade gitlab_git to 7.2.15 to fix `git blame` errors with ISO-encoded files (Stan Hu)
|
||||||
|
|
||||||
v 7.14.1
|
v 7.14.1
|
||||||
- Improve abuse reports management from admin area
|
- Improve abuse reports management from admin area
|
||||||
- Fix "Reload with full diff" URL button in compare branch view (Stan Hu)
|
- Fix "Reload with full diff" URL button in compare branch view (Stan Hu)
|
||||||
|
- Disabled DNS lookups for SSH in docker image (Rowan Wookey)
|
||||||
- Only include base URL in OmniAuth full_host parameter (Stan Hu)
|
- Only include base URL in OmniAuth full_host parameter (Stan Hu)
|
||||||
- Fix Error 500 in API when accessing a group that has an avatar (Stan Hu)
|
- Fix Error 500 in API when accessing a group that has an avatar (Stan Hu)
|
||||||
- Ability to enable SSL verification for Webhooks
|
- Ability to enable SSL verification for Webhooks
|
||||||
- Add FogBugz project import (Jared Szechy)
|
|
||||||
|
|
||||||
v 7.14.0
|
v 7.14.0
|
||||||
- Fix bug where non-project members of the target project could set labels on new merge requests.
|
- Fix bug where non-project members of the target project could set labels on new merge requests.
|
||||||
|
|
|
@ -294,7 +294,7 @@ GEM
|
||||||
github-markup (~> 1.3.3)
|
github-markup (~> 1.3.3)
|
||||||
gollum-grit_adapter (~> 1.0)
|
gollum-grit_adapter (~> 1.0)
|
||||||
nokogiri (~> 1.6.4)
|
nokogiri (~> 1.6.4)
|
||||||
rouge (~> 1.7.4)
|
rouge (~> 1.10.1)
|
||||||
sanitize (~> 2.1.0)
|
sanitize (~> 2.1.0)
|
||||||
stringex (~> 2.5.1)
|
stringex (~> 2.5.1)
|
||||||
gon (5.0.4)
|
gon (5.0.4)
|
||||||
|
@ -565,7 +565,7 @@ GEM
|
||||||
netrc (~> 0.7)
|
netrc (~> 0.7)
|
||||||
rinku (1.7.3)
|
rinku (1.7.3)
|
||||||
rotp (1.6.1)
|
rotp (1.6.1)
|
||||||
rouge (1.7.7)
|
rouge (1.10.1)
|
||||||
rqrcode (0.7.0)
|
rqrcode (0.7.0)
|
||||||
chunky_png
|
chunky_png
|
||||||
rqrcode-rails3 (0.1.7)
|
rqrcode-rails3 (0.1.7)
|
||||||
|
|
|
@ -167,6 +167,7 @@ class @DropzoneInput
|
||||||
dataType: "json"
|
dataType: "json"
|
||||||
).success (data) ->
|
).success (data) ->
|
||||||
preview.html data.body
|
preview.html data.body
|
||||||
|
preview.syntaxHighlight()
|
||||||
|
|
||||||
renderReferencedUsers data.references.users
|
renderReferencedUsers data.references.users
|
||||||
|
|
||||||
|
|
|
@ -122,8 +122,9 @@ class @Notes
|
||||||
# or skip if rendered
|
# or skip if rendered
|
||||||
if @isNewNote(note)
|
if @isNewNote(note)
|
||||||
@note_ids.push(note.id)
|
@note_ids.push(note.id)
|
||||||
$('ul.main-notes-list').append(note.html)
|
$('ul.main-notes-list').
|
||||||
$('.js-syntax-highlight').syntaxHighlight()
|
append(note.html).
|
||||||
|
syntaxHighlight()
|
||||||
@initTaskList()
|
@initTaskList()
|
||||||
|
|
||||||
###
|
###
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
# Syntax Highlighter
|
||||||
|
#
|
||||||
# Applies a syntax highlighting color scheme CSS class to any element with the
|
# Applies a syntax highlighting color scheme CSS class to any element with the
|
||||||
# `js-syntax-highlight` class
|
# `js-syntax-highlight` class
|
||||||
#
|
#
|
||||||
|
@ -6,7 +8,13 @@
|
||||||
# <div class="js-syntax-highlight"></div>
|
# <div class="js-syntax-highlight"></div>
|
||||||
#
|
#
|
||||||
$.fn.syntaxHighlight = ->
|
$.fn.syntaxHighlight = ->
|
||||||
|
if $(this).hasClass('js-syntax-highlight')
|
||||||
|
# Given the element itself, apply highlighting
|
||||||
$(this).addClass(gon.user_color_scheme)
|
$(this).addClass(gon.user_color_scheme)
|
||||||
|
else
|
||||||
|
# Given a parent element, recurse to any of its applicable children
|
||||||
|
$children = $(this).find('.js-syntax-highlight')
|
||||||
|
$children.syntaxHighlight() if $children.length
|
||||||
|
|
||||||
$(document).on 'ready page:load', ->
|
$(document).on 'ready page:load', ->
|
||||||
$('.js-syntax-highlight').syntaxHighlight()
|
$('.js-syntax-highlight').syntaxHighlight()
|
||||||
|
|
|
@ -156,10 +156,16 @@
|
||||||
* Add some extra stuff to panels
|
* Add some extra stuff to panels
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
.panel {
|
|
||||||
.panel-heading {
|
|
||||||
font-weight: bold;
|
|
||||||
|
|
||||||
|
.container-blank .panel .panel-heading {
|
||||||
|
font-size: 17px;
|
||||||
|
line-height: 38px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel {
|
||||||
|
box-shadow: none;
|
||||||
|
|
||||||
|
.panel-heading {
|
||||||
.panel-head-actions {
|
.panel-head-actions {
|
||||||
position: relative;
|
position: relative;
|
||||||
top: -5px;
|
top: -5px;
|
||||||
|
@ -182,6 +188,10 @@
|
||||||
.pagination {
|
.pagination {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
min-width: 124px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.panel-small {
|
&.panel-small {
|
||||||
|
@ -209,6 +219,12 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.alert-help {
|
||||||
|
background-color: $background-color;
|
||||||
|
border: 1px solid $border-color;
|
||||||
|
color: $gl-gray;
|
||||||
|
}
|
||||||
|
|
||||||
// Typography =================================================================
|
// Typography =================================================================
|
||||||
|
|
||||||
.text-primary,
|
.text-primary,
|
||||||
|
|
|
@ -114,11 +114,12 @@ $alert-border-radius: 0;
|
||||||
//
|
//
|
||||||
//##
|
//##
|
||||||
|
|
||||||
$panel-border-radius: 0;
|
$panel-border-radius: 2px;
|
||||||
$panel-default-text: $text-color;
|
$panel-default-text: $text-color;
|
||||||
$panel-default-border: #E7E9ED;
|
$panel-default-border: $border-color;
|
||||||
$panel-default-heading-bg: #F8FAFC;
|
$panel-default-heading-bg: $background-color;
|
||||||
|
$panel-footer-bg: $background-color;
|
||||||
|
$panel-inner-border: $border-color;
|
||||||
|
|
||||||
//== Wells
|
//== Wells
|
||||||
//
|
//
|
||||||
|
|
|
@ -55,10 +55,10 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
@mixin md-typography {
|
@mixin md-typography {
|
||||||
color: #444;
|
color: $md-text-color;
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color: #3084bb;
|
color: $md-link-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
img {
|
img {
|
||||||
|
|
|
@ -2,6 +2,8 @@ $hover: #FFFAF1;
|
||||||
$gl-text-color: #54565b;
|
$gl-text-color: #54565b;
|
||||||
$gl-header-color: #4c4e54;
|
$gl-header-color: #4c4e54;
|
||||||
$gl-link-color: #333c48;
|
$gl-link-color: #333c48;
|
||||||
|
$md-text-color: #444;
|
||||||
|
$md-link-color: #3084bb;
|
||||||
$nprogress-color: #c0392b;
|
$nprogress-color: #c0392b;
|
||||||
$gl-font-size: 15px;
|
$gl-font-size: 15px;
|
||||||
$list-font-size: 15px;
|
$list-font-size: 15px;
|
||||||
|
|
|
@ -27,6 +27,10 @@
|
||||||
border-bottom: 1px solid #e7e9ed;
|
border-bottom: 1px solid #e7e9ed;
|
||||||
color: $gl-gray;
|
color: $gl-gray;
|
||||||
|
|
||||||
|
&.top-block {
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
|
||||||
&.middle-block {
|
&.middle-block {
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
&.btn-save {
|
&.btn-save {
|
||||||
@extend .btn-primary;
|
@extend .btn-success;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.btn-remove {
|
&.btn-remove {
|
||||||
|
|
|
@ -3,7 +3,11 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
.file-holder {
|
.file-holder {
|
||||||
border: 1px solid $border-color;
|
margin-left: -$gl-padding;
|
||||||
|
margin-right: -$gl-padding;
|
||||||
|
border: none;
|
||||||
|
border-top: 1px solid #E7E9EE;
|
||||||
|
border-bottom: 1px solid #E7E9EE;
|
||||||
margin-bottom: 1em;
|
margin-bottom: 1em;
|
||||||
|
|
||||||
table {
|
table {
|
||||||
|
@ -49,7 +53,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
&.wiki {
|
&.wiki {
|
||||||
padding: 25px;
|
padding: $gl-padding;
|
||||||
|
|
||||||
.highlight {
|
.highlight {
|
||||||
margin-bottom: 9px;
|
margin-bottom: 9px;
|
||||||
|
@ -90,7 +94,7 @@
|
||||||
border-right: none;
|
border-right: none;
|
||||||
}
|
}
|
||||||
background: #fff;
|
background: #fff;
|
||||||
padding: 8px;
|
padding: 10px $gl-padding;
|
||||||
}
|
}
|
||||||
.lines {
|
.lines {
|
||||||
pre {
|
pre {
|
||||||
|
@ -100,6 +104,33 @@
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
img.avatar {
|
||||||
|
border: 0 none;
|
||||||
|
float: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
td.blame-commit {
|
||||||
|
background: #f9f9f9;
|
||||||
|
min-width: 350px;
|
||||||
|
|
||||||
|
.commit-author-link {
|
||||||
|
color: #888;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
td.blame-numbers {
|
||||||
|
pre {
|
||||||
|
color: #AAA;
|
||||||
|
white-space: pre;
|
||||||
|
}
|
||||||
|
background: #f1f1f1;
|
||||||
|
border-left: 1px solid #DDD;
|
||||||
|
}
|
||||||
|
td.lines {
|
||||||
|
code {
|
||||||
|
font-family: $monospace_font;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.logs {
|
&.logs {
|
||||||
|
|
|
@ -28,12 +28,18 @@
|
||||||
padding: $gl-padding;
|
padding: $gl-padding;
|
||||||
border: 1px solid #e7e9ed;
|
border: 1px solid #e7e9ed;
|
||||||
min-height: 90vh;
|
min-height: 90vh;
|
||||||
|
|
||||||
|
&.container-blank {
|
||||||
|
background: none;
|
||||||
|
padding: 0;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-sidebar {
|
.nav-sidebar {
|
||||||
margin-top: 14 + $header-height;
|
margin-top: 14 + $header-height;
|
||||||
margin-bottom: 50px;
|
margin-bottom: 100px;
|
||||||
transition-duration: .3s;
|
transition-duration: .3s;
|
||||||
list-style: none;
|
list-style: none;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
|
@ -5,15 +5,19 @@ pre.code.highlight.white,
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
color: #333;
|
color: #333;
|
||||||
|
|
||||||
pre.highlight,
|
|
||||||
.line-numbers,
|
.line-numbers,
|
||||||
.line-numbers a {
|
.line-numbers a {
|
||||||
|
background-color: $background-color !important;
|
||||||
|
color: $gl-gray !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre.highlight {
|
||||||
background-color: #fff !important;
|
background-color: #fff !important;
|
||||||
color: #333 !important;
|
color: #333 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
pre.code {
|
pre.code {
|
||||||
border-left: 1px solid #bbb;
|
border-left: 1px solid $border-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
// highlight line via anchor
|
// highlight line via anchor
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
.diff-file {
|
.diff-file {
|
||||||
margin-left: -16px;
|
margin-left: -$gl-padding;
|
||||||
margin-right: -16px;
|
margin-right: -$gl-padding;
|
||||||
border: none;
|
border: none;
|
||||||
border-bottom: 1px solid #E7E9EE;
|
border-bottom: 1px solid #E7E9EE;
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
||||||
position: relative;
|
position: relative;
|
||||||
background: $background-color;
|
background: $background-color;
|
||||||
border-bottom: 1px solid $border-color;
|
border-bottom: 1px solid $border-color;
|
||||||
padding: 10px 15px;
|
padding: 10px 16px;
|
||||||
color: #555;
|
color: #555;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,6 @@
|
||||||
|
|
||||||
p {
|
p {
|
||||||
color: #7f8fa4;
|
color: #7f8fa4;
|
||||||
display: inline;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,26 +203,18 @@ ul.nav.nav-projects-tabs {
|
||||||
}
|
}
|
||||||
|
|
||||||
.fork-namespaces {
|
.fork-namespaces {
|
||||||
.thumbnail {
|
.fork-thumbnail {
|
||||||
|
text-align: center;
|
||||||
&.fork-exists-thumbnail {
|
margin-bottom: $gl-padding;
|
||||||
border-color: #EEE;
|
|
||||||
|
|
||||||
.caption {
|
.caption {
|
||||||
color: #999;
|
padding: $gl-padding 0;
|
||||||
}
|
min-height: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.fork-thumbnail {
|
img {
|
||||||
border-color: #AAA;
|
@include border-radius(50%);
|
||||||
|
max-width: 100px;
|
||||||
&:hover {
|
|
||||||
background-color: $hover;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,36 +78,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.blame {
|
|
||||||
img.avatar {
|
|
||||||
border: 0 none;
|
|
||||||
float: none;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
td.blame-commit {
|
|
||||||
background: #f9f9f9;
|
|
||||||
min-width: 350px;
|
|
||||||
|
|
||||||
.commit-author-link {
|
|
||||||
color: #888;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
td.blame-numbers {
|
|
||||||
pre {
|
|
||||||
color: #AAA;
|
|
||||||
white-space: pre;
|
|
||||||
}
|
|
||||||
background: #f1f1f1;
|
|
||||||
border-left: 1px solid #DDD;
|
|
||||||
}
|
|
||||||
td.lines {
|
|
||||||
code {
|
|
||||||
font-family: $monospace_font;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.tree-ref-holder {
|
.tree-ref-holder {
|
||||||
|
@ -132,17 +102,14 @@
|
||||||
list-style: none;
|
list-style: none;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 5px;
|
||||||
|
|
||||||
.commit {
|
.commit {
|
||||||
padding: 10px 15px;
|
padding: $gl-padding 0;
|
||||||
|
|
||||||
.commit-row-title {
|
.commit-row-title {
|
||||||
font-size: 13px;
|
|
||||||
|
|
||||||
.commit-row-message {
|
.commit-row-message {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
color: #555;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,4 +31,26 @@ module PageLayoutHelper
|
||||||
@fluid_layout
|
@fluid_layout
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def blank_container(enabled = false)
|
||||||
|
if @blank_container.nil?
|
||||||
|
@blank_container = enabled
|
||||||
|
else
|
||||||
|
@blank_container
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def container_class
|
||||||
|
css_class = "container-fluid"
|
||||||
|
|
||||||
|
unless fluid_layout
|
||||||
|
css_class += " container-limited"
|
||||||
|
end
|
||||||
|
|
||||||
|
if blank_container
|
||||||
|
css_class += " container-blank"
|
||||||
|
end
|
||||||
|
|
||||||
|
css_class
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
- @blank_container = true
|
||||||
.panel.panel-default
|
.panel.panel-default
|
||||||
.panel-heading
|
.panel-heading
|
||||||
%strong= @group.name
|
%strong= @group.name
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
= current_user.username
|
= current_user.username
|
||||||
.content-wrapper
|
.content-wrapper
|
||||||
= render "layouts/flash"
|
= render "layouts/flash"
|
||||||
%div{ class: fluid_layout ? "container-fluid" : "container-fluid container-limited" }
|
%div{ class: container_class }
|
||||||
.content
|
.content
|
||||||
.clearfix
|
.clearfix
|
||||||
= yield
|
= yield
|
||||||
|
|
|
@ -37,14 +37,15 @@
|
||||||
= icon('clipboard fw')
|
= icon('clipboard fw')
|
||||||
%span
|
%span
|
||||||
Snippets
|
Snippets
|
||||||
- if current_user
|
|
||||||
= nav_link(controller: :profile) do
|
|
||||||
= link_to profile_path, title: 'Profile settings', data: {toggle: 'tooltip', placement: 'bottom'} do
|
|
||||||
= icon('user fw')
|
|
||||||
%span
|
|
||||||
Profile Settings
|
|
||||||
= nav_link(controller: :help) do
|
= nav_link(controller: :help) do
|
||||||
= link_to help_path, title: 'Help', data: {placement: 'right'} do
|
= link_to help_path, title: 'Help', data: {placement: 'right'} do
|
||||||
= icon('question-circle fw')
|
= icon('question-circle fw')
|
||||||
%span
|
%span
|
||||||
Help
|
Help
|
||||||
|
- if current_user
|
||||||
|
%li.separate-item
|
||||||
|
= nav_link(controller: :profile) do
|
||||||
|
= link_to profile_path, title: 'Profile settings', data: {toggle: 'tooltip', placement: 'bottom'} do
|
||||||
|
= icon('user fw')
|
||||||
|
%span
|
||||||
|
Profile Settings
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
= link_to profile_path, title: 'Profile', data: {placement: 'right'} do
|
= link_to profile_path, title: 'Profile', data: {placement: 'right'} do
|
||||||
= icon('user fw')
|
= icon('user fw')
|
||||||
%span
|
%span
|
||||||
Profile
|
Profile Settings
|
||||||
= nav_link(controller: [:accounts, :two_factor_auths]) do
|
= nav_link(controller: [:accounts, :two_factor_auths]) do
|
||||||
= link_to profile_account_path, title: 'Account', data: {placement: 'right'} do
|
= link_to profile_account_path, title: 'Account', data: {placement: 'right'} do
|
||||||
= icon('gear fw')
|
= icon('gear fw')
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
- page_title "Profile Settings"
|
- page_title "Profile Settings"
|
||||||
|
- unless @header_title
|
||||||
- header_title "Profile Settings", profile_path
|
- header_title "Profile Settings", profile_path
|
||||||
- sidebar "profile"
|
- sidebar "profile"
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
- page_title "Account"
|
- page_title "Account"
|
||||||
%h3.page-title
|
- header_title page_title, profile_account_path
|
||||||
= page_title
|
- @blank_container = true
|
||||||
%p.light
|
|
||||||
Change your username and basic account settings.
|
|
||||||
%hr
|
|
||||||
- if current_user.ldap_user?
|
- if current_user.ldap_user?
|
||||||
.alert.alert-info
|
.alert.alert-info
|
||||||
Some options are unavailable for LDAP accounts
|
Some options are unavailable for LDAP accounts
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
- page_title "Applications"
|
- page_title "Applications"
|
||||||
%h3.page-title
|
- header_title page_title, applications_profile_path
|
||||||
= page_title
|
|
||||||
%p.light
|
.gray-content-block.top-block
|
||||||
- if user_oauth_applications?
|
- if user_oauth_applications?
|
||||||
Manage applications that can use GitLab as an OAuth provider,
|
Manage applications that can use GitLab as an OAuth provider,
|
||||||
and applications that you've authorized to use your account.
|
and applications that you've authorized to use your account.
|
||||||
- else
|
- else
|
||||||
Manage applications that you've authorized to use your account.
|
Manage applications that you've authorized to use your account.
|
||||||
%hr
|
|
||||||
|
|
||||||
- if user_oauth_applications?
|
- if user_oauth_applications?
|
||||||
.oauth-applications
|
.oauth-applications
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
- page_title "Audit Log"
|
- page_title "Audit Log"
|
||||||
%h3.page-title Audit Log
|
- header_title page_title, audit_log_profile_path
|
||||||
%p.light History of authentications
|
|
||||||
|
|
||||||
|
.gray-content-block.top-block
|
||||||
|
History of authentications
|
||||||
|
|
||||||
|
.prepend-top-default
|
||||||
= render 'event_table', events: @events
|
= render 'event_table', events: @events
|
|
@ -1,12 +1,10 @@
|
||||||
- page_title "Emails"
|
- page_title "Emails"
|
||||||
%h3.page-title
|
- header_title page_title, profile_emails_path
|
||||||
= page_title
|
|
||||||
%p.light
|
.gray-content-block.top-block
|
||||||
Control emails linked to your account
|
Control emails linked to your account
|
||||||
%hr
|
|
||||||
|
|
||||||
|
%ul.prepend-top-default
|
||||||
%ul
|
|
||||||
%li
|
%li
|
||||||
Your
|
Your
|
||||||
%b Primary Email
|
%b Primary Email
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
- page_title "SSH Keys"
|
- page_title "SSH Keys"
|
||||||
%h3.page-title
|
- header_title page_title, profile_keys_path
|
||||||
= page_title
|
|
||||||
|
.gray-content-block.top-block
|
||||||
.pull-right
|
.pull-right
|
||||||
= link_to "Add SSH Key", new_profile_key_path, class: "btn btn-new"
|
= link_to "Add SSH Key", new_profile_key_path, class: "btn btn-new"
|
||||||
%p.light
|
.oneline
|
||||||
Before you can add an SSH key you need to
|
Before you can add an SSH key you need to
|
||||||
= link_to "generate it.", help_page_path("ssh", "README")
|
= link_to "generate it.", help_page_path("ssh", "README")
|
||||||
%hr
|
|
||||||
|
|
||||||
|
.prepend-top-default
|
||||||
= render 'key_table'
|
= render 'key_table'
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
- page_title "Notifications"
|
- page_title "Notifications"
|
||||||
%h3.page-title
|
- header_title page_title, profile_notifications_path
|
||||||
= page_title
|
|
||||||
%p.light
|
|
||||||
These are your global notification settings.
|
|
||||||
%hr
|
|
||||||
|
|
||||||
|
.gray-content-block.top-block
|
||||||
|
These are your global notification settings.
|
||||||
|
|
||||||
|
.prepend-top-default
|
||||||
= form_for @user, url: profile_notifications_path, method: :put, html: { class: 'update-notifications form-horizontal global-notifications-form' } do |f|
|
= form_for @user, url: profile_notifications_path, method: :put, html: { class: 'update-notifications form-horizontal global-notifications-form' } do |f|
|
||||||
-if @user.errors.any?
|
-if @user.errors.any?
|
||||||
%div.alert.alert-danger
|
%div.alert.alert-danger
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
- page_title "Password"
|
- page_title "Password"
|
||||||
%h3.page-title
|
- header_title page_title, edit_profile_password_path
|
||||||
= page_title
|
|
||||||
%p.light
|
.gray-content-block.top-block
|
||||||
- if @user.password_automatically_set?
|
- if @user.password_automatically_set?
|
||||||
Set your password.
|
Set your password.
|
||||||
- else
|
- else
|
||||||
Change your password or recover your current one.
|
Change your password or recover your current one.
|
||||||
%hr
|
|
||||||
.update-password
|
.update-password.prepend-top-default
|
||||||
= form_for @user, url: profile_password_path, method: :put, html: { class: 'form-horizontal' } do |f|
|
= form_for @user, url: profile_password_path, method: :put, html: { class: 'form-horizontal' } do |f|
|
||||||
%div
|
%div
|
||||||
%p.slead
|
%p.slead
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
- page_title 'Preferences'
|
- page_title 'Preferences'
|
||||||
%h3.page-title
|
- header_title page_title, profile_preferences_path
|
||||||
= page_title
|
- @blank_container = true
|
||||||
%p.light
|
|
||||||
|
.alert.alert-help
|
||||||
These settings allow you to customize the appearance and behavior of the site.
|
These settings allow you to customize the appearance and behavior of the site.
|
||||||
They are saved with your account and will persist to any device you use to
|
They are saved with your account and will persist to any device you use to
|
||||||
access the site.
|
access the site.
|
||||||
%hr
|
|
||||||
|
|
||||||
= form_for @user, url: profile_preferences_path, remote: true, method: :put, html: {class: 'js-preferences-form form-horizontal'} do |f|
|
= form_for @user, url: profile_preferences_path, remote: true, method: :put, html: {class: 'js-preferences-form form-horizontal'} do |f|
|
||||||
.panel.panel-default.application-theme
|
.panel.panel-default.application-theme
|
||||||
|
|
|
@ -1,14 +1,9 @@
|
||||||
- page_title "Profile"
|
.gray-content-block.top-block
|
||||||
%h3.page-title
|
|
||||||
= page_title
|
|
||||||
%p.light
|
|
||||||
This information will appear on your profile.
|
This information will appear on your profile.
|
||||||
- if current_user.ldap_user?
|
- if current_user.ldap_user?
|
||||||
Some options are unavailable for LDAP accounts
|
Some options are unavailable for LDAP accounts
|
||||||
%hr
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.prepend-top-default
|
||||||
= form_for @user, url: profile_path, method: :put, html: { multipart: true, class: "edit_user form-horizontal" }, authenticity_token: true do |f|
|
= form_for @user, url: profile_path, method: :put, html: { multipart: true, class: "edit_user form-horizontal" }, authenticity_token: true do |f|
|
||||||
-if @user.errors.any?
|
-if @user.errors.any?
|
||||||
%div.alert.alert-danger
|
%div.alert.alert-danger
|
||||||
|
|
|
@ -7,6 +7,13 @@
|
||||||
- if @project.description.present?
|
- if @project.description.present?
|
||||||
= markdown(@project.description, pipeline: :description)
|
= markdown(@project.description, pipeline: :description)
|
||||||
|
|
||||||
|
- if forked_from_project = @project.forked_from_project
|
||||||
|
%p
|
||||||
|
Forked from
|
||||||
|
= link_to project_path(forked_from_project) do
|
||||||
|
= forked_from_project.namespace.try(:name)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.project-repo-buttons
|
.project-repo-buttons
|
||||||
= render 'projects/buttons/star'
|
= render 'projects/buttons/star'
|
||||||
|
@ -14,12 +21,6 @@
|
||||||
- unless empty_repo
|
- unless empty_repo
|
||||||
= render 'projects/buttons/fork'
|
= render 'projects/buttons/fork'
|
||||||
|
|
||||||
- if forked_from_project = @project.forked_from_project
|
|
||||||
= link_to project_path(forked_from_project), class: 'btn' do
|
|
||||||
= icon("code-fork fw")
|
|
||||||
Forked from
|
|
||||||
= forked_from_project.namespace.try(:name)
|
|
||||||
|
|
||||||
- if can? current_user, :download_code, @project
|
- if can? current_user, :download_code, @project
|
||||||
= link_to archive_namespace_project_repository_path(@project.namespace, @project, ref: @ref, format: 'zip'), class: 'btn', rel: 'nofollow' do
|
= link_to archive_namespace_project_repository_path(@project.namespace, @project, ref: @ref, format: 'zip'), class: 'btn', rel: 'nofollow' do
|
||||||
= icon('download fw')
|
= icon('download fw')
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
- else
|
- else
|
||||||
= link_to title, '#'
|
= link_to title, '#'
|
||||||
|
|
||||||
%ul.blob-commit-info.well.hidden-xs
|
%ul.blob-commit-info.hidden-xs
|
||||||
- blob_commit = @repository.last_commit_for_path(@commit.id, blob.path)
|
- blob_commit = @repository.last_commit_for_path(@commit.id, blob.path)
|
||||||
= render blob_commit, project: @project
|
= render blob_commit, project: @project
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
|
- @blank_container = true
|
||||||
|
|
||||||
.project-edit-container
|
.project-edit-container
|
||||||
.project-edit-errors
|
.project-edit-errors
|
||||||
.project-edit-content
|
.project-edit-content
|
||||||
%div
|
.panel.panel-default
|
||||||
%h3.page-title
|
.panel-heading
|
||||||
Project settings
|
Project settings
|
||||||
%hr
|
|
||||||
.panel-body
|
.panel-body
|
||||||
= form_for [@project.namespace.becomes(Namespace), @project], remote: true, html: { multipart: true, class: "edit_project form-horizontal fieldset-form" }, authenticity_token: true do |f|
|
= form_for [@project.namespace.becomes(Namespace), @project], remote: true, html: { multipart: true, class: "edit_project form-horizontal fieldset-form" }, authenticity_token: true do |f|
|
||||||
|
|
||||||
|
|
|
@ -10,21 +10,22 @@
|
||||||
- group.each do |namespace|
|
- group.each do |namespace|
|
||||||
.col-md-2.col-sm-3
|
.col-md-2.col-sm-3
|
||||||
- if fork = namespace.find_fork_of(@project)
|
- if fork = namespace.find_fork_of(@project)
|
||||||
.thumbnail.fork-exists-thumbnail
|
.fork-thumbnail
|
||||||
= link_to project_path(fork), title: "Visit project fork", class: 'has_tooltip' do
|
= link_to project_path(fork), title: "Visit project fork", class: 'has_tooltip' do
|
||||||
= image_tag namespace_icon(namespace, 200)
|
= image_tag namespace_icon(namespace, 100)
|
||||||
.caption
|
.caption
|
||||||
%h4=namespace.human_name
|
%strong
|
||||||
%p
|
= namespace.human_name
|
||||||
= namespace.path
|
%div.text-primary
|
||||||
|
Already forked
|
||||||
|
|
||||||
- else
|
- else
|
||||||
.thumbnail.fork-thumbnail
|
.fork-thumbnail
|
||||||
= link_to namespace_project_fork_path(@project.namespace, @project, namespace_key: namespace.id), title: "Fork here", method: "POST", class: 'has_tooltip' do
|
= link_to namespace_project_fork_path(@project.namespace, @project, namespace_key: namespace.id), title: "Fork here", method: "POST", class: 'has_tooltip' do
|
||||||
= image_tag namespace_icon(namespace, 200)
|
= image_tag namespace_icon(namespace, 100)
|
||||||
.caption
|
.caption
|
||||||
%h4=namespace.human_name
|
%strong
|
||||||
%p
|
= namespace.human_name
|
||||||
= namespace.path
|
|
||||||
|
|
||||||
%p.light
|
%p.light
|
||||||
Fork is a copy of a project repository.
|
Fork is a copy of a project repository.
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
= f.label :title, class: 'control-label' do
|
= f.label :title, class: 'control-label' do
|
||||||
%strong= 'Title *'
|
%strong= 'Title *'
|
||||||
.col-sm-10
|
.col-sm-10
|
||||||
= f.text_field :title, maxlength: 255, autofocus: true,
|
= f.text_field :title, maxlength: 255, autofocus: true, autocomplete: 'off',
|
||||||
class: 'form-control pad js-gfm-input', required: true
|
class: 'form-control pad js-gfm-input', required: true
|
||||||
|
|
||||||
- if issuable.is_a?(MergeRequest)
|
- if issuable.is_a?(MergeRequest)
|
||||||
|
|
|
@ -2,7 +2,12 @@
|
||||||
|
|
||||||
require 'gitlab/current_settings'
|
require 'gitlab/current_settings'
|
||||||
include Gitlab::CurrentSettings
|
include Gitlab::CurrentSettings
|
||||||
|
|
||||||
|
# allow it to fail: it may to do so when create_from_defaults is executed before migrations are actually done
|
||||||
|
begin
|
||||||
Settings.gitlab['session_expire_delay'] = current_application_settings.session_expire_delay
|
Settings.gitlab['session_expire_delay'] = current_application_settings.session_expire_delay
|
||||||
|
rescue
|
||||||
|
end
|
||||||
|
|
||||||
Gitlab::Application.config.session_store(
|
Gitlab::Application.config.session_store(
|
||||||
:redis_store, # Using the cookie_store would enable session replay attacks.
|
:redis_store, # Using the cookie_store would enable session replay attacks.
|
||||||
|
|
|
@ -27,6 +27,14 @@ Delete Asana service for a project.
|
||||||
DELETE /projects/:id/services/asana
|
DELETE /projects/:id/services/asana
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Get Asana service settings
|
||||||
|
|
||||||
|
Get Asana service settings for a project.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/services/asana
|
||||||
|
```
|
||||||
|
|
||||||
## Assembla
|
## Assembla
|
||||||
|
|
||||||
Project Management Software (Source Commits Endpoint)
|
Project Management Software (Source Commits Endpoint)
|
||||||
|
@ -52,6 +60,14 @@ Delete Assembla service for a project.
|
||||||
DELETE /projects/:id/services/assembla
|
DELETE /projects/:id/services/assembla
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Get Assembla service settings
|
||||||
|
|
||||||
|
Get Assembla service settings for a project.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/services/assembla
|
||||||
|
```
|
||||||
|
|
||||||
## Atlassian Bamboo CI
|
## Atlassian Bamboo CI
|
||||||
|
|
||||||
A continuous integration and build server
|
A continuous integration and build server
|
||||||
|
@ -81,6 +97,14 @@ Delete Atlassian Bamboo CI service for a project.
|
||||||
DELETE /projects/:id/services/bamboo
|
DELETE /projects/:id/services/bamboo
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Get Atlassian Bamboo CI service settings
|
||||||
|
|
||||||
|
Get Atlassian Bamboo CI service settings for a project.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/services/bamboo
|
||||||
|
```
|
||||||
|
|
||||||
## Buildkite
|
## Buildkite
|
||||||
|
|
||||||
Continuous integration and deployments
|
Continuous integration and deployments
|
||||||
|
@ -107,6 +131,14 @@ Delete Buildkite service for a project.
|
||||||
DELETE /projects/:id/services/buildkite
|
DELETE /projects/:id/services/buildkite
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Get Buildkite service settings
|
||||||
|
|
||||||
|
Get Buildkite service settings for a project.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/services/buildkite
|
||||||
|
```
|
||||||
|
|
||||||
## Campfire
|
## Campfire
|
||||||
|
|
||||||
Simple web-based real-time group chat
|
Simple web-based real-time group chat
|
||||||
|
@ -133,6 +165,14 @@ Delete Campfire service for a project.
|
||||||
DELETE /projects/:id/services/campfire
|
DELETE /projects/:id/services/campfire
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Get Campfire service settings
|
||||||
|
|
||||||
|
Get Campfire service settings for a project.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/services/campfire
|
||||||
|
```
|
||||||
|
|
||||||
## Custom Issue Tracker
|
## Custom Issue Tracker
|
||||||
|
|
||||||
Custom issue tracker
|
Custom issue tracker
|
||||||
|
@ -161,6 +201,14 @@ Delete Custom Issue Tracker service for a project.
|
||||||
DELETE /projects/:id/services/custom-issue-tracker
|
DELETE /projects/:id/services/custom-issue-tracker
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Get Custom Issue Tracker service settings
|
||||||
|
|
||||||
|
Get Custom Issue Tracker service settings for a project.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/services/custom-issue-tracker
|
||||||
|
```
|
||||||
|
|
||||||
## Drone CI
|
## Drone CI
|
||||||
|
|
||||||
Drone is a Continuous Integration platform built on Docker, written in Go
|
Drone is a Continuous Integration platform built on Docker, written in Go
|
||||||
|
@ -187,6 +235,14 @@ Delete Drone CI service for a project.
|
||||||
DELETE /projects/:id/services/drone-ci
|
DELETE /projects/:id/services/drone-ci
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Get Drone CI service settings
|
||||||
|
|
||||||
|
Get Drone CI service settings for a project.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/services/drone-ci
|
||||||
|
```
|
||||||
|
|
||||||
## Emails on push
|
## Emails on push
|
||||||
|
|
||||||
Email the commits and diff of each push to a list of recipients.
|
Email the commits and diff of each push to a list of recipients.
|
||||||
|
@ -213,6 +269,14 @@ Delete Emails on push service for a project.
|
||||||
DELETE /projects/:id/services/emails-on-push
|
DELETE /projects/:id/services/emails-on-push
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Get Emails on push service settings
|
||||||
|
|
||||||
|
Get Emails on push service settings for a project.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/services/emails-on-push
|
||||||
|
```
|
||||||
|
|
||||||
## External Wiki
|
## External Wiki
|
||||||
|
|
||||||
Replaces the link to the internal wiki with a link to an external wiki.
|
Replaces the link to the internal wiki with a link to an external wiki.
|
||||||
|
@ -237,6 +301,14 @@ Delete External Wiki service for a project.
|
||||||
DELETE /projects/:id/services/external-wiki
|
DELETE /projects/:id/services/external-wiki
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Get External Wiki service settings
|
||||||
|
|
||||||
|
Get External Wiki service settings for a project.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/services/external-wiki
|
||||||
|
```
|
||||||
|
|
||||||
## Flowdock
|
## Flowdock
|
||||||
|
|
||||||
Flowdock is a collaboration web app for technical teams.
|
Flowdock is a collaboration web app for technical teams.
|
||||||
|
@ -261,6 +333,14 @@ Delete Flowdock service for a project.
|
||||||
DELETE /projects/:id/services/flowdock
|
DELETE /projects/:id/services/flowdock
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Get Flowdock service settings
|
||||||
|
|
||||||
|
Get Flowdock service settings for a project.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/services/flowdock
|
||||||
|
```
|
||||||
|
|
||||||
## Gemnasium
|
## Gemnasium
|
||||||
|
|
||||||
Gemnasium monitors your project dependencies and alerts you about updates and security vulnerabilities.
|
Gemnasium monitors your project dependencies and alerts you about updates and security vulnerabilities.
|
||||||
|
@ -286,6 +366,14 @@ Delete Gemnasium service for a project.
|
||||||
DELETE /projects/:id/services/gemnasium
|
DELETE /projects/:id/services/gemnasium
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Get Gemnasium service settings
|
||||||
|
|
||||||
|
Get Gemnasium service settings for a project.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/services/gemnasium
|
||||||
|
```
|
||||||
|
|
||||||
## GitLab CI
|
## GitLab CI
|
||||||
|
|
||||||
Continuous integration server from GitLab
|
Continuous integration server from GitLab
|
||||||
|
@ -312,6 +400,14 @@ Delete GitLab CI service for a project.
|
||||||
DELETE /projects/:id/services/gitlab-ci
|
DELETE /projects/:id/services/gitlab-ci
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Get GitLab CI service settings
|
||||||
|
|
||||||
|
Get GitLab CI service settings for a project.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/services/gitlab-ci
|
||||||
|
```
|
||||||
|
|
||||||
## HipChat
|
## HipChat
|
||||||
|
|
||||||
Private group chat and IM
|
Private group chat and IM
|
||||||
|
@ -341,6 +437,14 @@ Delete HipChat service for a project.
|
||||||
DELETE /projects/:id/services/hipchat
|
DELETE /projects/:id/services/hipchat
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Get HipChat service settings
|
||||||
|
|
||||||
|
Get HipChat service settings for a project.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/services/hipchat
|
||||||
|
```
|
||||||
|
|
||||||
## Irker (IRC gateway)
|
## Irker (IRC gateway)
|
||||||
|
|
||||||
Send IRC messages, on update, to a list of recipients through an Irker gateway.
|
Send IRC messages, on update, to a list of recipients through an Irker gateway.
|
||||||
|
@ -371,6 +475,14 @@ Delete Irker (IRC gateway) service for a project.
|
||||||
DELETE /projects/:id/services/irker
|
DELETE /projects/:id/services/irker
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Get Irker (IRC gateway) service settings
|
||||||
|
|
||||||
|
Get Irker (IRC gateway) service settings for a project.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/services/irker
|
||||||
|
```
|
||||||
|
|
||||||
## JIRA
|
## JIRA
|
||||||
|
|
||||||
Jira issue tracker
|
Jira issue tracker
|
||||||
|
@ -400,6 +512,14 @@ Delete JIRA service for a project.
|
||||||
DELETE /projects/:id/services/jira
|
DELETE /projects/:id/services/jira
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Get JIRA service settings
|
||||||
|
|
||||||
|
Get JIRA service settings for a project.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/services/jira
|
||||||
|
```
|
||||||
|
|
||||||
## PivotalTracker
|
## PivotalTracker
|
||||||
|
|
||||||
Project Management Software (Source Commits Endpoint)
|
Project Management Software (Source Commits Endpoint)
|
||||||
|
@ -424,6 +544,14 @@ Delete PivotalTracker service for a project.
|
||||||
DELETE /projects/:id/services/pivotaltracker
|
DELETE /projects/:id/services/pivotaltracker
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Get PivotalTracker service settings
|
||||||
|
|
||||||
|
Get PivotalTracker service settings for a project.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/services/pivotaltracker
|
||||||
|
```
|
||||||
|
|
||||||
## Pushover
|
## Pushover
|
||||||
|
|
||||||
Pushover makes it easy to get real-time notifications on your Android device, iPhone, iPad, and Desktop.
|
Pushover makes it easy to get real-time notifications on your Android device, iPhone, iPad, and Desktop.
|
||||||
|
@ -452,6 +580,14 @@ Delete Pushover service for a project.
|
||||||
DELETE /projects/:id/services/pushover
|
DELETE /projects/:id/services/pushover
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Get Pushover service settings
|
||||||
|
|
||||||
|
Get Pushover service settings for a project.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/services/pushover
|
||||||
|
```
|
||||||
|
|
||||||
## Redmine
|
## Redmine
|
||||||
|
|
||||||
Redmine issue tracker
|
Redmine issue tracker
|
||||||
|
@ -479,6 +615,14 @@ Delete Redmine service for a project.
|
||||||
DELETE /projects/:id/services/redmine
|
DELETE /projects/:id/services/redmine
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Get Redmine service settings
|
||||||
|
|
||||||
|
Get Redmine service settings for a project.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/services/redmine
|
||||||
|
```
|
||||||
|
|
||||||
## Slack
|
## Slack
|
||||||
|
|
||||||
A team communication tool for the 21st century
|
A team communication tool for the 21st century
|
||||||
|
@ -505,6 +649,14 @@ Delete Slack service for a project.
|
||||||
DELETE /projects/:id/services/slack
|
DELETE /projects/:id/services/slack
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Get Slack service settings
|
||||||
|
|
||||||
|
Get Slack service settings for a project.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/services/slack
|
||||||
|
```
|
||||||
|
|
||||||
## JetBrains TeamCity CI
|
## JetBrains TeamCity CI
|
||||||
|
|
||||||
A continuous integration and build server
|
A continuous integration and build server
|
||||||
|
@ -534,3 +686,11 @@ Delete JetBrains TeamCity CI service for a project.
|
||||||
DELETE /projects/:id/services/teamcity
|
DELETE /projects/:id/services/teamcity
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Get JetBrains TeamCity CI service settings
|
||||||
|
|
||||||
|
Get JetBrains TeamCity CI service settings for a project.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/services/teamcity
|
||||||
|
```
|
||||||
|
|
||||||
|
|
|
@ -162,7 +162,7 @@ sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab
|
||||||
TIP: to see what changed in `gitlab.yml.example` in this release use next command:
|
TIP: to see what changed in `gitlab.yml.example` in this release use next command:
|
||||||
|
|
||||||
```
|
```
|
||||||
git diff 6-0-stable:config/gitlab.yml.example 7.14-stable:config/gitlab.yml.example
|
git diff 6-0-stable:config/gitlab.yml.example 7-14-stable:config/gitlab.yml.example
|
||||||
```
|
```
|
||||||
|
|
||||||
* Make `/home/git/gitlab/config/gitlab.yml` the same as https://gitlab.com/gitlab-org/gitlab-ce/blob/7-14-stable/config/gitlab.yml.example but with your settings.
|
* Make `/home/git/gitlab/config/gitlab.yml` the same as https://gitlab.com/gitlab-org/gitlab-ce/blob/7-14-stable/config/gitlab.yml.example but with your settings.
|
||||||
|
|
|
@ -25,6 +25,9 @@ RUN mkdir -p /opt/gitlab/sv/sshd/supervise \
|
||||||
&& ln -s /opt/gitlab/sv/sshd /opt/gitlab/service \
|
&& ln -s /opt/gitlab/sv/sshd /opt/gitlab/service \
|
||||||
&& mkdir -p /var/run/sshd
|
&& mkdir -p /var/run/sshd
|
||||||
|
|
||||||
|
# Disabling use DNS in ssh since it tends to slow connecting
|
||||||
|
RUN echo "UseDNS no" >> /etc/ssh/sshd_config
|
||||||
|
|
||||||
# Prepare default configuration
|
# Prepare default configuration
|
||||||
RUN ( \
|
RUN ( \
|
||||||
echo "" && \
|
echo "" && \
|
||||||
|
|
|
@ -4,11 +4,13 @@ class Spinach::Features::AdminUsers < Spinach::FeatureSteps
|
||||||
include SharedAdmin
|
include SharedAdmin
|
||||||
|
|
||||||
before do
|
before do
|
||||||
allow(Devise).to receive(:omniauth_providers).and_return([:twitter, :twitter_updated])
|
allow(Gitlab::OAuth::Provider).to receive(:providers).and_return([:twitter, :twitter_updated])
|
||||||
|
allow_any_instance_of(ApplicationHelper).to receive(:user_omniauth_authorize_path).and_return(root_path)
|
||||||
end
|
end
|
||||||
|
|
||||||
after do
|
after do
|
||||||
allow(Devise).to receive(:omniauth_providers).and_call_original
|
allow(Gitlab::OAuth::Provider).to receive(:providers).and_call_original
|
||||||
|
allow_any_instance_of(ApplicationHelper).to receive(:user_omniauth_authorize_path).and_call_original
|
||||||
end
|
end
|
||||||
|
|
||||||
step 'I should see all users' do
|
step 'I should see all users' do
|
||||||
|
|
|
@ -49,6 +49,16 @@ module API
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Get <service_slug> service settings for project
|
||||||
|
#
|
||||||
|
# Example Request:
|
||||||
|
#
|
||||||
|
# GET /project/:id/services/gitlab-ci
|
||||||
|
#
|
||||||
|
get ':id/services/:service_slug' do
|
||||||
|
present project_service
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -77,7 +77,7 @@ module Gitlab
|
||||||
pipeline: options[:pipeline],
|
pipeline: options[:pipeline],
|
||||||
|
|
||||||
# EmojiFilter
|
# EmojiFilter
|
||||||
asset_root: Gitlab.config.gitlab.url,
|
asset_root: Gitlab.config.gitlab.base_url,
|
||||||
asset_host: Gitlab::Application.config.asset_host,
|
asset_host: Gitlab::Application.config.asset_host,
|
||||||
|
|
||||||
# TableOfContentsFilter
|
# TableOfContentsFilter
|
||||||
|
|
|
@ -67,12 +67,16 @@ module Gitlab
|
||||||
|
|
||||||
def clean_spans
|
def clean_spans
|
||||||
lambda do |env|
|
lambda do |env|
|
||||||
return unless env[:node_name] == 'span'
|
node = env[:node]
|
||||||
return unless env[:node].has_attribute?('class')
|
|
||||||
|
|
||||||
unless has_ancestor?(env[:node], 'pre')
|
return unless node.name == 'span'
|
||||||
env[:node].remove_attribute('class')
|
return unless node.has_attribute?('class')
|
||||||
end
|
|
||||||
|
unless has_ancestor?(node, 'pre')
|
||||||
|
node.remove_attribute('class')
|
||||||
|
end
|
||||||
|
|
||||||
|
{ node_whitelist: [node] }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -21,7 +21,13 @@ module Gitlab
|
||||||
language = node.attr('class')
|
language = node.attr('class')
|
||||||
code = node.text
|
code = node.text
|
||||||
|
|
||||||
|
begin
|
||||||
highlighted = block_code(code, language)
|
highlighted = block_code(code, language)
|
||||||
|
rescue
|
||||||
|
# Gracefully handle syntax highlighter bugs/errors to ensure
|
||||||
|
# users can still access an issue/comment/etc.
|
||||||
|
highlighted = "<pre>#{code}</pre>"
|
||||||
|
end
|
||||||
|
|
||||||
# Replace the parent `pre` element with the entire highlighted block
|
# Replace the parent `pre` element with the entire highlighted block
|
||||||
node.parent.replace(highlighted)
|
node.parent.replace(highlighted)
|
||||||
|
|
|
@ -40,6 +40,15 @@ DELETE /projects/:id/services/<%= service[:dashed_name] %>
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Get <%= service[:title] %> service settings
|
||||||
|
|
||||||
|
Get <%= service[:title] %> service settings for a project.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/services/<%= service[:dashed_name] %>
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
<% end %>
|
<% end %>
|
||||||
ERB
|
ERB
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
#= require syntax_highlight
|
||||||
|
|
||||||
|
describe 'Syntax Highlighter', ->
|
||||||
|
stubUserColorScheme = (value) ->
|
||||||
|
window.gon ?= {}
|
||||||
|
window.gon.user_color_scheme = value
|
||||||
|
|
||||||
|
describe 'on a js-syntax-highlight element', ->
|
||||||
|
beforeEach ->
|
||||||
|
fixture.set('<div class="js-syntax-highlight"></div>')
|
||||||
|
|
||||||
|
it 'applies syntax highlighting', ->
|
||||||
|
stubUserColorScheme('monokai')
|
||||||
|
|
||||||
|
$('.js-syntax-highlight').syntaxHighlight()
|
||||||
|
|
||||||
|
expect($('.js-syntax-highlight')).toHaveClass('monokai')
|
||||||
|
|
||||||
|
describe 'on a parent element', ->
|
||||||
|
beforeEach ->
|
||||||
|
fixture.set """
|
||||||
|
<div class="parent">
|
||||||
|
<div class="js-syntax-highlight"></div>
|
||||||
|
<div class="foo"></div>
|
||||||
|
<div class="js-syntax-highlight"></div>
|
||||||
|
</div>
|
||||||
|
"""
|
||||||
|
|
||||||
|
it 'applies highlighting to all applicable children', ->
|
||||||
|
stubUserColorScheme('monokai')
|
||||||
|
|
||||||
|
$('.parent').syntaxHighlight()
|
||||||
|
|
||||||
|
expect($('.parent, .foo')).not.toHaveClass('monokai')
|
||||||
|
expect($('.monokai').length).toBe(2)
|
||||||
|
|
||||||
|
it 'prevents an infinite loop when no matches exist', ->
|
||||||
|
fixture.set('<div></div>')
|
||||||
|
|
||||||
|
highlight = -> $('div').syntaxHighlight()
|
||||||
|
|
||||||
|
expect(highlight).not.toThrow()
|
|
@ -0,0 +1,19 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
module Gitlab::Markdown
|
||||||
|
describe SyntaxHighlightFilter do
|
||||||
|
include FilterSpecHelper
|
||||||
|
|
||||||
|
it 'highlights valid code blocks' do
|
||||||
|
result = filter('<pre><code>def fun end</code>')
|
||||||
|
expect(result.to_html).to eq("<pre class=\"code highlight js-syntax-highlight plaintext\"><code>def fun end</code></pre>\n")
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'passes through invalid code blocks' do
|
||||||
|
allow_any_instance_of(SyntaxHighlightFilter).to receive(:block_code).and_raise(StandardError)
|
||||||
|
|
||||||
|
result = filter('<pre><code>This is a test</code></pre>')
|
||||||
|
expect(result.to_html).to eq('<pre>This is a test</pre>')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -47,5 +47,15 @@ describe API::API, api: true do
|
||||||
expect(project.send(service_method).activated?).to be_falsey
|
expect(project.send(service_method).activated?).to be_falsey
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "GET /projects/:id/services/#{service.dasherize}" do
|
||||||
|
include_context service
|
||||||
|
|
||||||
|
it "should get #{service} settings" do
|
||||||
|
get api("/projects/#{project.id}/services/#{dashed_service}", user)
|
||||||
|
|
||||||
|
expect(response.status).to eq(200)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -28,6 +28,7 @@ RSpec.configure do |config|
|
||||||
config.include LoginHelpers, type: :feature
|
config.include LoginHelpers, type: :feature
|
||||||
config.include LoginHelpers, type: :request
|
config.include LoginHelpers, type: :request
|
||||||
config.include StubConfiguration
|
config.include StubConfiguration
|
||||||
|
config.include RelativeUrl, type: feature
|
||||||
config.include TestEnv
|
config.include TestEnv
|
||||||
config.include StubGitlabCalls
|
config.include StubGitlabCalls
|
||||||
config.include StubGitlabData
|
config.include StubGitlabData
|
||||||
|
|
|
@ -27,6 +27,9 @@ module MarkdownMatchers
|
||||||
|
|
||||||
match do |actual|
|
match do |actual|
|
||||||
expect(actual).to have_selector('img.emoji', count: 10)
|
expect(actual).to have_selector('img.emoji', count: 10)
|
||||||
|
|
||||||
|
image = actual.at_css('img.emoji')
|
||||||
|
expect(image['src'].to_s).to start_with(Gitlab.config.gitlab.url + '/assets')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
# Fix route helpers in tests (e.g. root_path, ...)
|
||||||
|
module RelativeUrl
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
included do
|
||||||
|
default_url_options[:script_name] = Rails.application.config.relative_url_root
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue