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 |   Enabled: false | ||||||
| 
 | 
 | ||||||
| # Checks the indentation of the first line of the right-hand-side of a | # Checks the indentation of the first line of the right-hand-side of a | ||||||
| # multi-line assignment.  | # multi-line assignment. | ||||||
| Style/IndentAssignment: | Style/IndentAssignment: | ||||||
|   Enabled: false |   Enabled: false | ||||||
| 
 | 
 | ||||||
|  | @ -531,7 +531,7 @@ Style/SpaceAroundKeyword: | ||||||
| 
 | 
 | ||||||
| # Use a single space around operators. | # Use a single space around operators. | ||||||
| Style/SpaceAroundOperators: | Style/SpaceAroundOperators: | ||||||
|   Enabled: false |   Enabled: true | ||||||
| 
 | 
 | ||||||
| # Checks that the left block brace has or doesn't have space before it. | # Checks that the left block brace has or doesn't have space before it. | ||||||
| Style/SpaceBeforeBlockBraces: | Style/SpaceBeforeBlockBraces: | ||||||
|  | @ -770,7 +770,7 @@ Lint/DefEndAlignment: | ||||||
| 
 | 
 | ||||||
| # Check for deprecated class method calls. | # Check for deprecated class method calls. | ||||||
| Lint/DeprecatedClassMethods: | Lint/DeprecatedClassMethods: | ||||||
|   Enabled: false |   Enabled: true | ||||||
| 
 | 
 | ||||||
| # Check for duplicate method definitions. | # Check for duplicate method definitions. | ||||||
| Lint/DuplicateMethods: | Lint/DuplicateMethods: | ||||||
|  | @ -937,10 +937,9 @@ Lint/Void: | ||||||
| 
 | 
 | ||||||
| ##################### Performance ############################ | ##################### Performance ############################ | ||||||
| 
 | 
 | ||||||
| # TODO: Enable Casecmp Cop. |  | ||||||
| # Use `casecmp` rather than `downcase ==`. | # Use `casecmp` rather than `downcase ==`. | ||||||
| Performance/Casecmp: | Performance/Casecmp: | ||||||
|   Enabled: false |   Enabled: true | ||||||
| 
 | 
 | ||||||
| # TODO: Enable DoubleStartEndWith Cop. | # TODO: Enable DoubleStartEndWith Cop. | ||||||
| # Use `str.{start,end}_with?(x, ..., y, ...)` instead of | # Use `str.{start,end}_with?(x, ..., y, ...)` instead of | ||||||
|  | @ -990,11 +989,12 @@ Performance/RedundantSortBy: | ||||||
| # string. | # string. | ||||||
| Performance/StartWith: | Performance/StartWith: | ||||||
|   Enabled: false |   Enabled: false | ||||||
|  | 
 | ||||||
| # Use `tr` instead of `gsub` when you are replacing the same number of | # Use `tr` instead of `gsub` when you are replacing the same number of | ||||||
| # characters. Use `delete` instead of `gsub` when you are deleting | # characters. Use `delete` instead of `gsub` when you are deleting | ||||||
| # characters. | # characters. | ||||||
| Performance/StringReplacement: | Performance/StringReplacement: | ||||||
|   Enabled: false |   Enabled: true | ||||||
| 
 | 
 | ||||||
| # TODO: Enable TimesMap Cop. | # TODO: Enable TimesMap Cop. | ||||||
| # Checks for `.times.map` calls. | # 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. | Please view this file on the master branch, on stable branches it's out of date. | ||||||
| 
 | 
 | ||||||
| v 8.8.0 (unreleased) | 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) |   - 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. |   - 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 |   - Log to application.log when an admin starts and stops impersonating a user | ||||||
|   - Updated gitlab_git to 10.1.0 |   - Updated gitlab_git to 10.1.0 | ||||||
|   - GitAccess#protected_tag? no longer loads all tags just to check if a single one exists |   - 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 |   - 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 |   - Make build status canceled if any of the jobs was canceled and none failed | ||||||
|   - Upgrade Sidekiq to 4.1.2 |   - Upgrade Sidekiq to 4.1.2 | ||||||
|  |   - Added /health_check endpoint for checking service status | ||||||
|   - Sanitize repo paths in new project error message |   - Sanitize repo paths in new project error message | ||||||
|   - Bump mail_room to 0.7.0 to fix stuck IDLE connections |   - Bump mail_room to 0.7.0 to fix stuck IDLE connections | ||||||
|   - Remove future dates from contribution calendar graph. |   - 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 |   - 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 |   - 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 |   - 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 |   - Updated search UI | ||||||
|   - Display informative message when new milestone is created |   - 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) |   - Allow "NEWS" and "CHANGES" as alternative names for CHANGELOG. !3768 (Connor Shea) | ||||||
|   - Added button to toggle whitespaces changes on diff view |   - Added button to toggle whitespaces changes on diff view | ||||||
|   - Backport GitHub Enterprise import support from EE |   - Backport GitHub Enterprise import support from EE | ||||||
|   - Create tags using Rugged for performance reasons. !3745 |   - 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 |   - 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 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. |   - 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) |   - 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) |   - 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) |   - 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 |   - 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 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 | v 8.7.3 | ||||||
|   - Emails, Gitlab::Email::Message, Gitlab::Diff, and Premailer::Adapter::Nokogiri are now instrumented |   - 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' | gem "rack-attack", '~> 4.3.1' | ||||||
| 
 | 
 | ||||||
| # Ace editor | # Ace editor | ||||||
| gem 'ace-rails-ap', '~> 2.0.1' | gem 'ace-rails-ap', '~> 4.0.2' | ||||||
| 
 | 
 | ||||||
| # Keyboard shortcuts | # Keyboard shortcuts | ||||||
| gem 'mousetrap-rails', '~> 1.4.6' | gem 'mousetrap-rails', '~> 1.4.6' | ||||||
|  | @ -218,7 +218,6 @@ gem 'gitlab_emoji',       '~> 0.3.0' | ||||||
| gem 'gon',                '~> 6.0.1' | gem 'gon',                '~> 6.0.1' | ||||||
| gem 'jquery-atwho-rails', '~> 1.3.2' | gem 'jquery-atwho-rails', '~> 1.3.2' | ||||||
| gem 'jquery-rails',       '~> 4.1.0' | gem 'jquery-rails',       '~> 4.1.0' | ||||||
| gem 'jquery-scrollto-rails', '~> 1.4.3' |  | ||||||
| gem 'jquery-ui-rails',    '~> 5.0.0' | gem 'jquery-ui-rails',    '~> 5.0.0' | ||||||
| gem 'raphael-rails',      '~> 2.1.2' | gem 'raphael-rails',      '~> 2.1.2' | ||||||
| gem 'request_store',      '~> 1.3.0' | gem 'request_store',      '~> 1.3.0' | ||||||
|  | @ -242,7 +241,6 @@ group :development do | ||||||
|   gem "foreman" |   gem "foreman" | ||||||
|   gem 'brakeman', '~> 3.2.0', require: false |   gem 'brakeman', '~> 3.2.0', require: false | ||||||
| 
 | 
 | ||||||
|   gem "annotate", "~> 2.7.0" |  | ||||||
|   gem 'letter_opener_web', '~> 1.3.0' |   gem 'letter_opener_web', '~> 1.3.0' | ||||||
|   gem 'quiet_assets', '~> 1.0.2' |   gem 'quiet_assets', '~> 1.0.2' | ||||||
|   gem 'rerun', '~> 0.11.0' |   gem 'rerun', '~> 0.11.0' | ||||||
|  | @ -325,7 +323,6 @@ gem "mail_room", "~> 0.7" | ||||||
| gem 'email_reply_parser', '~> 0.5.8' | gem 'email_reply_parser', '~> 0.5.8' | ||||||
| 
 | 
 | ||||||
| ## CI | ## CI | ||||||
| gem 'activerecord-deprecated_finders', '~> 1.0.3' |  | ||||||
| gem 'activerecord-session_store', '~> 0.1.0' | gem 'activerecord-session_store', '~> 0.1.0' | ||||||
| gem "nested_form", '~> 0.3.2' | gem "nested_form", '~> 0.3.2' | ||||||
| 
 | 
 | ||||||
|  | @ -334,3 +331,6 @@ gem 'oauth2', '~> 1.0.0' | ||||||
| 
 | 
 | ||||||
| # Soft deletion | # Soft deletion | ||||||
| gem "paranoia", "~> 2.0" | gem "paranoia", "~> 2.0" | ||||||
|  | 
 | ||||||
|  | # Health check | ||||||
|  | gem 'health_check', '~> 1.5.1' | ||||||
|  |  | ||||||
							
								
								
									
										18
									
								
								Gemfile.lock
								
								
								
								
							
							
						
						
									
										18
									
								
								Gemfile.lock
								
								
								
								
							|  | @ -3,7 +3,7 @@ GEM | ||||||
|   specs: |   specs: | ||||||
|     CFPropertyList (2.3.2) |     CFPropertyList (2.3.2) | ||||||
|     RedCloth (4.2.9) |     RedCloth (4.2.9) | ||||||
|     ace-rails-ap (2.0.1) |     ace-rails-ap (4.0.2) | ||||||
|     actionmailer (4.2.6) |     actionmailer (4.2.6) | ||||||
|       actionpack (= 4.2.6) |       actionpack (= 4.2.6) | ||||||
|       actionview (= 4.2.6) |       actionview (= 4.2.6) | ||||||
|  | @ -33,7 +33,6 @@ GEM | ||||||
|       activemodel (= 4.2.6) |       activemodel (= 4.2.6) | ||||||
|       activesupport (= 4.2.6) |       activesupport (= 4.2.6) | ||||||
|       arel (~> 6.0) |       arel (~> 6.0) | ||||||
|     activerecord-deprecated_finders (1.0.4) |  | ||||||
|     activerecord-session_store (0.1.2) |     activerecord-session_store (0.1.2) | ||||||
|       actionpack (>= 4.0.0, < 5) |       actionpack (>= 4.0.0, < 5) | ||||||
|       activerecord (>= 4.0.0, < 5) |       activerecord (>= 4.0.0, < 5) | ||||||
|  | @ -51,9 +50,6 @@ GEM | ||||||
|       activerecord (>= 3.0) |       activerecord (>= 3.0) | ||||||
|     akismet (2.0.0) |     akismet (2.0.0) | ||||||
|     allocations (1.0.4) |     allocations (1.0.4) | ||||||
|     annotate (2.7.0) |  | ||||||
|       activerecord (>= 3.2, < 6.0) |  | ||||||
|       rake (~> 10.4) |  | ||||||
|     arel (6.0.3) |     arel (6.0.3) | ||||||
|     asana (0.4.0) |     asana (0.4.0) | ||||||
|       faraday (~> 0.9) |       faraday (~> 0.9) | ||||||
|  | @ -405,6 +401,8 @@ GEM | ||||||
|       html2haml (>= 1.0.1) |       html2haml (>= 1.0.1) | ||||||
|       railties (>= 4.0.1) |       railties (>= 4.0.1) | ||||||
|     hashie (3.4.3) |     hashie (3.4.3) | ||||||
|  |     health_check (1.5.1) | ||||||
|  |       rails (>= 2.3.0) | ||||||
|     highline (1.7.8) |     highline (1.7.8) | ||||||
|     hipchat (1.5.2) |     hipchat (1.5.2) | ||||||
|       httparty |       httparty | ||||||
|  | @ -435,8 +433,6 @@ GEM | ||||||
|       rails-dom-testing (>= 1, < 3) |       rails-dom-testing (>= 1, < 3) | ||||||
|       railties (>= 4.2.0) |       railties (>= 4.2.0) | ||||||
|       thor (>= 0.14, < 2.0) |       thor (>= 0.14, < 2.0) | ||||||
|     jquery-scrollto-rails (1.4.3) |  | ||||||
|       railties (> 3.1, < 5.0) |  | ||||||
|     jquery-turbolinks (2.1.0) |     jquery-turbolinks (2.1.0) | ||||||
|       railties (>= 3.1.0) |       railties (>= 3.1.0) | ||||||
|       turbolinks |       turbolinks | ||||||
|  | @ -885,15 +881,13 @@ PLATFORMS | ||||||
| 
 | 
 | ||||||
| DEPENDENCIES | DEPENDENCIES | ||||||
|   RedCloth (~> 4.2.9) |   RedCloth (~> 4.2.9) | ||||||
|   ace-rails-ap (~> 2.0.1) |   ace-rails-ap (~> 4.0.2) | ||||||
|   activerecord-deprecated_finders (~> 1.0.3) |  | ||||||
|   activerecord-session_store (~> 0.1.0) |   activerecord-session_store (~> 0.1.0) | ||||||
|   acts-as-taggable-on (~> 3.4) |   acts-as-taggable-on (~> 3.4) | ||||||
|   addressable (~> 2.3.8) |   addressable (~> 2.3.8) | ||||||
|   after_commit_queue |   after_commit_queue | ||||||
|   akismet (~> 2.0) |   akismet (~> 2.0) | ||||||
|   allocations (~> 1.0) |   allocations (~> 1.0) | ||||||
|   annotate (~> 2.7.0) |  | ||||||
|   asana (~> 0.4.0) |   asana (~> 0.4.0) | ||||||
|   asciidoctor (~> 1.5.2) |   asciidoctor (~> 1.5.2) | ||||||
|   attr_encrypted (~> 1.3.4) |   attr_encrypted (~> 1.3.4) | ||||||
|  | @ -951,13 +945,13 @@ DEPENDENCIES | ||||||
|   grape (~> 0.13.0) |   grape (~> 0.13.0) | ||||||
|   grape-entity (~> 0.4.2) |   grape-entity (~> 0.4.2) | ||||||
|   haml-rails (~> 0.9.0) |   haml-rails (~> 0.9.0) | ||||||
|  |   health_check (~> 1.5.1) | ||||||
|   hipchat (~> 1.5.0) |   hipchat (~> 1.5.0) | ||||||
|   html-pipeline (~> 1.11.0) |   html-pipeline (~> 1.11.0) | ||||||
|   httparty (~> 0.13.3) |   httparty (~> 0.13.3) | ||||||
|   influxdb (~> 0.2) |   influxdb (~> 0.2) | ||||||
|   jquery-atwho-rails (~> 1.3.2) |   jquery-atwho-rails (~> 1.3.2) | ||||||
|   jquery-rails (~> 4.1.0) |   jquery-rails (~> 4.1.0) | ||||||
|   jquery-scrollto-rails (~> 1.4.3) |  | ||||||
|   jquery-turbolinks (~> 2.1.0) |   jquery-turbolinks (~> 2.1.0) | ||||||
|   jquery-ui-rails (~> 5.0.0) |   jquery-ui-rails (~> 5.0.0) | ||||||
|   kaminari (~> 0.16.3) |   kaminari (~> 0.16.3) | ||||||
|  | @ -1061,4 +1055,4 @@ DEPENDENCIES | ||||||
|   wikicloth (= 0.8.1) |   wikicloth (= 0.8.1) | ||||||
| 
 | 
 | ||||||
| BUNDLED WITH | 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: | 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/) | - [Consultancy](https://about.gitlab.com/consultancy/) | ||||||
| - [Community](https://about.gitlab.com/community/) | - [Community](https://about.gitlab.com/community/) | ||||||
| - [Hosted GitLab.com](https://about.gitlab.com/gitlab-com/) use GitLab as a free service | - [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. | - [GitLab CI](https://about.gitlab.com/gitlab-ci/) a continuous integration (CI) server that is easy to integrate with GitLab. | ||||||
| 
 | 
 | ||||||
| ## Requirements | ## Requirements | ||||||
|  |  | ||||||
|  | @ -204,6 +204,7 @@ $ -> | ||||||
|     $('.header-content .title').toggle() |     $('.header-content .title').toggle() | ||||||
|     $('.header-content .navbar-collapse').toggle() |     $('.header-content .navbar-collapse').toggle() | ||||||
|     $('.navbar-toggle').toggleClass('active') |     $('.navbar-toggle').toggleClass('active') | ||||||
|  |     $('.navbar-toggle i').toggleClass("fa-angle-right fa-angle-left") | ||||||
| 
 | 
 | ||||||
|   # Show/hide comments on diff |   # Show/hide comments on diff | ||||||
|   $("body").on "click", ".js-toggle-diff-comments", (e) -> |   $("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 pager | ||||||
| #= require jquery_nested_form | #= require jquery_nested_form | ||||||
| #= require_tree . | #= 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', -> | $(document).on 'click', '.assign-all-runner', -> | ||||||
|   $(this).replaceWith('<i class="fa fa-refresh fa-spin"></i> Assign in progress..') |   $(this).replaceWith('<i class="fa fa-refresh fa-spin"></i> Assign in progress..') | ||||||
|  |  | ||||||
|  | @ -1,9 +1,12 @@ | ||||||
| class CiBuild | class CiBuild | ||||||
|   @interval: null |   @interval: null | ||||||
|  |   @state: null | ||||||
| 
 | 
 | ||||||
|   constructor: (build_url, build_status) -> |   constructor: (build_url, build_status, build_state) -> | ||||||
|     clearInterval(CiBuild.interval) |     clearInterval(CiBuild.interval) | ||||||
| 
 | 
 | ||||||
|  |     @state = build_state | ||||||
|  | 
 | ||||||
|     @initScrollButtonAffix() |     @initScrollButtonAffix() | ||||||
| 
 | 
 | ||||||
|     if build_status == "running" || build_status == "pending" |     if build_status == "running" || build_status == "pending" | ||||||
|  | @ -26,14 +29,18 @@ class CiBuild | ||||||
|       CiBuild.interval = setInterval => |       CiBuild.interval = setInterval => | ||||||
|         if window.location.href.split("#").first() is build_url |         if window.location.href.split("#").first() is build_url | ||||||
|           $.ajax |           $.ajax | ||||||
|             url: build_url |             url: build_url + "/trace.json?state=" + encodeURIComponent(@state) | ||||||
|             dataType: "json" |             dataType: "json" | ||||||
|             success: (build) => |             success: (log) => | ||||||
|               if build.status == "running" |               @state = log.state | ||||||
|                 $('#build-trace code').html build.trace_html |               if log.status is "running" | ||||||
|                 $('#build-trace code').append '<i class="fa fa-refresh fa-spin"/>' |                 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() |                 @checkAutoscroll() | ||||||
|               else if build.status != build_status |               else if log.status isnt build_status | ||||||
|                 Turbolinks.visit build_url |                 Turbolinks.visit build_url | ||||||
|       , 4000 |       , 4000 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -9,11 +9,12 @@ class @MergeRequestWidget | ||||||
|   constructor: (@opts) -> |   constructor: (@opts) -> | ||||||
|     $('#modal_merge_info').modal(show: false) |     $('#modal_merge_info').modal(show: false) | ||||||
|     @firstCICheck = true |     @firstCICheck = true | ||||||
|     @readyForCICheck = true |     @readyForCICheck = false | ||||||
|     clearInterval @fetchBuildStatusInterval |     clearInterval @fetchBuildStatusInterval | ||||||
| 
 | 
 | ||||||
|     @clearEventListeners() |     @clearEventListeners() | ||||||
|     @addEventListeners() |     @addEventListeners() | ||||||
|  |     @getCIStatus(false) | ||||||
|     @pollCIStatus() |     @pollCIStatus() | ||||||
|     notifyPermissions() |     notifyPermissions() | ||||||
| 
 | 
 | ||||||
|  | @ -71,7 +72,7 @@ class @MergeRequestWidget | ||||||
|       if data.status is '' |       if data.status is '' | ||||||
|         return |         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 |         @opts.ci_status = data.status | ||||||
|         @showCIStatus data.status |         @showCIStatus data.status | ||||||
|         if data.coverage |         if data.coverage | ||||||
|  | @ -79,7 +80,7 @@ class @MergeRequestWidget | ||||||
| 
 | 
 | ||||||
|         # The first check should only update the UI, a notification |         # The first check should only update the UI, a notification | ||||||
|         # should only be displayed on status changes |         # should only be displayed on status changes | ||||||
|         if showNotification and not @firstCiCheck |         if showNotification and not @firstCICheck | ||||||
|           status = @ciLabelForStatus(data.status) |           status = @ciLabelForStatus(data.status) | ||||||
| 
 | 
 | ||||||
|           if status is "preparing" |           if status is "preparing" | ||||||
|  | @ -102,7 +103,7 @@ class @MergeRequestWidget | ||||||
|               @close() |               @close() | ||||||
|               Turbolinks.visit _this.opts.builds_path |               Turbolinks.visit _this.opts.builds_path | ||||||
|           ) |           ) | ||||||
|         @firstCiCheck = false |         @firstCICheck = false | ||||||
| 
 | 
 | ||||||
|   showCIStatus: (state) -> |   showCIStatus: (state) -> | ||||||
|     $('.ci_widget').hide() |     $('.ci_widget').hide() | ||||||
|  |  | ||||||
|  | @ -6,6 +6,10 @@ class @ShortcutsIssuable extends ShortcutsNavigation | ||||||
|     super() |     super() | ||||||
|     Mousetrap.bind('a', @openSidebarDropdown.bind(@, 'assignee')) |     Mousetrap.bind('a', @openSidebarDropdown.bind(@, 'assignee')) | ||||||
|     Mousetrap.bind('m', @openSidebarDropdown.bind(@, 'milestone')) |     Mousetrap.bind('m', @openSidebarDropdown.bind(@, 'milestone')) | ||||||
|  |     Mousetrap.bind('r', => | ||||||
|  |       @replyWithSelectedText() | ||||||
|  |       return false | ||||||
|  |     ) | ||||||
|     Mousetrap.bind('j', => |     Mousetrap.bind('j', => | ||||||
|       @prevIssue() |       @prevIssue() | ||||||
|       return false |       return false | ||||||
|  |  | ||||||
|  | @ -12,7 +12,7 @@ toggleSidebar = -> | ||||||
|     niceScrollBars.updateScrollBar(); |     niceScrollBars.updateScrollBar(); | ||||||
|   ), 300 |   ), 300 | ||||||
| 
 | 
 | ||||||
| $(document).on("click", '.toggle-nav-collapse', (e) -> | $(document).on("click", '.toggle-nav-collapse, .side-nav-toggle', (e) -> | ||||||
|   e.preventDefault() |   e.preventDefault() | ||||||
| 
 | 
 | ||||||
|   toggleSidebar() |   toggleSidebar() | ||||||
|  |  | ||||||
|  | @ -26,6 +26,10 @@ | ||||||
| #         Personal projects | #         Personal projects | ||||||
| #       </a> | #       </a> | ||||||
| #     </li> | #     </li> | ||||||
|  | #    <li class="snippets-tab"> | ||||||
|  | #       <a data-action="snippets" data-target="#snippets" data-toggle="tab" href="/u/username/snippets"> | ||||||
|  | #       </a> | ||||||
|  | #     </li> | ||||||
| #   </ul> | #   </ul> | ||||||
| # | # | ||||||
| #   <div class="tab-content"> | #   <div class="tab-content"> | ||||||
|  | @ -41,6 +45,9 @@ | ||||||
| #     <div class="tab-pane" id="projects"> | #     <div class="tab-pane" id="projects"> | ||||||
| #       Projects content | #       Projects content | ||||||
| #     </div> | #     </div> | ||||||
|  | #     <div class="tab-pane" id="snippets"> | ||||||
|  | #       Snippets content | ||||||
|  | #     </div> | ||||||
| #   </div> | #   </div> | ||||||
| # | # | ||||||
| #   <div class="loading-status"> | #   <div class="loading-status"> | ||||||
|  | @ -100,7 +107,7 @@ class @UserTabs | ||||||
|     if action is 'activity' |     if action is 'activity' | ||||||
|       @loadActivities(source) |       @loadActivities(source) | ||||||
| 
 | 
 | ||||||
|     if action in ['groups', 'contributed', 'projects'] |     if action in ['groups', 'contributed', 'projects', 'snippets'] | ||||||
|       @loadTab(source, action) |       @loadTab(source, action) | ||||||
| 
 | 
 | ||||||
|   loadTab: (source, action) -> |   loadTab: (source, action) -> | ||||||
|  |  | ||||||
|  | @ -289,7 +289,7 @@ table { | ||||||
|   text-shadow: none; |   text-shadow: none; | ||||||
| 
 | 
 | ||||||
|   @media (min-width: $screen-sm-min) { |   @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) { | @mixin gitlab-theme($color-light, $color, $color-darker, $color-dark) { | ||||||
|   .page-with-sidebar { |   .page-with-sidebar { | ||||||
|     .header-logo { |     .header-logo { | ||||||
|       background-color: $color; |  | ||||||
|       border-color: $color; |  | ||||||
| 
 |  | ||||||
|       a { |       a { | ||||||
|         color: $color-light; |         color: $color-light; | ||||||
| 
 | 
 | ||||||
|  | @ -21,9 +18,13 @@ | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       &:hover { |       &:hover { | ||||||
|         background-color: $color-darker; |         background-color: $color-dark; | ||||||
|         a { |         a { | ||||||
|           color: #fff; |           color: #fff; | ||||||
|  | 
 | ||||||
|  |           h3 { | ||||||
|  |             color: #fff; | ||||||
|  |           } | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -6,12 +6,12 @@ header { | ||||||
|   transition-duration: .3s; |   transition-duration: .3s; | ||||||
| 
 | 
 | ||||||
|   &.navbar-empty { |   &.navbar-empty { | ||||||
|     height: 58px; |     height: $header-height; | ||||||
|     background: #fff; |     background: #fff; | ||||||
|     border-bottom: 1px solid #eee; |     border-bottom: 1px solid $btn-gray-hover; | ||||||
| 
 | 
 | ||||||
|     .center-logo { |     .center-logo { | ||||||
|       margin: 11px 0; |       margin: 8px 0; | ||||||
|       text-align: center; |       text-align: center; | ||||||
| 
 | 
 | ||||||
|       #tanuki-logo, img { |       #tanuki-logo, img { | ||||||
|  | @ -22,14 +22,18 @@ header { | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   &.navbar-gitlab { |   &.navbar-gitlab { | ||||||
|     padding: 0 20px; |     padding: 0 16px; | ||||||
|     z-index: 100; |     z-index: 100; | ||||||
|     margin-bottom: 0; |     margin-bottom: 0; | ||||||
|     min-height: $header-height; |     height: $header-height; | ||||||
|     background-color: $background-color; |     background-color: $background-color; | ||||||
|     border: none; |     border: none; | ||||||
|     border-bottom: 1px solid $border-color; |     border-bottom: 1px solid $border-color; | ||||||
| 
 | 
 | ||||||
|  |     @media (max-width: $screen-xs-min) { | ||||||
|  |       padding: 0 16px; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     &.with-horizontal-nav { |     &.with-horizontal-nav { | ||||||
|       border-bottom: none; |       border-bottom: none; | ||||||
|     } |     } | ||||||
|  | @ -60,16 +64,44 @@ header { | ||||||
|         margin: 6px 0; |         margin: 6px 0; | ||||||
|         border-radius: 0; |         border-radius: 0; | ||||||
|         position: absolute; |         position: absolute; | ||||||
|         right: 2px; |         right: -10px; | ||||||
|  |         padding: 6px 10px; | ||||||
| 
 | 
 | ||||||
|         &:hover { |         &:hover { | ||||||
|           background-color: #eee; |           background-color: $btn-gray-hover; | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|         &.active { |         &.active { | ||||||
|           color: $gl-icon-color; |           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 { |   .header-content { | ||||||
|  | @ -77,6 +109,10 @@ header { | ||||||
|     height: $header-height; |     height: $header-height; | ||||||
|     padding-right: 40px; |     padding-right: 40px; | ||||||
| 
 | 
 | ||||||
|  |     @media (max-width: $screen-xs-min) { | ||||||
|  |       padding-left: 40px; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     @media (min-width: $screen-sm-min) { |     @media (min-width: $screen-sm-min) { | ||||||
|       padding-right: 0; |       padding-right: 0; | ||||||
|     } |     } | ||||||
|  | @ -145,6 +181,10 @@ header { | ||||||
|   @media (min-width: $screen-md-min) { |   @media (min-width: $screen-md-min) { | ||||||
|     @include collapsed-header; |     @include collapsed-header; | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
|  |   @media (max-width: $screen-xs-min) { | ||||||
|  |     margin-left: 0; | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .header-expanded { | .header-expanded { | ||||||
|  | @ -153,6 +193,10 @@ header { | ||||||
|   @media (min-width: $screen-md-min) { |   @media (min-width: $screen-md-min) { | ||||||
|     margin-left: $sidebar_width; |     margin-left: $sidebar_width; | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
|  |   @media (max-width: $screen-xs-min) { | ||||||
|  |     margin-left: 0; | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @media (max-width: $screen-xs-max) { | @media (max-width: $screen-xs-max) { | ||||||
|  |  | ||||||
|  | @ -201,9 +201,22 @@ | ||||||
|   border-bottom: 1px solid $border-color; |   border-bottom: 1px solid $border-color; | ||||||
|   transition-duration: .3s; |   transition-duration: .3s; | ||||||
| 
 | 
 | ||||||
|  |   .container-fluid { | ||||||
|  |     position: relative; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   .controls { |   .controls { | ||||||
|     float: right; |     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 { |     i { | ||||||
|       color: $layout-link-gray; |       color: $layout-link-gray; | ||||||
|  | @ -221,6 +234,10 @@ | ||||||
| 
 | 
 | ||||||
|     .dropdown { |     .dropdown { | ||||||
|       margin-left: 7px; |       margin-left: 7px; | ||||||
|  | 
 | ||||||
|  |       @media (max-width: $screen-xs-min) { | ||||||
|  |         margin-left: 0; | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | @ -256,4 +273,10 @@ | ||||||
| 
 | 
 | ||||||
| .page-with-layout-nav { | .page-with-layout-nav { | ||||||
|   margin-top: 50px; |   margin-top: 50px; | ||||||
|  | 
 | ||||||
|  |   &.controls-dropdown-visible { | ||||||
|  |     @media (max-width: $screen-xs-min) { | ||||||
|  |       margin-top: 96px; | ||||||
|  |     } | ||||||
|  |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -98,7 +98,7 @@ | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   .sidebar-user { |   .sidebar-user { | ||||||
|     padding: 9px 22px; |     padding: 7px 22px; | ||||||
|     position: fixed; |     position: fixed; | ||||||
|     bottom: 40px; |     bottom: 40px; | ||||||
|     width: $sidebar_width; |     width: $sidebar_width; | ||||||
|  | @ -210,15 +210,33 @@ | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .sidebar-wrapper { | ||||||
|  |   &.hidden-nav { | ||||||
|  |     width: 0; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| .page-sidebar-collapsed { | .page-sidebar-collapsed { | ||||||
|   padding-left: $sidebar_collapsed_width; |   padding-left: $sidebar_collapsed_width; | ||||||
| 
 | 
 | ||||||
|  |   @media (max-width: $screen-xs-min) { | ||||||
|  |     padding-left: 0; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   .sidebar-wrapper { |   .sidebar-wrapper { | ||||||
|     width: $sidebar_collapsed_width; |     width: $sidebar_collapsed_width; | ||||||
| 
 | 
 | ||||||
|  |     @media (max-width: $screen-xs-min) { | ||||||
|  |       width: 0; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     .header-logo { |     .header-logo { | ||||||
|       width: $sidebar_collapsed_width; |       width: $sidebar_collapsed_width; | ||||||
| 
 | 
 | ||||||
|  |       @media (max-width: $screen-xs-min) { | ||||||
|  |         width: 0; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|       a { |       a { | ||||||
|         padding-left: ($sidebar_collapsed_width - 36) / 2; |         padding-left: ($sidebar_collapsed_width - 36) / 2; | ||||||
| 
 | 
 | ||||||
|  | @ -244,12 +262,22 @@ | ||||||
| 
 | 
 | ||||||
|     .collapse-nav a { |     .collapse-nav a { | ||||||
|       width: $sidebar_collapsed_width; |       width: $sidebar_collapsed_width; | ||||||
|  | 
 | ||||||
|  |       @media (max-width: $screen-xs-min) { | ||||||
|  |         width: 0; | ||||||
|  |       } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     .sidebar-user { |     .sidebar-user { | ||||||
|       padding-left: ($sidebar_collapsed_width - 36) / 2; |       padding-left: ($sidebar_collapsed_width - 36) / 2; | ||||||
|       width: $sidebar_collapsed_width; |       width: $sidebar_collapsed_width; | ||||||
| 
 | 
 | ||||||
|  |       @media (max-width: $screen-xs-min) { | ||||||
|  |         width: 0; | ||||||
|  |         padding-left: 0; | ||||||
|  |         padding-right: 0; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|       .username { |       .username { | ||||||
|         display: none; |         display: none; | ||||||
|       } |       } | ||||||
|  | @ -258,6 +286,10 @@ | ||||||
| 
 | 
 | ||||||
|   .layout-nav { |   .layout-nav { | ||||||
|     padding-right: $sidebar_collapsed_width; |     padding-right: $sidebar_collapsed_width; | ||||||
|  | 
 | ||||||
|  |     @media (max-width: $screen-xs-min) { | ||||||
|  |       padding-right: 0;; | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -268,6 +300,10 @@ | ||||||
|     padding-left: $sidebar_width; |     padding-left: $sidebar_width; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   @media (max-width: $screen-xs-min) { | ||||||
|  |     padding-left: 0; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   .sidebar-wrapper { |   .sidebar-wrapper { | ||||||
|     width: $sidebar_width; |     width: $sidebar_width; | ||||||
| 
 | 
 | ||||||
|  | @ -276,7 +312,7 @@ | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     .nav-sidebar li a { |     .nav-sidebar li a { | ||||||
|       width: 230px; |       width: $sidebar_width; | ||||||
| 
 | 
 | ||||||
|       &.back-link { |       &.back-link { | ||||||
|         i { |         i { | ||||||
|  | @ -287,7 +323,17 @@ | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   .layout-nav { |   .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 |  * Layout | ||||||
|  */ |  */ | ||||||
| $sidebar_collapsed_width: 62px; | $sidebar_collapsed_width: 62px; | ||||||
| $sidebar_width: 230px; | $sidebar_width: 220px; | ||||||
| $gutter_collapsed_width: 62px; | $gutter_collapsed_width: 62px; | ||||||
| $gutter_width: 290px; | $gutter_width: 290px; | ||||||
| $gutter_inner_width: 258px; | $gutter_inner_width: 258px; | ||||||
|  | @ -215,6 +215,7 @@ $dropdown-toggle-hover-icon-color: $dropdown-toggle-hover-border-color; | ||||||
| $btn-active-gray: #ececec; | $btn-active-gray: #ececec; | ||||||
| $btn-placeholder-gray: #c7c7c7; | $btn-placeholder-gray: #c7c7c7; | ||||||
| $btn-white-active: #848484; | $btn-white-active: #848484; | ||||||
|  | $btn-gray-hover: #eee; | ||||||
| 
 | 
 | ||||||
| /* | /* | ||||||
|  *  Award emoji |  *  Award emoji | ||||||
|  |  | ||||||
|  | @ -125,7 +125,7 @@ | ||||||
| 
 | 
 | ||||||
| .right-sidebar { | .right-sidebar { | ||||||
|   position: fixed; |   position: fixed; | ||||||
|   top: 58px; |   top: $header-height; | ||||||
|   bottom: 0; |   bottom: 0; | ||||||
|   right: 0; |   right: 0; | ||||||
|   z-index: 10; |   z-index: 10; | ||||||
|  |  | ||||||
|  | @ -218,7 +218,7 @@ | ||||||
| 
 | 
 | ||||||
|       .btn { |       .btn { | ||||||
|         display: inline-block; |         display: inline-block; | ||||||
|         width: 48%; |         width: 46%; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  | @ -19,6 +19,12 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController | ||||||
|     redirect_to admin_runners_path |     redirect_to admin_runners_path | ||||||
|   end |   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 |   def clear_repository_check_states | ||||||
|     RepositoryCheck::ClearWorker.perform_async |     RepositoryCheck::ClearWorker.perform_async | ||||||
| 
 | 
 | ||||||
|  | @ -53,6 +59,12 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController | ||||||
|       end |       end | ||||||
|     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( |     params.require(:application_setting).permit( | ||||||
|       :default_projects_limit, |       :default_projects_limit, | ||||||
|       :default_branch_protection, |       :default_branch_protection, | ||||||
|  | @ -95,7 +107,8 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController | ||||||
|       :repository_checks_enabled, |       :repository_checks_enabled, | ||||||
|       :metrics_packet_size, |       :metrics_packet_size, | ||||||
|       restricted_visibility_levels: [], |       restricted_visibility_levels: [], | ||||||
|       import_sources: [] |       import_sources: [], | ||||||
|  |       disabled_oauth_sign_in_sources: [] | ||||||
|     ) |     ) | ||||||
|   end |   end | ||||||
| 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 |   end | ||||||
| 
 | 
 | ||||||
|   def runner_params |   def runner_params | ||||||
|     params.require(:runner).permit(:token, :description, :tag_list, :active) |     params.require(:runner).permit(Ci::Runner::FORM_EDITABLE) | ||||||
|   end |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -176,7 +176,7 @@ class ApplicationController < ActionController::Base | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def check_password_expiration |   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 |       redirect_to new_profile_password_path and return | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  | @ -122,7 +122,7 @@ module CreatesCommit | ||||||
|       # Merge request from fork to this project |       # Merge request from fork to this project | ||||||
|       @mr_source_project = @tree_edit_project |       @mr_source_project = @tree_edit_project | ||||||
|       @mr_target_project = @project |       @mr_target_project = @project | ||||||
|       @mr_target_branch  ||= @ref |       @mr_target_branch ||= @ref | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| class Dashboard::LabelsController < Dashboard::ApplicationController | class Dashboard::LabelsController < Dashboard::ApplicationController | ||||||
|   def index |   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| |     respond_to do |format| | ||||||
|       format.json { render json: labels } |       format.json { render json: labels } | ||||||
|  |  | ||||||
|  | @ -28,7 +28,7 @@ class Dashboard::ProjectsController < Dashboard::ApplicationController | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def starred |   def starred | ||||||
|     @projects = current_user.starred_projects.sorted_by_activity |     @projects = current_user.viewable_starred_projects.sorted_by_activity | ||||||
|     @projects = filter_projects(@projects) |     @projects = filter_projects(@projects) | ||||||
|     @projects = @projects.includes(:namespace, :forked_from_project, :tags) |     @projects = @projects.includes(:namespace, :forked_from_project, :tags) | ||||||
|     @projects = @projects.sort(@sort = params[:sort]) |     @projects = @projects.sort(@sort = params[:sort]) | ||||||
|  |  | ||||||
|  | @ -25,7 +25,7 @@ class DashboardController < Dashboard::ApplicationController | ||||||
|   def load_events |   def load_events | ||||||
|     projects = |     projects = | ||||||
|       if params[:filter] == "starred" |       if params[:filter] == "starred" | ||||||
|         current_user.starred_projects |         current_user.viewable_starred_projects | ||||||
|       else |       else | ||||||
|         current_user.authorized_projects |         current_user.authorized_projects | ||||||
|       end |       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 | ||||||
|   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 |   def retry | ||||||
|     unless @build.retryable? |     unless @build.retryable? | ||||||
|       return render_404 |       return render_404 | ||||||
|  |  | ||||||
|  | @ -27,8 +27,10 @@ class Projects::HooksController < Projects::ApplicationController | ||||||
|     if !@project.empty_repo? |     if !@project.empty_repo? | ||||||
|       status, message = TestHookService.new.execute(hook, current_user) |       status, message = TestHookService.new.execute(hook, current_user) | ||||||
| 
 | 
 | ||||||
|       if status |       if status && status >= 200 && status < 400 | ||||||
|         flash[:notice] = 'Hook successfully executed.' |         flash[:notice] = "Hook executed successfully: HTTP #{status}" | ||||||
|  |       elsif status | ||||||
|  |         flash[:alert] = "Hook executed successfully but returned HTTP #{status} #{message}" | ||||||
|       else |       else | ||||||
|         flash[:alert] = "Hook execution failed: #{message}" |         flash[:alert] = "Hook execution failed: #{message}" | ||||||
|       end |       end | ||||||
|  |  | ||||||
|  | @ -64,6 +64,6 @@ class Projects::RunnersController < Projects::ApplicationController | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def runner_params |   def runner_params | ||||||
|     params.require(:runner).permit(:description, :tag_list, :active) |     params.require(:runner).permit(Ci::Runner::FORM_EDITABLE) | ||||||
|   end |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -10,7 +10,7 @@ class SnippetsController < ApplicationController | ||||||
|   # Allow destroy snippet |   # Allow destroy snippet | ||||||
|   before_action :authorize_admin_snippet!, only: [:destroy] |   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' |   layout 'snippets' | ||||||
|   respond_to :html |   respond_to :html | ||||||
|  |  | ||||||
|  | @ -58,6 +58,19 @@ class UsersController < ApplicationController | ||||||
|     end |     end | ||||||
|   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 |   def calendar | ||||||
|     calendar = contributions_calendar |     calendar = contributions_calendar | ||||||
|     @timestamps = calendar.timestamps |     @timestamps = calendar.timestamps | ||||||
|  | @ -116,6 +129,15 @@ class UsersController < ApplicationController | ||||||
|     @groups = JoinedGroupsFinder.new(user).execute(current_user) |     @groups = JoinedGroupsFinder.new(user).execute(current_user) | ||||||
|   end |   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 |   def projects_for_current_user | ||||||
|     ProjectsFinder.new.execute(current_user) |     ProjectsFinder.new.execute(current_user) | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  | @ -60,4 +60,18 @@ module ApplicationSettingsHelper | ||||||
|       end |       end | ||||||
|     end |     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 | end | ||||||
|  |  | ||||||
|  | @ -38,6 +38,16 @@ module AuthHelper | ||||||
|     auth_providers.reject { |provider| form_based_provider?(provider) } |     auth_providers.reject { |provider| form_based_provider?(provider) } | ||||||
|   end |   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) |   def provider_image_tag(provider, size = 64) | ||||||
|     label = label_for_provider(provider) |     label = label_for_provider(provider) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -39,15 +39,6 @@ module EventsHelper | ||||||
|     end |     end | ||||||
|   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) |   def event_preposition(event) | ||||||
|     if event.push? || event.commented? || event.target |     if event.push? || event.commented? || event.target | ||||||
|       "at" |       "at" | ||||||
|  |  | ||||||
|  | @ -43,4 +43,12 @@ module NavHelper | ||||||
|     class_name += " with-horizontal-nav" if defined?(nav) && nav |     class_name += " with-horizontal-nav" if defined?(nav) && nav | ||||||
|     class_name |     class_name | ||||||
|   end |   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 | end | ||||||
|  |  | ||||||
|  | @ -138,10 +138,10 @@ module ProjectsHelper | ||||||
|   private |   private | ||||||
| 
 | 
 | ||||||
|   def get_project_nav_tabs(project, current_user) |   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) |     if !project.empty_repo? && can?(current_user, :download_code, project) | ||||||
|       nav_tabs << [:files, :commits, :network, :graphs] |       nav_tabs << [:files, :commits, :network, :graphs, :forks] | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     if project.repo_exists? && can?(current_user, :read_merge_request, project) |     if project.repo_exists? && can?(current_user, :read_merge_request, project) | ||||||
|  | @ -205,7 +205,8 @@ module ProjectsHelper | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def default_url_to_repo(project = @project) |   def default_url_to_repo(project = @project) | ||||||
|     if default_clone_protocol == "ssh" |     case default_clone_protocol | ||||||
|  |     when 'ssh' | ||||||
|       project.ssh_url_to_repo |       project.ssh_url_to_repo | ||||||
|     else |     else | ||||||
|       project.http_url_to_repo |       project.http_url_to_repo | ||||||
|  |  | ||||||
|  | @ -59,7 +59,7 @@ module SearchHelper | ||||||
|   # Autocomplete results for the current project, if it's defined |   # Autocomplete results for the current project, if it's defined | ||||||
|   def project_autocomplete |   def project_autocomplete | ||||||
|     if @project && @project.repository.exists? && @project.repository.root_ref |     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) }, |         { category: "Current Project", label: "Files",          url: namespace_project_tree_path(@project.namespace, @project, ref) }, | ||||||
|  |  | ||||||
|  | @ -18,7 +18,7 @@ module SelectsHelper | ||||||
|         first_user: first_user, |         first_user: first_user, | ||||||
|         current_user: opts[:current_user] || false, |         current_user: opts[:current_user] || false, | ||||||
|         "push-code-to-protected-branches" => opts[:push_code_to_protected_branches], |         "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")) |            subject: subject("Project was moved")) | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     def repository_push_email(project_id, recipient, opts = {}) |     def repository_push_email(project_id, opts = {}) | ||||||
|       @message = |       @message = | ||||||
|         Gitlab::Email::Message::RepositoryPush.new(self, project_id, recipient, opts) |         Gitlab::Email::Message::RepositoryPush.new(self, project_id, opts) | ||||||
| 
 | 
 | ||||||
|       # used in notify layout |       # used in notify layout | ||||||
|       @target_url = @message.target_url |       @target_url = @message.target_url | ||||||
|  | @ -72,7 +72,6 @@ module Emails | ||||||
| 
 | 
 | ||||||
|       mail(from:      sender(@message.author_id, @message.send_from_committer_email?), |       mail(from:      sender(@message.author_id, @message.send_from_committer_email?), | ||||||
|            reply_to:  @message.reply_to, |            reply_to:  @message.reply_to, | ||||||
|            to:        @message.recipient, |  | ||||||
|            subject:   @message.subject) |            subject:   @message.subject) | ||||||
|     end |     end | ||||||
|   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 | class AbuseReport < ActiveRecord::Base | ||||||
|   belongs_to :reporter, class_name: 'User' |   belongs_to :reporter, class_name: 'User' | ||||||
|   belongs_to :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 | class Appearance < ActiveRecord::Base | ||||||
|   validates :title,       presence: true |   validates :title,       presence: true | ||||||
|   validates :description, 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 | class ApplicationSetting < ActiveRecord::Base | ||||||
|   include TokenAuthenticatable |   include TokenAuthenticatable | ||||||
|   add_authentication_token_field :runners_registration_token |   add_authentication_token_field :runners_registration_token | ||||||
|  |   add_authentication_token_field :health_check_access_token | ||||||
| 
 | 
 | ||||||
|   CACHE_KEY = 'application_setting.last' |   CACHE_KEY = 'application_setting.last' | ||||||
| 
 | 
 | ||||||
|   serialize :restricted_visibility_levels |   serialize :restricted_visibility_levels | ||||||
|   serialize :import_sources |   serialize :import_sources | ||||||
|  |   serialize :disabled_oauth_sign_in_sources | ||||||
|   serialize :restricted_signup_domains, Array |   serialize :restricted_signup_domains, Array | ||||||
|   attr_accessor :restricted_signup_domains_raw |   attr_accessor :restricted_signup_domains_raw | ||||||
| 
 | 
 | ||||||
|  | @ -121,7 +71,18 @@ class ApplicationSetting < ActiveRecord::Base | ||||||
|     end |     end | ||||||
|   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_runners_registration_token | ||||||
|  |   before_save :ensure_health_check_access_token | ||||||
| 
 | 
 | ||||||
|   after_commit do |   after_commit do | ||||||
|     Rails.cache.write(CACHE_KEY, self) |     Rails.cache.write(CACHE_KEY, self) | ||||||
|  | @ -159,6 +120,7 @@ class ApplicationSetting < ActiveRecord::Base | ||||||
|       recaptcha_enabled: false, |       recaptcha_enabled: false, | ||||||
|       akismet_enabled: false, |       akismet_enabled: false, | ||||||
|       repository_checks_enabled: true, |       repository_checks_enabled: true, | ||||||
|  |       disabled_oauth_sign_in_sources: [] | ||||||
|     ) |     ) | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|  | @ -185,4 +147,8 @@ class ApplicationSetting < ActiveRecord::Base | ||||||
|   def runners_registration_token |   def runners_registration_token | ||||||
|     ensure_runners_registration_token! |     ensure_runners_registration_token! | ||||||
|   end |   end | ||||||
|  | 
 | ||||||
|  |   def health_check_access_token | ||||||
|  |     ensure_health_check_access_token! | ||||||
|  |   end | ||||||
| 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 | class AuditEvent < ActiveRecord::Base | ||||||
|   serialize :details, Hash |   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 | class BroadcastMessage < ActiveRecord::Base | ||||||
|   include Sortable |   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 | module Ci | ||||||
|   class Build < CommitStatus |   class Build < CommitStatus | ||||||
|     belongs_to :runner, class_name: 'Ci::Runner' |     belongs_to :runner, class_name: 'Ci::Runner' | ||||||
|  | @ -132,8 +95,12 @@ module Ci | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     def trace_html |     def trace_html | ||||||
|       html = Ci::Ansi2html::convert(trace) if trace.present? |       trace_with_state[:html] || '' | ||||||
|       html || '' |     end | ||||||
|  | 
 | ||||||
|  |     def trace_with_state(state = nil) | ||||||
|  |       trace_with_state = Ci::Ansi2html::convert(trace, state) if trace.present? | ||||||
|  |       trace_with_state || {} | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     def timeout |     def timeout | ||||||
|  | @ -238,7 +205,7 @@ module Ci | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     def recreate_trace_dir |     def recreate_trace_dir | ||||||
|       unless Dir.exists?(dir_to_trace) |       unless Dir.exist?(dir_to_trace) | ||||||
|         FileUtils.mkdir_p(dir_to_trace) |         FileUtils.mkdir_p(dir_to_trace) | ||||||
|       end |       end | ||||||
|     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 | module Ci | ||||||
|   class Commit < ActiveRecord::Base |   class Commit < ActiveRecord::Base | ||||||
|     extend Ci::Model |     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 | module Ci | ||||||
|   class Runner < ActiveRecord::Base |   class Runner < ActiveRecord::Base | ||||||
|     extend Ci::Model |     extend Ci::Model | ||||||
| 
 | 
 | ||||||
|     LAST_CONTACT_TIME = 5.minutes.ago |     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 :builds, class_name: 'Ci::Build' | ||||||
|     has_many :runner_projects, dependent: :destroy, class_name: 'Ci::RunnerProject' |     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 | module Ci | ||||||
|   class RunnerProject < ActiveRecord::Base |   class RunnerProject < ActiveRecord::Base | ||||||
|     extend Ci::Model |     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 | module Ci | ||||||
|   class Trigger < ActiveRecord::Base |   class Trigger < ActiveRecord::Base | ||||||
|     extend Ci::Model |     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 | module Ci | ||||||
|   class TriggerRequest < ActiveRecord::Base |   class TriggerRequest < ActiveRecord::Base | ||||||
|     extend Ci::Model |     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 | module Ci | ||||||
|   class Variable < ActiveRecord::Base |   class Variable < ActiveRecord::Base | ||||||
|     extend Ci::Model |     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 | class CommitStatus < ActiveRecord::Base | ||||||
|   include Statuseable |   include Statuseable | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -124,8 +124,8 @@ module Issuable | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     def with_label(title) |     def with_label(title) | ||||||
|       if title.is_a?(Array) && title.count > 1 |       if title.is_a?(Array) && title.size > 1 | ||||||
|         joins(:labels).where(labels: { title: title }).group('issues.id').having("count(distinct labels.title) = #{title.count}") |         joins(:labels).where(labels: { title: title }).group(arel_table[:id]).having("COUNT(DISTINCT labels.title) = #{title.size}") | ||||||
|       else |       else | ||||||
|         joins(:labels).where(labels: { title: title }) |         joins(:labels).where(labels: { title: title }) | ||||||
|       end |       end | ||||||
|  | @ -160,6 +160,10 @@ module Issuable | ||||||
|     notes.awards.where(note: "thumbsup").count |     notes.awards.where(note: "thumbsup").count | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|  |   def user_notes_count | ||||||
|  |     notes.user.count | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|   def subscribed_without_subscriptions?(user) |   def subscribed_without_subscriptions?(user) | ||||||
|     participants(user).include?(user) |     participants(user).include?(user) | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  | @ -43,8 +43,8 @@ module Mentionable | ||||||
|     self |     self | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def all_references(current_user = self.author, text = nil) |   def all_references(current_user = nil, text = nil) | ||||||
|     ext = Gitlab::ReferenceExtractor.new(self.project, current_user, self.author) |     ext = Gitlab::ReferenceExtractor.new(self.project, current_user || self.author, self.author) | ||||||
| 
 | 
 | ||||||
|     if text |     if text | ||||||
|       ext.analyze(text) |       ext.analyze(text) | ||||||
|  |  | ||||||
|  | @ -36,6 +36,12 @@ module Subscribable | ||||||
|       update(subscribed: !subscribed?(user)) |       update(subscribed: !subscribed?(user)) | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|  |   def subscribe(user) | ||||||
|  |     subscriptions. | ||||||
|  |       find_or_initialize_by(user_id: user.id). | ||||||
|  |       update(subscribed: true) | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|   def unsubscribe(user) |   def unsubscribe(user) | ||||||
|     subscriptions. |     subscriptions. | ||||||
|       find_or_initialize_by(user_id: user.id). |       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 | class DeployKey < Key | ||||||
|   has_many :deploy_keys_projects, dependent: :destroy |   has_many :deploy_keys_projects, dependent: :destroy | ||||||
|   has_many :projects, through: :deploy_keys_projects |   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 | class DeployKeysProject < ActiveRecord::Base | ||||||
|   belongs_to :project |   belongs_to :project | ||||||
|   belongs_to :deploy_key |   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 | class Email < ActiveRecord::Base | ||||||
|   include Sortable |   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 | class Event < ActiveRecord::Base | ||||||
|   include Sortable |   include Sortable | ||||||
|   default_scope { where.not(author_id: nil) } |   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 | class ForkedProjectLink < ActiveRecord::Base | ||||||
|   belongs_to :forked_to_project, class_name: Project |   belongs_to :forked_to_project, class_name: Project | ||||||
|   belongs_to :forked_from_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 | class GenericCommitStatus < CommitStatus | ||||||
|   before_validation :set_default_values |   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' | require 'carrierwave/orm/activerecord' | ||||||
| 
 | 
 | ||||||
| class Group < Namespace | 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 | class ProjectHook < WebHook | ||||||
|   belongs_to :project |   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 | class ServiceHook < WebHook | ||||||
|   belongs_to :service |   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 | class SystemHook < WebHook | ||||||
|   def async_execute(data, hook_name) |   def async_execute(data, hook_name) | ||||||
|     Sidekiq::Client.enqueue(SystemHookWorker, id, 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 | class WebHook < ActiveRecord::Base | ||||||
|   include Sortable |   include Sortable | ||||||
|   include HTTParty |   include HTTParty | ||||||
|  | @ -60,7 +38,7 @@ class WebHook < ActiveRecord::Base | ||||||
|                               basic_auth: auth) |                               basic_auth: auth) | ||||||
|     end |     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 |   rescue SocketError, OpenSSL::SSL::SSLError, Errno::ECONNRESET, Errno::ECONNREFUSED, Net::OpenTimeout => e | ||||||
|     logger.error("WebHook Error => #{e}") |     logger.error("WebHook Error => #{e}") | ||||||
|     [false, e.to_s] |     [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 | class Identity < ActiveRecord::Base | ||||||
|   include Sortable |   include Sortable | ||||||
|   include CaseSensitivity |   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' | require 'carrierwave/orm/activerecord' | ||||||
| 
 | 
 | ||||||
| class Issue < ActiveRecord::Base | 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' | require 'digest/md5' | ||||||
| 
 | 
 | ||||||
| class Key < ActiveRecord::Base | 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 | class Label < ActiveRecord::Base | ||||||
|   include Referable |   include Referable | ||||||
|   include Subscribable |   include Subscribable | ||||||
|  | @ -117,6 +103,10 @@ class Label < ActiveRecord::Base | ||||||
|     LabelsHelper::text_color_for_bg(self.color) |     LabelsHelper::text_color_for_bg(self.color) | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|  |   def title=(value) | ||||||
|  |     write_attribute(:title, Sanitize.clean(value.to_s)) if value.present? | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|   private |   private | ||||||
| 
 | 
 | ||||||
|   def label_format_reference(format = :id) |   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 | class LabelLink < ActiveRecord::Base | ||||||
|   belongs_to :target, polymorphic: true |   belongs_to :target, polymorphic: true | ||||||
|   belongs_to :label |   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 | class LfsObject < ActiveRecord::Base | ||||||
|   has_many :lfs_objects_projects, dependent: :destroy |   has_many :lfs_objects_projects, dependent: :destroy | ||||||
|   has_many :projects, through: :lfs_objects_projects |   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 | class LfsObjectsProject < ActiveRecord::Base | ||||||
|   belongs_to :project |   belongs_to :project | ||||||
|   belongs_to :lfs_object |   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 | class Member < ActiveRecord::Base | ||||||
|   include Sortable |   include Sortable | ||||||
|   include Gitlab::Access |   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 | class GroupMember < Member | ||||||
|   SOURCE_TYPE = 'Namespace' |   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 | class ProjectMember < Member | ||||||
|   SOURCE_TYPE = 'Project' |   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 | class MergeRequest < ActiveRecord::Base | ||||||
|   include InternalId |   include InternalId | ||||||
|   include Issuable |   include Issuable | ||||||
|  | @ -544,7 +514,7 @@ class MergeRequest < ActiveRecord::Base | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def ref_is_fetched? |   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 |   end | ||||||
| 
 | 
 | ||||||
|   def ensure_ref_fetched |   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 | class MergeRequestDiff < ActiveRecord::Base | ||||||
|   include Sortable |   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 | class Milestone < ActiveRecord::Base | ||||||
|   # Represents a "No Milestone" state used for filtering Issues and Merge |   # Represents a "No Milestone" state used for filtering Issues and Merge | ||||||
|   # Requests that have no milestone assigned. |   # Requests that have no milestone assigned. | ||||||
|  | @ -129,6 +114,10 @@ class Milestone < ActiveRecord::Base | ||||||
|     nil |     nil | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|  |   def title=(value) | ||||||
|  |     write_attribute(:title, Sanitize.clean(value.to_s)) if value.present? | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|   # Sorts the issues for the given IDs. |   # Sorts the issues for the given IDs. | ||||||
|   # |   # | ||||||
|   # This method runs a single SQL query using a CASE statement to update the |   # 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 | class Namespace < ActiveRecord::Base | ||||||
|   include Sortable |   include Sortable | ||||||
|   include Gitlab::ShellAdapter |   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' | require 'carrierwave/orm/activerecord' | ||||||
| 
 | 
 | ||||||
| class Note < ActiveRecord::Base | 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 | class NotificationSetting < ActiveRecord::Base | ||||||
|   enum level: { disabled: 0,  participating: 1,  watch: 2,  global: 3, mention: 4 } |   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 | class OauthAccessToken < ActiveRecord::Base | ||||||
|   belongs_to :resource_owner, class_name: 'User' |   belongs_to :resource_owner, class_name: 'User' | ||||||
|   belongs_to :application, class_name: 'Doorkeeper::Application' |   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 | class PersonalSnippet < Snippet | ||||||
| end | 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' | require 'carrierwave/orm/activerecord' | ||||||
| 
 | 
 | ||||||
| class Project < ActiveRecord::Base | 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 :merge_requests_enabled, gitlab_config_features.merge_requests | ||||||
|   default_value_for :builds_enabled, gitlab_config_features.builds |   default_value_for :builds_enabled, gitlab_config_features.builds | ||||||
|   default_value_for :wiki_enabled, gitlab_config_features.wiki |   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 :snippets_enabled, gitlab_config_features.snippets | ||||||
|   default_value_for(:shared_runners_enabled) { current_application_settings.shared_runners_enabled } |   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 |   # Check if current branch name is marked as protected in the system | ||||||
|   def protected_branch?(branch_name) |   def protected_branch?(branch_name) | ||||||
|     protected_branches.where(name: branch_name).any? |     protected_branch_names.include?(branch_name) | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def developers_can_push_to_protected_branch?(branch_name) |   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 | class ProjectGroupLink < ActiveRecord::Base | ||||||
|   GUEST     = 10 |   GUEST     = 10 | ||||||
|   REPORTER  = 20 |   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' | require 'carrierwave/orm/activerecord' | ||||||
| 
 | 
 | ||||||
| class ProjectImportData < ActiveRecord::Base | 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' | require 'asana' | ||||||
| 
 | 
 | ||||||
| class AsanaService < Service | 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 | class AssemblaService < Service | ||||||
|   include HTTParty |   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 | class BambooService < CiService | ||||||
|   include HTTParty |   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" | require "addressable/uri" | ||||||
| 
 | 
 | ||||||
| class BuildkiteService < CiService | 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 | class BuildsEmailService < Service | ||||||
|   prop_accessor :recipients |   prop_accessor :recipients | ||||||
|   boolean_accessor :add_pusher |   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 | class CampfireService < Service | ||||||
|   prop_accessor :token, :subdomain, :room |   prop_accessor :token, :subdomain, :room | ||||||
|   validates :token, presence: true, if: :activated? |   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 | # Base class for CI services | ||||||
| # List methods you need to implement to get your CI service | # List methods you need to implement to get your CI service | ||||||
| # working with GitLab Merge Requests | # 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 | class CustomIssueTrackerService < IssueTrackerService | ||||||
| 
 | 
 | ||||||
|   prop_accessor :title, :description, :project_url, :issues_url, :new_issue_url |   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 | class DroneCiService < CiService | ||||||
| 
 | 
 | ||||||
|   prop_accessor :drone_url, :token, :enable_ssl_verification |   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 | class EmailsOnPushService < Service | ||||||
|   prop_accessor :send_from_committer_email |   prop_accessor :send_from_committer_email | ||||||
|   prop_accessor :disable_diffs |   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