Merge remote-tracking branch 'origin/master' into improve-pipeline-fixtures
This commit is contained in:
commit
c1928f4fce
2310 changed files with 41208 additions and 14480 deletions
|
@ -1,4 +1,6 @@
|
|||
/coverage/
|
||||
/coverage-javascript/
|
||||
/node_modules/
|
||||
/public/
|
||||
/tmp/
|
||||
/vendor/
|
||||
|
|
35
.eslintrc
35
.eslintrc
|
@ -1,31 +1,20 @@
|
|||
{
|
||||
"extends": "airbnb",
|
||||
"env": {
|
||||
"jquery": true,
|
||||
"browser": true,
|
||||
"es6": true
|
||||
},
|
||||
"extends": "airbnb-base",
|
||||
"globals": {
|
||||
"_": false,
|
||||
"gl": false,
|
||||
"gon": false,
|
||||
"localStorage": false
|
||||
},
|
||||
"plugins": [
|
||||
"filenames"
|
||||
],
|
||||
"rules": {
|
||||
"filenames/match-regex": [2, "^[a-z0-9_]+(.js)?$"]
|
||||
},
|
||||
"globals": {
|
||||
"$": false,
|
||||
"_": false,
|
||||
"beforeEach": false,
|
||||
"d3": false,
|
||||
"define": false,
|
||||
"describe": false,
|
||||
"document": false,
|
||||
"expect": false,
|
||||
"fixture": false,
|
||||
"gl": false,
|
||||
"it": false,
|
||||
"jQuery": false,
|
||||
"Mousetrap": false,
|
||||
"spyOn": false,
|
||||
"spyOnEvent": false,
|
||||
"Turbolinks": false,
|
||||
"window": false,
|
||||
"Vue": false,
|
||||
"Flash": false,
|
||||
"Cookies": false
|
||||
}
|
||||
}
|
||||
|
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -5,6 +5,7 @@
|
|||
.chef
|
||||
.directory
|
||||
/.envrc
|
||||
eslint-report.html
|
||||
/.gitlab_shell_secret
|
||||
.idea
|
||||
/.rbenv-version
|
||||
|
|
146
.gitlab-ci.yml
146
.gitlab-ci.yml
|
@ -1,7 +1,7 @@
|
|||
image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.3-git-2.7-phantomjs-2.1"
|
||||
image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.3.3-git-2.7-phantomjs-2.1-node-7.1"
|
||||
|
||||
cache:
|
||||
key: "ruby-231"
|
||||
key: "ruby-233"
|
||||
paths:
|
||||
- vendor/ruby
|
||||
|
||||
|
@ -20,7 +20,7 @@ before_script:
|
|||
- source ./scripts/prepare_build.sh
|
||||
- cp config/gitlab.yml.example config/gitlab.yml
|
||||
- bundle --version
|
||||
- '[ "$USE_BUNDLE_INSTALL" != "true" ] || retry bundle install --without postgres production --jobs $(nproc) "${FLAGS[@]}"'
|
||||
- '[ "$USE_BUNDLE_INSTALL" != "true" ] || retry bundle install --without postgres production --jobs $(nproc) $FLAGS'
|
||||
- retry gem install knapsack
|
||||
- '[ "$SETUP_DB" != "true" ] || bundle exec rake db:drop db:create db:schema:load db:migrate add_limits_mysql'
|
||||
|
||||
|
@ -30,7 +30,12 @@ stages:
|
|||
- post-test
|
||||
- pages
|
||||
|
||||
# Prepare and merge knapsack tests
|
||||
# Predefined scopes
|
||||
.dedicated-runner: &dedicated-runner
|
||||
tags:
|
||||
- gitlab-org
|
||||
- 2gb
|
||||
|
||||
.knapsack-state: &knapsack-state
|
||||
services: []
|
||||
variables:
|
||||
|
@ -45,47 +50,14 @@ stages:
|
|||
paths:
|
||||
- knapsack/
|
||||
|
||||
knapsack:
|
||||
<<: *knapsack-state
|
||||
stage: prepare
|
||||
script:
|
||||
- mkdir -p knapsack/
|
||||
- '[[ -f knapsack/rspec_report.json ]] || echo "{}" > knapsack/rspec_report.json'
|
||||
- '[[ -f knapsack/spinach_report.json ]] || echo "{}" > knapsack/spinach_report.json'
|
||||
|
||||
update-knapsack:
|
||||
<<: *knapsack-state
|
||||
stage: post-test
|
||||
script:
|
||||
- scripts/merge-reports knapsack/rspec_report.json knapsack/rspec_node_*.json
|
||||
- scripts/merge-reports knapsack/spinach_report.json knapsack/spinach_node_*.json
|
||||
- rm -f knapsack/*_node_*.json
|
||||
only:
|
||||
- master@gitlab-org/gitlab-ce
|
||||
- master@gitlab-org/gitlab-ee
|
||||
- master@gitlab/gitlabhq
|
||||
- master@gitlab/gitlab-ee
|
||||
|
||||
.use-db: &use-db
|
||||
services:
|
||||
- mysql:latest
|
||||
- redis:alpine
|
||||
|
||||
setup-test-env:
|
||||
<<: *use-db
|
||||
stage: prepare
|
||||
script:
|
||||
- bundle exec rake assets:precompile 2>/dev/null
|
||||
- bundle exec ruby -Ispec -e 'require "spec_helper" ; TestEnv.init'
|
||||
artifacts:
|
||||
expire_in: 7d
|
||||
paths:
|
||||
- public/assets
|
||||
- tmp/tests
|
||||
|
||||
|
||||
.rspec-knapsack: &rspec-knapsack
|
||||
stage: test
|
||||
<<: *dedicated-runner
|
||||
<<: *use-db
|
||||
script:
|
||||
- JOB_NAME=( $CI_BUILD_NAME )
|
||||
|
@ -103,6 +75,7 @@ setup-test-env:
|
|||
|
||||
.spinach-knapsack: &spinach-knapsack
|
||||
stage: test
|
||||
<<: *dedicated-runner
|
||||
<<: *use-db
|
||||
script:
|
||||
- JOB_NAME=( $CI_BUILD_NAME )
|
||||
|
@ -118,6 +91,44 @@ setup-test-env:
|
|||
- knapsack/
|
||||
- coverage/
|
||||
|
||||
# Prepare and merge knapsack tests
|
||||
|
||||
knapsack:
|
||||
<<: *knapsack-state
|
||||
<<: *dedicated-runner
|
||||
stage: prepare
|
||||
script:
|
||||
- mkdir -p knapsack/
|
||||
- '[[ -f knapsack/rspec_report.json ]] || echo "{}" > knapsack/rspec_report.json'
|
||||
- '[[ -f knapsack/spinach_report.json ]] || echo "{}" > knapsack/spinach_report.json'
|
||||
|
||||
setup-test-env:
|
||||
<<: *use-db
|
||||
<<: *dedicated-runner
|
||||
stage: prepare
|
||||
script:
|
||||
- bundle exec rake assets:precompile 2>/dev/null
|
||||
- bundle exec ruby -Ispec -e 'require "spec_helper" ; TestEnv.init'
|
||||
artifacts:
|
||||
expire_in: 7d
|
||||
paths:
|
||||
- public/assets
|
||||
- tmp/tests
|
||||
|
||||
update-knapsack:
|
||||
<<: *knapsack-state
|
||||
<<: *dedicated-runner
|
||||
stage: post-test
|
||||
script:
|
||||
- scripts/merge-reports knapsack/rspec_report.json knapsack/rspec_node_*.json
|
||||
- scripts/merge-reports knapsack/spinach_report.json knapsack/spinach_node_*.json
|
||||
- rm -f knapsack/*_node_*.json
|
||||
only:
|
||||
- master@gitlab-org/gitlab-ce
|
||||
- master@gitlab-org/gitlab-ee
|
||||
- master@gitlab/gitlabhq
|
||||
- master@gitlab/gitlab-ee
|
||||
|
||||
rspec 0 20: *rspec-knapsack
|
||||
rspec 1 20: *rspec-knapsack
|
||||
rspec 2 20: *rspec-knapsack
|
||||
|
@ -166,10 +177,12 @@ spinach 9 10: *spinach-knapsack
|
|||
|
||||
.rspec-knapsack-ruby21: &rspec-knapsack-ruby21
|
||||
<<: *rspec-knapsack
|
||||
<<: *dedicated-runner
|
||||
<<: *ruby-21
|
||||
|
||||
.spinach-knapsack-ruby21: &spinach-knapsack-ruby21
|
||||
<<: *spinach-knapsack
|
||||
<<: *dedicated-runner
|
||||
<<: *ruby-21
|
||||
|
||||
rspec 0 20 ruby21: *rspec-knapsack-ruby21
|
||||
|
@ -214,6 +227,7 @@ spinach 9 10 ruby21: *spinach-knapsack-ruby21
|
|||
|
||||
.exec: &exec
|
||||
<<: *ruby-static-analysis
|
||||
<<: *dedicated-runner
|
||||
stage: test
|
||||
script:
|
||||
- bundle exec $CI_BUILD_NAME
|
||||
|
@ -229,14 +243,13 @@ rake ee_compat_check:
|
|||
<<: *exec
|
||||
only:
|
||||
- branches@gitlab-org/gitlab-ce
|
||||
- branches@gitlab/gitlabhq
|
||||
except:
|
||||
- master
|
||||
- tags
|
||||
- /^[\d-]+-stable(-ee)?$/
|
||||
allow_failure: yes
|
||||
cache:
|
||||
key: "ruby231-ee_compat_check_repo"
|
||||
key: "ruby233-ee_compat_check_repo"
|
||||
paths:
|
||||
- ee_compat_check/repo/
|
||||
- vendor/ruby
|
||||
|
@ -250,12 +263,14 @@ rake ee_compat_check:
|
|||
rake db:migrate:reset:
|
||||
stage: test
|
||||
<<: *use-db
|
||||
<<: *dedicated-runner
|
||||
script:
|
||||
- rake db:migrate:reset
|
||||
|
||||
rake db:seed_fu:
|
||||
stage: test
|
||||
<<: *use-db
|
||||
<<: *dedicated-runner
|
||||
variables:
|
||||
SIZE: "1"
|
||||
SETUP_DB: "false"
|
||||
|
@ -277,9 +292,8 @@ teaspoon:
|
|||
- node_modules/
|
||||
stage: test
|
||||
<<: *use-db
|
||||
<<: *dedicated-runner
|
||||
script:
|
||||
- curl --silent --location https://deb.nodesource.com/setup_6.x | bash -
|
||||
- apt-get install --assume-yes nodejs
|
||||
- npm install
|
||||
- npm link istanbul
|
||||
- rake teaspoon
|
||||
|
@ -291,20 +305,23 @@ teaspoon:
|
|||
|
||||
lint-doc:
|
||||
stage: test
|
||||
<<: *dedicated-runner
|
||||
image: "phusion/baseimage:latest"
|
||||
before_script: []
|
||||
script:
|
||||
- scripts/lint-doc.sh
|
||||
|
||||
bundler:check:
|
||||
stage: test
|
||||
<<: *ruby-static-analysis
|
||||
script:
|
||||
stage: test
|
||||
<<: *dedicated-runner
|
||||
<<: *ruby-static-analysis
|
||||
script:
|
||||
- bundle check
|
||||
|
||||
bundler:audit:
|
||||
stage: test
|
||||
<<: *ruby-static-analysis
|
||||
<<: *dedicated-runner
|
||||
only:
|
||||
- master@gitlab-org/gitlab-ce
|
||||
- master@gitlab-org/gitlab-ee
|
||||
|
@ -316,6 +333,7 @@ bundler:audit:
|
|||
migration paths:
|
||||
stage: test
|
||||
<<: *use-db
|
||||
<<: *dedicated-runner
|
||||
variables:
|
||||
SETUP_DB: "false"
|
||||
only:
|
||||
|
@ -328,7 +346,7 @@ migration paths:
|
|||
- git checkout -f FETCH_HEAD
|
||||
- cp config/resque.yml.example config/resque.yml
|
||||
- sed -i 's/localhost/redis/g' config/resque.yml
|
||||
- bundle install --without postgres production --jobs $(nproc) ${FLAGS[@]} --retry=3
|
||||
- bundle install --without postgres production --jobs $(nproc) $FLAGS --retry=3
|
||||
- rake db:drop db:create db:schema:load db:seed_fu
|
||||
- git checkout $CI_BUILD_REF
|
||||
- source scripts/prepare_build.sh
|
||||
|
@ -337,6 +355,7 @@ migration paths:
|
|||
coverage:
|
||||
stage: post-test
|
||||
services: []
|
||||
<<: *dedicated-runner
|
||||
variables:
|
||||
SETUP_DB: "false"
|
||||
USE_BUNDLE_INSTALL: "true"
|
||||
|
@ -349,7 +368,8 @@ coverage:
|
|||
- coverage/index.html
|
||||
- coverage/assets/
|
||||
|
||||
lint-javascript:
|
||||
lint:javascript:
|
||||
<<: *dedicated-runner
|
||||
cache:
|
||||
paths:
|
||||
- node_modules/
|
||||
|
@ -358,13 +378,32 @@ lint-javascript:
|
|||
before_script:
|
||||
- npm install
|
||||
script:
|
||||
- npm run eslint
|
||||
- npm --silent run eslint
|
||||
|
||||
lint:javascript:report:
|
||||
<<: *dedicated-runner
|
||||
cache:
|
||||
paths:
|
||||
- node_modules/
|
||||
stage: post-test
|
||||
image: "node:7.1"
|
||||
before_script:
|
||||
- npm install
|
||||
script:
|
||||
- find app/ spec/ -name '*.js' -or -name '*.js.es6' -exec sed --in-place 's|/\* eslint-disable .*\*/||' {} \; # run report over all files
|
||||
- npm --silent run eslint-report || true # ignore exit code
|
||||
artifacts:
|
||||
name: eslint-report
|
||||
expire_in: 31d
|
||||
paths:
|
||||
- eslint-report.html
|
||||
|
||||
# Trigger docs build
|
||||
# https://gitlab.com/gitlab-com/doc-gitlab-com/blob/master/README.md#deployment-process
|
||||
trigger_docs:
|
||||
stage: post-test
|
||||
image: "alpine"
|
||||
<<: *dedicated-runner
|
||||
before_script:
|
||||
- apk update && apk add curl
|
||||
variables:
|
||||
|
@ -380,11 +419,12 @@ trigger_docs:
|
|||
|
||||
notify:slack:
|
||||
stage: post-test
|
||||
<<: *dedicated-runner
|
||||
variables:
|
||||
SETUP_DB: "false"
|
||||
USE_BUNDLE_INSTALL: "false"
|
||||
script:
|
||||
- ./scripts/notify_slack.sh "#builds" "Build on \`$CI_BUILD_REF_NAME\` failed! Commit \`$(git log -1 --oneline)\` See <https://gitlab.com/gitlab-org/$(basename "$PWD")/commit/"$CI_BUILD_REF"/builds>"
|
||||
- ./scripts/notify_slack.sh "#development" "Build on \`$CI_BUILD_REF_NAME\` failed! Commit \`$(git log -1 --oneline)\` See <https://gitlab.com/gitlab-org/$(basename "$PWD")/commit/"$CI_BUILD_REF"/builds>"
|
||||
when: on_failure
|
||||
only:
|
||||
- master@gitlab-org/gitlab-ce
|
||||
|
@ -395,23 +435,27 @@ notify:slack:
|
|||
pages:
|
||||
before_script: []
|
||||
stage: pages
|
||||
<<: *dedicated-runner
|
||||
dependencies:
|
||||
- coverage
|
||||
- teaspoon
|
||||
- lint:javascript:report
|
||||
script:
|
||||
- mv public/ .public/
|
||||
- mkdir public/
|
||||
- mv coverage public/coverage-ruby
|
||||
- mv coverage-javascript/default/ public/coverage-javascript/
|
||||
- mv eslint-report.html public/
|
||||
artifacts:
|
||||
paths:
|
||||
- public
|
||||
only:
|
||||
- master
|
||||
- master@gitlab-org/gitlab-ce
|
||||
|
||||
# Insurance in case a gem needed by one of our releases gets yanked from
|
||||
# rubygems.org in the future.
|
||||
cache gems:
|
||||
<<: *dedicated-runner
|
||||
only:
|
||||
- tags
|
||||
variables:
|
||||
|
@ -421,3 +465,5 @@ cache gems:
|
|||
artifacts:
|
||||
paths:
|
||||
- vendor/cache
|
||||
only:
|
||||
- master@gitlab-org/gitlab-ce
|
||||
|
|
|
@ -21,6 +21,8 @@ logs, and code as it's very hard to read otherwise.)
|
|||
|
||||
### Output of checks
|
||||
|
||||
(If you are reporting a bug on GitLab.com, write: This bug happens on GitLab.com)
|
||||
|
||||
#### Results of GitLab application Check
|
||||
|
||||
(For installations with omnibus-gitlab package run and paste the output of:
|
||||
|
|
|
@ -292,7 +292,8 @@ Style/MultilineMethodDefinitionBraceLayout:
|
|||
|
||||
# Checks indentation of binary operations that span more than one line.
|
||||
Style/MultilineOperationIndentation:
|
||||
Enabled: false
|
||||
Enabled: true
|
||||
EnforcedStyle: indented
|
||||
|
||||
# Avoid multi-line `? :` (the ternary operator), use if/unless instead.
|
||||
Style/MultilineTernaryOperator:
|
||||
|
|
|
@ -1 +1 @@
|
|||
2.3.1
|
||||
2.3.3
|
||||
|
|
|
@ -30,7 +30,7 @@ linters:
|
|||
# variable declarations. They should be referred to via variables everywhere
|
||||
# else.
|
||||
ColorVariable:
|
||||
enabled: false
|
||||
enabled: true
|
||||
|
||||
# Which form of comments to prefer in CSS.
|
||||
Comment:
|
||||
|
|
221
CHANGELOG.md
221
CHANGELOG.md
|
@ -2,8 +2,195 @@
|
|||
documentation](doc/development/changelog.md) for instructions on adding your own
|
||||
entry.
|
||||
|
||||
## 8.14.4 (2016-12-08)
|
||||
|
||||
- Fix diff view permalink highlighting. !7090
|
||||
- Fix pipeline author for Slack and use pipeline id for pipeline link. !7506
|
||||
- Fix compatibility with Internet Explorer 11 for merge requests. !7525 (Steffen Rauh)
|
||||
- Reenables /user API request to return private-token if user is admin and request is made with sudo. !7615
|
||||
- Fix Cicking on tabs on pipeline page should set URL. !7709
|
||||
- Authorize users into imported GitLab project.
|
||||
- Destroy a user's session when they delete their own account.
|
||||
- Don't accidentally mark unsafe diff lines as HTML safe.
|
||||
- Replace MR access checks with use of MergeRequestsFinder.
|
||||
- Remove visible content caching.
|
||||
|
||||
## 8.14.3 (2016-12-02)
|
||||
|
||||
- Pass commit data to ProcessCommitWorker to reduce Git overhead. !7744
|
||||
- Speed up issuable dashboards.
|
||||
- Don't change relative URLs to absolute URLs in the Help page.
|
||||
- Fixes "ActionView::Template::Error: undefined method `text?` for nil:NilClass" on MR pages.
|
||||
- Fix branch validation for GitHub PR where repo/fork was renamed/deleted.
|
||||
- Validate state param when filtering issuables.
|
||||
|
||||
## 8.14.2 (2016-12-01)
|
||||
|
||||
- Remove caching of events data. !6578
|
||||
- Rephrase some system notes to be compatible with new system note style. !7692
|
||||
- Pass tag SHA to post-receive hook when tag is created via UI. !7700
|
||||
- Prevent error when submitting a merge request and pipeline is not defined. !7707
|
||||
- Fixes system note style in commit discussion. !7721
|
||||
- Use a Redis lease for updating authorized projects. !7733
|
||||
- Refactor JiraService by moving code out of JiraService#execute method. !7756
|
||||
- Update GitLab Workhorse to v1.0.1. !7759
|
||||
- Fix pipelines info being hidden in merge request widget. !7808
|
||||
- Fixed commit timeago not rendering after initial page.
|
||||
- Fix for error thrown in cycle analytics events if build has not started.
|
||||
- Fixed issue boards issue sorting when dragging issue into list.
|
||||
- Allow access to the wiki with git when repository feature disabled.
|
||||
- Fixed timeago not rendering when resolving a discussion.
|
||||
- Update Sidekiq-cron to fix compatibility issues with Sidekiq 4.2.1.
|
||||
- Timeout creating and viewing merge request for binary file.
|
||||
- Gracefully recover from Redis connection failures in Sidekiq initializer.
|
||||
|
||||
## 8.14.1 (2016-11-28)
|
||||
|
||||
- Fix deselecting calendar days on contribution graph. !6453 (ClemMakesApps)
|
||||
- Update grape entity to 0.6.0. !7491
|
||||
- If Build running change accept merge request when build succeeds button from orange to blue. !7577
|
||||
- Changed import sources buttons to checkboxes. !7598 (Luke "Jared" Bennett)
|
||||
- Last minute CI Style tweaks for 8.14. !7643
|
||||
- Fix exceptions when loading build trace. !7658
|
||||
- Fix wrong template rendered when CI/CD settings aren't update successfully. !7665
|
||||
- fixes last_deployment call environment is nil. !7671
|
||||
- Sort builds by name within pipeline graph. !7681
|
||||
- Correctly determine mergeability of MR with no discussions.
|
||||
- Sidekiq stats in the admin area will now show correctly on different platforms. (blackst0ne)
|
||||
- Fixed issue boards dragging card removing random issues.
|
||||
- Fix information disclosure in `Projects::BlobController#update`.
|
||||
- Fix missing access checks on issue lookup using IssuableFinder.
|
||||
- Replace issue access checks with use of IssuableFinder.
|
||||
- Non members cannot create labels through the API.
|
||||
- Fix cycle analytics plan stage when commits are missing.
|
||||
|
||||
## 8.14.0 (2016-11-22)
|
||||
|
||||
- Use separate email-token for incoming email and revert back the inactive feature. !5914
|
||||
- API: allow recursive tree request. !6088 (Rebeca Mendez)
|
||||
- Replace jQuery.timeago with timeago.js. !6274 (ClemMakesApps)
|
||||
- Add CI notifications. Who triggered a pipeline would receive an email after the pipeline is succeeded or failed. Users could also update notification settings accordingly. !6342
|
||||
- Add button to delete all merged branches. !6449 (Toon Claes)
|
||||
- Finer-grained Git gargage collection. !6588
|
||||
- Introduce better credential and error checking to `rake gitlab:ldap:check`. !6601
|
||||
- Centralize LDAP config/filter logic. !6606
|
||||
- Make system notes less intrusive. !6755
|
||||
- Process commits using a dedicated Sidekiq worker. !6802
|
||||
- Show random messages when the To Do list is empty. !6818 (Josep Llaneras)
|
||||
- Precalculate user's authorized projects in database. !6839
|
||||
- Fix record not found error on NewNoteWorker processing. !6863 (Oswaldo Ferreira)
|
||||
- Show avatars in mention dropdown. !6865
|
||||
- Fix expanding a collapsed diff when converting a symlink to a regular file. !6953
|
||||
- Defer saving project services to the database if there are no user changes. !6958
|
||||
- Omniauth auto link LDAP user falls back to find by DN when user cannot be found by UID. !7002
|
||||
- Display "folders" for environments. !7015
|
||||
- Make it possible to trigger builds from webhooks. !7022 (Dmitry Poray)
|
||||
- Fix showing pipeline status for a given commit from correct branch. !7034
|
||||
- Add link to build pipeline within individual build pages. !7082
|
||||
- Add api endpoint `/groups/owned`. !7103 (Borja Aparicio)
|
||||
- Add query param to filter users by external & blocked type. !7109 (Yatish Mehta)
|
||||
- Issues atom feed url reflect filters on dashboard. !7114 (Lucas Deschamps)
|
||||
- Add setting to only allow merge requests to be merged when all discussions are resolved. !7125 (Rodolfo Arruda)
|
||||
- Remove an extra leading space from diff paste data. !7133 (Hiroyuki Sato)
|
||||
- Fix trace patching feature - update the updated_at value. !7146
|
||||
- Fix 404 on network page when entering non-existent git revision. !7172 (Hiroyuki Sato)
|
||||
- Rewrite git blame spinach feature tests to rspec feature tests. !7197 (Lisanne Fellinger)
|
||||
- Add api endpoint for creating a pipeline. !7209 (Ido Leibovich)
|
||||
- Allow users to subscribe to group labels. !7215
|
||||
- Reduce API calls needed when importing issues and pull requests from GitHub. !7241 (Andrew Smith (EspadaV8))
|
||||
- Only skip group when it's actually a group in the "Share with group" select. !7262
|
||||
- Introduce round-robin project creation to spread load over multiple shards. !7266
|
||||
- Ensure merge request's "remove branch" accessors return booleans. !7267
|
||||
- Fix no "Register" tab if ldap auth is enabled (#24038). !7274 (Luc Didry)
|
||||
- Expose label IDs in API. !7275 (Rares Sfirlogea)
|
||||
- Fix invalid filename validation on eslint. !7281
|
||||
- API: Ability to retrieve version information. !7286 (Robert Schilling)
|
||||
- Added ability to throttle Sidekiq Jobs. !7292
|
||||
- Set default Sidekiq retries to 3. !7294
|
||||
- Fix double event and ajax request call on MR page. !7298 (YarNayar)
|
||||
- Unify anchor link format for MR diff files. !7298 (YarNayar)
|
||||
- Require projects before creating milestone. !7301 (gfyoung)
|
||||
- Fix error when using invalid branch name when creating a new pipeline. !7324
|
||||
- Return 400 when creating a system hook fails. !7350 (Robert Schilling)
|
||||
- Auto-close environment when branch is deleted. !7355
|
||||
- Rework cache invalidation so only changed data is refreshed. !7360
|
||||
- Navigation bar issuables counters reflects dashboard issuables counters. !7368 (Lucas Deschamps)
|
||||
- Fix cache for commit status in commits list to respect branches. !7372
|
||||
- fixes 500 error on project show when user is not logged in and project is still empty. !7376
|
||||
- Removed gray button styling from todo buttons in sidebars. !7387
|
||||
- Fix project records with invalid visibility_level values. !7391
|
||||
- Use 'Forking in progress' title when appropriate. !7394 (Philip Karpiak)
|
||||
- Fix error links in help index page. !7396 (Fu Xu)
|
||||
- Add support for reply-by-email when the email only contains HTML. !7397
|
||||
- [Fix] Extra divider issue in dropdown. !7398
|
||||
- Project download buttons always show. !7405 (Philip Karpiak)
|
||||
- Give search-input correct padding-right value. !7407 (Philip Karpiak)
|
||||
- Remove additional padding on right-aligned items in MR widget. !7411 (Didem Acet)
|
||||
- Fix issue causing Labels not to appear in sidebar on MR page. !7416 (Alex Sanford)
|
||||
- Allow mail_room idle_timeout option to be configurable. !7423
|
||||
- Fix misaligned buttons on admin builds page. !7424 (Didem Acet)
|
||||
- Disable "Request Access" functionality by default for new projects and groups. !7425
|
||||
- fix shibboleth misconfigurations resulting in authentication bypass. !7428
|
||||
- Added Mattermost slash command. !7438
|
||||
- Allow to connect Chat account with GitLab. !7450
|
||||
- Make New Group form respect default visibility application setting. !7454 (Jacopo Beschi @jacopo-beschi)
|
||||
- Fix Error 500 when creating a merge request that contains an image that was deleted and added. !7457
|
||||
- Fix labels API by adding missing current_user parameter. !7458 (Francesco Coda Zabetta)
|
||||
- Changed restricted visibility admin buttons to checkboxes. !7463
|
||||
- Send credentials (currently for registry only) with build data to GitLab Runner. !7474
|
||||
- Fix POST /internal/allowed to cope with gitlab-shell v4.0.0 project paths. !7480
|
||||
- Adds es6-promise Polyfill. !7482
|
||||
- Added colored labels to related MR list. !7486 (Didem Acet)
|
||||
- Use setter for key instead AR callback. !7488 (Semyon Pupkov)
|
||||
- Limit labels returned for a specific project as an administrator. !7496
|
||||
- Change slack notification comment link. !7498 (Herbert Kagumba)
|
||||
- Allow registering users whose username contains dots. !7500 (Timothy Andrew)
|
||||
- Fix race condition during group deletion and remove stale records present due to this bug. !7528 (Timothy Andrew)
|
||||
- Check all namespaces on validation of new username. !7537
|
||||
- Pass correct tag target to post-receive hook when creating tag via UI. !7556
|
||||
- Add help message for configuring Mattermost slash commands. !7558
|
||||
- Fix typo in Build page JavaScript. !7563 (winniehell)
|
||||
- Make job script a required configuration entry. !7566
|
||||
- Fix errors happening when source branch of merge request is removed and then restored. !7568
|
||||
- Fix a wrong "The build for this merge request failed" message. !7579
|
||||
- Fix Margins look weird in Project page with pinned sidebar in project stats bar. !7580
|
||||
- Fix regression causing bad error message to appear on Merge Request form. !7599 (Alex Sanford)
|
||||
- Fix activity page endless scroll on large viewports. !7608
|
||||
- Fix 404 on some group pages when name contains dot. !7614
|
||||
- Do not create a new TODO when failed build is allowed to fail. !7618
|
||||
- Add deployment command to ChatOps. !7619
|
||||
- Fix 500 error when group name ends with git. !7630
|
||||
- Fix undefined error in CI linter. !7650
|
||||
- Show events per stage on Cycle Analytics page. !23449
|
||||
- Add JIRA remotelinks and prevent duplicated closing messages.
|
||||
- Fixed issue boards counter border when unauthorized.
|
||||
- Add placeholder for the example text for custom hex color on label creation popup. (Luis Alonso Chavez Armendariz)
|
||||
- Add an index for project_id in project_import_data to improve performance.
|
||||
- Fix broken commits search.
|
||||
- Assignee dropdown now searches author of issue or merge request.
|
||||
- Clicking "force remove source branch" label now toggles the checkbox again.
|
||||
- More aggressively preload on merge request and issue index pages.
|
||||
- Fix broken link to observatory cli on Frontend Dev Guide. (Sam Rose)
|
||||
- Fixing the issue of the project fork url giving 500 when not signed instead of being redirected to sign in page. (Cagdas Gerede)
|
||||
- Fix: Guest sees some repository details and gets 404.
|
||||
- Add logging for rack attack events to production.log.
|
||||
- Add environment info to builds page.
|
||||
- Allow commit note to be visible if repo is visible.
|
||||
- Bump omniauth-gitlab to 1.0.2 to fix incompatibility with omniauth-oauth2.
|
||||
- Redesign pipelines page.
|
||||
- Faster search inside Project.
|
||||
- Search for a filename in a project.
|
||||
- Allow sorting groups in the API.
|
||||
- Fix: Todos Filter Shows All Users.
|
||||
- Use the Gitlab Workhorse HTTP header in the admin dashboard. (Chris Wright)
|
||||
- Fixed multiple requests sent when opening dropdowns.
|
||||
- Added permissions per stage to cycle analytics endpoint.
|
||||
- Fix project Visibility Level selector not using default values.
|
||||
- Add events per stage to cycle analytics.
|
||||
- Allow to test JIRA service settings without having a repository.
|
||||
- Fix JIRA references for project snippets.
|
||||
- Allow enabling and disabling commit and MR events for JIRA.
|
||||
- simplify url generation. (Jarka Kadlecova)
|
||||
- Show correct environment log in admin/logs (@duk3luk3 !7191)
|
||||
- Fix Milestone dropdown not stay selected for `Upcoming` and `No Milestone` option !7117
|
||||
- Diff collapse won't shift when collapsing.
|
||||
|
@ -77,6 +264,25 @@ entry.
|
|||
- Fix "Without projects" filter. !6611 (Ben Bodenmiller)
|
||||
- Fix 404 when visit /projects page
|
||||
|
||||
## 8.13.9 (2016-12-08)
|
||||
|
||||
- Reenables /user API request to return private-token if user is admin and request is made with sudo. !7615
|
||||
- Replace MR access checks with use of MergeRequestsFinder.
|
||||
|
||||
## 8.13.8 (2016-12-02)
|
||||
|
||||
- Pass tag SHA to post-receive hook when tag is created via UI. !7700
|
||||
- Validate state param when filtering issuables.
|
||||
|
||||
## 8.13.7 (2016-11-28)
|
||||
|
||||
- fixes 500 error on project show when user is not logged in and project is still empty. !7376
|
||||
- Update grape entity to 0.6.0. !7491
|
||||
- Fix information disclosure in `Projects::BlobController#update`.
|
||||
- Fix missing access checks on issue lookup using IssuableFinder.
|
||||
- Replace issue access checks with use of IssuableFinder.
|
||||
- Non members cannot create labels through the API.
|
||||
|
||||
## 8.13.6 (2016-11-17)
|
||||
|
||||
- Omniauth auto link LDAP user falls back to find by DN when user cannot be found by UID. !7002
|
||||
|
@ -307,6 +513,21 @@ entry.
|
|||
- Fix broken Project API docs (Takuya Noguchi)
|
||||
- Migrate invalid project members (owner -> master)
|
||||
|
||||
## 8.12.12 (2016-12-08)
|
||||
|
||||
- Replace MR access checks with use of MergeRequestsFinder
|
||||
- Reenables /user API request to return private-token if user is admin and request is made with sudo
|
||||
|
||||
## 8.12.11 (2016-12-02)
|
||||
|
||||
- No changes
|
||||
|
||||
## 8.12.10 (2016-11-28)
|
||||
|
||||
- Fix information disclosure in `Projects::BlobController#update`
|
||||
- Fix missing access checks on issue lookup using IssuableFinder
|
||||
- Replace issue access checks with use of IssuableFinder
|
||||
|
||||
## 8.12.9 (2016-11-07)
|
||||
|
||||
- Fix XSS issue in Markdown autolinker
|
||||
|
|
|
@ -1 +1 @@
|
|||
4.0.0
|
||||
4.1.0
|
||||
|
|
|
@ -1 +1 @@
|
|||
1.0.0
|
||||
1.2.0
|
||||
|
|
22
Gemfile
22
Gemfile
|
@ -22,7 +22,6 @@ gem 'doorkeeper', '~> 4.2.0'
|
|||
gem 'omniauth', '~> 1.3.1'
|
||||
gem 'omniauth-auth0', '~> 1.4.1'
|
||||
gem 'omniauth-azure-oauth2', '~> 0.0.6'
|
||||
gem 'omniauth-bitbucket', '~> 0.0.2'
|
||||
gem 'omniauth-cas3', '~> 1.1.2'
|
||||
gem 'omniauth-facebook', '~> 4.0.0'
|
||||
gem 'omniauth-github', '~> 1.1.1'
|
||||
|
@ -67,8 +66,8 @@ gem 'gollum-rugged_adapter', '~> 0.4.2', require: false
|
|||
gem 'github-linguist', '~> 4.7.0', require: 'linguist'
|
||||
|
||||
# API
|
||||
gem 'grape', '~> 0.15.0'
|
||||
gem 'grape-entity', '~> 0.4.2'
|
||||
gem 'grape', '~> 0.18.0'
|
||||
gem 'grape-entity', '~> 0.6.0'
|
||||
gem 'rack-cors', '~> 0.4.0', require: 'rack/cors'
|
||||
|
||||
# Pagination
|
||||
|
@ -85,10 +84,8 @@ gem 'dropzonejs-rails', '~> 0.7.1'
|
|||
|
||||
# for backups
|
||||
gem 'fog-aws', '~> 0.9'
|
||||
gem 'fog-azure', '~> 0.0'
|
||||
gem 'fog-core', '~> 1.40'
|
||||
gem 'fog-local', '~> 0.3'
|
||||
gem 'fog-google', '~> 0.3'
|
||||
gem 'fog-openstack', '~> 0.1'
|
||||
gem 'fog-rackspace', '~> 0.1.1'
|
||||
|
||||
|
@ -134,8 +131,8 @@ gem 'after_commit_queue', '~> 1.3.0'
|
|||
gem 'acts-as-taggable-on', '~> 4.0'
|
||||
|
||||
# Background jobs
|
||||
gem 'sidekiq', '~> 4.2'
|
||||
gem 'sidekiq-cron', '~> 0.4.0'
|
||||
gem 'sidekiq', '~> 4.2.7'
|
||||
gem 'sidekiq-cron', '~> 0.4.4'
|
||||
gem 'redis-namespace', '~> 1.5.2'
|
||||
gem 'sidekiq-limit_fetch', '~> 3.4'
|
||||
|
||||
|
@ -180,6 +177,9 @@ gem 'asana', '~> 0.4.0'
|
|||
# FogBugz integration
|
||||
gem 'ruby-fogbugz', '~> 0.2.1'
|
||||
|
||||
# Kubernetes integration
|
||||
gem 'kubeclient', '~> 2.2.0'
|
||||
|
||||
# d3
|
||||
gem 'd3_rails', '~> 3.5.0'
|
||||
|
||||
|
@ -266,14 +266,14 @@ group :development do
|
|||
end
|
||||
|
||||
group :development, :test do
|
||||
gem 'byebug', '~> 8.2.1', platform: :mri
|
||||
gem 'pry-byebug', '~> 3.4.1', platform: :mri
|
||||
gem 'pry-rails', '~> 0.3.4'
|
||||
|
||||
gem 'awesome_print', '~> 1.2.0', require: false
|
||||
gem 'fuubar', '~> 2.0.0'
|
||||
|
||||
gem 'database_cleaner', '~> 1.5.0'
|
||||
gem 'factory_girl_rails', '~> 4.6.0'
|
||||
gem 'factory_girl_rails', '~> 4.7.0'
|
||||
gem 'rspec-rails', '~> 3.5.0'
|
||||
gem 'rspec-retry', '~> 0.4.5'
|
||||
gem 'spinach-rails', '~> 0.2.1'
|
||||
|
@ -311,6 +311,8 @@ group :development, :test do
|
|||
gem 'knapsack', '~> 1.11.0'
|
||||
|
||||
gem 'activerecord_sane_schema_dumper', '0.2'
|
||||
|
||||
gem 'stackprof', '~> 0.2.10'
|
||||
end
|
||||
|
||||
group :test do
|
||||
|
@ -338,7 +340,7 @@ gem 'ruby-prof', '~> 0.16.2'
|
|||
gem 'oauth2', '~> 1.2.0'
|
||||
|
||||
# Soft deletion
|
||||
gem 'paranoia', '~> 2.0'
|
||||
gem 'paranoia', '~> 2.2'
|
||||
|
||||
# Health check
|
||||
gem 'health_check', '~> 2.2.0'
|
||||
|
|
114
Gemfile.lock
114
Gemfile.lock
|
@ -66,21 +66,6 @@ GEM
|
|||
descendants_tracker (~> 0.0.4)
|
||||
ice_nine (~> 0.11.0)
|
||||
thread_safe (~> 0.3, >= 0.3.1)
|
||||
azure (0.7.5)
|
||||
addressable (~> 2.3)
|
||||
azure-core (~> 0.1)
|
||||
faraday (~> 0.9)
|
||||
faraday_middleware (~> 0.10)
|
||||
json (~> 1.8)
|
||||
mime-types (>= 1, < 3.0)
|
||||
nokogiri (~> 1.6)
|
||||
systemu (~> 2.6)
|
||||
thor (~> 0.19)
|
||||
uuid (~> 2.0)
|
||||
azure-core (0.1.2)
|
||||
faraday (~> 0.9)
|
||||
faraday_middleware (~> 0.10)
|
||||
nokogiri (~> 1.6)
|
||||
babel-source (5.8.35)
|
||||
babel-transpiler (0.7.0)
|
||||
babel-source (>= 4.0, < 6)
|
||||
|
@ -106,7 +91,7 @@ GEM
|
|||
bundler-audit (0.5.0)
|
||||
bundler (~> 1.2)
|
||||
thor (~> 0.18)
|
||||
byebug (8.2.1)
|
||||
byebug (9.0.6)
|
||||
capybara (2.6.2)
|
||||
addressable
|
||||
mime-types (>= 1.16)
|
||||
|
@ -141,7 +126,7 @@ GEM
|
|||
coffee-script-source (1.10.0)
|
||||
colorize (0.7.7)
|
||||
concurrent-ruby (1.0.2)
|
||||
connection_pool (2.2.0)
|
||||
connection_pool (2.2.1)
|
||||
crack (0.4.3)
|
||||
safe_yaml (~> 1.0.0)
|
||||
creole (0.5.0)
|
||||
|
@ -176,6 +161,8 @@ GEM
|
|||
diff-lcs (1.2.5)
|
||||
diffy (3.1.0)
|
||||
docile (1.1.5)
|
||||
domain_name (0.5.20161021)
|
||||
unf (>= 0.0.5, < 1.0.0)
|
||||
doorkeeper (4.2.0)
|
||||
railties (>= 4.2)
|
||||
dropzonejs-rails (0.7.2)
|
||||
|
@ -192,10 +179,10 @@ GEM
|
|||
excon (0.52.0)
|
||||
execjs (2.6.0)
|
||||
expression_parser (0.9.0)
|
||||
factory_girl (4.5.0)
|
||||
factory_girl (4.7.0)
|
||||
activesupport (>= 3.0.0)
|
||||
factory_girl_rails (4.6.0)
|
||||
factory_girl (~> 4.5.0)
|
||||
factory_girl_rails (4.7.0)
|
||||
factory_girl (~> 4.7.0)
|
||||
railties (>= 3.0.0)
|
||||
faraday (0.9.2)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
|
@ -217,19 +204,10 @@ GEM
|
|||
fog-json (~> 1.0)
|
||||
fog-xml (~> 0.1)
|
||||
ipaddress (~> 0.8)
|
||||
fog-azure (0.0.2)
|
||||
azure (~> 0.6)
|
||||
fog-core (~> 1.27)
|
||||
fog-json (~> 1.0)
|
||||
fog-xml (~> 0.1)
|
||||
fog-core (1.42.0)
|
||||
builder
|
||||
excon (~> 0.49)
|
||||
formatador (~> 0.2)
|
||||
fog-google (0.3.2)
|
||||
fog-core
|
||||
fog-json
|
||||
fog-xml
|
||||
fog-json (1.0.2)
|
||||
fog-core (~> 1.0)
|
||||
multi_json (~> 1.10)
|
||||
|
@ -306,17 +284,17 @@ GEM
|
|||
json
|
||||
multi_json
|
||||
request_store (>= 1.0)
|
||||
grape (0.15.0)
|
||||
grape (0.18.0)
|
||||
activesupport
|
||||
builder
|
||||
hashie (>= 2.1.0)
|
||||
multi_json (>= 1.3.2)
|
||||
multi_xml (>= 0.5.2)
|
||||
mustermann-grape (~> 0.4.0)
|
||||
rack (>= 1.3.0)
|
||||
rack-accept
|
||||
rack-mount
|
||||
virtus (>= 1.0.0)
|
||||
grape-entity (0.4.8)
|
||||
grape-entity (0.6.0)
|
||||
activesupport
|
||||
multi_json (>= 1.3.2)
|
||||
haml (4.0.7)
|
||||
|
@ -342,6 +320,15 @@ GEM
|
|||
html2text (0.2.0)
|
||||
nokogiri (~> 1.6)
|
||||
htmlentities (4.3.4)
|
||||
http (0.9.8)
|
||||
addressable (~> 2.3)
|
||||
http-cookie (~> 1.0)
|
||||
http-form_data (~> 1.0.1)
|
||||
http_parser.rb (~> 0.6.0)
|
||||
http-cookie (1.0.3)
|
||||
domain_name (~> 0.5)
|
||||
http-form_data (1.0.1)
|
||||
http_parser.rb (0.6.0)
|
||||
httparty (0.13.7)
|
||||
json (~> 1.8)
|
||||
multi_xml (>= 0.5.2)
|
||||
|
@ -376,6 +363,10 @@ GEM
|
|||
knapsack (1.11.0)
|
||||
rake
|
||||
timecop (>= 0.1.0)
|
||||
kubeclient (2.2.0)
|
||||
http (= 0.9.8)
|
||||
recursive-open-struct (= 1.0.0)
|
||||
rest-client
|
||||
launchy (2.4.3)
|
||||
addressable (~> 2.3)
|
||||
letter_opener (1.4.1)
|
||||
|
@ -397,8 +388,6 @@ GEM
|
|||
rb-inotify (>= 0.9)
|
||||
loofah (2.0.3)
|
||||
nokogiri (>= 1.5.9)
|
||||
macaddr (1.7.1)
|
||||
systemu (~> 2.6.2)
|
||||
mail (2.6.4)
|
||||
mime-types (>= 1.16, < 4)
|
||||
mail_room (0.9.0)
|
||||
|
@ -411,9 +400,14 @@ GEM
|
|||
multi_json (1.12.1)
|
||||
multi_xml (0.5.5)
|
||||
multipart-post (2.0.0)
|
||||
mustermann (0.4.0)
|
||||
tool (~> 0.2)
|
||||
mustermann-grape (0.4.0)
|
||||
mustermann (= 0.4.0)
|
||||
mysql2 (0.3.20)
|
||||
net-ldap (0.12.1)
|
||||
net-ssh (3.0.1)
|
||||
netrc (0.11.0)
|
||||
newrelic_rpm (3.16.0.318)
|
||||
nokogiri (1.6.8)
|
||||
mini_portile2 (~> 2.1.0)
|
||||
|
@ -438,10 +432,6 @@ GEM
|
|||
jwt (~> 1.0)
|
||||
omniauth (~> 1.0)
|
||||
omniauth-oauth2 (~> 1.1)
|
||||
omniauth-bitbucket (0.0.2)
|
||||
multi_json (~> 1.7)
|
||||
omniauth (~> 1.1)
|
||||
omniauth-oauth (~> 1.0)
|
||||
omniauth-cas3 (1.1.3)
|
||||
addressable (~> 2.3)
|
||||
nokogiri (~> 1.6.6)
|
||||
|
@ -486,8 +476,8 @@ GEM
|
|||
org-ruby (0.9.12)
|
||||
rubypants (~> 0.2)
|
||||
orm_adapter (0.5.0)
|
||||
paranoia (2.1.4)
|
||||
activerecord (~> 4.0)
|
||||
paranoia (2.2.0)
|
||||
activerecord (>= 4.0, < 5.1)
|
||||
parser (2.3.1.4)
|
||||
ast (~> 2.2)
|
||||
pg (0.18.4)
|
||||
|
@ -509,17 +499,18 @@ GEM
|
|||
coderay (~> 1.1.0)
|
||||
method_source (~> 0.8.1)
|
||||
slop (~> 3.4)
|
||||
pry-byebug (3.4.1)
|
||||
byebug (~> 9.0)
|
||||
pry (~> 0.10)
|
||||
pry-rails (0.3.4)
|
||||
pry (>= 0.9.10)
|
||||
pyu-ruby-sasl (0.0.3.3)
|
||||
rack (1.6.4)
|
||||
rack (1.6.5)
|
||||
rack-accept (0.4.5)
|
||||
rack (>= 0.4)
|
||||
rack-attack (4.4.1)
|
||||
rack
|
||||
rack-cors (0.4.0)
|
||||
rack-mount (0.8.3)
|
||||
rack (>= 1.0.0)
|
||||
rack-oauth2 (1.2.3)
|
||||
activesupport (>= 2.3)
|
||||
attr_required (>= 0.0.5)
|
||||
|
@ -566,6 +557,7 @@ GEM
|
|||
json (~> 1.4)
|
||||
recaptcha (3.0.0)
|
||||
json
|
||||
recursive-open-struct (1.0.0)
|
||||
redcarpet (3.3.3)
|
||||
redis (3.2.2)
|
||||
redis-actionpack (5.0.1)
|
||||
|
@ -591,6 +583,10 @@ GEM
|
|||
listen (~> 3.0)
|
||||
responders (2.3.0)
|
||||
railties (>= 4.2.0, < 5.1)
|
||||
rest-client (2.0.0)
|
||||
http-cookie (>= 1.0.2, < 2.0)
|
||||
mime-types (>= 1.16, < 4.0)
|
||||
netrc (~> 0.8)
|
||||
rinku (2.0.0)
|
||||
rotp (2.1.2)
|
||||
rouge (2.0.7)
|
||||
|
@ -671,15 +667,15 @@ GEM
|
|||
rack
|
||||
shoulda-matchers (2.8.0)
|
||||
activesupport (>= 3.0.0)
|
||||
sidekiq (4.2.1)
|
||||
sidekiq (4.2.7)
|
||||
concurrent-ruby (~> 1.0)
|
||||
connection_pool (~> 2.2, >= 2.2.0)
|
||||
rack-protection (~> 1.5)
|
||||
rack-protection (>= 1.5.0)
|
||||
redis (~> 3.2, >= 3.2.1)
|
||||
sidekiq-cron (0.4.0)
|
||||
sidekiq-cron (0.4.4)
|
||||
redis-namespace (>= 1.5.2)
|
||||
rufus-scheduler (>= 2.0.24)
|
||||
sidekiq (>= 4.0.0)
|
||||
sidekiq (>= 4.2.1)
|
||||
sidekiq-limit_fetch (3.4.0)
|
||||
sidekiq (>= 4)
|
||||
simplecov (0.12.0)
|
||||
|
@ -717,6 +713,7 @@ GEM
|
|||
actionpack (>= 4.0)
|
||||
activesupport (>= 4.0)
|
||||
sprockets (>= 3.0.0)
|
||||
stackprof (0.2.10)
|
||||
state_machines (0.4.0)
|
||||
state_machines-activemodel (0.4.0)
|
||||
activemodel (>= 4.1, < 5.1)
|
||||
|
@ -728,7 +725,6 @@ GEM
|
|||
sys-filesystem (1.1.6)
|
||||
ffi
|
||||
sysexits (1.2.0)
|
||||
systemu (2.6.5)
|
||||
teaspoon (1.1.5)
|
||||
railties (>= 3.2.5, < 6)
|
||||
teaspoon-jasmine (2.2.0)
|
||||
|
@ -745,6 +741,7 @@ GEM
|
|||
tilt (2.0.5)
|
||||
timecop (0.8.1)
|
||||
timfel-krb5-auth (0.8.3)
|
||||
tool (0.2.3)
|
||||
truncato (0.7.8)
|
||||
htmlentities (~> 4.3.1)
|
||||
nokogiri (~> 1.6.1)
|
||||
|
@ -768,8 +765,6 @@ GEM
|
|||
get_process_mem (~> 0)
|
||||
unicorn (>= 4, < 6)
|
||||
uniform_notifier (1.10.0)
|
||||
uuid (2.3.8)
|
||||
macaddr (~> 1.0)
|
||||
version_sorter (2.1.0)
|
||||
virtus (1.0.5)
|
||||
axiom-types (~> 0.1)
|
||||
|
@ -824,7 +819,6 @@ DEPENDENCIES
|
|||
browser (~> 2.2)
|
||||
bullet (~> 5.2.0)
|
||||
bundler-audit (~> 0.5.0)
|
||||
byebug (~> 8.2.1)
|
||||
capybara (~> 2.6.2)
|
||||
capybara-screenshot (~> 1.0.0)
|
||||
carrierwave (~> 0.10.0)
|
||||
|
@ -845,13 +839,11 @@ DEPENDENCIES
|
|||
dropzonejs-rails (~> 0.7.1)
|
||||
email_reply_parser (~> 0.5.8)
|
||||
email_spec (~> 1.6.0)
|
||||
factory_girl_rails (~> 4.6.0)
|
||||
factory_girl_rails (~> 4.7.0)
|
||||
ffaker (~> 2.0.0)
|
||||
flay (~> 2.6.1)
|
||||
fog-aws (~> 0.9)
|
||||
fog-azure (~> 0.0)
|
||||
fog-core (~> 1.40)
|
||||
fog-google (~> 0.3)
|
||||
fog-local (~> 0.3)
|
||||
fog-openstack (~> 0.1)
|
||||
fog-rackspace (~> 0.1.1)
|
||||
|
@ -868,8 +860,8 @@ DEPENDENCIES
|
|||
gollum-lib (~> 4.2)
|
||||
gollum-rugged_adapter (~> 0.4.2)
|
||||
gon (~> 6.1.0)
|
||||
grape (~> 0.15.0)
|
||||
grape-entity (~> 0.4.2)
|
||||
grape (~> 0.18.0)
|
||||
grape-entity (~> 0.6.0)
|
||||
haml_lint (~> 0.18.2)
|
||||
hamlit (~> 2.6.1)
|
||||
health_check (~> 2.2.0)
|
||||
|
@ -887,6 +879,7 @@ DEPENDENCIES
|
|||
jwt
|
||||
kaminari (~> 0.17.0)
|
||||
knapsack (~> 1.11.0)
|
||||
kubeclient (~> 2.2.0)
|
||||
letter_opener_web (~> 1.3.0)
|
||||
license_finder (~> 2.1.0)
|
||||
licensee (~> 8.0.0)
|
||||
|
@ -905,7 +898,6 @@ DEPENDENCIES
|
|||
omniauth (~> 1.3.1)
|
||||
omniauth-auth0 (~> 1.4.1)
|
||||
omniauth-azure-oauth2 (~> 0.0.6)
|
||||
omniauth-bitbucket (~> 0.0.2)
|
||||
omniauth-cas3 (~> 1.1.2)
|
||||
omniauth-facebook (~> 4.0.0)
|
||||
omniauth-github (~> 1.1.1)
|
||||
|
@ -917,10 +909,11 @@ DEPENDENCIES
|
|||
omniauth-twitter (~> 1.2.0)
|
||||
omniauth_crowd (~> 2.2.0)
|
||||
org-ruby (~> 0.9.12)
|
||||
paranoia (~> 2.0)
|
||||
paranoia (~> 2.2)
|
||||
pg (~> 0.18.2)
|
||||
poltergeist (~> 1.9.0)
|
||||
premailer-rails (~> 1.9.0)
|
||||
pry-byebug (~> 3.4.1)
|
||||
pry-rails (~> 0.3.4)
|
||||
rack-attack (~> 4.4.1)
|
||||
rack-cors (~> 0.4.0)
|
||||
|
@ -955,8 +948,8 @@ DEPENDENCIES
|
|||
settingslogic (~> 2.0.9)
|
||||
sham_rack (~> 1.3.6)
|
||||
shoulda-matchers (~> 2.8.0)
|
||||
sidekiq (~> 4.2)
|
||||
sidekiq-cron (~> 0.4.0)
|
||||
sidekiq (~> 4.2.7)
|
||||
sidekiq-cron (~> 0.4.4)
|
||||
sidekiq-limit_fetch (~> 3.4)
|
||||
simplecov (= 0.12.0)
|
||||
slack-notifier (~> 1.2.0)
|
||||
|
@ -968,6 +961,7 @@ DEPENDENCIES
|
|||
spring-commands-teaspoon (~> 0.0.2)
|
||||
sprockets (~> 3.7.0)
|
||||
sprockets-es6 (~> 0.9.2)
|
||||
stackprof (~> 0.2.10)
|
||||
state_machines-activerecord (~> 0.4.0)
|
||||
sys-filesystem (~> 1.1.6)
|
||||
teaspoon (~> 1.1.0)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# GitLab
|
||||
|
||||
[![Build status](https://gitlab.com/gitlab-org/gitlab-ce/badges/master/build.svg)](https://gitlab.com/gitlab-org/gitlab-ce/commits/master)
|
||||
[![CE coverage report](https://gitlab.com/gitlab-org/gitlab-ce/badges/master/coverage.svg?job=coverage)](http://gitlab-org.gitlab.io/gitlab-ce/coverage-ruby)
|
||||
[![CE coverage report](https://gitlab.com/gitlab-org/gitlab-ce/badges/master/coverage.svg?job=coverage)](https://gitlab-org.gitlab.io/gitlab-ce/coverage-ruby)
|
||||
[![Code Climate](https://codeclimate.com/github/gitlabhq/gitlabhq.svg)](https://codeclimate.com/github/gitlabhq/gitlabhq)
|
||||
[![Core Infrastructure Initiative Best Practices](https://bestpractices.coreinfrastructure.org/projects/42/badge)](https://bestpractices.coreinfrastructure.org/projects/42)
|
||||
|
||||
|
@ -76,7 +76,7 @@ GitLab is a Ruby on Rails application that runs on the following software:
|
|||
|
||||
- Ubuntu/Debian/CentOS/RHEL
|
||||
- Ruby (MRI) 2.3
|
||||
- Git 2.7.4+
|
||||
- Git 2.8.4+
|
||||
- Redis 2.8+
|
||||
- MySQL or PostgreSQL
|
||||
|
||||
|
@ -84,7 +84,7 @@ For more information please see the [architecture documentation](https://docs.gi
|
|||
|
||||
## UX design
|
||||
|
||||
Please adhere to the [UX Guide](doc/development/ux_guide/readme.md) when creating designs and implementing code.
|
||||
Please adhere to the [UX Guide](doc/development/ux_guide/index.md) when creating designs and implementing code.
|
||||
|
||||
## Third-party applications
|
||||
|
||||
|
|
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
|||
8.14.0-pre
|
||||
8.15.0-pre
|
||||
|
|
|
@ -1,93 +0,0 @@
|
|||
Copyright 2010, 2012, 2014 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
|
||||
This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,4 +1,5 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable no-param-reassign */
|
||||
|
||||
((global) => {
|
||||
const MAX_MESSAGE_LENGTH = 500;
|
||||
const MESSAGE_CELL_SELECTOR = '.abuse-reports .message';
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/* eslint-disable no-param-reassign, class-methods-use-this */
|
||||
/* global Pager, Cookies */
|
||||
/* global Pager */
|
||||
/* global Cookies */
|
||||
|
||||
((global) => {
|
||||
class Activities {
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, one-var, no-var, one-var-declaration-per-line, no-unused-vars, no-else-return, prefer-arrow-callback, camelcase, quotes, comma-dangle, no-undef, padded-blocks, max-len */
|
||||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, one-var, no-var, one-var-declaration-per-line, no-unused-vars, no-else-return, prefer-arrow-callback, camelcase, quotes, comma-dangle, padded-blocks, max-len */
|
||||
/* global Turbolinks */
|
||||
|
||||
(function() {
|
||||
this.Admin = (function() {
|
||||
function Admin() {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, quotes, object-shorthand, camelcase, no-var, no-undef, comma-dangle, prefer-arrow-callback, indent, object-curly-spacing, quote-props, no-param-reassign, padded-blocks, max-len */
|
||||
/* eslint-disable func-names, space-before-function-paren, quotes, object-shorthand, camelcase, no-var, comma-dangle, prefer-arrow-callback, indent, object-curly-spacing, quote-props, no-param-reassign, padded-blocks, max-len */
|
||||
|
||||
(function() {
|
||||
this.Api = {
|
||||
var Api = {
|
||||
groupsPath: "/api/:version/groups.json",
|
||||
groupPath: "/api/:version/groups/:id.json",
|
||||
namespacesPath: "/api/:version/namespaces.json",
|
||||
|
@ -140,4 +141,5 @@
|
|||
}
|
||||
};
|
||||
|
||||
window.Api = Api;
|
||||
}).call(this);
|
||||
|
|
|
@ -1,4 +1,11 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, no-var, no-undef, quotes, consistent-return, prefer-arrow-callback, comma-dangle, object-shorthand, no-new, max-len */
|
||||
/* eslint-disable func-names, space-before-function-paren, no-var, quotes, consistent-return, prefer-arrow-callback, comma-dangle, object-shorthand, no-new, max-len */
|
||||
/* global bp */
|
||||
/* global Cookies */
|
||||
/* global Flash */
|
||||
/* global ConfirmDangerModal */
|
||||
/* global AwardsHandler */
|
||||
/* global Aside */
|
||||
|
||||
// This is a manifest file that'll be compiled into including all the files listed below.
|
||||
// Add new JavaScript code in separate files in this directory and they'll automatically
|
||||
// be included in the compiled file accessible from http://example.com/assets/application.js
|
||||
|
@ -56,33 +63,18 @@
|
|||
/*= require es6-promise.auto */
|
||||
|
||||
(function () {
|
||||
document.addEventListener('page:fetch', gl.utils.cleanupBeforeFetch);
|
||||
window.addEventListener('hashchange', gl.utils.shiftWindow);
|
||||
document.addEventListener('page:fetch', function () {
|
||||
// Unbind scroll events
|
||||
$(document).off('scroll');
|
||||
// Close any open tooltips
|
||||
$('.has-tooltip, [data-toggle="tooltip"]').tooltip('destroy');
|
||||
});
|
||||
|
||||
// automatically adjust scroll position for hash urls taking the height of the navbar into account
|
||||
// https://github.com/twitter/bootstrap/issues/1768
|
||||
window.adjustScroll = function() {
|
||||
var navbar = document.querySelector('.navbar-gitlab');
|
||||
var subnav = document.querySelector('.layout-nav');
|
||||
var fixedTabs = document.querySelector('.js-tabs-affix');
|
||||
|
||||
adjustment = 0;
|
||||
if (navbar) adjustment -= navbar.offsetHeight;
|
||||
if (subnav) adjustment -= subnav.offsetHeight;
|
||||
if (fixedTabs) adjustment -= fixedTabs.offsetHeight;
|
||||
|
||||
return scrollBy(0, adjustment);
|
||||
};
|
||||
|
||||
window.addEventListener("hashchange", adjustScroll);
|
||||
|
||||
window.onload = function () {
|
||||
// Scroll the window to avoid the topnav bar
|
||||
// https://github.com/twitter/bootstrap/issues/1768
|
||||
if (location.hash) {
|
||||
return setTimeout(adjustScroll, 100);
|
||||
}
|
||||
};
|
||||
window.addEventListener('hashchange', gl.utils.handleLocationHash);
|
||||
window.addEventListener('load', function onLoad() {
|
||||
window.removeEventListener('load', onLoad, false);
|
||||
gl.utils.handleLocationHash();
|
||||
}, false);
|
||||
|
||||
$(function () {
|
||||
var $body = $('body');
|
||||
|
@ -97,7 +89,15 @@
|
|||
// Set the default path for all cookies to GitLab's root directory
|
||||
Cookies.defaults.path = gon.relative_url_root || '/';
|
||||
|
||||
gl.utils.preventDisabledButtons();
|
||||
// prevent default action for disabled buttons
|
||||
$('.btn').click(function(e) {
|
||||
if ($(this).hasClass('disabled')) {
|
||||
e.preventDefault();
|
||||
e.stopImmediatePropagation();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
$('.nav-sidebar').niceScroll({
|
||||
cursoropacitymax: '0.4',
|
||||
cursorcolor: '#FFF',
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, max-len, no-var, spaced-comment, prefer-arrow-callback, consistent-return, one-var, one-var-declaration-per-line, no-unused-vars, no-else-return, prefer-template, quotes, comma-dangle, no-param-reassign, no-void, radix, keyword-spacing, space-before-blocks, brace-style, no-underscore-dangle, no-undef, no-plusplus, no-return-assign, camelcase, padded-blocks, max-len */
|
||||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, max-len, no-var, spaced-comment, prefer-arrow-callback, consistent-return, one-var, one-var-declaration-per-line, no-unused-vars, no-else-return, prefer-template, quotes, comma-dangle, no-param-reassign, no-void, radix, keyword-spacing, space-before-blocks, brace-style, no-underscore-dangle, no-plusplus, no-return-assign, camelcase, padded-blocks */
|
||||
/* global Cookies */
|
||||
|
||||
(function() {
|
||||
this.AwardsHandler = (function() {
|
||||
var FROM_SENTENCE_REGEX = /(?:, and | and |, )/; //For separating lists produced by ruby's Array#toSentence
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, prefer-arrow-callback, no-var, consistent-return, no-undef, padded-blocks, max-len */
|
||||
/* eslint-disable func-names, space-before-function-paren, prefer-arrow-callback, no-var, consistent-return, padded-blocks, max-len */
|
||||
/* global autosize */
|
||||
|
||||
/*= require jquery.ba-resize */
|
||||
/*= require autosize */
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, one-var, no-var, one-var-declaration-per-line, no-undef, prefer-arrow-callback, camelcase, max-len, consistent-return, quotes, object-shorthand, comma-dangle, padded-blocks, max-len */
|
||||
/* eslint-disable func-names, space-before-function-paren, one-var, no-var, one-var-declaration-per-line, prefer-arrow-callback, camelcase, consistent-return, quotes, object-shorthand, comma-dangle, padded-blocks, max-len */
|
||||
|
||||
// Quick Submit behavior
|
||||
//
|
||||
// When a child field of a form with a `js-quick-submit` class receives a
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable padded-blocks, no-param-reassign, comma-dangle */
|
||||
/* global Api */
|
||||
|
||||
/*= require blob/template_selector */
|
||||
((global) => {
|
||||
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, one-var, no-var, one-var-declaration-per-line, camelcase, no-undef, object-shorthand, quotes, comma-dangle, prefer-arrow-callback, no-unused-vars, prefer-template, no-useless-escape, no-alert, padded-blocks, max-len */
|
||||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, one-var, no-var, one-var-declaration-per-line, camelcase, object-shorthand, quotes, comma-dangle, prefer-arrow-callback, no-unused-vars, prefer-template, no-useless-escape, no-alert, padded-blocks, max-len */
|
||||
/* global Dropzone */
|
||||
|
||||
(function() {
|
||||
this.BlobFileDropzone = (function() {
|
||||
function BlobFileDropzone(form, method) {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, max-len, one-var, no-var, no-restricted-syntax, vars-on-top, no-use-before-define, no-param-reassign, new-cap, no-underscore-dangle, wrap-iife, prefer-rest-params, no-undef, padded-blocks, max-len */
|
||||
/* eslint-disable func-names, space-before-function-paren, max-len, one-var, no-var, no-restricted-syntax, vars-on-top, no-use-before-define, no-param-reassign, new-cap, no-underscore-dangle, wrap-iife, prefer-rest-params, padded-blocks */
|
||||
/* global Api */
|
||||
|
||||
/*= require blob/template_selector */
|
||||
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, no-var, no-unused-expressions, no-cond-assign, no-sequences, no-undef, comma-dangle, padded-blocks, max-len */
|
||||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, no-var, no-unused-expressions, no-cond-assign, no-sequences, comma-dangle, padded-blocks, max-len */
|
||||
/* global BlobGitignoreSelector */
|
||||
|
||||
(function() {
|
||||
this.BlobGitignoreSelectors = (function() {
|
||||
function BlobGitignoreSelectors(opts) {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, max-len, one-var, no-var, no-restricted-syntax, vars-on-top, no-use-before-define, no-param-reassign, new-cap, no-underscore-dangle, wrap-iife, prefer-rest-params, comma-dangle, no-undef, padded-blocks, max-len */
|
||||
/* eslint-disable func-names, space-before-function-paren, max-len, one-var, no-var, no-restricted-syntax, vars-on-top, no-use-before-define, no-param-reassign, new-cap, no-underscore-dangle, wrap-iife, prefer-rest-params, comma-dangle, padded-blocks */
|
||||
/* global Api */
|
||||
|
||||
/*= require blob/template_selector */
|
||||
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable no-unused-vars, no-param-reassign, padded-blocks */
|
||||
/* global BlobLicenseSelector */
|
||||
|
||||
((global) => {
|
||||
class BlobLicenseSelectors {
|
||||
constructor({ $dropdowns, editor }) {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable indent, comma-dangle, object-shorthand, func-names, space-before-function-paren, arrow-parens, no-unused-vars, class-methods-use-this, no-var, consistent-return, prefer-const, no-param-reassign, space-in-parens, max-len */
|
||||
|
||||
((global) => {
|
||||
class TemplateSelector {
|
||||
constructor({ dropdown, data, pattern, wrapper, editor, fileEndpoint, $input } = {}) {
|
||||
|
@ -70,6 +71,8 @@
|
|||
// e.g.
|
||||
// Api.gitignoreText item.name, @requestFileSuccess.bind(@)
|
||||
requestFileSuccess(file, { skipFocus } = {}) {
|
||||
if (!file) return;
|
||||
|
||||
const oldValue = this.editor.getValue();
|
||||
let newValue = file.content;
|
||||
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, prefer-arrow-callback, no-var, quotes, vars-on-top, no-unused-vars, no-undef, no-new, padded-blocks, max-len */
|
||||
/* eslint-disable func-names, space-before-function-paren, prefer-arrow-callback, no-var, quotes, vars-on-top, no-unused-vars, no-new, padded-blocks, max-len */
|
||||
/* global EditBlob */
|
||||
/* global NewCommitForm */
|
||||
|
||||
/*= require_tree . */
|
||||
|
||||
(function() {
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, no-var, space-before-blocks, prefer-rest-params, wrap-iife, camelcase, no-param-reassign, no-undef, quotes, prefer-template, no-new, comma-dangle, one-var, one-var-declaration-per-line, prefer-arrow-callback, no-else-return, no-unused-vars, padded-blocks, max-len */
|
||||
/* eslint-disable func-names, space-before-function-paren, no-var, space-before-blocks, prefer-rest-params, wrap-iife, camelcase, no-param-reassign, quotes, prefer-template, no-new, comma-dangle, one-var, one-var-declaration-per-line, prefer-arrow-callback, no-else-return, no-unused-vars, padded-blocks, max-len */
|
||||
/* global ace */
|
||||
/* global BlobGitignoreSelectors */
|
||||
|
||||
(function() {
|
||||
var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
|
||||
|
||||
|
@ -57,7 +60,7 @@
|
|||
content: this.editor.getValue()
|
||||
}, function(response) {
|
||||
currentPane.empty().append(response);
|
||||
return currentPane.syntaxHighlight();
|
||||
return currentPane.renderGFM();
|
||||
});
|
||||
} else {
|
||||
this.$toggleButton.show();
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable one-var, indent, quote-props, comma-dangle, space-before-function-paren */
|
||||
/* global Vue */
|
||||
/* global BoardService */
|
||||
|
||||
//= require vue
|
||||
//= require vue-resource
|
||||
//= require Sortable
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable comma-dangle, space-before-function-paren, one-var, indent, radix */
|
||||
/* global Vue */
|
||||
/* global Sortable */
|
||||
|
||||
//= require ./board_blank_state
|
||||
//= require ./board_delete
|
||||
//= require ./board_list
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable space-before-function-paren, comma-dangle, semi */
|
||||
/* global Vue */
|
||||
/* global ListLabel */
|
||||
|
||||
(() => {
|
||||
const Store = gl.issueBoards.BoardsStore;
|
||||
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable comma-dangle, space-before-function-paren, dot-notation */
|
||||
/* global Vue */
|
||||
|
||||
(() => {
|
||||
const Store = gl.issueBoards.BoardsStore;
|
||||
|
||||
|
@ -54,6 +56,9 @@
|
|||
mouseDown () {
|
||||
this.showDetail = true;
|
||||
},
|
||||
mouseMove() {
|
||||
this.showDetail = false;
|
||||
},
|
||||
showIssue (e) {
|
||||
const targetTagName = e.target.tagName.toLowerCase();
|
||||
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable comma-dangle, space-before-function-paren, no-alert */
|
||||
/* global Vue */
|
||||
|
||||
(() => {
|
||||
window.gl = window.gl || {};
|
||||
window.gl.issueBoards = window.gl.issueBoards || {};
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable comma-dangle, space-before-function-paren, max-len, no-plusplus */
|
||||
/* global Vue */
|
||||
/* global Sortable */
|
||||
|
||||
//= require ./board_card
|
||||
//= require ./board_new_issue
|
||||
|
||||
|
@ -80,6 +83,7 @@
|
|||
},
|
||||
mounted () {
|
||||
const options = gl.issueBoards.getBoardSortableDefaultOptions({
|
||||
scroll: document.querySelectorAll('.boards-list')[0],
|
||||
group: 'issues',
|
||||
sort: false,
|
||||
disabled: this.disabled,
|
||||
|
@ -88,18 +92,16 @@
|
|||
const card = this.$refs.issue[e.oldIndex];
|
||||
|
||||
card.showDetail = false;
|
||||
Store.moving.issue = card.issue;
|
||||
Store.moving.list = card.list;
|
||||
Store.moving.issue = Store.moving.list.findIssue(+e.item.dataset.issueId);
|
||||
|
||||
gl.issueBoards.onStart();
|
||||
},
|
||||
onAdd: (e) => {
|
||||
// Add the element back to original list to allow Vue to handle DOM updates
|
||||
e.from.appendChild(e.item);
|
||||
gl.issueBoards.BoardsStore.moveIssueToList(Store.moving.list, this.list, Store.moving.issue, e.newIndex);
|
||||
|
||||
this.$nextTick(() => {
|
||||
// Update the issues once we know the element has been moved
|
||||
gl.issueBoards.BoardsStore.moveIssueToList(Store.moving.list, this.list, Store.moving.issue);
|
||||
e.item.remove();
|
||||
});
|
||||
},
|
||||
});
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable comma-dangle, no-unused-vars */
|
||||
/* global Vue */
|
||||
/* global ListIssue */
|
||||
|
||||
(() => {
|
||||
const Store = gl.issueBoards.BoardsStore;
|
||||
|
||||
|
|
|
@ -1,4 +1,10 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable comma-dangle, space-before-function-paren, no-new */
|
||||
/* global Vue */
|
||||
/* global IssuableContext */
|
||||
/* global MilestoneSelect */
|
||||
/* global LabelsSelect */
|
||||
/* global Sidebar */
|
||||
|
||||
(() => {
|
||||
const Store = gl.issueBoards.BoardsStore;
|
||||
|
||||
|
@ -47,7 +53,7 @@
|
|||
new gl.DueDateSelectors();
|
||||
new LabelsSelect();
|
||||
new Sidebar();
|
||||
new Subscription('.subscription');
|
||||
gl.Subscription.bindAll('.subscription');
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable comma-dangle, func-names, no-new, space-before-function-paren, one-var, indent */
|
||||
|
||||
(() => {
|
||||
window.gl = window.gl || {};
|
||||
window.gl.issueBoards = window.gl.issueBoards || {};
|
||||
|
@ -45,10 +46,10 @@
|
|||
|
||||
return $li.append($a.prepend($labelColor));
|
||||
},
|
||||
search: {
|
||||
fields: ['title']
|
||||
},
|
||||
filterable: true,
|
||||
search: {
|
||||
fields: ['title']
|
||||
},
|
||||
filterable: true,
|
||||
selectable: true,
|
||||
multiSelect: true,
|
||||
clicked (label, $el, e) {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/* eslint-disable */
|
||||
/* global Vue */
|
||||
|
||||
Vue.filter('due-date', (value) => {
|
||||
const date = new Date(value);
|
||||
return $.datepicker.formatDate('M d, yy', date);
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable no-unused-vars, no-mixed-operators, prefer-const, comma-dangle, semi */
|
||||
/* global DocumentTouch */
|
||||
|
||||
((w) => {
|
||||
window.gl = window.gl || {};
|
||||
window.gl.issueBoards = window.gl.issueBoards || {};
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable no-unused-vars, space-before-function-paren, arrow-body-style, space-in-parens, arrow-parens, comma-dangle, max-len */
|
||||
/* global Vue */
|
||||
/* global ListLabel */
|
||||
/* global ListMilestone */
|
||||
/* global ListUser */
|
||||
|
||||
class ListIssue {
|
||||
constructor (obj) {
|
||||
this.id = obj.iid;
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable no-unused-vars, space-before-function-paren */
|
||||
|
||||
class ListLabel {
|
||||
constructor (obj) {
|
||||
this.id = obj.id;
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable space-before-function-paren, no-underscore-dangle, class-methods-use-this, consistent-return, no-plusplus, prefer-const, space-in-parens, no-shadow, no-param-reassign, max-len, no-unused-vars */
|
||||
/* global ListIssue */
|
||||
/* global ListLabel */
|
||||
|
||||
class List {
|
||||
constructor (obj) {
|
||||
this.id = obj.id;
|
||||
|
@ -106,9 +109,13 @@ class List {
|
|||
});
|
||||
}
|
||||
|
||||
addIssue (issue, listFrom) {
|
||||
addIssue (issue, listFrom, newIndex) {
|
||||
if (!this.findIssue(issue.id)) {
|
||||
this.issues.push(issue);
|
||||
if (newIndex !== undefined) {
|
||||
this.issues.splice(newIndex, 0, issue);
|
||||
} else {
|
||||
this.issues.push(issue);
|
||||
}
|
||||
|
||||
if (this.label) {
|
||||
issue.addLabel(this.label);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable no-unused-vars */
|
||||
|
||||
class ListMilestone {
|
||||
constructor (obj) {
|
||||
constructor(obj) {
|
||||
this.id = obj.id;
|
||||
this.title = obj.title;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable no-unused-vars */
|
||||
|
||||
class ListUser {
|
||||
constructor (user) {
|
||||
constructor(user) {
|
||||
this.id = user.id;
|
||||
this.name = user.name;
|
||||
this.username = user.username;
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable space-before-function-paren, comma-dangle, no-param-reassign, camelcase, prefer-const, no-extra-semi, max-len, no-unused-vars */
|
||||
/* global Vue */
|
||||
|
||||
class BoardService {
|
||||
constructor (root, boardId) {
|
||||
this.lists = Vue.resource(`${root}/${boardId}/lists{/id}`, {}, {
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable comma-dangle, space-before-function-paren, one-var, indent, space-in-parens, no-shadow, radix, dot-notation, semi, max-len */
|
||||
/* global Cookies */
|
||||
/* global List */
|
||||
|
||||
(() => {
|
||||
window.gl = window.gl || {};
|
||||
window.gl.issueBoards = window.gl.issueBoards || {};
|
||||
|
@ -89,14 +92,14 @@
|
|||
});
|
||||
listFrom.update();
|
||||
},
|
||||
moveIssueToList (listFrom, listTo, issue) {
|
||||
moveIssueToList (listFrom, listTo, issue, newIndex) {
|
||||
const issueTo = listTo.findIssue(issue.id),
|
||||
issueLists = issue.getLists(),
|
||||
listLabels = issueLists.map( listIssue => listIssue.label );
|
||||
|
||||
// Add to new lists issues if it doesn't already exist
|
||||
if (!issueTo) {
|
||||
listTo.addIssue(issue, listFrom);
|
||||
listTo.addIssue(issue, listFrom, newIndex);
|
||||
}
|
||||
|
||||
if (listTo.type === 'done' && listFrom.type !== 'backlog') {
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable func-names, prefer-arrow-callback, no-unused-vars, no-plusplus */
|
||||
/* global Vue */
|
||||
|
||||
Vue.http.interceptors.push((request, next) => {
|
||||
Vue.activeResources = Vue.activeResources ? Vue.activeResources + 1 : 1;
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, one-var, no-var, one-var-declaration-per-line, quotes, no-shadow, prefer-arrow-callback, prefer-template, consistent-return, padded-blocks, no-return-assign, new-parens, no-param-reassign, no-undef, max-len */
|
||||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, one-var, no-var, one-var-declaration-per-line, quotes, no-shadow, prefer-arrow-callback, prefer-template, consistent-return, padded-blocks, no-return-assign, new-parens, no-param-reassign, max-len */
|
||||
|
||||
(function() {
|
||||
this.Breakpoints = (function() {
|
||||
var Breakpoints = (function() {
|
||||
var BreakpointInstance, instance;
|
||||
|
||||
function Breakpoints() {}
|
||||
|
@ -68,4 +69,5 @@
|
|||
};
|
||||
})(this));
|
||||
|
||||
window.Breakpoints = Breakpoints;
|
||||
}).call(this);
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, no-var, space-before-blocks, prefer-rest-params, wrap-iife, no-use-before-define, no-param-reassign, no-undef, quotes, yoda, no-else-return, consistent-return, comma-dangle, semi, object-shorthand, prefer-template, one-var, one-var-declaration-per-line, no-unused-vars, max-len, vars-on-top, padded-blocks, max-len */
|
||||
/* eslint-disable func-names, space-before-function-paren, no-var, space-before-blocks, prefer-rest-params, wrap-iife, no-use-before-define, no-param-reassign, quotes, yoda, no-else-return, consistent-return, comma-dangle, semi, object-shorthand, prefer-template, one-var, one-var-declaration-per-line, no-unused-vars, max-len, vars-on-top, padded-blocks */
|
||||
/* global Breakpoints */
|
||||
/* global Turbolinks */
|
||||
|
||||
(function() {
|
||||
var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
|
||||
|
||||
|
@ -12,7 +15,7 @@
|
|||
this.pageUrl = options.pageUrl;
|
||||
this.buildUrl = options.buildUrl;
|
||||
this.buildStatus = options.buildStatus;
|
||||
this.state = options.state1;
|
||||
this.state = options.logState;
|
||||
this.buildStage = options.buildStage;
|
||||
this.updateDropdown = bind(this.updateDropdown, this);
|
||||
this.$document = $(document);
|
||||
|
@ -193,6 +196,7 @@
|
|||
};
|
||||
|
||||
Build.prototype.stepTrace = function(e) {
|
||||
var $currentTarget;
|
||||
e.preventDefault();
|
||||
$currentTarget = $(e.currentTarget);
|
||||
$.scrollTo($currentTarget.attr('href'), {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable func-names, prefer-arrow-callback, space-before-blocks, space-before-function-paren, comma-spacing, max-len */
|
||||
|
||||
$(function(){
|
||||
$('.reveal-variables').off('click').on('click',function(){
|
||||
$('.js-build').toggle().niceScroll();
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, no-undef, padded-blocks */
|
||||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, padded-blocks */
|
||||
/* global CommitFile */
|
||||
|
||||
(function() {
|
||||
this.Commit = (function() {
|
||||
function Commit() {
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, no-new, no-undef, padded-blocks, max-len */
|
||||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, no-new, padded-blocks */
|
||||
/* global ImageFile */
|
||||
|
||||
(function() {
|
||||
this.CommitFile = (function() {
|
||||
function CommitFile(file) {
|
||||
if ($('.image', file).length) {
|
||||
new ImageFile(file);
|
||||
new gl.ImageFile(file);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, no-var, no-use-before-define, prefer-arrow-callback, no-else-return, consistent-return, prefer-template, quotes, one-var, one-var-declaration-per-line, no-unused-vars, no-return-assign, comma-dangle, quote-props, no-unused-expressions, no-sequences, object-shorthand, padded-blocks, max-len */
|
||||
(function() {
|
||||
this.ImageFile = (function() {
|
||||
gl.ImageFile = (function() {
|
||||
var prepareFrames;
|
||||
|
||||
// Width where images must fits in, for 2-up this gets divided by 2
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, quotes, consistent-return, no-undef, no-return-assign, no-param-reassign, one-var, no-var, one-var-declaration-per-line, no-unused-vars, prefer-template, object-shorthand, comma-dangle, padded-blocks, max-len */
|
||||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, quotes, consistent-return, no-return-assign, no-param-reassign, one-var, no-var, one-var-declaration-per-line, no-unused-vars, prefer-template, object-shorthand, comma-dangle, padded-blocks, max-len, prefer-arrow-callback */
|
||||
/* global Pager */
|
||||
|
||||
(function() {
|
||||
this.CommitsList = (function() {
|
||||
function CommitsList() {}
|
||||
|
@ -6,14 +8,16 @@
|
|||
CommitsList.timer = null;
|
||||
|
||||
CommitsList.init = function(limit) {
|
||||
$("body").on("click", ".day-commits-table li.commit", function(event) {
|
||||
if (event.target.nodeName !== "A") {
|
||||
$("body").on("click", ".day-commits-table li.commit", function(e) {
|
||||
if (e.target.nodeName !== "A") {
|
||||
location.href = $(this).attr("url");
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
Pager.init(limit, false);
|
||||
Pager.init(limit, false, false, function() {
|
||||
gl.utils.localTimeAgo($('.js-timeago'));
|
||||
});
|
||||
this.content = $("#commits-list");
|
||||
this.searchField = $("#commits-search");
|
||||
return this.initSearch();
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable func-names, space-before-function-paren, one-var, no-var, one-var-declaration-per-line, object-shorthand, comma-dangle, prefer-arrow-callback, no-else-return, newline-per-chained-call, no-dupe-keys, wrap-iife, padded-blocks, max-len */
|
||||
|
||||
(function() {
|
||||
this.CompareAutocomplete = (function() {
|
||||
function CompareAutocomplete() {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, one-var, no-var, one-var-declaration-per-line, no-undef, prefer-template, quotes, no-unused-vars, prefer-arrow-callback, padded-blocks, max-len */
|
||||
/* eslint-disable func-names, space-before-function-paren, one-var, no-var, one-var-declaration-per-line, prefer-template, quotes, no-unused-vars, prefer-arrow-callback, padded-blocks, max-len */
|
||||
/* global Clipboard */
|
||||
|
||||
/*= require clipboard */
|
||||
|
||||
|
@ -6,7 +7,7 @@
|
|||
var genericError, genericSuccess, showTooltip;
|
||||
|
||||
genericSuccess = function(e) {
|
||||
showTooltip(e.trigger, 'Copied!');
|
||||
showTooltip(e.trigger, 'Copied');
|
||||
// Clear the selection and blur the trigger so it loses its border
|
||||
e.clearSelection();
|
||||
return $(e.trigger).blur();
|
||||
|
@ -31,7 +32,7 @@
|
|||
var originalTitle = $target.data('original-title');
|
||||
|
||||
$target
|
||||
.attr('title', 'Copied!')
|
||||
.attr('title', 'Copied')
|
||||
.tooltip('fixTitle')
|
||||
.tooltip('show')
|
||||
.attr('title', originalTitle)
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable func-names, space-before-function-paren, prefer-arrow-callback, comma-dangle, prefer-template, quotes, no-param-reassign, wrap-iife, max-len */
|
||||
/* global Api */
|
||||
|
||||
(function (w) {
|
||||
class CreateLabelDropdown {
|
||||
constructor ($el, namespacePath, projectPath) {
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable no-param-reassign */
|
||||
/* global Vue */
|
||||
|
||||
((global) => {
|
||||
global.cycleAnalytics = global.cycleAnalytics || {};
|
||||
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable no-param-reassign */
|
||||
/* global Vue */
|
||||
|
||||
((global) => {
|
||||
global.cycleAnalytics = global.cycleAnalytics || {};
|
||||
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable no-param-reassign */
|
||||
/* global Vue */
|
||||
|
||||
((global) => {
|
||||
global.cycleAnalytics = global.cycleAnalytics || {};
|
||||
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable no-param-reassign */
|
||||
/* global Vue */
|
||||
|
||||
((global) => {
|
||||
global.cycleAnalytics = global.cycleAnalytics || {};
|
||||
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable no-param-reassign */
|
||||
/* global Vue */
|
||||
|
||||
((global) => {
|
||||
global.cycleAnalytics = global.cycleAnalytics || {};
|
||||
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable no-param-reassign */
|
||||
/* global Vue */
|
||||
|
||||
((global) => {
|
||||
global.cycleAnalytics = global.cycleAnalytics || {};
|
||||
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable no-param-reassign */
|
||||
/* global Vue */
|
||||
|
||||
((global) => {
|
||||
global.cycleAnalytics = global.cycleAnalytics || {};
|
||||
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-disable no-param-reassign */
|
||||
/* global Vue */
|
||||
|
||||
((global) => {
|
||||
global.cycleAnalytics = global.cycleAnalytics || {};
|
||||
|
||||
|
@ -8,10 +10,15 @@
|
|||
},
|
||||
template: `
|
||||
<span class="total-time">
|
||||
<template v-if="time.days">{{ time.days }} <span>{{ time.days === 1 ? 'day' : 'days' }}</span></template>
|
||||
<template v-if="time.hours">{{ time.hours }} <span>hr</span></template>
|
||||
<template v-if="time.mins && !time.days">{{ time.mins }} <span>mins</span></template>
|
||||
<template v-if="time.seconds && Object.keys(time).length === 1 || time.seconds === 0">{{ time.seconds }} <span>s</span></template>
|
||||
<template v-if="Object.keys(time).length">
|
||||
<template v-if="time.days">{{ time.days }} <span>{{ time.days === 1 ? 'day' : 'days' }}</span></template>
|
||||
<template v-if="time.hours">{{ time.hours }} <span>hr</span></template>
|
||||
<template v-if="time.mins && !time.days">{{ time.mins }} <span>mins</span></template>
|
||||
<template v-if="time.seconds && Object.keys(time).length === 1 || time.seconds === 0">{{ time.seconds }} <span>s</span></template>
|
||||
</template>
|
||||
<template v-else>
|
||||
--
|
||||
</template>
|
||||
</span>
|
||||
`,
|
||||
});
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
/* global Vue */
|
||||
/* global Cookies */
|
||||
/* global Flash */
|
||||
|
||||
//= require vue
|
||||
//= require_tree ./svg
|
||||
//= require_tree .
|
||||
|
|
|
@ -62,9 +62,11 @@
|
|||
this.state.events = this.decorateEvents(events);
|
||||
},
|
||||
decorateEvents(events) {
|
||||
const newEvents = events;
|
||||
const newEvents = [];
|
||||
|
||||
events.forEach((item) => {
|
||||
if (!item) return;
|
||||
|
||||
newEvents.forEach((item) => {
|
||||
item.totalTime = item.total_time;
|
||||
item.author.webUrl = item.author.web_url;
|
||||
item.author.avatarUrl = item.author.avatar_url;
|
||||
|
@ -79,6 +81,8 @@
|
|||
delete item.created_at;
|
||||
delete item.short_sha;
|
||||
delete item.commit_url;
|
||||
|
||||
newEvents.push(item);
|
||||
});
|
||||
|
||||
return newEvents;
|
||||
|
|
|
@ -1,73 +0,0 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, no-var, max-len, one-var, camelcase, one-var-declaration-per-line, no-unused-vars, no-unused-expressions, no-sequences, object-shorthand, comma-dangle, prefer-arrow-callback, semi, radix, padded-blocks, max-len */
|
||||
(function() {
|
||||
this.Diff = (function() {
|
||||
var UNFOLD_COUNT;
|
||||
|
||||
UNFOLD_COUNT = 20;
|
||||
|
||||
function Diff() {
|
||||
$('.files .diff-file').singleFileDiff();
|
||||
this.filesCommentButton = $('.files .diff-file').filesCommentButton();
|
||||
if (this.diffViewType() === 'parallel') {
|
||||
$('.content-wrapper .container-fluid').removeClass('container-limited');
|
||||
}
|
||||
$(document).off('click', '.js-unfold');
|
||||
$(document).on('click', '.js-unfold', (function(_this) {
|
||||
return function(event) {
|
||||
var line_number, link, file, offset, old_line, params, prev_new_line, prev_old_line, ref, ref1, since, target, to, unfold, unfoldBottom;
|
||||
target = $(event.target);
|
||||
unfoldBottom = target.hasClass('js-unfold-bottom');
|
||||
unfold = true;
|
||||
ref = _this.lineNumbers(target.parent()), old_line = ref[0], line_number = ref[1];
|
||||
offset = line_number - old_line;
|
||||
if (unfoldBottom) {
|
||||
line_number += 1;
|
||||
since = line_number;
|
||||
to = line_number + UNFOLD_COUNT;
|
||||
} else {
|
||||
ref1 = _this.lineNumbers(target.parent().prev()), prev_old_line = ref1[0], prev_new_line = ref1[1];
|
||||
line_number -= 1;
|
||||
to = line_number;
|
||||
if (line_number - UNFOLD_COUNT > prev_new_line + 1) {
|
||||
since = line_number - UNFOLD_COUNT;
|
||||
} else {
|
||||
since = prev_new_line + 1;
|
||||
unfold = false;
|
||||
}
|
||||
}
|
||||
file = target.parents('.diff-file');
|
||||
link = file.data('blob-diff-path');
|
||||
params = {
|
||||
since: since,
|
||||
to: to,
|
||||
bottom: unfoldBottom,
|
||||
offset: offset,
|
||||
unfold: unfold,
|
||||
view: file.data('view')
|
||||
};
|
||||
return $.get(link, params, function(response) {
|
||||
return target.parent().replaceWith(response);
|
||||
});
|
||||
};
|
||||
})(this));
|
||||
}
|
||||
|
||||
Diff.prototype.diffViewType = function() {
|
||||
return $('.inline-parallel-buttons a.active').data('view-type');
|
||||
}
|
||||
|
||||
Diff.prototype.lineNumbers = function(line) {
|
||||
if (!line.children().length) {
|
||||
return [0, 0];
|
||||
}
|
||||
|
||||
return line.find('.diff-line-num').map(function() {
|
||||
return parseInt($(this).data('linenumber'));
|
||||
});
|
||||
};
|
||||
|
||||
return Diff;
|
||||
|
||||
})();
|
||||
|
||||
}).call(this);
|
112
app/assets/javascripts/diff.js.es6
Normal file
112
app/assets/javascripts/diff.js.es6
Normal file
|
@ -0,0 +1,112 @@
|
|||
/* eslint-disable class-methods-use-this */
|
||||
|
||||
(() => {
|
||||
const UNFOLD_COUNT = 20;
|
||||
|
||||
class Diff {
|
||||
constructor() {
|
||||
const $diffFile = $('.files .diff-file');
|
||||
$diffFile.singleFileDiff();
|
||||
$diffFile.filesCommentButton();
|
||||
|
||||
$diffFile.each((index, file) => new gl.ImageFile(file));
|
||||
|
||||
if (this.diffViewType() === 'parallel') {
|
||||
$('.content-wrapper .container-fluid').removeClass('container-limited');
|
||||
}
|
||||
|
||||
$(document)
|
||||
.off('click', '.js-unfold, .diff-line-num a')
|
||||
.on('click', '.js-unfold', this.handleClickUnfold.bind(this))
|
||||
.on('click', '.diff-line-num a', this.handleClickLineNum.bind(this));
|
||||
|
||||
this.highlighSelectedLine();
|
||||
}
|
||||
|
||||
handleClickUnfold(e) {
|
||||
const $target = $(e.target);
|
||||
// current babel config relies on iterators implementation, so we cannot simply do:
|
||||
// const [oldLineNumber, newLineNumber] = this.lineNumbers($target.parent());
|
||||
const ref = this.lineNumbers($target.parent());
|
||||
const oldLineNumber = ref[0];
|
||||
const newLineNumber = ref[1];
|
||||
const offset = newLineNumber - oldLineNumber;
|
||||
const bottom = $target.hasClass('js-unfold-bottom');
|
||||
let since;
|
||||
let to;
|
||||
let unfold = true;
|
||||
|
||||
if (bottom) {
|
||||
const lineNumber = newLineNumber + 1;
|
||||
since = lineNumber;
|
||||
to = lineNumber + UNFOLD_COUNT;
|
||||
} else {
|
||||
const lineNumber = newLineNumber - 1;
|
||||
since = lineNumber - UNFOLD_COUNT;
|
||||
to = lineNumber;
|
||||
|
||||
// make sure we aren't loading more than we need
|
||||
const prevNewLine = this.lineNumbers($target.parent().prev())[1];
|
||||
if (since <= prevNewLine + 1) {
|
||||
since = prevNewLine + 1;
|
||||
unfold = false;
|
||||
}
|
||||
}
|
||||
|
||||
const file = $target.parents('.diff-file');
|
||||
const link = file.data('blob-diff-path');
|
||||
const view = file.data('view');
|
||||
|
||||
const params = { since, to, bottom, offset, unfold, view };
|
||||
$.get(link, params, response => $target.parent().replaceWith(response));
|
||||
}
|
||||
|
||||
openAnchoredDiff(anchoredDiff, cb) {
|
||||
const diffTitle = $(`#file-path-${anchoredDiff}`);
|
||||
const diffFile = diffTitle.closest('.diff-file');
|
||||
const nothingHereBlock = $('.nothing-here-block:visible', diffFile);
|
||||
if (nothingHereBlock.length) {
|
||||
diffFile.singleFileDiff(true, cb);
|
||||
} else {
|
||||
cb();
|
||||
}
|
||||
}
|
||||
|
||||
handleClickLineNum(e) {
|
||||
const hash = $(e.currentTarget).attr('href');
|
||||
e.preventDefault();
|
||||
if (window.history.pushState) {
|
||||
window.history.pushState(null, null, hash);
|
||||
} else {
|
||||
window.location.hash = hash;
|
||||
}
|
||||
this.highlighSelectedLine();
|
||||
}
|
||||
|
||||
diffViewType() {
|
||||
return $('.inline-parallel-buttons a.active').data('view-type');
|
||||
}
|
||||
|
||||
lineNumbers(line) {
|
||||
if (!line.children().length) {
|
||||
return [0, 0];
|
||||
}
|
||||
return line.find('.diff-line-num').map((i, elm) => parseInt($(elm).data('linenumber'), 10));
|
||||
}
|
||||
|
||||
highlighSelectedLine() {
|
||||
const $diffFiles = $('.diff-file');
|
||||
$diffFiles.find('.hll').removeClass('hll');
|
||||
|
||||
if (window.location.hash !== '') {
|
||||
const hash = window.location.hash.replace('#', '');
|
||||
$diffFiles
|
||||
.find(`tr#${hash}:not(.match) td, td#${hash}, td[data-line-code="${hash}"]`)
|
||||
.addClass('hll');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
window.gl = window.gl || {};
|
||||
window.gl.Diff = Diff;
|
||||
})();
|
|
@ -1,4 +1,7 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable comma-dangle, object-shorthand, func-names, no-else-return, quotes, no-lonely-if, semi, max-len */
|
||||
/* global Vue */
|
||||
/* global CommentsStore */
|
||||
|
||||
(() => {
|
||||
const CommentAndResolveBtn = Vue.extend({
|
||||
props: {
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
/* eslint-disable */
|
||||
/* eslint-disable comma-dangle, object-shorthand, func-names, no-else-return, guard-for-in, no-restricted-syntax, one-var, indent, space-before-function-paren, no-plusplus, no-lonely-if, no-continue, brace-style, max-len, quotes, semi */
|
||||
/* global Vue */
|
||||
/* global DiscussionMixins */
|
||||
/* global CommentsStore */
|
||||
|
||||
(() => {
|
||||
JumpToDiscussion = Vue.extend({
|
||||
const JumpToDiscussion = Vue.extend({
|
||||
mixins: [DiscussionMixins],
|
||||
props: {
|
||||
discussionId: String
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue