Merge remote-tracking branch 'origin/master' into with-pipeline-view
This commit is contained in:
commit
ecee057795
12
.rubocop.yml
12
.rubocop.yml
|
|
@ -276,7 +276,7 @@ Style/IdenticalConditionalBranches:
|
|||
Enabled: false
|
||||
|
||||
# Checks the indentation of the first line of the right-hand-side of a
|
||||
# multi-line assignment.
|
||||
# multi-line assignment.
|
||||
Style/IndentAssignment:
|
||||
Enabled: false
|
||||
|
||||
|
|
@ -531,7 +531,7 @@ Style/SpaceAroundKeyword:
|
|||
|
||||
# Use a single space around operators.
|
||||
Style/SpaceAroundOperators:
|
||||
Enabled: false
|
||||
Enabled: true
|
||||
|
||||
# Checks that the left block brace has or doesn't have space before it.
|
||||
Style/SpaceBeforeBlockBraces:
|
||||
|
|
@ -770,7 +770,7 @@ Lint/DefEndAlignment:
|
|||
|
||||
# Check for deprecated class method calls.
|
||||
Lint/DeprecatedClassMethods:
|
||||
Enabled: false
|
||||
Enabled: true
|
||||
|
||||
# Check for duplicate method definitions.
|
||||
Lint/DuplicateMethods:
|
||||
|
|
@ -937,10 +937,9 @@ Lint/Void:
|
|||
|
||||
##################### Performance ############################
|
||||
|
||||
# TODO: Enable Casecmp Cop.
|
||||
# Use `casecmp` rather than `downcase ==`.
|
||||
Performance/Casecmp:
|
||||
Enabled: false
|
||||
Enabled: true
|
||||
|
||||
# TODO: Enable DoubleStartEndWith Cop.
|
||||
# Use `str.{start,end}_with?(x, ..., y, ...)` instead of
|
||||
|
|
@ -990,11 +989,12 @@ Performance/RedundantSortBy:
|
|||
# string.
|
||||
Performance/StartWith:
|
||||
Enabled: false
|
||||
|
||||
# Use `tr` instead of `gsub` when you are replacing the same number of
|
||||
# characters. Use `delete` instead of `gsub` when you are deleting
|
||||
# characters.
|
||||
Performance/StringReplacement:
|
||||
Enabled: false
|
||||
Enabled: true
|
||||
|
||||
# TODO: Enable TimesMap Cop.
|
||||
# Checks for `.times.map` calls.
|
||||
|
|
|
|||
35
CHANGELOG
35
CHANGELOG
|
|
@ -1,14 +1,20 @@
|
|||
Please view this file on the master branch, on stable branches it's out of date.
|
||||
|
||||
v 8.8.0 (unreleased)
|
||||
- Snippets tab under user profile. !4001 (Long Nguyen)
|
||||
- Fix error when using link to uploads in global snippets
|
||||
- Assign labels and milestone to target project when moving issue. !3934 (Long Nguyen)
|
||||
- Use a case-insensitive comparison in sanitizing URI schemes
|
||||
- Project#open_branches has been cleaned up and no longer loads entire records into memory.
|
||||
- Escape HTML in commit titles in system note messages
|
||||
- Improve multiple branch push performance by memoizing permission checking
|
||||
- Log to application.log when an admin starts and stops impersonating a user
|
||||
- Updated gitlab_git to 10.1.0
|
||||
- GitAccess#protected_tag? no longer loads all tags just to check if a single one exists
|
||||
- Reduce delay in destroying a project from 1-minute to immediately
|
||||
- Make build status canceled if any of the jobs was canceled and none failed
|
||||
- Upgrade Sidekiq to 4.1.2
|
||||
- Added /health_check endpoint for checking service status
|
||||
- Sanitize repo paths in new project error message
|
||||
- Bump mail_room to 0.7.0 to fix stuck IDLE connections
|
||||
- Remove future dates from contribution calendar graph.
|
||||
|
|
@ -17,20 +23,49 @@ v 8.8.0 (unreleased)
|
|||
- Fix error when visiting commit builds page before build was updated
|
||||
- Add 'l' shortcut to open Label dropdown on issuables and 'i' to create new issue on a project
|
||||
- Update SVG sanitizer to conform to SVG 1.1
|
||||
- Speed up push emails with multiple recipients by only generating the email once
|
||||
- Updated search UI
|
||||
- Display informative message when new milestone is created
|
||||
- Sanitize milestones and labels titles
|
||||
- Support multi-line tag messages. !3833 (Calin Seciu)
|
||||
- Allow "NEWS" and "CHANGES" as alternative names for CHANGELOG. !3768 (Connor Shea)
|
||||
- Added button to toggle whitespaces changes on diff view
|
||||
- Backport GitHub Enterprise import support from EE
|
||||
- Create tags using Rugged for performance reasons. !3745
|
||||
- API: Expose Issue#user_notes_count. !3126 (Anton Popov)
|
||||
- Don't show forks button when user can't view forks
|
||||
- Files over 5MB can only be viewed in their raw form, files over 1MB without highlighting !3718
|
||||
- Add support for supressing text diffs using .gitattributes on the default branch (Matt Oakes)
|
||||
- Add eager load paths to help prevent dependency load issues in Sidekiq workers. !3724
|
||||
- Added multiple colors for labels in dropdowns when dups happen.
|
||||
- Always group commits by server timezone, not commit timestamp
|
||||
- Improve description for the Two-factor Authentication sign-in screen. (Connor Shea)
|
||||
- API support for the 'since' and 'until' operators on commit requests (Paco Guzman)
|
||||
- Fix Gravatar hint in user profile when Gravatar is disabled. !3988 (Artem Sidorenko)
|
||||
- Expire repository exists? and has_visible_content? caches after a push if necessary
|
||||
- Fix unintentional filtering bug in issues sorted by milestone due (Takuya Noguchi)
|
||||
- Fix adding a todo for private group members (Ahmad Sherif)
|
||||
- Bump ace-rails-ap gem version from 2.0.1 to 4.0.2 which upgrades Ace Editor from 1.1.2 to 1.2.3
|
||||
- Total method execution timings are no longer tracked
|
||||
- Allow Admins to remove the Login with buttons for OAuth services and still be able to import !4034. (Andrei Gliga)
|
||||
- Add API endpoints for un/subscribing from/to a label. !4051 (Ahmad Sherif)
|
||||
- Hide left sidebar on phone screens to give more space for content
|
||||
- Redesign navigation for profile and group pages
|
||||
|
||||
v 8.7.5
|
||||
- Fix relative links in wiki pages. !4050
|
||||
- Fix always showing build notification message when switching between merge requests !4086
|
||||
- Fix an issue when filtering merge requests with more than one label. !3886
|
||||
- Fix short note for the default scope on build page (Takuya Noguchi)
|
||||
|
||||
v 8.7.4
|
||||
- Links for Redmine issue references are generated correctly again !4048 (Benedikt Huss)
|
||||
- Fix setting trusted proxies !3970
|
||||
- Fix BitBucket importer bug when throwing exceptions !3941
|
||||
- Use sign out path only if not empty !3989
|
||||
- Running rake gitlab:db:drop_tables now drops tables with cascade !4020
|
||||
- Running rake gitlab:db:drop_tables uses "IF EXISTS" as a precaution !4100
|
||||
- Use a case-insensitive comparison in sanitizing URI schemes
|
||||
|
||||
v 8.7.3
|
||||
- Emails, Gitlab::Email::Message, Gitlab::Diff, and Premailer::Adapter::Nokogiri are now instrumented
|
||||
|
|
|
|||
8
Gemfile
8
Gemfile
|
|
@ -197,7 +197,7 @@ gem 'licensee', '~> 8.0.0'
|
|||
gem "rack-attack", '~> 4.3.1'
|
||||
|
||||
# Ace editor
|
||||
gem 'ace-rails-ap', '~> 2.0.1'
|
||||
gem 'ace-rails-ap', '~> 4.0.2'
|
||||
|
||||
# Keyboard shortcuts
|
||||
gem 'mousetrap-rails', '~> 1.4.6'
|
||||
|
|
@ -218,7 +218,6 @@ gem 'gitlab_emoji', '~> 0.3.0'
|
|||
gem 'gon', '~> 6.0.1'
|
||||
gem 'jquery-atwho-rails', '~> 1.3.2'
|
||||
gem 'jquery-rails', '~> 4.1.0'
|
||||
gem 'jquery-scrollto-rails', '~> 1.4.3'
|
||||
gem 'jquery-ui-rails', '~> 5.0.0'
|
||||
gem 'raphael-rails', '~> 2.1.2'
|
||||
gem 'request_store', '~> 1.3.0'
|
||||
|
|
@ -242,7 +241,6 @@ group :development do
|
|||
gem "foreman"
|
||||
gem 'brakeman', '~> 3.2.0', require: false
|
||||
|
||||
gem "annotate", "~> 2.7.0"
|
||||
gem 'letter_opener_web', '~> 1.3.0'
|
||||
gem 'quiet_assets', '~> 1.0.2'
|
||||
gem 'rerun', '~> 0.11.0'
|
||||
|
|
@ -325,7 +323,6 @@ gem "mail_room", "~> 0.7"
|
|||
gem 'email_reply_parser', '~> 0.5.8'
|
||||
|
||||
## CI
|
||||
gem 'activerecord-deprecated_finders', '~> 1.0.3'
|
||||
gem 'activerecord-session_store', '~> 0.1.0'
|
||||
gem "nested_form", '~> 0.3.2'
|
||||
|
||||
|
|
@ -334,3 +331,6 @@ gem 'oauth2', '~> 1.0.0'
|
|||
|
||||
# Soft deletion
|
||||
gem "paranoia", "~> 2.0"
|
||||
|
||||
# Health check
|
||||
gem 'health_check', '~> 1.5.1'
|
||||
|
|
|
|||
18
Gemfile.lock
18
Gemfile.lock
|
|
@ -3,7 +3,7 @@ GEM
|
|||
specs:
|
||||
CFPropertyList (2.3.2)
|
||||
RedCloth (4.2.9)
|
||||
ace-rails-ap (2.0.1)
|
||||
ace-rails-ap (4.0.2)
|
||||
actionmailer (4.2.6)
|
||||
actionpack (= 4.2.6)
|
||||
actionview (= 4.2.6)
|
||||
|
|
@ -33,7 +33,6 @@ GEM
|
|||
activemodel (= 4.2.6)
|
||||
activesupport (= 4.2.6)
|
||||
arel (~> 6.0)
|
||||
activerecord-deprecated_finders (1.0.4)
|
||||
activerecord-session_store (0.1.2)
|
||||
actionpack (>= 4.0.0, < 5)
|
||||
activerecord (>= 4.0.0, < 5)
|
||||
|
|
@ -51,9 +50,6 @@ GEM
|
|||
activerecord (>= 3.0)
|
||||
akismet (2.0.0)
|
||||
allocations (1.0.4)
|
||||
annotate (2.7.0)
|
||||
activerecord (>= 3.2, < 6.0)
|
||||
rake (~> 10.4)
|
||||
arel (6.0.3)
|
||||
asana (0.4.0)
|
||||
faraday (~> 0.9)
|
||||
|
|
@ -405,6 +401,8 @@ GEM
|
|||
html2haml (>= 1.0.1)
|
||||
railties (>= 4.0.1)
|
||||
hashie (3.4.3)
|
||||
health_check (1.5.1)
|
||||
rails (>= 2.3.0)
|
||||
highline (1.7.8)
|
||||
hipchat (1.5.2)
|
||||
httparty
|
||||
|
|
@ -435,8 +433,6 @@ GEM
|
|||
rails-dom-testing (>= 1, < 3)
|
||||
railties (>= 4.2.0)
|
||||
thor (>= 0.14, < 2.0)
|
||||
jquery-scrollto-rails (1.4.3)
|
||||
railties (> 3.1, < 5.0)
|
||||
jquery-turbolinks (2.1.0)
|
||||
railties (>= 3.1.0)
|
||||
turbolinks
|
||||
|
|
@ -885,15 +881,13 @@ PLATFORMS
|
|||
|
||||
DEPENDENCIES
|
||||
RedCloth (~> 4.2.9)
|
||||
ace-rails-ap (~> 2.0.1)
|
||||
activerecord-deprecated_finders (~> 1.0.3)
|
||||
ace-rails-ap (~> 4.0.2)
|
||||
activerecord-session_store (~> 0.1.0)
|
||||
acts-as-taggable-on (~> 3.4)
|
||||
addressable (~> 2.3.8)
|
||||
after_commit_queue
|
||||
akismet (~> 2.0)
|
||||
allocations (~> 1.0)
|
||||
annotate (~> 2.7.0)
|
||||
asana (~> 0.4.0)
|
||||
asciidoctor (~> 1.5.2)
|
||||
attr_encrypted (~> 1.3.4)
|
||||
|
|
@ -951,13 +945,13 @@ DEPENDENCIES
|
|||
grape (~> 0.13.0)
|
||||
grape-entity (~> 0.4.2)
|
||||
haml-rails (~> 0.9.0)
|
||||
health_check (~> 1.5.1)
|
||||
hipchat (~> 1.5.0)
|
||||
html-pipeline (~> 1.11.0)
|
||||
httparty (~> 0.13.3)
|
||||
influxdb (~> 0.2)
|
||||
jquery-atwho-rails (~> 1.3.2)
|
||||
jquery-rails (~> 4.1.0)
|
||||
jquery-scrollto-rails (~> 1.4.3)
|
||||
jquery-turbolinks (~> 2.1.0)
|
||||
jquery-ui-rails (~> 5.0.0)
|
||||
kaminari (~> 0.16.3)
|
||||
|
|
@ -1061,4 +1055,4 @@ DEPENDENCIES
|
|||
wikicloth (= 0.8.1)
|
||||
|
||||
BUNDLED WITH
|
||||
1.12.1
|
||||
1.12.3
|
||||
|
|
|
|||
|
|
@ -35,11 +35,11 @@ There are two editions of GitLab:
|
|||
|
||||
On [about.gitlab.com](https://about.gitlab.com/) you can find more information about:
|
||||
|
||||
- [Subscriptions](https://about.gitlab.com/subscription/)
|
||||
- [Subscriptions](https://about.gitlab.com/pricing/)
|
||||
- [Consultancy](https://about.gitlab.com/consultancy/)
|
||||
- [Community](https://about.gitlab.com/community/)
|
||||
- [Hosted GitLab.com](https://about.gitlab.com/gitlab-com/) use GitLab as a free service
|
||||
- [GitLab Enterprise Edition](https://about.gitlab.com/gitlab-ee/) with additional features aimed at larger organizations.
|
||||
- [GitLab Enterprise Edition](https://about.gitlab.com/features/#enterprise) with additional features aimed at larger organizations.
|
||||
- [GitLab CI](https://about.gitlab.com/gitlab-ci/) a continuous integration (CI) server that is easy to integrate with GitLab.
|
||||
|
||||
## Requirements
|
||||
|
|
|
|||
|
|
@ -204,6 +204,7 @@ $ ->
|
|||
$('.header-content .title').toggle()
|
||||
$('.header-content .navbar-collapse').toggle()
|
||||
$('.navbar-toggle').toggleClass('active')
|
||||
$('.navbar-toggle i').toggleClass("fa-angle-right fa-angle-left")
|
||||
|
||||
# Show/hide comments on diff
|
||||
$("body").on "click", ".js-toggle-diff-comments", (e) ->
|
||||
|
|
|
|||
|
|
@ -1,34 +1,6 @@
|
|||
# This is a manifest file that'll be compiled into application.js, which will include all the files
|
||||
# listed below.
|
||||
#
|
||||
# Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
||||
# or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
|
||||
#
|
||||
# It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
||||
# the compiled file.
|
||||
#
|
||||
# WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
|
||||
# GO AFTER THE REQUIRES BELOW.
|
||||
#
|
||||
#= require pager
|
||||
#= require jquery_nested_form
|
||||
#= require_tree .
|
||||
#
|
||||
$(document).on 'click', '.edit-runner-link', (event) ->
|
||||
event.preventDefault()
|
||||
|
||||
descr = $(this).closest('.runner-description').first()
|
||||
descr.addClass('hide')
|
||||
form = descr.next('.runner-description-form')
|
||||
descrInput = form.find('input.description')
|
||||
originalValue = descrInput.val()
|
||||
form.removeClass('hide')
|
||||
form.find('.cancel').on 'click', (event) ->
|
||||
event.preventDefault()
|
||||
|
||||
form.addClass('hide')
|
||||
descrInput.val(originalValue)
|
||||
descr.removeClass('hide')
|
||||
|
||||
$(document).on 'click', '.assign-all-runner', ->
|
||||
$(this).replaceWith('<i class="fa fa-refresh fa-spin"></i> Assign in progress..')
|
||||
|
|
|
|||
|
|
@ -1,9 +1,12 @@
|
|||
class CiBuild
|
||||
@interval: null
|
||||
@state: null
|
||||
|
||||
constructor: (build_url, build_status) ->
|
||||
constructor: (build_url, build_status, build_state) ->
|
||||
clearInterval(CiBuild.interval)
|
||||
|
||||
@state = build_state
|
||||
|
||||
@initScrollButtonAffix()
|
||||
|
||||
if build_status == "running" || build_status == "pending"
|
||||
|
|
@ -26,14 +29,18 @@ class CiBuild
|
|||
CiBuild.interval = setInterval =>
|
||||
if window.location.href.split("#").first() is build_url
|
||||
$.ajax
|
||||
url: build_url
|
||||
url: build_url + "/trace.json?state=" + encodeURIComponent(@state)
|
||||
dataType: "json"
|
||||
success: (build) =>
|
||||
if build.status == "running"
|
||||
$('#build-trace code').html build.trace_html
|
||||
$('#build-trace code').append '<i class="fa fa-refresh fa-spin"/>'
|
||||
success: (log) =>
|
||||
@state = log.state
|
||||
if log.status is "running"
|
||||
if log.append
|
||||
$('.fa-refresh').before log.html
|
||||
else
|
||||
$('#build-trace code').html log.html
|
||||
$('#build-trace code').append '<i class="fa fa-refresh fa-spin"/>'
|
||||
@checkAutoscroll()
|
||||
else if build.status != build_status
|
||||
else if log.status isnt build_status
|
||||
Turbolinks.visit build_url
|
||||
, 4000
|
||||
|
||||
|
|
|
|||
|
|
@ -9,11 +9,12 @@ class @MergeRequestWidget
|
|||
constructor: (@opts) ->
|
||||
$('#modal_merge_info').modal(show: false)
|
||||
@firstCICheck = true
|
||||
@readyForCICheck = true
|
||||
@readyForCICheck = false
|
||||
clearInterval @fetchBuildStatusInterval
|
||||
|
||||
@clearEventListeners()
|
||||
@addEventListeners()
|
||||
@getCIStatus(false)
|
||||
@pollCIStatus()
|
||||
notifyPermissions()
|
||||
|
||||
|
|
@ -71,7 +72,7 @@ class @MergeRequestWidget
|
|||
if data.status is ''
|
||||
return
|
||||
|
||||
if @firstCiCheck || data.status isnt @opts.ci_status and data.status?
|
||||
if @firstCICheck || data.status isnt @opts.ci_status and data.status?
|
||||
@opts.ci_status = data.status
|
||||
@showCIStatus data.status
|
||||
if data.coverage
|
||||
|
|
@ -79,7 +80,7 @@ class @MergeRequestWidget
|
|||
|
||||
# The first check should only update the UI, a notification
|
||||
# should only be displayed on status changes
|
||||
if showNotification and not @firstCiCheck
|
||||
if showNotification and not @firstCICheck
|
||||
status = @ciLabelForStatus(data.status)
|
||||
|
||||
if status is "preparing"
|
||||
|
|
@ -102,7 +103,7 @@ class @MergeRequestWidget
|
|||
@close()
|
||||
Turbolinks.visit _this.opts.builds_path
|
||||
)
|
||||
@firstCiCheck = false
|
||||
@firstCICheck = false
|
||||
|
||||
showCIStatus: (state) ->
|
||||
$('.ci_widget').hide()
|
||||
|
|
|
|||
|
|
@ -6,6 +6,10 @@ class @ShortcutsIssuable extends ShortcutsNavigation
|
|||
super()
|
||||
Mousetrap.bind('a', @openSidebarDropdown.bind(@, 'assignee'))
|
||||
Mousetrap.bind('m', @openSidebarDropdown.bind(@, 'milestone'))
|
||||
Mousetrap.bind('r', =>
|
||||
@replyWithSelectedText()
|
||||
return false
|
||||
)
|
||||
Mousetrap.bind('j', =>
|
||||
@prevIssue()
|
||||
return false
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ toggleSidebar = ->
|
|||
niceScrollBars.updateScrollBar();
|
||||
), 300
|
||||
|
||||
$(document).on("click", '.toggle-nav-collapse', (e) ->
|
||||
$(document).on("click", '.toggle-nav-collapse, .side-nav-toggle', (e) ->
|
||||
e.preventDefault()
|
||||
|
||||
toggleSidebar()
|
||||
|
|
|
|||
|
|
@ -26,6 +26,10 @@
|
|||
# Personal projects
|
||||
# </a>
|
||||
# </li>
|
||||
# <li class="snippets-tab">
|
||||
# <a data-action="snippets" data-target="#snippets" data-toggle="tab" href="/u/username/snippets">
|
||||
# </a>
|
||||
# </li>
|
||||
# </ul>
|
||||
#
|
||||
# <div class="tab-content">
|
||||
|
|
@ -41,6 +45,9 @@
|
|||
# <div class="tab-pane" id="projects">
|
||||
# Projects content
|
||||
# </div>
|
||||
# <div class="tab-pane" id="snippets">
|
||||
# Snippets content
|
||||
# </div>
|
||||
# </div>
|
||||
#
|
||||
# <div class="loading-status">
|
||||
|
|
@ -100,7 +107,7 @@ class @UserTabs
|
|||
if action is 'activity'
|
||||
@loadActivities(source)
|
||||
|
||||
if action in ['groups', 'contributed', 'projects']
|
||||
if action in ['groups', 'contributed', 'projects', 'snippets']
|
||||
@loadTab(source, action)
|
||||
|
||||
loadTab: (source, action) ->
|
||||
|
|
|
|||
|
|
@ -289,7 +289,7 @@ table {
|
|||
text-shadow: none;
|
||||
|
||||
@media (min-width: $screen-sm-min) {
|
||||
margin-top: 11px;
|
||||
margin-top: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -9,9 +9,6 @@
|
|||
@mixin gitlab-theme($color-light, $color, $color-darker, $color-dark) {
|
||||
.page-with-sidebar {
|
||||
.header-logo {
|
||||
background-color: $color;
|
||||
border-color: $color;
|
||||
|
||||
a {
|
||||
color: $color-light;
|
||||
|
||||
|
|
@ -21,9 +18,13 @@
|
|||
}
|
||||
|
||||
&:hover {
|
||||
background-color: $color-darker;
|
||||
background-color: $color-dark;
|
||||
a {
|
||||
color: #fff;
|
||||
|
||||
h3 {
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,12 +6,12 @@ header {
|
|||
transition-duration: .3s;
|
||||
|
||||
&.navbar-empty {
|
||||
height: 58px;
|
||||
height: $header-height;
|
||||
background: #fff;
|
||||
border-bottom: 1px solid #eee;
|
||||
border-bottom: 1px solid $btn-gray-hover;
|
||||
|
||||
.center-logo {
|
||||
margin: 11px 0;
|
||||
margin: 8px 0;
|
||||
text-align: center;
|
||||
|
||||
#tanuki-logo, img {
|
||||
|
|
@ -22,14 +22,18 @@ header {
|
|||
}
|
||||
|
||||
&.navbar-gitlab {
|
||||
padding: 0 20px;
|
||||
padding: 0 16px;
|
||||
z-index: 100;
|
||||
margin-bottom: 0;
|
||||
min-height: $header-height;
|
||||
height: $header-height;
|
||||
background-color: $background-color;
|
||||
border: none;
|
||||
border-bottom: 1px solid $border-color;
|
||||
|
||||
@media (max-width: $screen-xs-min) {
|
||||
padding: 0 16px;
|
||||
}
|
||||
|
||||
&.with-horizontal-nav {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
|
@ -60,16 +64,44 @@ header {
|
|||
margin: 6px 0;
|
||||
border-radius: 0;
|
||||
position: absolute;
|
||||
right: 2px;
|
||||
right: -10px;
|
||||
padding: 6px 10px;
|
||||
|
||||
&:hover {
|
||||
background-color: #eee;
|
||||
background-color: $btn-gray-hover;
|
||||
}
|
||||
|
||||
&.active {
|
||||
color: $gl-icon-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.header-collapsed {
|
||||
padding: 0 16px;
|
||||
}
|
||||
|
||||
.side-nav-toggle {
|
||||
display: none;
|
||||
position: absolute;
|
||||
left: -10px;
|
||||
margin: 6px 0;
|
||||
padding: 6px 10px;
|
||||
border: none;
|
||||
background-color: $background-color;
|
||||
|
||||
&:hover {
|
||||
background-color: $btn-gray-hover;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
@media (max-width: $screen-xs-min) {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.header-content {
|
||||
|
|
@ -77,6 +109,10 @@ header {
|
|||
height: $header-height;
|
||||
padding-right: 40px;
|
||||
|
||||
@media (max-width: $screen-xs-min) {
|
||||
padding-left: 40px;
|
||||
}
|
||||
|
||||
@media (min-width: $screen-sm-min) {
|
||||
padding-right: 0;
|
||||
}
|
||||
|
|
@ -145,6 +181,10 @@ header {
|
|||
@media (min-width: $screen-md-min) {
|
||||
@include collapsed-header;
|
||||
}
|
||||
|
||||
@media (max-width: $screen-xs-min) {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.header-expanded {
|
||||
|
|
@ -153,6 +193,10 @@ header {
|
|||
@media (min-width: $screen-md-min) {
|
||||
margin-left: $sidebar_width;
|
||||
}
|
||||
|
||||
@media (max-width: $screen-xs-min) {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: $screen-xs-max) {
|
||||
|
|
|
|||
|
|
@ -201,9 +201,22 @@
|
|||
border-bottom: 1px solid $border-color;
|
||||
transition-duration: .3s;
|
||||
|
||||
.container-fluid {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.controls {
|
||||
float: right;
|
||||
padding: 7px 5px 0 0;
|
||||
padding: 7px 0 0;
|
||||
|
||||
@media (max-width: $screen-xs-min) {
|
||||
float: none;
|
||||
padding: 0 9px;
|
||||
|
||||
.dropdown-new {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
i {
|
||||
color: $layout-link-gray;
|
||||
|
|
@ -221,6 +234,10 @@
|
|||
|
||||
.dropdown {
|
||||
margin-left: 7px;
|
||||
|
||||
@media (max-width: $screen-xs-min) {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -256,4 +273,10 @@
|
|||
|
||||
.page-with-layout-nav {
|
||||
margin-top: 50px;
|
||||
|
||||
&.controls-dropdown-visible {
|
||||
@media (max-width: $screen-xs-min) {
|
||||
margin-top: 96px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@
|
|||
}
|
||||
|
||||
.sidebar-user {
|
||||
padding: 9px 22px;
|
||||
padding: 7px 22px;
|
||||
position: fixed;
|
||||
bottom: 40px;
|
||||
width: $sidebar_width;
|
||||
|
|
@ -210,15 +210,33 @@
|
|||
}
|
||||
}
|
||||
|
||||
.sidebar-wrapper {
|
||||
&.hidden-nav {
|
||||
width: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.page-sidebar-collapsed {
|
||||
padding-left: $sidebar_collapsed_width;
|
||||
|
||||
@media (max-width: $screen-xs-min) {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.sidebar-wrapper {
|
||||
width: $sidebar_collapsed_width;
|
||||
|
||||
@media (max-width: $screen-xs-min) {
|
||||
width: 0;
|
||||
}
|
||||
|
||||
.header-logo {
|
||||
width: $sidebar_collapsed_width;
|
||||
|
||||
@media (max-width: $screen-xs-min) {
|
||||
width: 0;
|
||||
}
|
||||
|
||||
a {
|
||||
padding-left: ($sidebar_collapsed_width - 36) / 2;
|
||||
|
||||
|
|
@ -244,12 +262,22 @@
|
|||
|
||||
.collapse-nav a {
|
||||
width: $sidebar_collapsed_width;
|
||||
|
||||
@media (max-width: $screen-xs-min) {
|
||||
width: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar-user {
|
||||
padding-left: ($sidebar_collapsed_width - 36) / 2;
|
||||
width: $sidebar_collapsed_width;
|
||||
|
||||
@media (max-width: $screen-xs-min) {
|
||||
width: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.username {
|
||||
display: none;
|
||||
}
|
||||
|
|
@ -258,6 +286,10 @@
|
|||
|
||||
.layout-nav {
|
||||
padding-right: $sidebar_collapsed_width;
|
||||
|
||||
@media (max-width: $screen-xs-min) {
|
||||
padding-right: 0;;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -268,6 +300,10 @@
|
|||
padding-left: $sidebar_width;
|
||||
}
|
||||
|
||||
@media (max-width: $screen-xs-min) {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.sidebar-wrapper {
|
||||
width: $sidebar_width;
|
||||
|
||||
|
|
@ -276,7 +312,7 @@
|
|||
}
|
||||
|
||||
.nav-sidebar li a {
|
||||
width: 230px;
|
||||
width: $sidebar_width;
|
||||
|
||||
&.back-link {
|
||||
i {
|
||||
|
|
@ -287,7 +323,17 @@
|
|||
}
|
||||
|
||||
.layout-nav {
|
||||
padding-right: $sidebar_width;
|
||||
@media (max-width: $screen-xs-min) {
|
||||
padding-right: 0;;
|
||||
}
|
||||
|
||||
@media (min-width: $screen-xs-min) and (max-width: $screen-md-min) {
|
||||
padding-right: 62px;
|
||||
}
|
||||
|
||||
@media (min-width: $screen-md-min) {
|
||||
padding-right: $sidebar_width;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
* Layout
|
||||
*/
|
||||
$sidebar_collapsed_width: 62px;
|
||||
$sidebar_width: 230px;
|
||||
$sidebar_width: 220px;
|
||||
$gutter_collapsed_width: 62px;
|
||||
$gutter_width: 290px;
|
||||
$gutter_inner_width: 258px;
|
||||
|
|
@ -215,6 +215,7 @@ $dropdown-toggle-hover-icon-color: $dropdown-toggle-hover-border-color;
|
|||
$btn-active-gray: #ececec;
|
||||
$btn-placeholder-gray: #c7c7c7;
|
||||
$btn-white-active: #848484;
|
||||
$btn-gray-hover: #eee;
|
||||
|
||||
/*
|
||||
* Award emoji
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@
|
|||
|
||||
.right-sidebar {
|
||||
position: fixed;
|
||||
top: 58px;
|
||||
top: $header-height;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
z-index: 10;
|
||||
|
|
|
|||
|
|
@ -218,7 +218,7 @@
|
|||
|
||||
.btn {
|
||||
display: inline-block;
|
||||
width: 48%;
|
||||
width: 46%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,6 +19,12 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController
|
|||
redirect_to admin_runners_path
|
||||
end
|
||||
|
||||
def reset_health_check_token
|
||||
@application_setting.reset_health_check_access_token!
|
||||
flash[:notice] = 'New health check access token has been generated!'
|
||||
redirect_to :back
|
||||
end
|
||||
|
||||
def clear_repository_check_states
|
||||
RepositoryCheck::ClearWorker.perform_async
|
||||
|
||||
|
|
@ -53,6 +59,12 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
enabled_oauth_sign_in_sources = params[:application_setting].delete(:enabled_oauth_sign_in_sources)
|
||||
|
||||
params[:application_setting][:disabled_oauth_sign_in_sources] =
|
||||
AuthHelper.button_based_providers.map(&:to_s) -
|
||||
Array(enabled_oauth_sign_in_sources)
|
||||
|
||||
params.require(:application_setting).permit(
|
||||
:default_projects_limit,
|
||||
:default_branch_protection,
|
||||
|
|
@ -95,7 +107,8 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController
|
|||
:repository_checks_enabled,
|
||||
:metrics_packet_size,
|
||||
restricted_visibility_levels: [],
|
||||
import_sources: []
|
||||
import_sources: [],
|
||||
disabled_oauth_sign_in_sources: []
|
||||
)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
class Admin::HealthCheckController < Admin::ApplicationController
|
||||
def show
|
||||
@errors = HealthCheck::Utils.process_checks('standard')
|
||||
end
|
||||
end
|
||||
|
|
@ -58,6 +58,6 @@ class Admin::RunnersController < Admin::ApplicationController
|
|||
end
|
||||
|
||||
def runner_params
|
||||
params.require(:runner).permit(:token, :description, :tag_list, :active)
|
||||
params.require(:runner).permit(Ci::Runner::FORM_EDITABLE)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -176,7 +176,7 @@ class ApplicationController < ActionController::Base
|
|||
end
|
||||
|
||||
def check_password_expiration
|
||||
if current_user && current_user.password_expires_at && current_user.password_expires_at < Time.now && !current_user.ldap_user?
|
||||
if current_user && current_user.password_expires_at && current_user.password_expires_at < Time.now && !current_user.ldap_user?
|
||||
redirect_to new_profile_password_path and return
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ module CreatesCommit
|
|||
# Merge request from fork to this project
|
||||
@mr_source_project = @tree_edit_project
|
||||
@mr_target_project = @project
|
||||
@mr_target_branch ||= @ref
|
||||
@mr_target_branch ||= @ref
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
class Dashboard::LabelsController < Dashboard::ApplicationController
|
||||
def index
|
||||
labels = Label.where(project_id: projects).select(:title, :color).uniq(:title)
|
||||
labels = Label.where(project_id: projects).select(:id, :title, :color).uniq(:title)
|
||||
|
||||
respond_to do |format|
|
||||
format.json { render json: labels }
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ class Dashboard::ProjectsController < Dashboard::ApplicationController
|
|||
end
|
||||
|
||||
def starred
|
||||
@projects = current_user.starred_projects.sorted_by_activity
|
||||
@projects = current_user.viewable_starred_projects.sorted_by_activity
|
||||
@projects = filter_projects(@projects)
|
||||
@projects = @projects.includes(:namespace, :forked_from_project, :tags)
|
||||
@projects = @projects.sort(@sort = params[:sort])
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ class DashboardController < Dashboard::ApplicationController
|
|||
def load_events
|
||||
projects =
|
||||
if params[:filter] == "starred"
|
||||
current_user.starred_projects
|
||||
current_user.viewable_starred_projects
|
||||
else
|
||||
current_user.authorized_projects
|
||||
end
|
||||
|
|
|
|||
|
|
@ -0,0 +1,22 @@
|
|||
class HealthCheckController < HealthCheck::HealthCheckController
|
||||
before_action :validate_health_check_access!
|
||||
|
||||
private
|
||||
|
||||
def validate_health_check_access!
|
||||
render_404 unless token_valid?
|
||||
end
|
||||
|
||||
def token_valid?
|
||||
token = params[:token].presence || request.headers['TOKEN']
|
||||
token.present? &&
|
||||
ActiveSupport::SecurityUtils.variable_size_secure_compare(
|
||||
token,
|
||||
current_application_settings.health_check_access_token
|
||||
)
|
||||
end
|
||||
|
||||
def render_404
|
||||
render file: Rails.root.join('public', '404'), layout: false, status: '404'
|
||||
end
|
||||
end
|
||||
|
|
@ -38,6 +38,14 @@ class Projects::BuildsController < Projects::ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def trace
|
||||
respond_to do |format|
|
||||
format.json do
|
||||
render json: @build.trace_with_state(params[:state]).merge!(id: @build.id, status: @build.status)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def retry
|
||||
unless @build.retryable?
|
||||
return render_404
|
||||
|
|
|
|||
|
|
@ -27,8 +27,10 @@ class Projects::HooksController < Projects::ApplicationController
|
|||
if !@project.empty_repo?
|
||||
status, message = TestHookService.new.execute(hook, current_user)
|
||||
|
||||
if status
|
||||
flash[:notice] = 'Hook successfully executed.'
|
||||
if status && status >= 200 && status < 400
|
||||
flash[:notice] = "Hook executed successfully: HTTP #{status}"
|
||||
elsif status
|
||||
flash[:alert] = "Hook executed successfully but returned HTTP #{status} #{message}"
|
||||
else
|
||||
flash[:alert] = "Hook execution failed: #{message}"
|
||||
end
|
||||
|
|
|
|||
|
|
@ -64,6 +64,6 @@ class Projects::RunnersController < Projects::ApplicationController
|
|||
end
|
||||
|
||||
def runner_params
|
||||
params.require(:runner).permit(:description, :tag_list, :active)
|
||||
params.require(:runner).permit(Ci::Runner::FORM_EDITABLE)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ class SnippetsController < ApplicationController
|
|||
# Allow destroy snippet
|
||||
before_action :authorize_admin_snippet!, only: [:destroy]
|
||||
|
||||
skip_before_action :authenticate_user!, only: [:index, :user_index, :show, :raw]
|
||||
skip_before_action :authenticate_user!, only: [:index, :show, :raw]
|
||||
|
||||
layout 'snippets'
|
||||
respond_to :html
|
||||
|
|
|
|||
|
|
@ -58,6 +58,19 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def snippets
|
||||
load_snippets
|
||||
|
||||
respond_to do |format|
|
||||
format.html { render 'show' }
|
||||
format.json do
|
||||
render json: {
|
||||
html: view_to_html_string("snippets/_snippets", collection: @snippets)
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def calendar
|
||||
calendar = contributions_calendar
|
||||
@timestamps = calendar.timestamps
|
||||
|
|
@ -116,6 +129,15 @@ class UsersController < ApplicationController
|
|||
@groups = JoinedGroupsFinder.new(user).execute(current_user)
|
||||
end
|
||||
|
||||
def load_snippets
|
||||
@snippets = SnippetsFinder.new.execute(
|
||||
current_user,
|
||||
filter: :by_user,
|
||||
user: user,
|
||||
scope: params[:scope]
|
||||
).page(params[:page])
|
||||
end
|
||||
|
||||
def projects_for_current_user
|
||||
ProjectsFinder.new.execute(current_user)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -60,4 +60,18 @@ module ApplicationSettingsHelper
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
def oauth_providers_checkboxes
|
||||
button_based_providers.map do |source|
|
||||
disabled = current_application_settings.disabled_oauth_sign_in_sources.include?(source.to_s)
|
||||
css_class = 'btn'
|
||||
css_class << ' active' unless disabled
|
||||
checkbox_name = 'application_setting[enabled_oauth_sign_in_sources][]'
|
||||
|
||||
label_tag(checkbox_name, class: css_class) do
|
||||
check_box_tag(checkbox_name, source, !disabled,
|
||||
autocomplete: 'off') + Gitlab::OAuth::Provider.label_for(source)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -38,6 +38,16 @@ module AuthHelper
|
|||
auth_providers.reject { |provider| form_based_provider?(provider) }
|
||||
end
|
||||
|
||||
def enabled_button_based_providers
|
||||
disabled_providers = current_application_settings.disabled_oauth_sign_in_sources || []
|
||||
|
||||
button_based_providers.map(&:to_s) - disabled_providers
|
||||
end
|
||||
|
||||
def button_based_providers_enabled?
|
||||
enabled_button_based_providers.any?
|
||||
end
|
||||
|
||||
def provider_image_tag(provider, size = 64)
|
||||
label = label_for_provider(provider)
|
||||
|
||||
|
|
|
|||
|
|
@ -39,15 +39,6 @@ module EventsHelper
|
|||
end
|
||||
end
|
||||
|
||||
def icon_for_event
|
||||
{
|
||||
EventFilter.push => 'upload',
|
||||
EventFilter.merged => 'check-square-o',
|
||||
EventFilter.comments => 'comments',
|
||||
EventFilter.team => 'user',
|
||||
}
|
||||
end
|
||||
|
||||
def event_preposition(event)
|
||||
if event.push? || event.commented? || event.target
|
||||
"at"
|
||||
|
|
|
|||
|
|
@ -43,4 +43,12 @@ module NavHelper
|
|||
class_name += " with-horizontal-nav" if defined?(nav) && nav
|
||||
class_name
|
||||
end
|
||||
|
||||
def layout_nav_class
|
||||
"page-with-layout-nav" if defined?(nav) && nav
|
||||
end
|
||||
|
||||
def layout_dropdown_class
|
||||
"controls-dropdown-visible" if current_user
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -138,10 +138,10 @@ module ProjectsHelper
|
|||
private
|
||||
|
||||
def get_project_nav_tabs(project, current_user)
|
||||
nav_tabs = [:home, :forks]
|
||||
nav_tabs = [:home]
|
||||
|
||||
if !project.empty_repo? && can?(current_user, :download_code, project)
|
||||
nav_tabs << [:files, :commits, :network, :graphs]
|
||||
nav_tabs << [:files, :commits, :network, :graphs, :forks]
|
||||
end
|
||||
|
||||
if project.repo_exists? && can?(current_user, :read_merge_request, project)
|
||||
|
|
@ -205,7 +205,8 @@ module ProjectsHelper
|
|||
end
|
||||
|
||||
def default_url_to_repo(project = @project)
|
||||
if default_clone_protocol == "ssh"
|
||||
case default_clone_protocol
|
||||
when 'ssh'
|
||||
project.ssh_url_to_repo
|
||||
else
|
||||
project.http_url_to_repo
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ module SearchHelper
|
|||
# Autocomplete results for the current project, if it's defined
|
||||
def project_autocomplete
|
||||
if @project && @project.repository.exists? && @project.repository.root_ref
|
||||
ref = @ref || @project.repository.root_ref
|
||||
ref = @ref || @project.repository.root_ref
|
||||
|
||||
[
|
||||
{ category: "Current Project", label: "Files", url: namespace_project_tree_path(@project.namespace, @project, ref) },
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ module SelectsHelper
|
|||
first_user: first_user,
|
||||
current_user: opts[:current_user] || false,
|
||||
"push-code-to-protected-branches" => opts[:push_code_to_protected_branches],
|
||||
author_id: opts[:author_id] || ''
|
||||
author_id: opts[:author_id] || ''
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -59,9 +59,9 @@ module Emails
|
|||
subject: subject("Project was moved"))
|
||||
end
|
||||
|
||||
def repository_push_email(project_id, recipient, opts = {})
|
||||
def repository_push_email(project_id, opts = {})
|
||||
@message =
|
||||
Gitlab::Email::Message::RepositoryPush.new(self, project_id, recipient, opts)
|
||||
Gitlab::Email::Message::RepositoryPush.new(self, project_id, opts)
|
||||
|
||||
# used in notify layout
|
||||
@target_url = @message.target_url
|
||||
|
|
@ -72,7 +72,6 @@ module Emails
|
|||
|
||||
mail(from: sender(@message.author_id, @message.send_from_committer_email?),
|
||||
reply_to: @message.reply_to,
|
||||
to: @message.recipient,
|
||||
subject: @message.subject)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,15 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: abuse_reports
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# reporter_id :integer
|
||||
# user_id :integer
|
||||
# message :text
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
#
|
||||
|
||||
class AbuseReport < ActiveRecord::Base
|
||||
belongs_to :reporter, class_name: 'User'
|
||||
belongs_to :user
|
||||
|
|
|
|||
|
|
@ -1,16 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: appearances
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# title :string
|
||||
# description :text
|
||||
# header_logo :string
|
||||
# logo :string
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
#
|
||||
|
||||
class Appearance < ActiveRecord::Base
|
||||
validates :title, presence: true
|
||||
validates :description, presence: true
|
||||
|
|
|
|||
|
|
@ -1,63 +1,13 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: application_settings
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# default_projects_limit :integer
|
||||
# signup_enabled :boolean
|
||||
# signin_enabled :boolean
|
||||
# gravatar_enabled :boolean
|
||||
# sign_in_text :text
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# home_page_url :string
|
||||
# default_branch_protection :integer default(2)
|
||||
# restricted_visibility_levels :text
|
||||
# version_check_enabled :boolean default(TRUE)
|
||||
# max_attachment_size :integer default(10), not null
|
||||
# default_project_visibility :integer
|
||||
# default_snippet_visibility :integer
|
||||
# restricted_signup_domains :text
|
||||
# user_oauth_applications :boolean default(TRUE)
|
||||
# after_sign_out_path :string
|
||||
# session_expire_delay :integer default(10080), not null
|
||||
# import_sources :text
|
||||
# help_page_text :text
|
||||
# admin_notification_email :string
|
||||
# shared_runners_enabled :boolean default(TRUE), not null
|
||||
# max_artifacts_size :integer default(100), not null
|
||||
# runners_registration_token :string
|
||||
# require_two_factor_authentication :boolean default(FALSE)
|
||||
# two_factor_grace_period :integer default(48)
|
||||
# metrics_enabled :boolean default(FALSE)
|
||||
# metrics_host :string default("localhost")
|
||||
# metrics_pool_size :integer default(16)
|
||||
# metrics_timeout :integer default(10)
|
||||
# metrics_method_call_threshold :integer default(10)
|
||||
# recaptcha_enabled :boolean default(FALSE)
|
||||
# recaptcha_site_key :string
|
||||
# recaptcha_private_key :string
|
||||
# metrics_port :integer default(8089)
|
||||
# metrics_sample_interval :integer default(15)
|
||||
# sentry_enabled :boolean default(FALSE)
|
||||
# sentry_dsn :string
|
||||
# akismet_enabled :boolean default(FALSE)
|
||||
# akismet_api_key :string
|
||||
# email_author_in_body :boolean default(FALSE)
|
||||
# default_group_visibility :integer
|
||||
# repository_checks_enabled :boolean default(FALSE)
|
||||
# metrics_packet_size :integer default(1)
|
||||
# shared_runners_text :text
|
||||
#
|
||||
|
||||
class ApplicationSetting < ActiveRecord::Base
|
||||
include TokenAuthenticatable
|
||||
add_authentication_token_field :runners_registration_token
|
||||
add_authentication_token_field :health_check_access_token
|
||||
|
||||
CACHE_KEY = 'application_setting.last'
|
||||
|
||||
serialize :restricted_visibility_levels
|
||||
serialize :import_sources
|
||||
serialize :disabled_oauth_sign_in_sources
|
||||
serialize :restricted_signup_domains, Array
|
||||
attr_accessor :restricted_signup_domains_raw
|
||||
|
||||
|
|
@ -121,7 +71,18 @@ class ApplicationSetting < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
validates_each :disabled_oauth_sign_in_sources do |record, attr, value|
|
||||
unless value.nil?
|
||||
value.each do |source|
|
||||
unless Devise.omniauth_providers.include?(source.to_sym)
|
||||
record.errors.add(attr, "'#{source}' is not an OAuth sign-in source")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
before_save :ensure_runners_registration_token
|
||||
before_save :ensure_health_check_access_token
|
||||
|
||||
after_commit do
|
||||
Rails.cache.write(CACHE_KEY, self)
|
||||
|
|
@ -159,6 +120,7 @@ class ApplicationSetting < ActiveRecord::Base
|
|||
recaptcha_enabled: false,
|
||||
akismet_enabled: false,
|
||||
repository_checks_enabled: true,
|
||||
disabled_oauth_sign_in_sources: []
|
||||
)
|
||||
end
|
||||
|
||||
|
|
@ -185,4 +147,8 @@ class ApplicationSetting < ActiveRecord::Base
|
|||
def runners_registration_token
|
||||
ensure_runners_registration_token!
|
||||
end
|
||||
|
||||
def health_check_access_token
|
||||
ensure_health_check_access_token!
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,17 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: audit_events
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# author_id :integer not null
|
||||
# type :string not null
|
||||
# entity_id :integer not null
|
||||
# entity_type :string not null
|
||||
# details :text
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
#
|
||||
|
||||
class AuditEvent < ActiveRecord::Base
|
||||
serialize :details, Hash
|
||||
|
||||
|
|
|
|||
|
|
@ -1,17 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: broadcast_messages
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# message :text not null
|
||||
# starts_at :datetime
|
||||
# ends_at :datetime
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# color :string
|
||||
# font :string
|
||||
#
|
||||
|
||||
class BroadcastMessage < ActiveRecord::Base
|
||||
include Sortable
|
||||
|
||||
|
|
|
|||
|
|
@ -1,40 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: ci_builds
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# project_id :integer
|
||||
# status :string
|
||||
# finished_at :datetime
|
||||
# trace :text
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# started_at :datetime
|
||||
# runner_id :integer
|
||||
# coverage :float
|
||||
# commit_id :integer
|
||||
# commands :text
|
||||
# job_id :integer
|
||||
# name :string
|
||||
# deploy :boolean default(FALSE)
|
||||
# options :text
|
||||
# allow_failure :boolean default(FALSE), not null
|
||||
# stage :string
|
||||
# trigger_request_id :integer
|
||||
# stage_idx :integer
|
||||
# tag :boolean
|
||||
# ref :string
|
||||
# user_id :integer
|
||||
# type :string
|
||||
# target_url :string
|
||||
# description :string
|
||||
# artifacts_file :text
|
||||
# gl_project_id :integer
|
||||
# artifacts_metadata :text
|
||||
# erased_by_id :integer
|
||||
# erased_at :datetime
|
||||
#
|
||||
|
||||
module Ci
|
||||
class Build < CommitStatus
|
||||
belongs_to :runner, class_name: 'Ci::Runner'
|
||||
|
|
@ -132,8 +95,12 @@ module Ci
|
|||
end
|
||||
|
||||
def trace_html
|
||||
html = Ci::Ansi2html::convert(trace) if trace.present?
|
||||
html || ''
|
||||
trace_with_state[:html] || ''
|
||||
end
|
||||
|
||||
def trace_with_state(state = nil)
|
||||
trace_with_state = Ci::Ansi2html::convert(trace, state) if trace.present?
|
||||
trace_with_state || {}
|
||||
end
|
||||
|
||||
def timeout
|
||||
|
|
@ -238,7 +205,7 @@ module Ci
|
|||
end
|
||||
|
||||
def recreate_trace_dir
|
||||
unless Dir.exists?(dir_to_trace)
|
||||
unless Dir.exist?(dir_to_trace)
|
||||
FileUtils.mkdir_p(dir_to_trace)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,25 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: ci_commits
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# project_id :integer
|
||||
# ref :string
|
||||
# sha :string
|
||||
# before_sha :string
|
||||
# push_data :text
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# tag :boolean default(FALSE)
|
||||
# yaml_errors :text
|
||||
# committed_at :datetime
|
||||
# gl_project_id :integer
|
||||
# status :string
|
||||
# started_at :datetime
|
||||
# finished_at :datetime
|
||||
# duration :integer
|
||||
#
|
||||
|
||||
module Ci
|
||||
class Commit < ActiveRecord::Base
|
||||
extend Ci::Model
|
||||
|
|
|
|||
|
|
@ -1,28 +1,10 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: ci_runners
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# token :string
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# description :string
|
||||
# contacted_at :datetime
|
||||
# active :boolean default(TRUE), not null
|
||||
# is_shared :boolean default(FALSE)
|
||||
# name :string
|
||||
# version :string
|
||||
# revision :string
|
||||
# platform :string
|
||||
# architecture :string
|
||||
#
|
||||
|
||||
module Ci
|
||||
class Runner < ActiveRecord::Base
|
||||
extend Ci::Model
|
||||
|
||||
LAST_CONTACT_TIME = 5.minutes.ago
|
||||
AVAILABLE_SCOPES = ['specific', 'shared', 'active', 'paused', 'online']
|
||||
AVAILABLE_SCOPES = %w[specific shared active paused online]
|
||||
FORM_EDITABLE = %i[description tag_list active]
|
||||
|
||||
has_many :builds, class_name: 'Ci::Build'
|
||||
has_many :runner_projects, dependent: :destroy, class_name: 'Ci::RunnerProject'
|
||||
|
|
|
|||
|
|
@ -1,15 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: ci_runner_projects
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# runner_id :integer not null
|
||||
# project_id :integer
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# gl_project_id :integer
|
||||
#
|
||||
|
||||
module Ci
|
||||
class RunnerProject < ActiveRecord::Base
|
||||
extend Ci::Model
|
||||
|
|
|
|||
|
|
@ -1,16 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: ci_triggers
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# token :string
|
||||
# project_id :integer
|
||||
# deleted_at :datetime
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# gl_project_id :integer
|
||||
#
|
||||
|
||||
module Ci
|
||||
class Trigger < ActiveRecord::Base
|
||||
extend Ci::Model
|
||||
|
|
|
|||
|
|
@ -1,15 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: ci_trigger_requests
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# trigger_id :integer not null
|
||||
# variables :text
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# commit_id :integer
|
||||
#
|
||||
|
||||
module Ci
|
||||
class TriggerRequest < ActiveRecord::Base
|
||||
extend Ci::Model
|
||||
|
|
|
|||
|
|
@ -1,17 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: ci_variables
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# project_id :integer
|
||||
# key :string
|
||||
# value :text
|
||||
# encrypted_value :text
|
||||
# encrypted_value_salt :string
|
||||
# encrypted_value_iv :string
|
||||
# gl_project_id :integer
|
||||
#
|
||||
|
||||
module Ci
|
||||
class Variable < ActiveRecord::Base
|
||||
extend Ci::Model
|
||||
|
|
|
|||
|
|
@ -1,40 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: ci_builds
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# project_id :integer
|
||||
# status :string
|
||||
# finished_at :datetime
|
||||
# trace :text
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# started_at :datetime
|
||||
# runner_id :integer
|
||||
# coverage :float
|
||||
# commit_id :integer
|
||||
# commands :text
|
||||
# job_id :integer
|
||||
# name :string
|
||||
# deploy :boolean default(FALSE)
|
||||
# options :text
|
||||
# allow_failure :boolean default(FALSE), not null
|
||||
# stage :string
|
||||
# trigger_request_id :integer
|
||||
# stage_idx :integer
|
||||
# tag :boolean
|
||||
# ref :string
|
||||
# user_id :integer
|
||||
# type :string
|
||||
# target_url :string
|
||||
# description :string
|
||||
# artifacts_file :text
|
||||
# gl_project_id :integer
|
||||
# artifacts_metadata :text
|
||||
# erased_by_id :integer
|
||||
# erased_at :datetime
|
||||
#
|
||||
|
||||
class CommitStatus < ActiveRecord::Base
|
||||
include Statuseable
|
||||
|
||||
|
|
|
|||
|
|
@ -124,8 +124,8 @@ module Issuable
|
|||
end
|
||||
|
||||
def with_label(title)
|
||||
if title.is_a?(Array) && title.count > 1
|
||||
joins(:labels).where(labels: { title: title }).group('issues.id').having("count(distinct labels.title) = #{title.count}")
|
||||
if title.is_a?(Array) && title.size > 1
|
||||
joins(:labels).where(labels: { title: title }).group(arel_table[:id]).having("COUNT(DISTINCT labels.title) = #{title.size}")
|
||||
else
|
||||
joins(:labels).where(labels: { title: title })
|
||||
end
|
||||
|
|
@ -160,6 +160,10 @@ module Issuable
|
|||
notes.awards.where(note: "thumbsup").count
|
||||
end
|
||||
|
||||
def user_notes_count
|
||||
notes.user.count
|
||||
end
|
||||
|
||||
def subscribed_without_subscriptions?(user)
|
||||
participants(user).include?(user)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -43,8 +43,8 @@ module Mentionable
|
|||
self
|
||||
end
|
||||
|
||||
def all_references(current_user = self.author, text = nil)
|
||||
ext = Gitlab::ReferenceExtractor.new(self.project, current_user, self.author)
|
||||
def all_references(current_user = nil, text = nil)
|
||||
ext = Gitlab::ReferenceExtractor.new(self.project, current_user || self.author, self.author)
|
||||
|
||||
if text
|
||||
ext.analyze(text)
|
||||
|
|
|
|||
|
|
@ -36,6 +36,12 @@ module Subscribable
|
|||
update(subscribed: !subscribed?(user))
|
||||
end
|
||||
|
||||
def subscribe(user)
|
||||
subscriptions.
|
||||
find_or_initialize_by(user_id: user.id).
|
||||
update(subscribed: true)
|
||||
end
|
||||
|
||||
def unsubscribe(user)
|
||||
subscriptions.
|
||||
find_or_initialize_by(user_id: user.id).
|
||||
|
|
|
|||
|
|
@ -1,18 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: keys
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# user_id :integer
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# key :text
|
||||
# title :string
|
||||
# type :string
|
||||
# fingerprint :string
|
||||
# public :boolean default(FALSE), not null
|
||||
#
|
||||
|
||||
class DeployKey < Key
|
||||
has_many :deploy_keys_projects, dependent: :destroy
|
||||
has_many :projects, through: :deploy_keys_projects
|
||||
|
|
|
|||
|
|
@ -1,14 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: deploy_keys_projects
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# deploy_key_id :integer not null
|
||||
# project_id :integer not null
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
#
|
||||
|
||||
class DeployKeysProject < ActiveRecord::Base
|
||||
belongs_to :project
|
||||
belongs_to :deploy_key
|
||||
|
|
|
|||
|
|
@ -1,14 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: emails
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# user_id :integer not null
|
||||
# email :string not null
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
#
|
||||
|
||||
class Email < ActiveRecord::Base
|
||||
include Sortable
|
||||
|
||||
|
|
|
|||
|
|
@ -1,19 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: events
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# target_type :string
|
||||
# target_id :integer
|
||||
# title :string
|
||||
# data :text
|
||||
# project_id :integer
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# action :integer
|
||||
# author_id :integer
|
||||
#
|
||||
|
||||
class Event < ActiveRecord::Base
|
||||
include Sortable
|
||||
default_scope { where.not(author_id: nil) }
|
||||
|
|
|
|||
|
|
@ -1,14 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: forked_project_links
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# forked_to_project_id :integer not null
|
||||
# forked_from_project_id :integer not null
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
#
|
||||
|
||||
class ForkedProjectLink < ActiveRecord::Base
|
||||
belongs_to :forked_to_project, class_name: Project
|
||||
belongs_to :forked_from_project, class_name: Project
|
||||
|
|
|
|||
|
|
@ -1,40 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: ci_builds
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# project_id :integer
|
||||
# status :string
|
||||
# finished_at :datetime
|
||||
# trace :text
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# started_at :datetime
|
||||
# runner_id :integer
|
||||
# coverage :float
|
||||
# commit_id :integer
|
||||
# commands :text
|
||||
# job_id :integer
|
||||
# name :string
|
||||
# deploy :boolean default(FALSE)
|
||||
# options :text
|
||||
# allow_failure :boolean default(FALSE), not null
|
||||
# stage :string
|
||||
# trigger_request_id :integer
|
||||
# stage_idx :integer
|
||||
# tag :boolean
|
||||
# ref :string
|
||||
# user_id :integer
|
||||
# type :string
|
||||
# target_url :string
|
||||
# description :string
|
||||
# artifacts_file :text
|
||||
# gl_project_id :integer
|
||||
# artifacts_metadata :text
|
||||
# erased_by_id :integer
|
||||
# erased_at :datetime
|
||||
#
|
||||
|
||||
class GenericCommitStatus < CommitStatus
|
||||
before_validation :set_default_values
|
||||
|
||||
|
|
|
|||
|
|
@ -1,20 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: namespaces
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# name :string not null
|
||||
# path :string not null
|
||||
# owner_id :integer
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# type :string
|
||||
# description :string default(""), not null
|
||||
# avatar :string
|
||||
# share_with_group_lock :boolean default(FALSE)
|
||||
# visibility_level :integer default(20), not null
|
||||
#
|
||||
|
||||
require 'carrierwave/orm/activerecord'
|
||||
|
||||
class Group < Namespace
|
||||
|
|
|
|||
|
|
@ -1,25 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: web_hooks
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# url :string(2000)
|
||||
# project_id :integer
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# type :string default("ProjectHook")
|
||||
# service_id :integer
|
||||
# push_events :boolean default(TRUE), not null
|
||||
# issues_events :boolean default(FALSE), not null
|
||||
# merge_requests_events :boolean default(FALSE), not null
|
||||
# tag_push_events :boolean default(FALSE)
|
||||
# note_events :boolean default(FALSE), not null
|
||||
# enable_ssl_verification :boolean default(TRUE)
|
||||
# build_events :boolean default(FALSE), not null
|
||||
# wiki_page_events :boolean default(FALSE), not null
|
||||
# token :string
|
||||
#
|
||||
|
||||
class ProjectHook < WebHook
|
||||
belongs_to :project
|
||||
|
||||
|
|
|
|||
|
|
@ -1,25 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: web_hooks
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# url :string(2000)
|
||||
# project_id :integer
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# type :string default("ProjectHook")
|
||||
# service_id :integer
|
||||
# push_events :boolean default(TRUE), not null
|
||||
# issues_events :boolean default(FALSE), not null
|
||||
# merge_requests_events :boolean default(FALSE), not null
|
||||
# tag_push_events :boolean default(FALSE)
|
||||
# note_events :boolean default(FALSE), not null
|
||||
# enable_ssl_verification :boolean default(TRUE)
|
||||
# build_events :boolean default(FALSE), not null
|
||||
# wiki_page_events :boolean default(FALSE), not null
|
||||
# token :string
|
||||
#
|
||||
|
||||
class ServiceHook < WebHook
|
||||
belongs_to :service
|
||||
|
||||
|
|
|
|||
|
|
@ -1,25 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: web_hooks
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# url :string(2000)
|
||||
# project_id :integer
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# type :string default("ProjectHook")
|
||||
# service_id :integer
|
||||
# push_events :boolean default(TRUE), not null
|
||||
# issues_events :boolean default(FALSE), not null
|
||||
# merge_requests_events :boolean default(FALSE), not null
|
||||
# tag_push_events :boolean default(FALSE)
|
||||
# note_events :boolean default(FALSE), not null
|
||||
# enable_ssl_verification :boolean default(TRUE)
|
||||
# build_events :boolean default(FALSE), not null
|
||||
# wiki_page_events :boolean default(FALSE), not null
|
||||
# token :string
|
||||
#
|
||||
|
||||
class SystemHook < WebHook
|
||||
def async_execute(data, hook_name)
|
||||
Sidekiq::Client.enqueue(SystemHookWorker, id, data, hook_name)
|
||||
|
|
|
|||
|
|
@ -1,25 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: web_hooks
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# url :string(2000)
|
||||
# project_id :integer
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# type :string default("ProjectHook")
|
||||
# service_id :integer
|
||||
# push_events :boolean default(TRUE), not null
|
||||
# issues_events :boolean default(FALSE), not null
|
||||
# merge_requests_events :boolean default(FALSE), not null
|
||||
# tag_push_events :boolean default(FALSE)
|
||||
# note_events :boolean default(FALSE), not null
|
||||
# enable_ssl_verification :boolean default(TRUE)
|
||||
# build_events :boolean default(FALSE), not null
|
||||
# wiki_page_events :boolean default(FALSE), not null
|
||||
# token :string
|
||||
#
|
||||
|
||||
class WebHook < ActiveRecord::Base
|
||||
include Sortable
|
||||
include HTTParty
|
||||
|
|
@ -60,7 +38,7 @@ class WebHook < ActiveRecord::Base
|
|||
basic_auth: auth)
|
||||
end
|
||||
|
||||
[(response.code >= 200 && response.code < 300), ActionView::Base.full_sanitizer.sanitize(response.to_s)]
|
||||
[response.code, response.to_s]
|
||||
rescue SocketError, OpenSSL::SSL::SSLError, Errno::ECONNRESET, Errno::ECONNREFUSED, Net::OpenTimeout => e
|
||||
logger.error("WebHook Error => #{e}")
|
||||
[false, e.to_s]
|
||||
|
|
|
|||
|
|
@ -1,15 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: identities
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# extern_uid :string
|
||||
# provider :string
|
||||
# user_id :integer
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
#
|
||||
|
||||
class Identity < ActiveRecord::Base
|
||||
include Sortable
|
||||
include CaseSensitivity
|
||||
|
|
|
|||
|
|
@ -1,27 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: issues
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# title :string
|
||||
# assignee_id :integer
|
||||
# author_id :integer
|
||||
# project_id :integer
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# position :integer default(0)
|
||||
# branch_name :string
|
||||
# description :text
|
||||
# milestone_id :integer
|
||||
# state :string
|
||||
# iid :integer
|
||||
# updated_by_id :integer
|
||||
# moved_to_id :integer
|
||||
# confidential :boolean default(FALSE)
|
||||
# deleted_at :datetime
|
||||
# due_date :date
|
||||
#
|
||||
|
||||
require 'carrierwave/orm/activerecord'
|
||||
|
||||
class Issue < ActiveRecord::Base
|
||||
|
|
|
|||
|
|
@ -1,18 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: keys
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# user_id :integer
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# key :text
|
||||
# title :string
|
||||
# type :string
|
||||
# fingerprint :string
|
||||
# public :boolean default(FALSE), not null
|
||||
#
|
||||
|
||||
require 'digest/md5'
|
||||
|
||||
class Key < ActiveRecord::Base
|
||||
|
|
|
|||
|
|
@ -1,17 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: labels
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# title :string
|
||||
# color :string
|
||||
# project_id :integer
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# template :boolean default(FALSE)
|
||||
# description :string
|
||||
#
|
||||
|
||||
class Label < ActiveRecord::Base
|
||||
include Referable
|
||||
include Subscribable
|
||||
|
|
@ -117,6 +103,10 @@ class Label < ActiveRecord::Base
|
|||
LabelsHelper::text_color_for_bg(self.color)
|
||||
end
|
||||
|
||||
def title=(value)
|
||||
write_attribute(:title, Sanitize.clean(value.to_s)) if value.present?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def label_format_reference(format = :id)
|
||||
|
|
|
|||
|
|
@ -1,15 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: label_links
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# label_id :integer
|
||||
# target_id :integer
|
||||
# target_type :string
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
#
|
||||
|
||||
class LabelLink < ActiveRecord::Base
|
||||
belongs_to :target, polymorphic: true
|
||||
belongs_to :label
|
||||
|
|
|
|||
|
|
@ -1,15 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: lfs_objects
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# oid :string not null
|
||||
# size :integer not null
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# file :string
|
||||
#
|
||||
|
||||
class LfsObject < ActiveRecord::Base
|
||||
has_many :lfs_objects_projects, dependent: :destroy
|
||||
has_many :projects, through: :lfs_objects_projects
|
||||
|
|
|
|||
|
|
@ -1,14 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: lfs_objects_projects
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# lfs_object_id :integer not null
|
||||
# project_id :integer not null
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
#
|
||||
|
||||
class LfsObjectsProject < ActiveRecord::Base
|
||||
belongs_to :project
|
||||
belongs_to :lfs_object
|
||||
|
|
|
|||
|
|
@ -1,22 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: members
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# access_level :integer not null
|
||||
# source_id :integer not null
|
||||
# source_type :string not null
|
||||
# user_id :integer
|
||||
# notification_level :integer not null
|
||||
# type :string
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# created_by_id :integer
|
||||
# invite_email :string
|
||||
# invite_token :string
|
||||
# invite_accepted_at :datetime
|
||||
#
|
||||
|
||||
class Member < ActiveRecord::Base
|
||||
include Sortable
|
||||
include Gitlab::Access
|
||||
|
|
|
|||
|
|
@ -1,22 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: members
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# access_level :integer not null
|
||||
# source_id :integer not null
|
||||
# source_type :string not null
|
||||
# user_id :integer
|
||||
# notification_level :integer not null
|
||||
# type :string
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# created_by_id :integer
|
||||
# invite_email :string
|
||||
# invite_token :string
|
||||
# invite_accepted_at :datetime
|
||||
#
|
||||
|
||||
class GroupMember < Member
|
||||
SOURCE_TYPE = 'Namespace'
|
||||
|
||||
|
|
|
|||
|
|
@ -1,22 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: members
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# access_level :integer not null
|
||||
# source_id :integer not null
|
||||
# source_type :string not null
|
||||
# user_id :integer
|
||||
# notification_level :integer not null
|
||||
# type :string
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# created_by_id :integer
|
||||
# invite_email :string
|
||||
# invite_token :string
|
||||
# invite_accepted_at :datetime
|
||||
#
|
||||
|
||||
class ProjectMember < Member
|
||||
SOURCE_TYPE = 'Project'
|
||||
|
||||
|
|
|
|||
|
|
@ -1,33 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: merge_requests
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# target_branch :string not null
|
||||
# source_branch :string not null
|
||||
# source_project_id :integer not null
|
||||
# author_id :integer
|
||||
# assignee_id :integer
|
||||
# title :string
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# milestone_id :integer
|
||||
# state :string
|
||||
# merge_status :string
|
||||
# target_project_id :integer not null
|
||||
# iid :integer
|
||||
# description :text
|
||||
# position :integer default(0)
|
||||
# locked_at :datetime
|
||||
# updated_by_id :integer
|
||||
# merge_error :string
|
||||
# merge_params :text
|
||||
# merge_when_build_succeeds :boolean default(FALSE), not null
|
||||
# merge_user_id :integer
|
||||
# merge_commit_sha :string
|
||||
# deleted_at :datetime
|
||||
#
|
||||
|
||||
class MergeRequest < ActiveRecord::Base
|
||||
include InternalId
|
||||
include Issuable
|
||||
|
|
@ -544,7 +514,7 @@ class MergeRequest < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def ref_is_fetched?
|
||||
File.exists?(File.join(project.repository.path_to_repo, ref_path))
|
||||
File.exist?(File.join(project.repository.path_to_repo, ref_path))
|
||||
end
|
||||
|
||||
def ensure_ref_fetched
|
||||
|
|
|
|||
|
|
@ -1,18 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: merge_request_diffs
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# state :string
|
||||
# st_commits :text
|
||||
# st_diffs :text
|
||||
# merge_request_id :integer not null
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# base_commit_sha :string
|
||||
# real_size :string
|
||||
#
|
||||
|
||||
class MergeRequestDiff < ActiveRecord::Base
|
||||
include Sortable
|
||||
|
||||
|
|
|
|||
|
|
@ -1,18 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: milestones
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# title :string not null
|
||||
# project_id :integer not null
|
||||
# description :text
|
||||
# due_date :date
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# state :string
|
||||
# iid :integer
|
||||
#
|
||||
|
||||
class Milestone < ActiveRecord::Base
|
||||
# Represents a "No Milestone" state used for filtering Issues and Merge
|
||||
# Requests that have no milestone assigned.
|
||||
|
|
@ -129,6 +114,10 @@ class Milestone < ActiveRecord::Base
|
|||
nil
|
||||
end
|
||||
|
||||
def title=(value)
|
||||
write_attribute(:title, Sanitize.clean(value.to_s)) if value.present?
|
||||
end
|
||||
|
||||
# Sorts the issues for the given IDs.
|
||||
#
|
||||
# This method runs a single SQL query using a CASE statement to update the
|
||||
|
|
|
|||
|
|
@ -1,20 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: namespaces
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# name :string not null
|
||||
# path :string not null
|
||||
# owner_id :integer
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# type :string
|
||||
# description :string default(""), not null
|
||||
# avatar :string
|
||||
# share_with_group_lock :boolean default(FALSE)
|
||||
# visibility_level :integer default(20), not null
|
||||
#
|
||||
|
||||
class Namespace < ActiveRecord::Base
|
||||
include Sortable
|
||||
include Gitlab::ShellAdapter
|
||||
|
|
|
|||
|
|
@ -1,24 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: notes
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# note :text
|
||||
# noteable_type :string
|
||||
# author_id :integer
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# project_id :integer
|
||||
# attachment :string
|
||||
# line_code :string
|
||||
# commit_id :string
|
||||
# noteable_id :integer
|
||||
# system :boolean default(FALSE), not null
|
||||
# st_diff :text
|
||||
# updated_by_id :integer
|
||||
# is_award :boolean default(FALSE), not null
|
||||
#
|
||||
|
||||
require 'carrierwave/orm/activerecord'
|
||||
|
||||
class Note < ActiveRecord::Base
|
||||
|
|
|
|||
|
|
@ -1,16 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: notification_settings
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# user_id :integer not null
|
||||
# source_id :integer not null
|
||||
# source_type :string not null
|
||||
# level :integer default(0), not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
#
|
||||
|
||||
class NotificationSetting < ActiveRecord::Base
|
||||
enum level: { disabled: 0, participating: 1, watch: 2, global: 3, mention: 4 }
|
||||
|
||||
|
|
|
|||
|
|
@ -1,18 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: oauth_access_tokens
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# resource_owner_id :integer
|
||||
# application_id :integer
|
||||
# token :string not null
|
||||
# refresh_token :string
|
||||
# expires_in :integer
|
||||
# revoked_at :datetime
|
||||
# created_at :datetime not null
|
||||
# scopes :string
|
||||
#
|
||||
|
||||
class OauthAccessToken < ActiveRecord::Base
|
||||
belongs_to :resource_owner, class_name: 'User'
|
||||
belongs_to :application, class_name: 'Doorkeeper::Application'
|
||||
|
|
|
|||
|
|
@ -1,18 +1,2 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: snippets
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# title :string
|
||||
# content :text
|
||||
# author_id :integer not null
|
||||
# project_id :integer
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# file_name :string
|
||||
# type :string
|
||||
# visibility_level :integer default(0), not null
|
||||
#
|
||||
|
||||
class PersonalSnippet < Snippet
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,49 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: projects
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# name :string
|
||||
# path :string
|
||||
# description :text
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# creator_id :integer
|
||||
# issues_enabled :boolean default(TRUE), not null
|
||||
# wall_enabled :boolean default(TRUE), not null
|
||||
# merge_requests_enabled :boolean default(TRUE), not null
|
||||
# wiki_enabled :boolean default(TRUE), not null
|
||||
# namespace_id :integer
|
||||
# issues_tracker :string default("gitlab"), not null
|
||||
# issues_tracker_id :string
|
||||
# snippets_enabled :boolean default(TRUE), not null
|
||||
# last_activity_at :datetime
|
||||
# import_url :string
|
||||
# visibility_level :integer default(0), not null
|
||||
# archived :boolean default(FALSE), not null
|
||||
# avatar :string
|
||||
# import_status :string
|
||||
# repository_size :float default(0.0)
|
||||
# star_count :integer default(0), not null
|
||||
# import_type :string
|
||||
# import_source :string
|
||||
# commit_count :integer default(0)
|
||||
# import_error :text
|
||||
# ci_id :integer
|
||||
# builds_enabled :boolean default(TRUE), not null
|
||||
# shared_runners_enabled :boolean default(TRUE), not null
|
||||
# runners_token :string
|
||||
# build_coverage_regex :string
|
||||
# build_allow_git_fetch :boolean default(TRUE), not null
|
||||
# build_timeout :integer default(3600), not null
|
||||
# pending_delete :boolean default(FALSE)
|
||||
# public_builds :boolean default(TRUE), not null
|
||||
# main_language :string
|
||||
# pushes_since_gc :integer default(0)
|
||||
# last_repository_check_failed :boolean
|
||||
# last_repository_check_at :datetime
|
||||
#
|
||||
|
||||
require 'carrierwave/orm/activerecord'
|
||||
|
||||
class Project < ActiveRecord::Base
|
||||
|
|
@ -67,7 +21,6 @@ class Project < ActiveRecord::Base
|
|||
default_value_for :merge_requests_enabled, gitlab_config_features.merge_requests
|
||||
default_value_for :builds_enabled, gitlab_config_features.builds
|
||||
default_value_for :wiki_enabled, gitlab_config_features.wiki
|
||||
default_value_for :wall_enabled, false
|
||||
default_value_for :snippets_enabled, gitlab_config_features.snippets
|
||||
default_value_for(:shared_runners_enabled) { current_application_settings.shared_runners_enabled }
|
||||
|
||||
|
|
@ -767,7 +720,7 @@ class Project < ActiveRecord::Base
|
|||
|
||||
# Check if current branch name is marked as protected in the system
|
||||
def protected_branch?(branch_name)
|
||||
protected_branches.where(name: branch_name).any?
|
||||
protected_branch_names.include?(branch_name)
|
||||
end
|
||||
|
||||
def developers_can_push_to_protected_branch?(branch_name)
|
||||
|
|
|
|||
|
|
@ -1,15 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: project_group_links
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# project_id :integer not null
|
||||
# group_id :integer not null
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# group_access :integer default(30), not null
|
||||
#
|
||||
|
||||
class ProjectGroupLink < ActiveRecord::Base
|
||||
GUEST = 10
|
||||
REPORTER = 20
|
||||
|
|
|
|||
|
|
@ -1,15 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: project_import_data
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# project_id :integer
|
||||
# data :text
|
||||
# encrypted_credentials :text
|
||||
# encrypted_credentials_iv :string
|
||||
# encrypted_credentials_salt :string
|
||||
#
|
||||
|
||||
require 'carrierwave/orm/activerecord'
|
||||
|
||||
class ProjectImportData < ActiveRecord::Base
|
||||
|
|
|
|||
|
|
@ -1,27 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: services
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# type :string
|
||||
# title :string
|
||||
# project_id :integer
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# active :boolean not null
|
||||
# properties :text
|
||||
# template :boolean default(FALSE)
|
||||
# push_events :boolean default(TRUE)
|
||||
# issues_events :boolean default(TRUE)
|
||||
# merge_requests_events :boolean default(TRUE)
|
||||
# tag_push_events :boolean default(TRUE)
|
||||
# note_events :boolean default(TRUE), not null
|
||||
# build_events :boolean default(FALSE), not null
|
||||
# category :string default("common"), not null
|
||||
# default :boolean default(FALSE)
|
||||
# wiki_page_events :boolean default(TRUE)
|
||||
#
|
||||
|
||||
require 'asana'
|
||||
|
||||
class AsanaService < Service
|
||||
|
|
|
|||
|
|
@ -1,27 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: services
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# type :string
|
||||
# title :string
|
||||
# project_id :integer
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# active :boolean not null
|
||||
# properties :text
|
||||
# template :boolean default(FALSE)
|
||||
# push_events :boolean default(TRUE)
|
||||
# issues_events :boolean default(TRUE)
|
||||
# merge_requests_events :boolean default(TRUE)
|
||||
# tag_push_events :boolean default(TRUE)
|
||||
# note_events :boolean default(TRUE), not null
|
||||
# build_events :boolean default(FALSE), not null
|
||||
# category :string default("common"), not null
|
||||
# default :boolean default(FALSE)
|
||||
# wiki_page_events :boolean default(TRUE)
|
||||
#
|
||||
|
||||
class AssemblaService < Service
|
||||
include HTTParty
|
||||
|
||||
|
|
|
|||
|
|
@ -1,27 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: services
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# type :string
|
||||
# title :string
|
||||
# project_id :integer
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# active :boolean not null
|
||||
# properties :text
|
||||
# template :boolean default(FALSE)
|
||||
# push_events :boolean default(TRUE)
|
||||
# issues_events :boolean default(TRUE)
|
||||
# merge_requests_events :boolean default(TRUE)
|
||||
# tag_push_events :boolean default(TRUE)
|
||||
# note_events :boolean default(TRUE), not null
|
||||
# build_events :boolean default(FALSE), not null
|
||||
# category :string default("common"), not null
|
||||
# default :boolean default(FALSE)
|
||||
# wiki_page_events :boolean default(TRUE)
|
||||
#
|
||||
|
||||
class BambooService < CiService
|
||||
include HTTParty
|
||||
|
||||
|
|
|
|||
|
|
@ -1,27 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: services
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# type :string
|
||||
# title :string
|
||||
# project_id :integer
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# active :boolean not null
|
||||
# properties :text
|
||||
# template :boolean default(FALSE)
|
||||
# push_events :boolean default(TRUE)
|
||||
# issues_events :boolean default(TRUE)
|
||||
# merge_requests_events :boolean default(TRUE)
|
||||
# tag_push_events :boolean default(TRUE)
|
||||
# note_events :boolean default(TRUE), not null
|
||||
# build_events :boolean default(FALSE), not null
|
||||
# category :string default("common"), not null
|
||||
# default :boolean default(FALSE)
|
||||
# wiki_page_events :boolean default(TRUE)
|
||||
#
|
||||
|
||||
require "addressable/uri"
|
||||
|
||||
class BuildkiteService < CiService
|
||||
|
|
|
|||
|
|
@ -1,27 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: services
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# type :string
|
||||
# title :string
|
||||
# project_id :integer
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# active :boolean not null
|
||||
# properties :text
|
||||
# template :boolean default(FALSE)
|
||||
# push_events :boolean default(TRUE)
|
||||
# issues_events :boolean default(TRUE)
|
||||
# merge_requests_events :boolean default(TRUE)
|
||||
# tag_push_events :boolean default(TRUE)
|
||||
# note_events :boolean default(TRUE), not null
|
||||
# build_events :boolean default(FALSE), not null
|
||||
# category :string default("common"), not null
|
||||
# default :boolean default(FALSE)
|
||||
# wiki_page_events :boolean default(TRUE)
|
||||
#
|
||||
|
||||
class BuildsEmailService < Service
|
||||
prop_accessor :recipients
|
||||
boolean_accessor :add_pusher
|
||||
|
|
|
|||
|
|
@ -1,27 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: services
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# type :string
|
||||
# title :string
|
||||
# project_id :integer
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# active :boolean not null
|
||||
# properties :text
|
||||
# template :boolean default(FALSE)
|
||||
# push_events :boolean default(TRUE)
|
||||
# issues_events :boolean default(TRUE)
|
||||
# merge_requests_events :boolean default(TRUE)
|
||||
# tag_push_events :boolean default(TRUE)
|
||||
# note_events :boolean default(TRUE), not null
|
||||
# build_events :boolean default(FALSE), not null
|
||||
# category :string default("common"), not null
|
||||
# default :boolean default(FALSE)
|
||||
# wiki_page_events :boolean default(TRUE)
|
||||
#
|
||||
|
||||
class CampfireService < Service
|
||||
prop_accessor :token, :subdomain, :room
|
||||
validates :token, presence: true, if: :activated?
|
||||
|
|
|
|||
|
|
@ -1,27 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: services
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# type :string
|
||||
# title :string
|
||||
# project_id :integer
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# active :boolean not null
|
||||
# properties :text
|
||||
# template :boolean default(FALSE)
|
||||
# push_events :boolean default(TRUE)
|
||||
# issues_events :boolean default(TRUE)
|
||||
# merge_requests_events :boolean default(TRUE)
|
||||
# tag_push_events :boolean default(TRUE)
|
||||
# note_events :boolean default(TRUE), not null
|
||||
# build_events :boolean default(FALSE), not null
|
||||
# category :string default("common"), not null
|
||||
# default :boolean default(FALSE)
|
||||
# wiki_page_events :boolean default(TRUE)
|
||||
#
|
||||
|
||||
# Base class for CI services
|
||||
# List methods you need to implement to get your CI service
|
||||
# working with GitLab Merge Requests
|
||||
|
|
|
|||
|
|
@ -1,27 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: services
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# type :string
|
||||
# title :string
|
||||
# project_id :integer
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# active :boolean not null
|
||||
# properties :text
|
||||
# template :boolean default(FALSE)
|
||||
# push_events :boolean default(TRUE)
|
||||
# issues_events :boolean default(TRUE)
|
||||
# merge_requests_events :boolean default(TRUE)
|
||||
# tag_push_events :boolean default(TRUE)
|
||||
# note_events :boolean default(TRUE), not null
|
||||
# build_events :boolean default(FALSE), not null
|
||||
# category :string default("common"), not null
|
||||
# default :boolean default(FALSE)
|
||||
# wiki_page_events :boolean default(TRUE)
|
||||
#
|
||||
|
||||
class CustomIssueTrackerService < IssueTrackerService
|
||||
|
||||
prop_accessor :title, :description, :project_url, :issues_url, :new_issue_url
|
||||
|
|
|
|||
|
|
@ -1,27 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: services
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# type :string
|
||||
# title :string
|
||||
# project_id :integer
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# active :boolean not null
|
||||
# properties :text
|
||||
# template :boolean default(FALSE)
|
||||
# push_events :boolean default(TRUE)
|
||||
# issues_events :boolean default(TRUE)
|
||||
# merge_requests_events :boolean default(TRUE)
|
||||
# tag_push_events :boolean default(TRUE)
|
||||
# note_events :boolean default(TRUE), not null
|
||||
# build_events :boolean default(FALSE), not null
|
||||
# category :string default("common"), not null
|
||||
# default :boolean default(FALSE)
|
||||
# wiki_page_events :boolean default(TRUE)
|
||||
#
|
||||
|
||||
class DroneCiService < CiService
|
||||
|
||||
prop_accessor :drone_url, :token, :enable_ssl_verification
|
||||
|
|
|
|||
|
|
@ -1,27 +1,3 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: services
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# type :string
|
||||
# title :string
|
||||
# project_id :integer
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# active :boolean not null
|
||||
# properties :text
|
||||
# template :boolean default(FALSE)
|
||||
# push_events :boolean default(TRUE)
|
||||
# issues_events :boolean default(TRUE)
|
||||
# merge_requests_events :boolean default(TRUE)
|
||||
# tag_push_events :boolean default(TRUE)
|
||||
# note_events :boolean default(TRUE), not null
|
||||
# build_events :boolean default(FALSE), not null
|
||||
# category :string default("common"), not null
|
||||
# default :boolean default(FALSE)
|
||||
# wiki_page_events :boolean default(TRUE)
|
||||
#
|
||||
|
||||
class EmailsOnPushService < Service
|
||||
prop_accessor :send_from_committer_email
|
||||
prop_accessor :disable_diffs
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue