Merge branch 'master' into 'backstage/gb/rename-ci-cd-processing-sidekiq-queues'
# Conflicts: # db/schema.rb
This commit is contained in:
commit
a653c8ead4
|
|
@ -6,6 +6,7 @@
|
|||
},
|
||||
"extends": "airbnb-base",
|
||||
"globals": {
|
||||
"__webpack_public_path__": true,
|
||||
"_": false,
|
||||
"gl": false,
|
||||
"gon": false,
|
||||
|
|
|
|||
174
CHANGELOG.md
174
CHANGELOG.md
|
|
@ -2,6 +2,180 @@
|
|||
documentation](doc/development/changelog.md) for instructions on adding your own
|
||||
entry.
|
||||
|
||||
## 9.5.1 (2017-08-23)
|
||||
|
||||
- [FIXED] Fix merge request pipeline status when pipeline has errors. !13664
|
||||
- [FIXED] Commit rows would occasionally render with the wrong language.
|
||||
- [FIXED] Fix caching of future broadcast messages.
|
||||
- [FIXED] Only require Sidekiq throttling library when enabled, to reduce cache misses.
|
||||
- Raise Housekeeping timeout to 24 hours. !13719
|
||||
|
||||
## 9.5.0 (2017-08-22)
|
||||
|
||||
- [FIXED] Fix timeouts when creating projects in groups with many members. !13508
|
||||
- [FIXED] Improve API pagination headers when no record found. !13629 (Jordan Patterson)
|
||||
- [FIXED] Fix deleting GitLab Pages files when a project is removed. !13631
|
||||
- [FIXED] Fix commit list not loading the correct page when scrolling.
|
||||
- [OTHER] Cache the number of forks of a project. !13535
|
||||
- GPG signed commits integration. !9546 (Alexis Reigel)
|
||||
- Alert the user if a Wiki page changed while they were editing it in order to prevent overwriting changes. !9707 (Hiroyuki Sato)
|
||||
- Add custom linter for inline JavaScript to haml_lint. !9742 (winniehell)
|
||||
- Add /shrug and /tableflip commands. !10068 (Alex Ives)
|
||||
- Allow wiki pages to be renamed in the UI. !10069 (wendy0402)
|
||||
- Insert user name directly without encoding. !10085 (Nathan Neulinger <nneul@neulinger.org>)
|
||||
- Avoid plucking Todo ids in TodoService. !10845
|
||||
- Handle errors while a project is being deleted asynchronously. !11088
|
||||
- Decrease ABC threshold to 56.96. !11227 (Maxim Rydkin)
|
||||
- Remove Mattermost team when deleting a group. !11362
|
||||
- Block access to failing repository storage. !11449
|
||||
- Add coordinator url to admin area runner page. !11603
|
||||
- Allow testing any events for project hooks and system hooks. !11728 (Alexander Randa (@randaalex))
|
||||
- Disallow running the pipeline if ref is protected and user cannot merge the branch or create the tag. !11910
|
||||
- Remove project_key from the Jira configuration. !12050
|
||||
- Add CSRF token verification to API. !12154 (Vitaliy @blackst0ne Klachkov)
|
||||
- Fixes needed when GitLab sign-in is not enabled. !12491 (Robin Bobbitt)
|
||||
- Lazy load images for better Frontend performance. !12503
|
||||
- Replaces dashboard/event_filters.feature spinach with rspec. !12651 (Alexander Randa (@randaalex))
|
||||
- Toggle import description with import_sources_enabled. !12691 (Brianna Kicia)
|
||||
- Bump scss-lint to 0.54.0. !12733 (Takuya Noguchi)
|
||||
- Enable SpaceAfterComma in scss-lint. !12734 (Takuya Noguchi)
|
||||
- Remove CSS for nprogress removed. !12737 (Takuya Noguchi)
|
||||
- Enable UnnecessaryParentReference in scss-lint. !12738 (Takuya Noguchi)
|
||||
- Extract "@request.env[devise.mapping] = Devise.mappings[:user]" to a test helper. !12742 (Jacopo Beschi @jacopo-beschi)
|
||||
- Enable ImportPath in scss-lint. !12749 (Takuya Noguchi)
|
||||
- Enable PropertySpelling in scss-lint. !12752 (Takuya Noguchi)
|
||||
- Add API for protected branches to allow for wildcard matching and no access restrictions. !12756 (Eric Yu)
|
||||
- refactor initializations in dropzone_input.js. !12768 (Brandon Everett)
|
||||
- Improve CSS for global nav dropdown UI. !12772 (Takuya Noguchi)
|
||||
- Remove public/ci/favicon.ico. !12803 (Takuya Noguchi)
|
||||
- Enable DeclarationOrder in scss-lint. !12805 (Takuya Noguchi)
|
||||
- Increase width of dropdown menus automatically. !12809 (Thomas Wucher)
|
||||
- Enable BangFormat in scss-lint [ci skip]. !12815 (Takuya Noguchi)
|
||||
- Added /duplicate quick action to close a duplicate issue. !12845 (Ryan Scott)
|
||||
- Make all application-settings accessible through the API. !12851
|
||||
- Remove Inactive Personal Access Tokens list from Access Tokens page. !12866
|
||||
- Replaces dashboard/dashboard.feature spinach with rspec. !12876 (Alexander Randa (@randaalex))
|
||||
- Reduce memory usage of the GitHub importer. !12886
|
||||
- Bump fog-core to 1.44.3 and fog providers' plugins to latest. !12897 (Takuya Noguchi)
|
||||
- Use only CSS to truncate commit message in blame. !12900 (Takuya Noguchi)
|
||||
- Protect manual actions against protected tag too. !12908
|
||||
- Allow to configure automatic retry of a failed CI/CD job. !12909
|
||||
- Remove help message about prioritized labels for non-members. !12912 (Takuya Noguchi)
|
||||
- Add link to doc/api/ci/lint.md. !12914 (Takuya Noguchi)
|
||||
- Add RequestCache which makes caching with RequestStore easier. !12920
|
||||
- Free up some top level words, reject top level groups named like files in the public folder. !12932
|
||||
- Extend API for Group Secret Variable. !12936
|
||||
- Hide description about protected branches to non-member. !12945 (Takuya Noguchi)
|
||||
- Support custom directory in gitlab:backup:create task. !12984 (Markus Koller)
|
||||
- Raise guessed encoding confidence threshold to 50. !12990
|
||||
- Add author_id & assignee_id param to /issues API. !13004
|
||||
- Fix today day highlight in calendar. !13048
|
||||
- Prevent LDAP login callback from being called with a GET request. !13059
|
||||
- Add top-level merge_requests API endpoint. !13060
|
||||
- Handle maximum pages artifacts size correctly. !13072
|
||||
- Enable gitaly_post_upload_pack by default. !13078
|
||||
- Add Prometheus metrics exporter to Sidekiq. !13082
|
||||
- Fix improperly skipped backups of wikis. !13096
|
||||
- Projects can be created from templates. !13108
|
||||
- Fix the /projects/:id/repository/branches endpoint to handle dots in the branch name when the project full path contains a `/`. !13115
|
||||
- Fix project logos that are not centered vertically on list pages. !13124 (Florian Lemaitre)
|
||||
- Derive project path from import URL. !13131
|
||||
- Fix deletion of deploy keys linked to other projects. !13162
|
||||
- repository archive download url now ends with selected file extension. !13178 (haseebeqx)
|
||||
- Show auto-generated avatars for Groups without avatars. !13188
|
||||
- Allow any logged in users to read_users_list even if it's restricted. !13201
|
||||
- Unlock stuck merge request and set the proper state. !13207
|
||||
- Fix timezone inconsistencies in user contribution graph. !13208
|
||||
- Fix Issue board when using Ruby 2.4. !13220
|
||||
- Don't rename namespace called system when upgrading from 9.1.x to 9.5. !13228
|
||||
- Fix encoding error for WebHook logging. !13230 (Alexander Randa (@randaalex))
|
||||
- Uniquify reserved word usernames on OAuth user creation. !13244 (Robin Bobbitt)
|
||||
- Expose target_iid in Events API. !13247 (sue445)
|
||||
- Add star for action scope, in order to delete image from registry. !13248 (jean)
|
||||
- Make Delete Merged Branches handle wildcard protected branches correctly. !13251
|
||||
- Fix an order of operations for CI connection error message in merge request widget. !13252
|
||||
- Don't send rejection mails for all auto-generated mails. !13254
|
||||
- Expose noteable_iid in Note. !13265 (sue445)
|
||||
- Fix pipeline_schedules pages when active schedule has an abnormal state. !13286
|
||||
- Move some code from services to workers in order to improve performance. !13326
|
||||
- Fix destroy of case-insensitive conflicting redirects. !13357
|
||||
- Fix the /projects/:id/repository/tags endpoint to handle dots in the tag name when the project full path contains a `/`. !13368
|
||||
- Fix the /projects/:id/repository/commits endpoint to handle dots in the ref name when the project full path contains a `/`. !13370
|
||||
- Project pending delete no longer return 500 error in admins projects view. !13389
|
||||
- Use full path of user's avatar in webhooks. !13401 (Vitaliy @blackst0ne Klachkov)
|
||||
- Make GPGME temporary directory handling thread safe. !13481 (Alexis Reigel)
|
||||
- Add support for kube_namespace in Metrics queries. !16169
|
||||
- Fix bar chart does not display label at 0 hour. !35136 (Jason Dai)
|
||||
- Use project_ref_path to create the link to a branch to fix links that 404.
|
||||
- Declare related resources into V4 API entities.
|
||||
- Add Slack and JIRA services counts to Usage Data.
|
||||
- Prevent web hook and project service background jobs from going to the dead jobs queue.
|
||||
- Display specific error message when JIRA test fails.
|
||||
- clean up merge request widget UI.
|
||||
- Associate Issues tab only with internal issues tracker.
|
||||
- Remove events column from notification settings table.
|
||||
- Clarifies and rearranges the input variables on the kubernetes integration page and adjusts the docs slightly to meet the same order.
|
||||
- Respect blockquote line breaks in markdown.
|
||||
- Update confidential issue UI - add confidential visibility and settings to sidebar.
|
||||
- Add icons to contextual sidebars.
|
||||
- Make contextual sidebar collapsible.
|
||||
- Update Pipeline's badge count in Merge Request and Commits view to match real-time content.
|
||||
- Added link to the MR widget that directs to the monitoring dashboard.
|
||||
- Use jQuery to control scroll behavior in job log for cross browser consistency.
|
||||
- move edit comment button outside of dropdown.
|
||||
- Updates vue resource and code according to breaking changes.
|
||||
- Add GitHub imported projects count to usage data.
|
||||
- Rename about to overview for group and project page.
|
||||
- Prevent disabled pagination button to be clicked.
|
||||
- Remove coffee-rails gem. (Takuya Noguchi)
|
||||
- Remove net-ssh gem. (Takuya Noguchi)
|
||||
- Bump rubocop to 0.49.1 and rubocop-rspec to 1.15.1. (Takuya Noguchi)
|
||||
- improve file upload/replace experience.
|
||||
- allow closing Cycle Analytics intro box in firefox.
|
||||
- Fix label creation from new list for subgroup projects.
|
||||
- fix transient js error in rspec tests.
|
||||
- fix jump to next discussion button.
|
||||
- Fix translations for Star/Unstar in JS file.
|
||||
- Improve mobile sidebar.
|
||||
- Rename Pipelines tab to CI / CD in new navigation.
|
||||
- Fix display of new diff comments after changing b between diff views.
|
||||
- Store & use ConvDev percentages returned by the Version app.
|
||||
- Fixes new issue button for failed job returning 404.
|
||||
- Align OR separator to center in new project page.
|
||||
- Add filtered search to group issue dashboard.
|
||||
- Cache Appearance instances in Redis.
|
||||
- Fixed breadcrumbs title aggressively collapsing.
|
||||
- Better caching and indexing of broadcast messages.
|
||||
- Moved diff changed files into a dropdown.
|
||||
- Improve performance of large (initial) push into default branch.
|
||||
- Improve performance of checking for projects on the projects dashboard.
|
||||
- Eager load project creators for project dashboards.
|
||||
- Modify if condition to be more readable.
|
||||
- Fix links to group milestones from issue and merge request sidebar.
|
||||
- Remove hidden symlinks from project import files.
|
||||
- Fixed sign-in restrictions buttons not toggling active state.
|
||||
- Fix replying to commit comments on merge requests created from forks.
|
||||
- Support Markdown references, autocomplete, and quick actions for group milestones.
|
||||
- Cache recent projects for group-level new resource creation.
|
||||
- Fix API responses when dealing with txt files.
|
||||
- Fix project milestones import when projects belongs to a group.
|
||||
- Fix Mattermost integration.
|
||||
- Memoize the number of personal projects a user has to reduce COUNT queries.
|
||||
- Merge issuable "reopened" state into "opened".
|
||||
- Migrate events into a new format to reduce the storage necessary and improve performance.
|
||||
- MR branch link now links to tree instead of commits.
|
||||
- Use Prev/Next pagination for exploring projects.
|
||||
- Pass before_script and script as-is preserving arrays.
|
||||
- Change project FK migration to skip existing FKs.
|
||||
- Remove redundant query when retrieving the most recent push of a user.
|
||||
- Re-organise "issues" indexes for faster ordering.
|
||||
- Disallow Git URLs that include a username or hostname beginning with a non-alphanumeric character.
|
||||
- Fix search box losing focus when typing.
|
||||
- Add structured logging for Rails processes.
|
||||
- Skip oAuth authorization for trusted applications.
|
||||
- Use a specialized class for querying events to improve performance.
|
||||
- Update build badges to be pipeline badges and display passing instead of success.
|
||||
|
||||
## 9.4.5 (2017-08-14)
|
||||
|
||||
- Fix deletion of deploy keys linked to other projects. !13162
|
||||
|
|
|
|||
7
Gemfile
7
Gemfile
|
|
@ -207,9 +207,6 @@ gem 'kubeclient', '~> 2.2.0'
|
|||
# d3
|
||||
gem 'd3_rails', '~> 3.5.0'
|
||||
|
||||
# underscore-rails
|
||||
gem 'underscore-rails', '~> 1.8.0'
|
||||
|
||||
# Sanitize user input
|
||||
gem 'sanitize', '~> 2.0'
|
||||
gem 'babosa', '~> 1.0.2'
|
||||
|
|
@ -396,12 +393,12 @@ gem 'net-ssh', '~> 4.1.0'
|
|||
# Required for ED25519 SSH host key support
|
||||
group :ed25519 do
|
||||
gem 'rbnacl-libsodium'
|
||||
gem 'rbnacl', '~> 3.2'
|
||||
gem 'rbnacl', '~> 4.0'
|
||||
gem 'bcrypt_pbkdf', '~> 1.0'
|
||||
end
|
||||
|
||||
# Gitaly GRPC client
|
||||
gem 'gitaly', '~> 0.29.0'
|
||||
gem 'gitaly-proto', '~> 0.31.0', require: 'gitaly'
|
||||
|
||||
gem 'toml-rb', '~> 0.3.15', require: false
|
||||
|
||||
|
|
|
|||
12
Gemfile.lock
12
Gemfile.lock
|
|
@ -203,7 +203,7 @@ GEM
|
|||
multi_json
|
||||
fast_gettext (1.4.0)
|
||||
ffaker (2.4.0)
|
||||
ffi (1.9.10)
|
||||
ffi (1.9.18)
|
||||
flay (2.8.1)
|
||||
erubis (~> 2.7.0)
|
||||
path_expander (~> 1.0)
|
||||
|
|
@ -275,7 +275,7 @@ GEM
|
|||
po_to_json (>= 1.0.0)
|
||||
rails (>= 3.2.0)
|
||||
gherkin-ruby (0.3.2)
|
||||
gitaly (0.29.0)
|
||||
gitaly-proto (0.31.0)
|
||||
google-protobuf (~> 3.1)
|
||||
grpc (~> 1.0)
|
||||
github-linguist (4.7.6)
|
||||
|
|
@ -682,7 +682,7 @@ GEM
|
|||
rake (12.0.0)
|
||||
rblineprof (0.3.6)
|
||||
debugger-ruby_core_source (~> 1.3)
|
||||
rbnacl (3.4.0)
|
||||
rbnacl (4.0.2)
|
||||
ffi
|
||||
rbnacl-libsodium (1.0.11)
|
||||
rbnacl (>= 3.0.1)
|
||||
|
|
@ -899,7 +899,6 @@ GEM
|
|||
uglifier (2.7.2)
|
||||
execjs (>= 0.3.0)
|
||||
json (>= 1.8.0)
|
||||
underscore-rails (1.8.3)
|
||||
unf (0.1.4)
|
||||
unf_ext
|
||||
unf_ext (0.0.7.2)
|
||||
|
|
@ -1019,7 +1018,7 @@ DEPENDENCIES
|
|||
gettext (~> 3.2.2)
|
||||
gettext_i18n_rails (~> 1.8.0)
|
||||
gettext_i18n_rails_js (~> 1.2.0)
|
||||
gitaly (~> 0.29.0)
|
||||
gitaly-proto (~> 0.31.0)
|
||||
github-linguist (~> 4.7.0)
|
||||
gitlab-flowdock-git-hook (~> 1.0.1)
|
||||
gitlab-markup (~> 1.5.1)
|
||||
|
|
@ -1107,7 +1106,7 @@ DEPENDENCIES
|
|||
rainbow (~> 2.2)
|
||||
raindrops (~> 0.18)
|
||||
rblineprof (~> 0.3.6)
|
||||
rbnacl (~> 3.2)
|
||||
rbnacl (~> 4.0)
|
||||
rbnacl-libsodium
|
||||
rdoc (~> 4.2)
|
||||
re2 (~> 1.1.1)
|
||||
|
|
@ -1163,7 +1162,6 @@ DEPENDENCIES
|
|||
truncato (~> 0.7.8)
|
||||
u2f (~> 0.2.1)
|
||||
uglifier (~> 2.7.2)
|
||||
underscore-rails (~> 1.8.0)
|
||||
unf (~> 0.1.4)
|
||||
unicorn (~> 5.1.0)
|
||||
unicorn-worker-killer (~> 0.4.4)
|
||||
|
|
|
|||
|
|
@ -96,18 +96,17 @@ const Api = {
|
|||
.done(projects => callback(projects));
|
||||
},
|
||||
|
||||
commitMultiple(id, data, callback) {
|
||||
commitMultiple(id, data) {
|
||||
// see https://docs.gitlab.com/ce/api/commits.html#create-a-commit-with-multiple-files-and-actions
|
||||
const url = Api.buildUrl(Api.commitPath)
|
||||
.replace(':id', id);
|
||||
return $.ajax({
|
||||
return this.wrapAjaxCall({
|
||||
url,
|
||||
type: 'POST',
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
data: JSON.stringify(data),
|
||||
dataType: 'json',
|
||||
})
|
||||
.done(commitData => callback(commitData))
|
||||
.fail(message => callback(message.responseJSON));
|
||||
});
|
||||
},
|
||||
|
||||
// Return text for a specific license
|
||||
|
|
|
|||
|
|
@ -42,7 +42,9 @@ export default {
|
|||
actions,
|
||||
};
|
||||
Store.submitCommitsLoading = true;
|
||||
Service.commitFiles(payload, this.resetCommitState);
|
||||
Service.commitFiles(payload)
|
||||
.then(this.resetCommitState)
|
||||
.catch(() => Flash('An error occured while committing your changes'));
|
||||
},
|
||||
|
||||
resetCommitState() {
|
||||
|
|
|
|||
|
|
@ -1,13 +1,11 @@
|
|||
/* eslint-disable no-underscore-dangle, camelcase */
|
||||
/* global __webpack_public_path__ */
|
||||
|
||||
import monacoContext from 'monaco-editor/dev/vs/loader';
|
||||
|
||||
monacoContext.require.config({
|
||||
paths: {
|
||||
vs: `${__webpack_public_path__}monaco-editor/vs`,
|
||||
vs: `${__webpack_public_path__}monaco-editor/vs`, // eslint-disable-line camelcase
|
||||
},
|
||||
});
|
||||
|
||||
// eslint-disable-next-line no-underscore-dangle
|
||||
window.__monaco_context__ = monacoContext;
|
||||
export default monacoContext.require;
|
||||
|
|
|
|||
|
|
@ -65,15 +65,17 @@ const RepoService = {
|
|||
return urlArray.join('/');
|
||||
},
|
||||
|
||||
commitFiles(payload, cb) {
|
||||
Api.commitMultiple(Store.projectId, payload, (data) => {
|
||||
if (data.short_id && data.stats) {
|
||||
Flash(`Your changes have been committed. Commit ${data.short_id} with ${data.stats.additions} additions, ${data.stats.deletions} deletions.`, 'notice');
|
||||
} else {
|
||||
Flash(data.message);
|
||||
}
|
||||
cb();
|
||||
});
|
||||
commitFiles(payload) {
|
||||
return Api.commitMultiple(Store.projectId, payload)
|
||||
.then(this.commitFlash);
|
||||
},
|
||||
|
||||
commitFlash(data) {
|
||||
if (data.short_id && data.stats) {
|
||||
window.Flash(`Your changes have been committed. Commit ${data.short_id} with ${data.stats.additions} additions, ${data.stats.deletions} deletions.`, 'notice');
|
||||
} else {
|
||||
window.Flash(data.message);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -588,9 +588,10 @@ function UsersSelect(currentUser, els) {
|
|||
if (showEmailUser && data.results.length === 0 && query.term.match(/^[^@]+@[^@]+$/)) {
|
||||
var trimmed = query.term.trim();
|
||||
emailUser = {
|
||||
name: "Invite \"" + query.term + "\"",
|
||||
name: "Invite \"" + query.term + "\" by email",
|
||||
username: trimmed,
|
||||
id: trimmed
|
||||
id: trimmed,
|
||||
invite: true
|
||||
};
|
||||
data.results.unshift(emailUser);
|
||||
}
|
||||
|
|
@ -642,7 +643,7 @@ UsersSelect.prototype.formatResult = function(user) {
|
|||
} else {
|
||||
avatar = gon.default_avatar_url;
|
||||
}
|
||||
return "<div class='user-result " + (!user.username ? 'no-username' : void 0) + "'> <div class='user-image'><img class='avatar avatar-inline s32' src='" + avatar + "'></div> <div class='user-name dropdown-menu-user-full-name'>" + user.name + "</div> <div class='user-username dropdown-menu-user-username'>" + ("@" + user.username || "") + "</div> </div>";
|
||||
return "<div class='user-result " + (!user.username ? 'no-username' : void 0) + "'> <div class='user-image'><img class='avatar avatar-inline s32' src='" + avatar + "'></div> <div class='user-name dropdown-menu-user-full-name'>" + user.name + "</div> <div class='user-username dropdown-menu-user-username'>" + (!user.invite ? "@" + _.escape(user.username) : "") + "</div> </div>";
|
||||
};
|
||||
|
||||
UsersSelect.prototype.formatSelection = function(user) {
|
||||
|
|
|
|||
|
|
@ -5,5 +5,5 @@
|
|||
*/
|
||||
|
||||
if (gon && gon.webpack_public_path) {
|
||||
__webpack_public_path__ = gon.webpack_public_path; // eslint-disable-line
|
||||
__webpack_public_path__ = gon.webpack_public_path; // eslint-disable-line camelcase
|
||||
}
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@
|
|||
&.s60 { font-size: 32px; line-height: 58px; }
|
||||
&.s70 { font-size: 34px; line-height: 70px; }
|
||||
&.s90 { font-size: 36px; line-height: 88px; }
|
||||
&.s110 { font-size: 40px; line-height: 108px; font-weight: 300; }
|
||||
&.s110 { font-size: 40px; line-height: 108px; font-weight: $gl-font-weight-normal; }
|
||||
&.s140 { font-size: 72px; line-height: 138px; }
|
||||
&.s160 { font-size: 96px; line-height: 158px; }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
.badge {
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
background-color: $badge-bg;
|
||||
color: $badge-color;
|
||||
vertical-align: baseline;
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
text-align: center;
|
||||
padding: 20px;
|
||||
color: $gl-text-color;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
font-size: 14px;
|
||||
line-height: 36px;
|
||||
|
||||
|
|
@ -213,7 +213,7 @@
|
|||
|
||||
h1 {
|
||||
display: inline;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
font-size: 24px;
|
||||
color: $gl-text-color;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
@mixin btn-default {
|
||||
border-radius: 3px;
|
||||
font-size: $gl-font-size;
|
||||
font-weight: 400;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
padding: $gl-vert-padding $gl-btn-padding;
|
||||
|
||||
&:focus,
|
||||
|
|
|
|||
|
|
@ -52,13 +52,13 @@
|
|||
.pika-label {
|
||||
color: $gl-text-color-secondary;
|
||||
font-size: 14px;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
}
|
||||
|
||||
th {
|
||||
padding: 2px 0;
|
||||
color: $note-disabled-comment-color;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
text-transform: lowercase;
|
||||
border-top: 1px solid $calendar-border-color;
|
||||
}
|
||||
|
|
@ -88,7 +88,7 @@
|
|||
.is-today {
|
||||
.pika-day {
|
||||
color: inherit;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,12 +36,12 @@
|
|||
color: $common-gray;
|
||||
font-size: 14px;
|
||||
margin-bottom: 12px;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
line-height: 24px;
|
||||
}
|
||||
|
||||
.bold {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
.tab-content {
|
||||
|
|
@ -89,7 +89,7 @@ hr {
|
|||
}
|
||||
}
|
||||
|
||||
.item-title { font-weight: 600; }
|
||||
.item-title { font-weight: $gl-font-weight-bold; }
|
||||
|
||||
/** FLASH message **/
|
||||
.author_link,
|
||||
|
|
@ -118,18 +118,18 @@ table a code {
|
|||
span.update-author {
|
||||
display: block;
|
||||
color: $update-author-color;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
font-style: italic;
|
||||
|
||||
strong {
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
font-style: normal;
|
||||
}
|
||||
}
|
||||
|
||||
.user-mention {
|
||||
color: $user-mention-color;
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
.field_with_errors {
|
||||
|
|
@ -222,7 +222,7 @@ li.note {
|
|||
text-align: center;
|
||||
background: $error-bg;
|
||||
color: $white-light;
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
|
||||
a {
|
||||
color: $white-light;
|
||||
|
|
@ -339,7 +339,7 @@ table {
|
|||
.header-with-avatar {
|
||||
h3 {
|
||||
margin: 0;
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
.username {
|
||||
|
|
|
|||
|
|
@ -195,7 +195,7 @@
|
|||
margin-top: 2px;
|
||||
margin-bottom: 0;
|
||||
font-size: 14px;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
padding: 8px 0;
|
||||
background-color: $white-light;
|
||||
border: 1px solid $dropdown-border-color;
|
||||
|
|
@ -268,7 +268,7 @@
|
|||
}
|
||||
|
||||
.dropdown-bold-header {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
line-height: 22px;
|
||||
padding: 0 16px;
|
||||
}
|
||||
|
|
@ -432,7 +432,7 @@
|
|||
|
||||
.dropdown-menu-user-full-name {
|
||||
display: block;
|
||||
font-weight: 500;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
line-height: 16px;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
|
|
@ -468,7 +468,7 @@
|
|||
|
||||
&.is-indeterminate,
|
||||
&.is-active {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
color: $gl-text-color;
|
||||
|
||||
&::before {
|
||||
|
|
@ -502,7 +502,7 @@
|
|||
position: relative;
|
||||
padding: 2px 25px 10px;
|
||||
margin: 0 10px 10px;
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
line-height: 1;
|
||||
text-align: center;
|
||||
text-overflow: ellipsis;
|
||||
|
|
@ -685,7 +685,7 @@
|
|||
.dropdown-menu-inner-title {
|
||||
display: block;
|
||||
color: $gl-text-color;
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
.dropdown-menu-inner-content {
|
||||
|
|
|
|||
|
|
@ -371,7 +371,7 @@
|
|||
}
|
||||
|
||||
> .value {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -452,7 +452,7 @@
|
|||
|
||||
.dropdown-light-content {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
}
|
||||
|
||||
.dropdown-user {
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
a.flash-action {
|
||||
margin-left: 5px;
|
||||
text-decoration: none;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
border-bottom: 1px solid;
|
||||
|
||||
&:hover {
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ label {
|
|||
}
|
||||
|
||||
&.label-light {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -73,7 +73,7 @@ label {
|
|||
margin-right: 0;
|
||||
|
||||
.control-label {
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
padding-top: 4px;
|
||||
}
|
||||
|
||||
|
|
@ -157,7 +157,7 @@ label {
|
|||
|
||||
.form-group .control-label,
|
||||
.form-group .control-label-full-width {
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
}
|
||||
|
||||
.form-control::-webkit-input-placeholder {
|
||||
|
|
|
|||
|
|
@ -160,7 +160,7 @@ header {
|
|||
|
||||
li {
|
||||
&.active a {
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -250,7 +250,7 @@ header {
|
|||
font-size: 18px;
|
||||
line-height: 22px;
|
||||
display: inline-block;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
color: $gl-text-color;
|
||||
vertical-align: top;
|
||||
white-space: nowrap;
|
||||
|
|
@ -326,7 +326,7 @@ header {
|
|||
.badge {
|
||||
position: inherit;
|
||||
top: -8px;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
margin-left: -11px;
|
||||
font-size: 11px;
|
||||
color: $white-light;
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ ul.content-list {
|
|||
}
|
||||
|
||||
.title {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
a {
|
||||
|
|
@ -212,7 +212,7 @@ ul.content-list {
|
|||
}
|
||||
|
||||
.row-title {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
.row-second-line {
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@
|
|||
background: $gray-light;
|
||||
|
||||
a {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
}
|
||||
|
||||
.text-danger {
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@
|
|||
&.active a {
|
||||
border-bottom: 2px solid $link-underline-blue;
|
||||
color: $black;
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
|
||||
.badge {
|
||||
color: $black;
|
||||
|
|
@ -352,7 +352,7 @@
|
|||
z-index: 300;
|
||||
|
||||
li.active {
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@
|
|||
.commit-committer-link,
|
||||
.commit-author-link {
|
||||
color: $gl-text-color;
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
.commit-info {
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@
|
|||
}
|
||||
|
||||
.select2-results li.select2-result-with-children > .select2-result-label {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
color: $gl-text-color;
|
||||
}
|
||||
|
||||
|
|
@ -227,7 +227,7 @@
|
|||
}
|
||||
|
||||
.group-name {
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
.group-path {
|
||||
|
|
@ -252,12 +252,12 @@
|
|||
.namespace-result {
|
||||
.namespace-kind {
|
||||
color: $namespace-kind-color;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
}
|
||||
|
||||
.namespace-path {
|
||||
margin-left: 10px;
|
||||
font-weight: bolder;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -283,7 +283,7 @@
|
|||
padding: 0 1px;
|
||||
|
||||
.select2-match {
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
|
||||
.snippet-title {
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
.snippet-edited-ago {
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ table {
|
|||
|
||||
th {
|
||||
background-color: $gray-light;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
border-bottom: none;
|
||||
|
||||
&.wide {
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ summary {
|
|||
padding: 4px 5px;
|
||||
font-size: 12px;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
display: inline-block;
|
||||
|
||||
&.label-gray {
|
||||
|
|
@ -165,7 +165,7 @@ summary {
|
|||
.panel-heading {
|
||||
padding: 6px 15px;
|
||||
font-size: 13px;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
|
||||
a {
|
||||
color: $panel-heading-link-color;
|
||||
|
|
|
|||
|
|
@ -13,6 +13,9 @@
|
|||
img {
|
||||
/*max-width: 100%;*/
|
||||
margin: 0 0 8px;
|
||||
}
|
||||
|
||||
img.lazy {
|
||||
min-width: 200px;
|
||||
min-height: 100px;
|
||||
background-color: $gray-lightest;
|
||||
|
|
@ -71,7 +74,7 @@
|
|||
|
||||
h1 {
|
||||
font-size: 1.75em;
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
margin: 24px 0 16px;
|
||||
padding-bottom: 0.3em;
|
||||
border-bottom: 1px solid $white-dark;
|
||||
|
|
@ -84,7 +87,7 @@
|
|||
|
||||
h2 {
|
||||
font-size: 1.5em;
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
margin: 24px 0 16px;
|
||||
padding-bottom: 0.3em;
|
||||
border-bottom: 1px solid $white-dark;
|
||||
|
|
@ -277,7 +280,7 @@ body {
|
|||
margin-top: $gl-padding;
|
||||
line-height: 1.3;
|
||||
font-size: 1.25em;
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
|
|
@ -288,7 +291,7 @@ body {
|
|||
margin-top: 0;
|
||||
line-height: 1.3;
|
||||
font-size: 1.25em;
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
margin: 12px 7px;
|
||||
}
|
||||
|
||||
|
|
@ -299,11 +302,11 @@ h4,
|
|||
h5,
|
||||
h6 {
|
||||
color: $gl-text-color;
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
.light-header {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
/** CODE **/
|
||||
|
|
|
|||
|
|
@ -111,6 +111,8 @@ $well-light-text-color: #5b6169;
|
|||
* Text
|
||||
*/
|
||||
$gl-font-size: 14px;
|
||||
$gl-font-weight-normal: 400;
|
||||
$gl-font-weight-bold: 600;
|
||||
$gl-text-color: #2e2e2e;
|
||||
$gl-text-color-secondary: #707070;
|
||||
$gl-text-color-tertiary: #949494;
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@
|
|||
|
||||
.well-centered {
|
||||
h1 {
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
text-align: center;
|
||||
font-size: 48px;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -204,11 +204,11 @@ $dark-il: #de935f;
|
|||
.cs { color: $dark-cs; } /* Comment.Special */
|
||||
.gd { color: $dark-gd; } /* Generic.Deleted */
|
||||
.ge { font-style: italic; } /* Generic.Emph */
|
||||
.gh { color: $dark-gh; font-weight: bold; } /* Generic.Heading */
|
||||
.gh { color: $dark-gh; font-weight: $gl-font-weight-bold; } /* Generic.Heading */
|
||||
.gi { color: $dark-gi; } /* Generic.Inserted */
|
||||
.gp { color: $dark-gp; font-weight: bold; } /* Generic.Prompt */
|
||||
.gs { font-weight: bold; } /* Generic.Strong */
|
||||
.gu { color: $dark-gu; font-weight: bold; } /* Generic.Subheading */
|
||||
.gp { color: $dark-gp; font-weight: $gl-font-weight-bold; } /* Generic.Prompt */
|
||||
.gs { font-weight: $gl-font-weight-bold; } /* Generic.Strong */
|
||||
.gu { color: $dark-gu; font-weight: $gl-font-weight-bold; } /* Generic.Subheading */
|
||||
.kc { color: $dark-kc; } /* Keyword.Constant */
|
||||
.kd { color: $dark-kd; } /* Keyword.Declaration */
|
||||
.kn { color: $dark-kn; } /* Keyword.Namespace */
|
||||
|
|
|
|||
|
|
@ -203,7 +203,7 @@ $monokai-gi: #a6e22e;
|
|||
.c1 { color: $monokai-c1; } /* Comment.Single */
|
||||
.cs { color: $monokai-cs; } /* Comment.Special */
|
||||
.ge { font-style: italic; } /* Generic.Emph */
|
||||
.gs { font-weight: bold; } /* Generic.Strong */
|
||||
.gs { font-weight: $gl-font-weight-bold; } /* Generic.Strong */
|
||||
.kc { color: $monokai-kc; } /* Keyword.Constant */
|
||||
.kd { color: $monokai-kd; } /* Keyword.Declaration */
|
||||
.kn { color: $monokai-kn; } /* Keyword.Namespace */
|
||||
|
|
|
|||
|
|
@ -231,7 +231,7 @@ $solarized-dark-il: #2aa198;
|
|||
.gi { color: $solarized-dark-gi; } /* Generic.Inserted */
|
||||
.go { color: $solarized-dark-go; } /* Generic.Output */
|
||||
.gp { color: $solarized-dark-gp; } /* Generic.Prompt */
|
||||
.gs { color: $solarized-dark-gs; font-weight: bold; } /* Generic.Strong */
|
||||
.gs { color: $solarized-dark-gs; font-weight: $gl-font-weight-bold; } /* Generic.Strong */
|
||||
.gu { color: $solarized-dark-gu; } /* Generic.Subheading */
|
||||
.gt { color: $solarized-dark-gt; } /* Generic.Traceback */
|
||||
.kc { color: $solarized-dark-kc; } /* Keyword.Constant */
|
||||
|
|
|
|||
|
|
@ -239,7 +239,7 @@ $solarized-light-il: #2aa198;
|
|||
.gi { color: $solarized-light-gi; } /* Generic.Inserted */
|
||||
.go { color: $solarized-light-go; } /* Generic.Output */
|
||||
.gp { color: $solarized-light-gp; } /* Generic.Prompt */
|
||||
.gs { color: $solarized-light-gs; font-weight: bold; } /* Generic.Strong */
|
||||
.gs { color: $solarized-light-gs; font-weight: $gl-font-weight-bold; } /* Generic.Strong */
|
||||
.gu { color: $solarized-light-gu; } /* Generic.Subheading */
|
||||
.gt { color: $solarized-light-gt; } /* Generic.Traceback */
|
||||
.kc { color: $solarized-light-kc; } /* Keyword.Constant */
|
||||
|
|
|
|||
|
|
@ -211,12 +211,12 @@ $white-gc-bg: #eaf2f5;
|
|||
.hll { background-color: $white-hll-bg; }
|
||||
.c { color: $white-c; font-style: italic; }
|
||||
.err { color: $white-err; background-color: $white-err-bg; }
|
||||
.k { font-weight: bold; }
|
||||
.o { font-weight: bold; }
|
||||
.k { font-weight: $gl-font-weight-bold; }
|
||||
.o { font-weight: $gl-font-weight-bold; }
|
||||
.cm { color: $white-cm; font-style: italic; }
|
||||
.cp { color: $white-cp; font-weight: bold; }
|
||||
.cp { color: $white-cp; font-weight: $gl-font-weight-bold; }
|
||||
.c1 { color: $white-c1; font-style: italic; }
|
||||
.cs { color: $white-cs; font-weight: bold; font-style: italic; }
|
||||
.cs { color: $white-cs; font-weight: $gl-font-weight-bold; font-style: italic; }
|
||||
.gd { color: $white-gd; background-color: $white-gd-bg; }
|
||||
.gd .x { color: $white-gd-x; background-color: $white-gd-x-bg; }
|
||||
.ge { font-style: italic; }
|
||||
|
|
@ -226,29 +226,29 @@ $white-gc-bg: #eaf2f5;
|
|||
.gi .x { color: $white-gi-x; background-color: $white-gi-x-bg; }
|
||||
.go { color: $white-go; }
|
||||
.gp { color: $white-gp; }
|
||||
.gs { font-weight: bold; }
|
||||
.gu { color: $white-gu; font-weight: bold; }
|
||||
.gs { font-weight: $gl-font-weight-bold; }
|
||||
.gu { color: $white-gu; font-weight: $gl-font-weight-bold; }
|
||||
.gt { color: $white-gt; }
|
||||
.kc { font-weight: bold; }
|
||||
.kd { font-weight: bold; }
|
||||
.kn { font-weight: bold; }
|
||||
.kp { font-weight: bold; }
|
||||
.kr { font-weight: bold; }
|
||||
.kt { color: $white-kt; font-weight: bold; }
|
||||
.kc { font-weight: $gl-font-weight-bold; }
|
||||
.kd { font-weight: $gl-font-weight-bold; }
|
||||
.kn { font-weight: $gl-font-weight-bold; }
|
||||
.kp { font-weight: $gl-font-weight-bold; }
|
||||
.kr { font-weight: $gl-font-weight-bold; }
|
||||
.kt { color: $white-kt; font-weight: $gl-font-weight-bold; }
|
||||
.m { color: $white-m; }
|
||||
.s { color: $white-s; }
|
||||
.n { color: $white-n; }
|
||||
.na { color: $white-na; }
|
||||
.nb { color: $white-nb; }
|
||||
.nc { color: $white-nc; font-weight: bold; }
|
||||
.nc { color: $white-nc; font-weight: $gl-font-weight-bold; }
|
||||
.no { color: $white-no; }
|
||||
.ni { color: $white-ni; }
|
||||
.ne { color: $white-ne; font-weight: bold; }
|
||||
.nf { color: $white-nf; font-weight: bold; }
|
||||
.ne { color: $white-ne; font-weight: $gl-font-weight-bold; }
|
||||
.nf { color: $white-nf; font-weight: $gl-font-weight-bold; }
|
||||
.nn { color: $white-nn; }
|
||||
.nt { color: $white-nt; }
|
||||
.nv { color: $white-nv; }
|
||||
.ow { font-weight: bold; }
|
||||
.ow { font-weight: $gl-font-weight-bold; }
|
||||
.w { color: $white-w; }
|
||||
.mf { color: $white-mf; }
|
||||
.mh { color: $white-mh; }
|
||||
|
|
|
|||
|
|
@ -152,12 +152,12 @@ span.highlight_word {
|
|||
.hll { background-color: $highlighted-hll-bg; }
|
||||
.c { color: $highlighted-c; font-style: italic; }
|
||||
.err { color: $highlighted-err; background-color: $highlighted-err-bg; }
|
||||
.k { font-weight: bold; }
|
||||
.o { font-weight: bold; }
|
||||
.k { font-weight: $gl-font-weight-bold; }
|
||||
.o { font-weight: $gl-font-weight-bold; }
|
||||
.cm { color: $highlighted-cm; font-style: italic; }
|
||||
.cp { color: $highlighted-cp; font-weight: bold; }
|
||||
.cp { color: $highlighted-cp; font-weight: $gl-font-weight-bold; }
|
||||
.c1 { color: $highlighted-c1; font-style: italic; }
|
||||
.cs { color: $highlighted-cs; font-weight: bold; font-style: italic; }
|
||||
.cs { color: $highlighted-cs; font-weight: $gl-font-weight-bold; font-style: italic; }
|
||||
.gd { color: $highlighted-gd; background-color: $highlighted-gd-bg; }
|
||||
.gd .x { color: $highlighted-gd; background-color: $highlighted-gd-x-bg; }
|
||||
.ge { font-style: italic; }
|
||||
|
|
@ -167,29 +167,29 @@ span.highlight_word {
|
|||
.gi .x { color: $highlighted-gi; background-color: $highlighted-gi-x-bg; }
|
||||
.go { color: $highlighted-go; }
|
||||
.gp { color: $highlighted-gp; }
|
||||
.gs { font-weight: bold; }
|
||||
.gu { color: $highlighted-gu; font-weight: bold; }
|
||||
.gs { font-weight: $gl-font-weight-bold; }
|
||||
.gu { color: $highlighted-gu; font-weight: $gl-font-weight-bold; }
|
||||
.gt { color: $highlighted-gt; }
|
||||
.kc { font-weight: bold; }
|
||||
.kd { font-weight: bold; }
|
||||
.kn { font-weight: bold; }
|
||||
.kp { font-weight: bold; }
|
||||
.kr { font-weight: bold; }
|
||||
.kt { color: $highlighted-kt; font-weight: bold; }
|
||||
.kc { font-weight: $gl-font-weight-bold; }
|
||||
.kd { font-weight: $gl-font-weight-bold; }
|
||||
.kn { font-weight: $gl-font-weight-bold; }
|
||||
.kp { font-weight: $gl-font-weight-bold; }
|
||||
.kr { font-weight: $gl-font-weight-bold; }
|
||||
.kt { color: $highlighted-kt; font-weight: $gl-font-weight-bold; }
|
||||
.m { color: $highlighted-m; }
|
||||
.s { color: $highlighted-s; }
|
||||
.n { color: $highlighted-n; }
|
||||
.na { color: $highlighted-na; }
|
||||
.nb { color: $highlighted-nb; }
|
||||
.nc { color: $highlighted-nc; font-weight: bold; }
|
||||
.nc { color: $highlighted-nc; font-weight: $gl-font-weight-bold; }
|
||||
.no { color: $highlighted-no; }
|
||||
.ni { color: $highlighted-ni; }
|
||||
.ne { color: $highlighted-ne; font-weight: bold; }
|
||||
.nf { color: $highlighted-nf; font-weight: bold; }
|
||||
.ne { color: $highlighted-ne; font-weight: $gl-font-weight-bold; }
|
||||
.nf { color: $highlighted-nf; font-weight: $gl-font-weight-bold; }
|
||||
.nn { color: $highlighted-nn; }
|
||||
.nt { color: $highlighted-nt; }
|
||||
.nv { color: $highlighted-nv; }
|
||||
.ow { font-weight: bold; }
|
||||
.ow { font-weight: $gl-font-weight-bold; }
|
||||
.w { color: $highlighted-w; }
|
||||
.mf { color: $highlighted-mf; }
|
||||
.mh { color: $highlighted-mh; }
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ header.navbar-gitlab-new {
|
|||
li {
|
||||
.badge {
|
||||
box-shadow: none;
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -193,7 +193,7 @@ header.navbar-gitlab-new {
|
|||
&.active > a {
|
||||
box-shadow: inset 0 -3px 0 $indigo-500;
|
||||
color: $white-light;
|
||||
font-weight: 700;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
> a {
|
||||
|
|
@ -371,7 +371,7 @@ header.navbar-gitlab-new {
|
|||
|
||||
> a {
|
||||
&:last-of-type:not(:first-child) {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -411,7 +411,7 @@ header.navbar-gitlab-new {
|
|||
.breadcrumbs-sub-title {
|
||||
margin: 2px 0;
|
||||
font-size: 16px;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
line-height: 1;
|
||||
|
||||
ul {
|
||||
|
|
@ -430,7 +430,7 @@ header.navbar-gitlab-new {
|
|||
}
|
||||
|
||||
&:last-child a {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ $new-sidebar-collapsed-width: 50px;
|
|||
|
||||
a {
|
||||
border-bottom: 1px solid $border-color;
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 10px 16px 10px 10px;
|
||||
|
|
@ -70,8 +70,7 @@ $new-sidebar-collapsed-width: 50px;
|
|||
background-color: $white-light;
|
||||
}
|
||||
|
||||
.project-title,
|
||||
.group-title {
|
||||
.sidebar-context-title {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
|
@ -109,7 +108,7 @@ $new-sidebar-collapsed-width: 50px;
|
|||
}
|
||||
|
||||
.badge,
|
||||
.project-title {
|
||||
.sidebar-context-title {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
|
@ -160,7 +159,7 @@ $new-sidebar-collapsed-width: 50px;
|
|||
|
||||
> a {
|
||||
color: $active-color;
|
||||
font-weight: 700;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
svg {
|
||||
|
|
@ -308,7 +307,7 @@ $new-sidebar-collapsed-width: 50px;
|
|||
|
||||
.badge {
|
||||
color: $active-color;
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
.sidebar-sub-level-items {
|
||||
|
|
@ -474,6 +473,6 @@ $new-sidebar-collapsed-width: 50px;
|
|||
border-bottom-color: $active-border;
|
||||
|
||||
.badge {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -471,7 +471,7 @@
|
|||
padding-right: 35px;
|
||||
|
||||
> strong {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -277,7 +277,7 @@
|
|||
}
|
||||
|
||||
.trigger-build-variable {
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
color: $code-color;
|
||||
}
|
||||
|
||||
|
|
@ -378,7 +378,7 @@
|
|||
}
|
||||
|
||||
&.active {
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
|
||||
.fa-arrow-right {
|
||||
display: block;
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
vertical-align: middle !important;
|
||||
|
||||
a {
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -213,7 +213,7 @@
|
|||
|
||||
.commit-sha {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -286,6 +286,9 @@
|
|||
|
||||
|
||||
.gpg-status-box {
|
||||
padding: 2px 10px;
|
||||
margin-right: $gl-padding;
|
||||
|
||||
&:empty {
|
||||
display: none;
|
||||
}
|
||||
|
|
@ -303,7 +306,7 @@
|
|||
.gpg-popover-status {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
|
|
@ -314,7 +317,6 @@
|
|||
&.valid {
|
||||
svg {
|
||||
border: 1px solid $brand-success;
|
||||
|
||||
fill: $brand-success;
|
||||
}
|
||||
}
|
||||
|
|
@ -322,7 +324,6 @@
|
|||
&.invalid {
|
||||
svg {
|
||||
border: 1px solid $common-gray-light;
|
||||
|
||||
fill: $common-gray-light;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ $space-between-cards: 8px;
|
|||
line-height: 1;
|
||||
color: $gl-text-color-secondary;
|
||||
margin-left: 8px;
|
||||
font-weight: 500;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
|
||||
a {
|
||||
font-size: 18px;
|
||||
|
|
@ -139,7 +139,7 @@ $space-between-cards: 8px;
|
|||
.card-score-value {
|
||||
font-size: 16px;
|
||||
color: $gl-text-color;
|
||||
font-weight: 500;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
}
|
||||
|
||||
.card-score-big {
|
||||
|
|
@ -147,7 +147,7 @@ $space-between-cards: 8px;
|
|||
border-bottom: 1px solid $border-color;
|
||||
font-size: 22px;
|
||||
padding: 10px 0;
|
||||
font-weight: 500;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
}
|
||||
|
||||
.card-buttons {
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@
|
|||
}
|
||||
|
||||
.stage-name {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -93,7 +93,7 @@
|
|||
.header {
|
||||
font-size: 30px;
|
||||
line-height: 38px;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
|
|
@ -130,7 +130,7 @@
|
|||
&.title {
|
||||
line-height: 19px;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
color: $gl-text-color;
|
||||
}
|
||||
|
||||
|
|
@ -211,7 +211,7 @@
|
|||
box-shadow: inset 2px 0 0 0 $active-item-blue;
|
||||
|
||||
.stage-name {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -404,7 +404,7 @@
|
|||
color: $gl-link-color;
|
||||
line-height: 1.3;
|
||||
vertical-align: top;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
}
|
||||
|
||||
.fa {
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
// "Changes suppressed. Click to show." link
|
||||
.show-suppressed-diff {
|
||||
font-size: 110%;
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -104,7 +104,7 @@
|
|||
a {
|
||||
float: left;
|
||||
width: 35px;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
|
||||
&[disabled] {
|
||||
cursor: default;
|
||||
|
|
@ -395,7 +395,7 @@
|
|||
background-color: transparent;
|
||||
border: 0;
|
||||
color: $gl-link-color;
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
}
|
||||
|
||||
.environments-folder-name {
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
padding-top: 20px;
|
||||
}
|
||||
|
||||
|
|
@ -246,13 +246,13 @@
|
|||
}
|
||||
|
||||
.text-metric-bold {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
.label-axis-text,
|
||||
.text-metric-usage {
|
||||
fill: $black;
|
||||
font-weight: 500;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@
|
|||
|
||||
.event-title {
|
||||
@include str-truncated(calc(100% - 174px));
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
color: $list-text-color;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -271,7 +271,7 @@
|
|||
}
|
||||
|
||||
.light {
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
}
|
||||
|
||||
.no-value {
|
||||
|
|
@ -306,7 +306,7 @@
|
|||
display: block;
|
||||
margin-top: 4px;
|
||||
font-size: 13px;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
}
|
||||
|
||||
.hide-expanded {
|
||||
|
|
@ -689,7 +689,7 @@
|
|||
.issuable-info,
|
||||
.task-status,
|
||||
.issuable-updated-at {
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
color: $gl-text-color-secondary;
|
||||
|
||||
a {
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ ul.related-merge-requests > li {
|
|||
.merge-requests-title,
|
||||
.related-branches-title {
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
.merge-request-id {
|
||||
|
|
@ -244,7 +244,7 @@ ul.related-merge-requests > li {
|
|||
|
||||
strong {
|
||||
display: block;
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
}
|
||||
|
||||
h1:first-child {
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
margin-bottom: 0.68em;
|
||||
margin-top: 0;
|
||||
font-size: 34px;
|
||||
|
|
@ -38,7 +38,7 @@
|
|||
}
|
||||
|
||||
a {
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -54,7 +54,7 @@
|
|||
padding: 15px;
|
||||
|
||||
.login-heading h3 {
|
||||
font-weight: 300;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
line-height: 1.5;
|
||||
margin: 0 0 10px;
|
||||
}
|
||||
|
|
@ -186,7 +186,7 @@
|
|||
}
|
||||
|
||||
label {
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
}
|
||||
|
||||
.submit-container {
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@
|
|||
}
|
||||
|
||||
strong {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -221,7 +221,7 @@
|
|||
}
|
||||
|
||||
.member {
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
overflow-wrap: break-word;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -197,7 +197,7 @@
|
|||
@extend .ref-name;
|
||||
|
||||
color: $gl-text-color;
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
overflow: hidden;
|
||||
word-break: break-all;
|
||||
|
||||
|
|
@ -228,7 +228,7 @@
|
|||
.mr-widget-body {
|
||||
h4 {
|
||||
float: left;
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
font-size: 14px;
|
||||
line-height: inherit;
|
||||
margin-top: 0;
|
||||
|
|
@ -239,7 +239,7 @@
|
|||
}
|
||||
|
||||
time {
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -249,7 +249,7 @@
|
|||
}
|
||||
|
||||
label {
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
}
|
||||
|
||||
.spacing {
|
||||
|
|
@ -257,12 +257,12 @@
|
|||
}
|
||||
|
||||
.bold {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
color: $gl-gray-light;
|
||||
}
|
||||
|
||||
.state-label {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
|
|
@ -336,7 +336,7 @@
|
|||
|
||||
.text {
|
||||
span {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
p {
|
||||
|
|
@ -505,7 +505,7 @@
|
|||
.panel-new-merge-request {
|
||||
.panel-heading {
|
||||
padding: 5px 10px;
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
line-height: 25px;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
padding: 10px 16px;
|
||||
|
||||
h4 {
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
.progress {
|
||||
|
|
@ -81,7 +81,7 @@
|
|||
}
|
||||
|
||||
.remaining-days strong {
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
}
|
||||
|
||||
.milestone-stat {
|
||||
|
|
|
|||
|
|
@ -188,7 +188,7 @@
|
|||
.close {
|
||||
color: $white-light;
|
||||
opacity: 0.85;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
|
||||
&:hover {
|
||||
opacity: 1;
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
.interval-pattern-form-group {
|
||||
label {
|
||||
margin-right: 10px;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
|
||||
&[for='custom'] {
|
||||
margin-right: 0;
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@
|
|||
.branch-commit {
|
||||
|
||||
.ref-name {
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
max-width: 120px;
|
||||
overflow: hidden;
|
||||
display: inline-block;
|
||||
|
|
@ -272,7 +272,7 @@
|
|||
|
||||
.build-name {
|
||||
float: right;
|
||||
font-weight: 500;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
}
|
||||
|
||||
.ci-status-icon-failed svg {
|
||||
|
|
@ -281,7 +281,7 @@
|
|||
|
||||
.stage {
|
||||
color: $gl-text-color-secondary;
|
||||
font-weight: 500;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
|
@ -420,7 +420,7 @@
|
|||
|
||||
.stage-name {
|
||||
margin: 0 0 15px 10px;
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
width: 176px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
|
|
@ -580,7 +580,7 @@
|
|||
vertical-align: bottom;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
}
|
||||
|
||||
@mixin mini-pipeline-graph-color($color-light, $color-main, $color-dark) {
|
||||
|
|
@ -724,7 +724,7 @@ button.mini-pipeline-graph-dropdown-toggle {
|
|||
.mini-pipeline-graph-dropdown-item {
|
||||
padding: 3px 7px 4px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
line-height: 1.428571429;
|
||||
white-space: nowrap;
|
||||
margin: 0 5px;
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@
|
|||
&::after {
|
||||
content: "\00B7"; // Middle Dot
|
||||
padding: 0 6px;
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
|
|
@ -277,7 +277,7 @@ table.u2f-registrations {
|
|||
|
||||
.oauth-application-show {
|
||||
.scope-name {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
.scopes-list {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
margin: -16px;
|
||||
|
||||
.alert-link {
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -114,7 +114,7 @@
|
|||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
font-size: 24px;
|
||||
font-weight: 400;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
line-height: 1;
|
||||
word-wrap: break-word;
|
||||
|
||||
|
|
@ -259,7 +259,7 @@
|
|||
border-width: 1px;
|
||||
border-style: solid;
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
line-height: 13px;
|
||||
letter-spacing: .4px;
|
||||
padding: 6px 14px;
|
||||
|
|
@ -309,7 +309,7 @@
|
|||
}
|
||||
|
||||
.option-title {
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
display: inline-block;
|
||||
color: $gl-text-color;
|
||||
}
|
||||
|
|
@ -575,7 +575,7 @@ a.deploy-project-label {
|
|||
color: $gl-text-color-tertiary;
|
||||
transform: translateY(-50%);
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
line-height: 20px;
|
||||
|
||||
// Mobile
|
||||
|
|
@ -826,7 +826,7 @@ pre.light-well {
|
|||
.new-protected-tag {
|
||||
label {
|
||||
margin-top: 6px;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -853,7 +853,7 @@ pre.light-well {
|
|||
}
|
||||
|
||||
&.is-active {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -952,7 +952,7 @@ pre.light-well {
|
|||
|
||||
&::before {
|
||||
font-family: FontAwesome;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
font-style: normal;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -267,7 +267,7 @@
|
|||
display: inline-block;
|
||||
font-size: 10px;
|
||||
text-transform: uppercase;
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
color: $gray-darkest;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
}
|
||||
|
||||
h4 {
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ input[type="checkbox"]:hover {
|
|||
|
||||
&::before {
|
||||
font-family: FontAwesome;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
font-style: normal;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,5 +29,5 @@ table .sherlock-code {
|
|||
|
||||
.sherlock-line-samples-table .slow {
|
||||
color: $red-500;
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -108,14 +108,14 @@
|
|||
margin: 0;
|
||||
float: none;
|
||||
display: inline-block;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
padding: 0 5px;
|
||||
line-height: inherit;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.action-name {
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
}
|
||||
|
||||
.todo-body {
|
||||
|
|
@ -262,6 +262,6 @@
|
|||
}
|
||||
|
||||
a {
|
||||
font-weight: 600;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -231,7 +231,7 @@
|
|||
}
|
||||
|
||||
.upload-link {
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
color: $md-link-color;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
.gitlab-ui-dev-kit {
|
||||
> h2 {
|
||||
margin: 35px 0 20px;
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
.example {
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
}
|
||||
|
||||
.light {
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
color: $gl-text-color-secondary;
|
||||
}
|
||||
|
||||
|
|
@ -89,7 +89,7 @@
|
|||
|
||||
h3 {
|
||||
font-size: 19px;
|
||||
font-weight: normal;
|
||||
font-weight: $gl-font-weight-normal;
|
||||
margin: $gl-padding 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -281,7 +281,7 @@
|
|||
$xterm-fg-255: #eee;
|
||||
|
||||
.term-bold {
|
||||
font-weight: bold;
|
||||
font-weight: $gl-font-weight-bold;
|
||||
}
|
||||
|
||||
.term-italic {
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
.wiki h3 {
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
header,
|
||||
|
|
|
|||
|
|
@ -1,2 +1,11 @@
|
|||
class Admin::LogsController < Admin::ApplicationController
|
||||
def show
|
||||
@loggers = [
|
||||
Gitlab::AppLogger,
|
||||
Gitlab::GitLogger,
|
||||
Gitlab::EnvironmentLogger,
|
||||
Gitlab::SidekiqLogger,
|
||||
Gitlab::RepositoryCheckLogger
|
||||
]
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@ class Admin::ProjectsController < Admin::ApplicationController
|
|||
before_action :group, only: [:show, :transfer]
|
||||
|
||||
def index
|
||||
finder = Admin::ProjectsFinder.new(params: params, current_user: current_user)
|
||||
@projects = finder.execute
|
||||
@sort = finder.sort
|
||||
params[:sort] ||= 'latest_activity_desc'
|
||||
@sort = params[:sort]
|
||||
@projects = Admin::ProjectsFinder.new(params: params, current_user: current_user).execute
|
||||
|
||||
respond_to do |format|
|
||||
format.html
|
||||
|
|
|
|||
|
|
@ -10,6 +10,14 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController
|
|||
end
|
||||
end
|
||||
|
||||
if Gitlab::LDAP::Config.enabled?
|
||||
Gitlab::LDAP::Config.available_servers.each do |server|
|
||||
define_method server['provider_name'] do
|
||||
ldap
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Extend the standard message generation to accept our custom exception
|
||||
def failure_message
|
||||
exception = env["omniauth.error"]
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ class Projects::ServicesController < Projects::ApplicationController
|
|||
# Authorize
|
||||
before_action :authorize_admin_project!
|
||||
before_action :service, only: [:edit, :update, :test]
|
||||
before_action :update_service, only: [:update, :test]
|
||||
|
||||
respond_to :html
|
||||
|
||||
|
|
@ -14,6 +13,8 @@ class Projects::ServicesController < Projects::ApplicationController
|
|||
end
|
||||
|
||||
def update
|
||||
@service.attributes = service_params[:service]
|
||||
|
||||
if @service.save(context: :manual_change)
|
||||
redirect_to(project_settings_integrations_path(@project), notice: success_message)
|
||||
else
|
||||
|
|
@ -24,7 +25,7 @@ class Projects::ServicesController < Projects::ApplicationController
|
|||
def test
|
||||
message = {}
|
||||
|
||||
if @service.can_test?
|
||||
if @service.can_test? && @service.update_attributes(service_params[:service])
|
||||
data = @service.test_data(project, current_user)
|
||||
outcome = @service.test(data)
|
||||
|
||||
|
|
@ -50,10 +51,6 @@ class Projects::ServicesController < Projects::ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def update_service
|
||||
@service.assign_attributes(service_params[:service])
|
||||
end
|
||||
|
||||
def service
|
||||
@service ||= @project.find_or_initialize_service(params[:id])
|
||||
end
|
||||
|
|
|
|||
|
|
@ -5,14 +5,6 @@ class SessionsController < Devise::SessionsController
|
|||
|
||||
skip_before_action :check_two_factor_requirement, only: [:destroy]
|
||||
|
||||
# Explicitly call protect from forgery before anything else. Otherwise the
|
||||
# CSFR-token might be cleared before authentication is done. This was the case
|
||||
# when LDAP was enabled and the `OmniauthCallbacksController` is loaded
|
||||
#
|
||||
# *Note:* `prepend: true` is the default for rails4, but this will be changed
|
||||
# to `prepend: false` in rails5.
|
||||
protect_from_forgery prepend: true, with: :exception
|
||||
|
||||
prepend_before_action :check_initial_setup, only: [:new]
|
||||
prepend_before_action :authenticate_with_two_factor,
|
||||
if: :two_factor_enabled?, only: [:create]
|
||||
|
|
|
|||
|
|
@ -1,33 +1,67 @@
|
|||
class Admin::ProjectsFinder
|
||||
attr_reader :sort, :namespace_id, :visibility_level, :with_push,
|
||||
:abandoned, :last_repository_check_failed, :archived,
|
||||
:personal, :name, :page, :current_user
|
||||
attr_reader :params, :current_user
|
||||
|
||||
def initialize(params:, current_user:)
|
||||
@params = params
|
||||
@current_user = current_user
|
||||
@sort = params.fetch(:sort) { 'latest_activity_desc' }
|
||||
@namespace_id = params[:namespace_id]
|
||||
@visibility_level = params[:visibility_level]
|
||||
@with_push = params[:with_push]
|
||||
@abandoned = params[:abandoned]
|
||||
@last_repository_check_failed = params[:last_repository_check_failed]
|
||||
@archived = params[:archived]
|
||||
@personal = params[:personal]
|
||||
@name = params[:name]
|
||||
@page = params[:page]
|
||||
end
|
||||
|
||||
def execute
|
||||
items = Project.without_deleted.with_statistics
|
||||
items = items.in_namespace(namespace_id) if namespace_id.present?
|
||||
items = items.where(visibility_level: visibility_level) if visibility_level.present?
|
||||
items = items.with_push if with_push.present?
|
||||
items = items.abandoned if abandoned.present?
|
||||
items = items.where(last_repository_check_failed: true) if last_repository_check_failed.present?
|
||||
items = items.non_archived unless archived.present?
|
||||
items = items.personal(current_user) if personal.present?
|
||||
items = items.search(name) if name.present?
|
||||
items = items.sort(sort)
|
||||
items.includes(:namespace).order("namespaces.path, projects.name ASC").page(page)
|
||||
items = by_namespace_id(items)
|
||||
items = by_visibilty_level(items)
|
||||
items = by_with_push(items)
|
||||
items = by_abandoned(items)
|
||||
items = by_last_repository_check_failed(items)
|
||||
items = by_archived(items)
|
||||
items = by_personal(items)
|
||||
items = by_name(items)
|
||||
items = sort(items)
|
||||
items.includes(:namespace).order("namespaces.path, projects.name ASC").page(params[:page])
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def by_namespace_id(items)
|
||||
params[:namespace_id].present? ? items.in_namespace(params[:namespace_id]) : items
|
||||
end
|
||||
|
||||
def by_visibilty_level(items)
|
||||
params[:visibility_level].present? ? items.where(visibility_level: params[:visibility_level]) : items
|
||||
end
|
||||
|
||||
def by_with_push(items)
|
||||
params[:with_push].present? ? items.with_push : items
|
||||
end
|
||||
|
||||
def by_abandoned(items)
|
||||
params[:abandoned].present? ? items.abandoned : items
|
||||
end
|
||||
|
||||
def by_last_repository_check_failed(items)
|
||||
params[:last_repository_check_failed].present? ? items.where(last_repository_check_failed: true) : items
|
||||
end
|
||||
|
||||
def by_archived(items)
|
||||
if params[:archived] == 'only'
|
||||
items.archived
|
||||
elsif params[:archived].blank?
|
||||
items.non_archived
|
||||
else
|
||||
items
|
||||
end
|
||||
end
|
||||
|
||||
def by_personal(items)
|
||||
params[:personal].present? ? items.personal(current_user) : items
|
||||
end
|
||||
|
||||
def by_name(items)
|
||||
params[:name].present? ? items.search(params[:name]) : items
|
||||
end
|
||||
|
||||
def sort(items)
|
||||
sort = params.fetch(:sort) { 'latest_activity_desc' }
|
||||
items.sort(sort)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -125,9 +125,18 @@ class ProjectsFinder < UnionFinder
|
|||
end
|
||||
|
||||
def by_archived(projects)
|
||||
# Back-compatibility with the places where `params[:archived]` can be set explicitly to `false`
|
||||
params[:non_archived] = !Gitlab::Utils.to_boolean(params[:archived]) if params.key?(:archived)
|
||||
|
||||
params[:non_archived] ? projects.non_archived : projects
|
||||
if params[:non_archived]
|
||||
projects.non_archived
|
||||
elsif params.key?(:archived) # Back-compatibility with the places where `params[:archived]` can be set explicitly to `false`
|
||||
if params[:archived] == 'only'
|
||||
projects.archived
|
||||
elsif Gitlab::Utils.to_boolean(params[:archived])
|
||||
projects
|
||||
else
|
||||
projects.non_archived
|
||||
end
|
||||
else
|
||||
projects
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -12,11 +12,18 @@ module AvatarsHelper
|
|||
avatar_size = options[:size] || 16
|
||||
user_name = options[:user].try(:name) || options[:user_name]
|
||||
avatar_url = options[:url] || avatar_icon(options[:user] || options[:user_email], avatar_size)
|
||||
data_attributes = { container: 'body' }
|
||||
has_tooltip = options[:has_tooltip].nil? ? true : options[:has_tooltip]
|
||||
data_attributes = {}
|
||||
css_class = %W[avatar s#{avatar_size}].push(*options[:css_class])
|
||||
|
||||
if has_tooltip
|
||||
css_class.push('has-tooltip')
|
||||
data_attributes = { container: 'body' }
|
||||
end
|
||||
|
||||
image_tag(
|
||||
avatar_url,
|
||||
class: %W[avatar has-tooltip s#{avatar_size}].push(*options[:css_class]),
|
||||
class: css_class,
|
||||
alt: "#{user_name}'s avatar",
|
||||
title: user_name,
|
||||
data: data_attributes,
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ module CommitsHelper
|
|||
end
|
||||
|
||||
def commit_signature_badge_classes(additional_classes)
|
||||
%w(btn status-box gpg-status-box) + Array(additional_classes)
|
||||
%w(btn gpg-status-box) + Array(additional_classes)
|
||||
end
|
||||
|
||||
protected
|
||||
|
|
|
|||
|
|
@ -181,6 +181,7 @@ module EventsHelper
|
|||
end
|
||||
|
||||
def event_commit_title(message)
|
||||
message ||= ''
|
||||
(message.split("\n").first || "").truncate(70)
|
||||
rescue
|
||||
"--broken encoding"
|
||||
|
|
|
|||
|
|
@ -19,11 +19,21 @@ class BroadcastMessage < ActiveRecord::Base
|
|||
after_commit :flush_redis_cache
|
||||
|
||||
def self.current
|
||||
Rails.cache.fetch(CACHE_KEY) do
|
||||
where('ends_at > :now AND starts_at <= :now', now: Time.zone.now)
|
||||
.reorder(id: :asc)
|
||||
.to_a
|
||||
end
|
||||
messages = Rails.cache.fetch(CACHE_KEY) { current_and_future_messages.to_a }
|
||||
|
||||
return messages if messages.empty?
|
||||
|
||||
now_or_future = messages.select(&:now_or_future?)
|
||||
|
||||
# If there are cached entries but none are to be displayed we'll purge the
|
||||
# cache so we don't keep running this code all the time.
|
||||
Rails.cache.delete(CACHE_KEY) if now_or_future.empty?
|
||||
|
||||
now_or_future.select(&:now?)
|
||||
end
|
||||
|
||||
def self.current_and_future_messages
|
||||
where('ends_at > :now', now: Time.zone.now).reorder(id: :asc)
|
||||
end
|
||||
|
||||
def active?
|
||||
|
|
@ -38,6 +48,18 @@ class BroadcastMessage < ActiveRecord::Base
|
|||
ends_at < Time.zone.now
|
||||
end
|
||||
|
||||
def now?
|
||||
(starts_at..ends_at).cover?(Time.zone.now)
|
||||
end
|
||||
|
||||
def future?
|
||||
starts_at > Time.zone.now
|
||||
end
|
||||
|
||||
def now_or_future?
|
||||
now? || future?
|
||||
end
|
||||
|
||||
def flush_redis_cache
|
||||
Rails.cache.delete(CACHE_KEY)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -46,7 +46,10 @@ module Ci
|
|||
before_save :ensure_token
|
||||
before_destroy { unscoped_project }
|
||||
|
||||
after_create :execute_hooks
|
||||
after_create do |build|
|
||||
run_after_commit { BuildHooksWorker.perform_async(build.id) }
|
||||
end
|
||||
|
||||
after_commit :update_project_statistics_after_save, on: [:create, :update]
|
||||
after_commit :update_project_statistics, on: :destroy
|
||||
|
||||
|
|
|
|||
|
|
@ -393,7 +393,8 @@ module Ci
|
|||
def predefined_variables
|
||||
[
|
||||
{ key: 'CI_PIPELINE_ID', value: id.to_s, public: true },
|
||||
{ key: 'CI_CONFIG_PATH', value: ci_yaml_file_path, public: true }
|
||||
{ key: 'CI_CONFIG_PATH', value: ci_yaml_file_path, public: true },
|
||||
{ key: 'CI_PIPELINE_SOURCE', value: source.to_s, public: true }
|
||||
]
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,10 @@ module Ci
|
|||
validates :pipeline, presence: true, unless: :importing?
|
||||
validates :name, presence: true, unless: :importing?
|
||||
|
||||
after_initialize do |stage|
|
||||
self.status = DEFAULT_STATUS if self.status.nil?
|
||||
end
|
||||
|
||||
state_machine :status, initial: :created do
|
||||
event :enqueue do
|
||||
transition created: :pending
|
||||
|
|
|
|||
|
|
@ -406,7 +406,7 @@ class Event < ActiveRecord::Base
|
|||
|
||||
def body?
|
||||
if push?
|
||||
push_with_commits? || rm_ref?
|
||||
push_with_commits?
|
||||
elsif note?
|
||||
true
|
||||
else
|
||||
|
|
|
|||
|
|
@ -50,7 +50,10 @@ class Issue < ActiveRecord::Base
|
|||
|
||||
scope :preload_associations, -> { preload(:labels, project: :namespace) }
|
||||
|
||||
scope :public_only, -> { where(confidential: false) }
|
||||
|
||||
after_save :expire_etag_cache
|
||||
after_commit :update_project_counter_caches, on: :destroy
|
||||
|
||||
attr_spammable :title, spam_title: true
|
||||
attr_spammable :description, spam_description: true
|
||||
|
|
@ -266,6 +269,10 @@ class Issue < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
def update_project_counter_caches
|
||||
Projects::OpenIssuesCountService.new(project).refresh_cache
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Returns `true` if the given User can read the current Issue.
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ class MergeRequest < ActiveRecord::Base
|
|||
|
||||
after_create :ensure_merge_request_diff, unless: :importing?
|
||||
after_update :reload_diff_if_branch_changed
|
||||
after_commit :update_project_counter_caches, on: :destroy
|
||||
|
||||
# When this attribute is true some MR validation is ignored
|
||||
# It allows us to close or modify broken merge requests
|
||||
|
|
@ -682,9 +683,8 @@ class MergeRequest < ActiveRecord::Base
|
|||
if !include_description && closes_issues_references.present?
|
||||
message << "Closes #{closes_issues_references.to_sentence}"
|
||||
end
|
||||
|
||||
message << "#{description}" if include_description && description.present?
|
||||
message << "See merge request #{to_reference}"
|
||||
message << "See merge request #{to_reference(full: true)}"
|
||||
|
||||
message.join("\n\n")
|
||||
end
|
||||
|
|
@ -936,6 +936,10 @@ class MergeRequest < ActiveRecord::Base
|
|||
true
|
||||
end
|
||||
|
||||
def update_project_counter_caches
|
||||
Projects::OpenMergeRequestsCountService.new(target_project).refresh_cache
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def write_ref
|
||||
|
|
|
|||
|
|
@ -247,6 +247,7 @@ class Project < ActiveRecord::Base
|
|||
scope :joined, ->(user) { where('namespace_id != ?', user.namespace_id) }
|
||||
scope :starred_by, ->(user) { joins(:users_star_projects).where('users_star_projects.user_id': user.id) }
|
||||
scope :visible_to_user, ->(user) { where(id: user.authorized_projects.select(:id).reorder(nil)) }
|
||||
scope :archived, -> { where(archived: true) }
|
||||
scope :non_archived, -> { where(archived: false) }
|
||||
scope :for_milestones, ->(ids) { joins(:milestones).where('milestones.id' => ids).distinct }
|
||||
scope :with_push, -> { joins(:events).where('events.action = ?', Event::PUSHED) }
|
||||
|
|
@ -1017,7 +1018,7 @@ class Project < ActiveRecord::Base
|
|||
name: name,
|
||||
description: description,
|
||||
web_url: web_url,
|
||||
avatar_url: avatar_url,
|
||||
avatar_url: avatar_url(only_path: false),
|
||||
git_ssh_url: ssh_url_to_repo,
|
||||
git_http_url: http_url_to_repo,
|
||||
namespace: namespace.name,
|
||||
|
|
@ -1167,7 +1168,11 @@ class Project < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def open_issues_count
|
||||
issues.opened.count
|
||||
Projects::OpenIssuesCountService.new(self).count
|
||||
end
|
||||
|
||||
def open_merge_requests_count
|
||||
Projects::OpenMergeRequestsCountService.new(self).count
|
||||
end
|
||||
|
||||
def visibility_level_allowed_as_fork?(level = self.visibility_level)
|
||||
|
|
|
|||
|
|
@ -24,6 +24,8 @@ class KubernetesService < DeploymentService
|
|||
validates :token
|
||||
end
|
||||
|
||||
before_validation :enforce_namespace_to_lower_case
|
||||
|
||||
validates :namespace,
|
||||
allow_blank: true,
|
||||
length: 1..63,
|
||||
|
|
@ -207,4 +209,8 @@ class KubernetesService < DeploymentService
|
|||
max_session_time: current_application_settings.terminal_max_session_time
|
||||
}
|
||||
end
|
||||
|
||||
def enforce_namespace_to_lower_case
|
||||
self.namespace = self.namespace&.downcase
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -206,12 +206,18 @@ class Repository
|
|||
end
|
||||
|
||||
def branch_exists?(branch_name)
|
||||
branch_names.include?(branch_name)
|
||||
return false unless raw_repository
|
||||
|
||||
@branch_exists_memo ||= Hash.new do |hash, key|
|
||||
hash[key] = raw_repository.branch_exists?(key)
|
||||
end
|
||||
|
||||
@branch_exists_memo[branch_name]
|
||||
end
|
||||
|
||||
def ref_exists?(ref)
|
||||
rugged.references.exist?(ref)
|
||||
rescue Rugged::ReferenceError
|
||||
!!raw_repository&.ref_exists?(ref)
|
||||
rescue ArgumentError
|
||||
false
|
||||
end
|
||||
|
||||
|
|
@ -266,6 +272,7 @@ class Repository
|
|||
def expire_branches_cache
|
||||
expire_method_caches(%i(branch_names branch_count))
|
||||
@local_branches = nil
|
||||
@branch_exists_memo = nil
|
||||
end
|
||||
|
||||
def expire_statistics_caches
|
||||
|
|
@ -1185,7 +1192,7 @@ class Repository
|
|||
end
|
||||
|
||||
def initialize_raw_repository
|
||||
Gitlab::Git::Repository.new(project.repository_storage, disk_path + '.git')
|
||||
Gitlab::Git::Repository.new(project.repository_storage, disk_path + '.git', Gitlab::GlRepository.gl_repository(project, false))
|
||||
end
|
||||
|
||||
def circuit_breaker
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ module Commits
|
|||
new_commit = create_commit!
|
||||
|
||||
success(result: new_commit)
|
||||
rescue ValidationError, ChangeError, Gitlab::Git::Index::IndexError, Repository::CommitError, GitHooksService::PreReceiveError => ex
|
||||
rescue ValidationError, ChangeError, Gitlab::Git::Index::IndexError, Repository::CommitError, Gitlab::Git::HooksService::PreReceiveError => ex
|
||||
error(ex.message)
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ class CreateBranchService < BaseService
|
|||
else
|
||||
error('Invalid reference name')
|
||||
end
|
||||
rescue GitHooksService::PreReceiveError => ex
|
||||
rescue Gitlab::Git::HooksService::PreReceiveError => ex
|
||||
error(ex.message)
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ class DeleteBranchService < BaseService
|
|||
else
|
||||
error('Failed to remove branch')
|
||||
end
|
||||
rescue GitHooksService::PreReceiveError => ex
|
||||
rescue Gitlab::Git::HooksService::PreReceiveError => ex
|
||||
error(ex.message)
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -1,32 +0,0 @@
|
|||
class GitHooksService
|
||||
PreReceiveError = Class.new(StandardError)
|
||||
|
||||
attr_accessor :oldrev, :newrev, :ref
|
||||
|
||||
def execute(user, project, oldrev, newrev, ref)
|
||||
@project = project
|
||||
@user = Gitlab::GlId.gl_id(user)
|
||||
@oldrev = oldrev
|
||||
@newrev = newrev
|
||||
@ref = ref
|
||||
|
||||
%w(pre-receive update).each do |hook_name|
|
||||
status, message = run_hook(hook_name)
|
||||
|
||||
unless status
|
||||
raise PreReceiveError, message
|
||||
end
|
||||
end
|
||||
|
||||
yield(self).tap do
|
||||
run_hook('post-receive')
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def run_hook(name)
|
||||
hook = Gitlab::Git::Hook.new(name, @project)
|
||||
hook.trigger(@user, oldrev, newrev, ref)
|
||||
end
|
||||
end
|
||||
|
|
@ -1,8 +1,10 @@
|
|||
class GitOperationService
|
||||
attr_reader :user, :repository
|
||||
attr_reader :committer, :repository
|
||||
|
||||
def initialize(committer, new_repository)
|
||||
committer = Gitlab::Git::Committer.from_user(committer) if committer.is_a?(User)
|
||||
@committer = committer
|
||||
|
||||
def initialize(new_user, new_repository)
|
||||
@user = new_user
|
||||
@repository = new_repository
|
||||
end
|
||||
|
||||
|
|
@ -118,9 +120,9 @@ class GitOperationService
|
|||
end
|
||||
|
||||
def with_hooks(ref, newrev, oldrev)
|
||||
GitHooksService.new.execute(
|
||||
user,
|
||||
repository.project,
|
||||
Gitlab::Git::HooksService.new.execute(
|
||||
committer,
|
||||
repository,
|
||||
oldrev,
|
||||
newrev,
|
||||
ref) do |service|
|
||||
|
|
|
|||
|
|
@ -0,0 +1,45 @@
|
|||
module Groups
|
||||
class NestedCreateService < Groups::BaseService
|
||||
attr_reader :group_path
|
||||
|
||||
def initialize(user, params)
|
||||
@current_user, @params = user, params.dup
|
||||
|
||||
@group_path = @params.delete(:group_path)
|
||||
end
|
||||
|
||||
def execute
|
||||
return nil unless group_path
|
||||
|
||||
if group = Group.find_by_full_path(group_path)
|
||||
return group
|
||||
end
|
||||
|
||||
create_group_path
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def create_group_path
|
||||
group_path_segments = group_path.split('/')
|
||||
|
||||
last_group = nil
|
||||
partial_path_segments = []
|
||||
while subgroup_name = group_path_segments.shift
|
||||
partial_path_segments << subgroup_name
|
||||
partial_path = partial_path_segments.join('/')
|
||||
|
||||
new_params = params.reverse_merge(
|
||||
path: subgroup_name,
|
||||
name: subgroup_name,
|
||||
parent: last_group
|
||||
)
|
||||
new_params[:visibility_level] ||= Gitlab::CurrentSettings.current_application_settings.default_group_visibility
|
||||
|
||||
last_group = Group.find_by_full_path(partial_path) || Groups::CreateService.new(current_user, new_params).execute
|
||||
end
|
||||
|
||||
last_group
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -192,6 +192,8 @@ class IssuableBaseService < BaseService
|
|||
|
||||
def after_create(issuable)
|
||||
# To be overridden by subclasses
|
||||
|
||||
issuable.update_project_counter_caches
|
||||
end
|
||||
|
||||
def before_update(issuable)
|
||||
|
|
@ -200,6 +202,8 @@ class IssuableBaseService < BaseService
|
|||
|
||||
def after_update(issuable)
|
||||
# To be overridden by subclasses
|
||||
|
||||
issuable.update_project_counter_caches
|
||||
end
|
||||
|
||||
def update(issuable)
|
||||
|
|
|
|||
|
|
@ -27,6 +27,8 @@ module Issues
|
|||
todo_service.new_issue(issuable, current_user)
|
||||
user_agent_detail_service.create
|
||||
resolve_discussions_with_issue(issuable)
|
||||
|
||||
super
|
||||
end
|
||||
|
||||
def resolve_discussions_with_issue(issue)
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue