Show More
The requested changes are too big and content was truncated. Show full diff
@@ -0,0 +1,10 b'' | |||
|
1 | { | |
|
2 | "presets": [ | |
|
3 | ["env", { | |
|
4 | "targets": { | |
|
5 | "browsers": ["last 2 versions"] | |
|
6 | } | |
|
7 | }] | |
|
8 | ], | |
|
9 | "plugins": ["transform-object-rest-spread"] | |
|
10 | } |
@@ -0,0 +1,44 b'' | |||
|
1 | .. _integrations-rcextensions: | |
|
2 | ||
|
3 | ||
|
4 | rcextensions integrations | |
|
5 | ========================= | |
|
6 | ||
|
7 | ||
|
8 | Since RhodeCode 4.14 release rcextensions aren't part of rhodecode-tools, and instead | |
|
9 | they are shipped with the new or upgraded installations. | |
|
10 | ||
|
11 | The rcextensions template `rcextensions.tmpl` is created in the `etc/` directory | |
|
12 | of enterprise or community installation. It's always re-created and updated on upgrades. | |
|
13 | ||
|
14 | ||
|
15 | Activating rcextensions | |
|
16 | +++++++++++++++++++++++ | |
|
17 | ||
|
18 | To activate rcextensions simply copy or rename the created template rcextensions | |
|
19 | into the path where the rhodecode.ini file is located:: | |
|
20 | ||
|
21 | pushd ~/rccontrol/enterprise-1/ | |
|
22 | or | |
|
23 | pushd ~/rccontrol/community-1/ | |
|
24 | ||
|
25 | mv etc/rcextensions.tmpl rcextensions | |
|
26 | ||
|
27 | ||
|
28 | rcextensions are loaded when |RCE| starts. So a restart is required after activation or | |
|
29 | change of code in rcextensions. | |
|
30 | ||
|
31 | Simply restart only the enterprise/community instance:: | |
|
32 | ||
|
33 | rccontrol restart enterprise-1 | |
|
34 | or | |
|
35 | rccontrol restart community-1 | |
|
36 | ||
|
37 | ||
|
38 | Example usage | |
|
39 | +++++++++++++ | |
|
40 | ||
|
41 | ||
|
42 | To see examples of usage please check the examples directory under: | |
|
43 | ||
|
44 | https://code.rhodecode.com/rhodecode-enterprise-ce/files/stable/rhodecode/config/rcextensions/examples |
@@ -0,0 +1,114 b'' | |||
|
1 | |RCE| 4.14.0 |RNS| | |
|
2 | ------------------ | |
|
3 | ||
|
4 | Release Date | |
|
5 | ^^^^^^^^^^^^ | |
|
6 | ||
|
7 | - 2018-11-02 | |
|
8 | ||
|
9 | ||
|
10 | New Features | |
|
11 | ^^^^^^^^^^^^ | |
|
12 | ||
|
13 | - Diffs: expose range diff inside the PR view. It's now possible to show | |
|
14 | commit-per-commit view of changes in pull request. | |
|
15 | - Diffs: new sticky context bar. | |
|
16 | When browsing diffs we show file path of the current diff so users are aware all the time | |
|
17 | what file they are reviewing. | |
|
18 | - Diffs: added quick file selector in diffs views. Now it's possible to select a file | |
|
19 | in large diffs from the sticky header for quicker access to certain interesting files | |
|
20 | in diffs. | |
|
21 | - Diffs: introducing diff menu for whitespace toggle and context changes. | |
|
22 | It's now possible to show/hide whitespace changes and toggle the file context in | |
|
23 | all diff places including pull requests. | |
|
24 | - Comments: allow commenting on empty files without content. | |
|
25 | - Repositories: added option to archive repositories instead of deleting them. | |
|
26 | Archived repositories are useful for future auditing, but they are read-only. | |
|
27 | - rcextensions: new rcextensions. We're introducing new `rcextensions` that will be base | |
|
28 | for future low-level integrations. It's now possible to expose nice messages back | |
|
29 | to the users when using `rcextensions`. | |
|
30 | - Summary page: slightly re-organize summary page for better user experience. | |
|
31 | ||
|
32 | ||
|
33 | General | |
|
34 | ^^^^^^^ | |
|
35 | ||
|
36 | - Mailing: switched from custom library to pyramid_mailer with python3 compatibility. | |
|
37 | - Frontend: Switched to Polymer 3.0. | |
|
38 | - Frontend: fixed problems with IE11 and brought back support for that browser. | |
|
39 | - Git: use a fetch_sync based creation of remote repositories. | |
|
40 | This fixes problems with importing from Bitbucket. | |
|
41 | - Comments: update comments email templates. | |
|
42 | - Packaging: only wrap external dependency scripts. This makes execution of scripts | |
|
43 | roughly 5x faster due to much smaller PATH tree. | |
|
44 | - HTTP: use application wide detection of invalid bytes sent via URL/GET/POST data. | |
|
45 | - Fonts/UI: use consistent fonts across the whole application. | |
|
46 | Few places had non-standard custom fonts. | |
|
47 | - Google: updated google auth plugin with latest API changes. | |
|
48 | - Core: handle edge case requesting matched routes but with hg/svn/git or api context. | |
|
49 | - Dependencies: bumped rhodecode-tools to 1.0.0 release using Apache2 license. | |
|
50 | - Dependencies: atomicwrites==1.2.1 | |
|
51 | - Dependencies: attrs==18.2.0 | |
|
52 | - Dependencies: dogpile.cache==0.6.7 | |
|
53 | - Dependencies: psutil==5.4.7 | |
|
54 | - Dependencies: pathlib2==2.3.2 | |
|
55 | - Dependencies: subprocess32==3.5.2 | |
|
56 | - Dependencies: gevent==1.3.6 | |
|
57 | - Dependencies: greenlet==0.4.15 | |
|
58 | - Dependencies: pytest==3.8.2 | |
|
59 | - Dependencies: py==1.6.0 | |
|
60 | - Dependencies: pytest-cov==2.6.0 | |
|
61 | - Dependencies: pytest-timeout==1.3.2 | |
|
62 | - Dependencies: coverage==4.5.1 | |
|
63 | - Dependencies: psycopg2==2.7.5 | |
|
64 | ||
|
65 | ||
|
66 | Security | |
|
67 | ^^^^^^^^ | |
|
68 | ||
|
69 | - RST: improve Javascript RST sandbox. | |
|
70 | - Jupyter: sanitize markdown cells similar as we do for our own markdown cleanup. | |
|
71 | ||
|
72 | ||
|
73 | Performance | |
|
74 | ^^^^^^^^^^^ | |
|
75 | ||
|
76 | - SSH: improved SSH wrapper execution speed by using optimized binary script wrapping. | |
|
77 | - Core: reduced font and JavaScript load times. | |
|
78 | ||
|
79 | ||
|
80 | Fixes | |
|
81 | ^^^^^ | |
|
82 | ||
|
83 | - Comments: ensure we always display unmatched comments. | |
|
84 | - Branch Permissions: fixed changing rule order for branch permissions. | |
|
85 | - Users: ensure get_first_superadmin actually gets the 1st created super-admin. | |
|
86 | - Users: when deleting users ensure we also clear personal flag. | |
|
87 | This fixes some problems with multiple personal groups. | |
|
88 | - Diffs: disable the error border on highlight errors. | |
|
89 | - Integrations: implement retry to HTTP[S] calls for integrations. | |
|
90 | Web parts will do a 3x retry call in case service is not reachable or | |
|
91 | responds with 5XX codes. | |
|
92 | - Git: fixed pull-request updates in case branch names are the same as the file names. | |
|
93 | - Supervisor: add patch for older kernel support. | |
|
94 | - Compare: fixed file after/before links in compare view for cross repo compare. | |
|
95 | - Emails: improve fonts and rendering of email HTML. | |
|
96 | - Permissions: flush members of user groups permissions to clear caches. | |
|
97 | - Repository: add check preventing of removal of repo with attached pull requests. Users | |
|
98 | should use the new archive repo function instead. | |
|
99 | ||
|
100 | ||
|
101 | Upgrade notes | |
|
102 | ^^^^^^^^^^^^^ | |
|
103 | ||
|
104 | - In this release, we're shipping a new `rcextensions`. The changes made are | |
|
105 | backward incompatible. An update of `rcextensions` is required | |
|
106 | prior to using them again. Please check the new `rcextensions.tmpl` directory | |
|
107 | located in `etc/rcextensions.tmpl` in your instance installation path. | |
|
108 | Old code should be 100% portable by just copy&paste to the right function. | |
|
109 | ||
|
110 | - Mailing: We introduced a new mailing library. The older options should be compatible and | |
|
111 | generally, old configuration doesn't need any changes in order to send emails. | |
|
112 | We, however, encourage users to re-check mailing setup in case of some more | |
|
113 | sophisticated email setups. | |
|
114 | There's a possibility to send a test email from admin > settings > email section. |
@@ -0,0 +1,16 b'' | |||
|
1 | diff -rup supervisor-3.3.4-orig/supervisor/options.py supervisor-3.3.4/supervisor/options.py | |
|
2 | --- supervisor-3.3.4-orig/supervisor/options.py 1970-01-01 01:00:01.000000000 +0100 | |
|
3 | +++ supervisor-3.3.4/supervisor-new/options.py 2018-10-24 10:53:19.368503735 +0200 | |
|
4 | @@ -1395,7 +1395,11 @@ class ServerOptions(Options): | |
|
5 | name = limit['name'] | |
|
6 | name = name # name is used below by locals() | |
|
7 | ||
|
8 | - soft, hard = resource.getrlimit(res) | |
|
9 | + try: | |
|
10 | + soft, hard = resource.getrlimit(res) | |
|
11 | + except Exception: | |
|
12 | + # handle old kernel problems, this is not critical to execute | |
|
13 | + soft, hard = -1, -1 | |
|
14 | ||
|
15 | if (soft < min) and (soft != -1): # -1 means unlimited | |
|
16 | if (hard < min) and (hard != -1): |
@@ -0,0 +1,3 b'' | |||
|
1 | ## special libraries we could extend the requirements.txt file with to add some | |
|
2 | ## custom libraries usefull for debug and memory tracing | |
|
3 | objgraph==3.1.1 |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 |
|
1 | NO CONTENT: new file 100644 |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
@@ -1,5 +1,5 b'' | |||
|
1 | 1 | [bumpversion] |
|
2 |
current_version = 4.1 |
|
|
2 | current_version = 4.14.0 | |
|
3 | 3 | message = release: Bump version {current_version} to {new_version} |
|
4 | 4 | |
|
5 | 5 | [bumpversion:file:rhodecode/VERSION] |
@@ -24,7 +24,6 b' syntax: regexp' | |||
|
24 | 24 | ^.dev |
|
25 | 25 | ^._dev |
|
26 | 26 | ^build/ |
|
27 | ^bower_components/ | |
|
28 | 27 | ^coverage\.xml$ |
|
29 | 28 | ^data$ |
|
30 | 29 | ^\.eggs/ |
@@ -36,14 +35,15 b' syntax: regexp' | |||
|
36 | 35 | ^htmlcov |
|
37 | 36 | ^junit\.xml$ |
|
38 | 37 | ^node_modules/ |
|
38 | ^node_binaries/ | |
|
39 | 39 | ^pylint.log$ |
|
40 | 40 | ^rcextensions/ |
|
41 | 41 | ^result$ |
|
42 | 42 | ^rhodecode/public/css/style.css$ |
|
43 | 43 | ^rhodecode/public/css/style-polymer.css$ |
|
44 | 44 | ^rhodecode/public/js/rhodecode-components.html$ |
|
45 | ^rhodecode/public/js/rhodecode-components.js$ | |
|
45 | 46 | ^rhodecode/public/js/scripts.js$ |
|
46 | ^rhodecode/public/js/rhodecode-components.js$ | |
|
47 | 47 | ^rhodecode/public/js/src/components/root-styles.gen.html$ |
|
48 | 48 | ^rhodecode/public/js/vendors/webcomponentsjs/ |
|
49 | 49 | ^rhodecode\.db$ |
@@ -5,25 +5,20 b' done = false' | |||
|
5 | 5 | done = true |
|
6 | 6 | |
|
7 | 7 | [task:rc_tools_pinned] |
|
8 | done = true | |
|
9 | 8 | |
|
10 | 9 | [task:fixes_on_stable] |
|
11 | done = true | |
|
12 | 10 | |
|
13 | 11 | [task:pip2nix_generated] |
|
14 | done = true | |
|
15 | 12 | |
|
16 | 13 | [task:changelog_updated] |
|
17 | done = true | |
|
18 | 14 | |
|
19 | 15 | [task:generate_api_docs] |
|
20 | done = true | |
|
16 | ||
|
17 | [task:updated_translation] | |
|
21 | 18 | |
|
22 | 19 | [release] |
|
23 |
state = |
|
|
24 |
version = 4.1 |
|
|
25 | ||
|
26 | [task:updated_translation] | |
|
20 | state = in_progress | |
|
21 | version = 4.14.0 | |
|
27 | 22 | |
|
28 | 23 | [task:generate_js_routes] |
|
29 | 24 |
@@ -1,4 +1,12 b'' | |||
|
1 | 1 | var gruntConfig = require('./grunt_config.json'); |
|
2 | var webpackConfig = require('./webpack.config'); | |
|
3 | gruntConfig["webpack"] = { | |
|
4 | options: { | |
|
5 | stats: !process.env.NODE_ENV || process.env.NODE_ENV === 'development' | |
|
6 | }, | |
|
7 | prod: webpackConfig, | |
|
8 | dev: Object.assign({ watch: false }, webpackConfig) | |
|
9 | }; | |
|
2 | 10 | |
|
3 | 11 | module.exports = function(grunt) { |
|
4 | 12 | grunt.initConfig(gruntConfig); |
@@ -7,9 +15,7 b' module.exports = function(grunt) {' | |||
|
7 | 15 | grunt.loadNpmTasks('grunt-contrib-concat'); |
|
8 | 16 | grunt.loadNpmTasks('grunt-contrib-watch'); |
|
9 | 17 | grunt.loadNpmTasks('grunt-contrib-jshint'); |
|
10 | grunt.loadNpmTasks('grunt-vulcanize'); | |
|
11 | grunt.loadNpmTasks('grunt-crisper'); | |
|
12 | 18 | grunt.loadNpmTasks('grunt-contrib-copy'); |
|
13 | ||
|
14 |
grunt.registerTask('default', ['less:production', 'less:components', |
|
|
19 | grunt.loadNpmTasks('grunt-webpack'); | |
|
20 | grunt.registerTask('default', ['less:production', 'less:components', 'copy', 'webpack', 'concat:dist']); | |
|
15 | 21 | }; |
@@ -39,7 +39,6 b' include rhodecode/public/sounds/*.mp3' | |||
|
39 | 39 | include rhodecode/public/sounds/*.wav |
|
40 | 40 | |
|
41 | 41 | # fonts |
|
42 | recursive-include rhodecode/public/fonts/ProximaNova * | |
|
43 | 42 | recursive-include rhodecode/public/fonts/RCIcons * |
|
44 | 43 | |
|
45 | 44 | # js |
@@ -1,9 +1,9 b'' | |||
|
1 | 1 | |
|
2 | 2 | .PHONY: clean docs docs-clean docs-cleanup test test-clean test-only test-only-postgres test-only-mysql web-build |
|
3 | 3 | |
|
4 | WEBPACK=./node_modules/webpack/bin/webpack.js | |
|
5 | GRUNT=grunt | |
|
6 | 4 | NODE_PATH=./node_modules |
|
5 | WEBPACK=./node_binaries/webpack | |
|
6 | GRUNT=./node_binaries/grunt | |
|
7 | 7 | |
|
8 | 8 | |
|
9 | 9 | clean: |
@@ -26,8 +26,6 b' debug = true' | |||
|
26 | 26 | #smtp_port = |
|
27 | 27 | #smtp_use_tls = false |
|
28 | 28 | #smtp_use_ssl = true |
|
29 | ## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.) | |
|
30 | #smtp_auth = | |
|
31 | 29 | |
|
32 | 30 | [server:main] |
|
33 | 31 | ## COMMON ## |
@@ -281,8 +279,10 b' supervisor.group_id = dev' | |||
|
281 | 279 | ## Display extended labs settings |
|
282 | 280 | labs_settings_active = true |
|
283 | 281 | |
|
284 |
## |
|
|
285 | exception_tracker.store_path = | |
|
282 | ## Custom exception store path, defaults to TMPDIR | |
|
283 | ## This is used to store exception from RhodeCode in shared directory | |
|
284 | #exception_tracker.store_path = | |
|
285 | ||
|
286 | 286 | |
|
287 | 287 | #################################### |
|
288 | 288 | ### CELERY CONFIG #### |
@@ -506,7 +506,7 b' debug_style = true' | |||
|
506 | 506 | ########################################### |
|
507 | 507 | #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30 |
|
508 | 508 | #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode |
|
509 | #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode | |
|
509 | #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8 | |
|
510 | 510 | # pymysql is an alternative driver for MySQL, use in case of problems with default one |
|
511 | 511 | #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode |
|
512 | 512 |
@@ -26,8 +26,6 b' debug = true' | |||
|
26 | 26 | #smtp_port = |
|
27 | 27 | #smtp_use_tls = false |
|
28 | 28 | #smtp_use_ssl = true |
|
29 | ## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.) | |
|
30 | #smtp_auth = | |
|
31 | 29 | |
|
32 | 30 | [server:main] |
|
33 | 31 | ## COMMON ## |
@@ -256,8 +254,9 b' supervisor.group_id = prod' | |||
|
256 | 254 | ## Display extended labs settings |
|
257 | 255 | labs_settings_active = true |
|
258 | 256 | |
|
259 |
## |
|
|
260 | exception_tracker.store_path = | |
|
257 | ## Custom exception store path, defaults to TMPDIR | |
|
258 | ## This is used to store exception from RhodeCode in shared directory | |
|
259 | #exception_tracker.store_path = | |
|
261 | 260 | |
|
262 | 261 | |
|
263 | 262 | #################################### |
@@ -480,7 +479,7 b' set debug = false' | |||
|
480 | 479 | ########################################### |
|
481 | 480 | #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30 |
|
482 | 481 | #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode |
|
483 | #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode | |
|
482 | #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8 | |
|
484 | 483 | # pymysql is an alternative driver for MySQL, use in case of problems with default one |
|
485 | 484 | #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode |
|
486 | 485 |
@@ -9,7 +9,7 b'' | |||
|
9 | 9 | # { |
|
10 | 10 | # # Thoughts on how to configure the dev environment |
|
11 | 11 | # rc = { |
|
12 |
# codeInternalUrl = "https://usr:token@ |
|
|
12 | # codeInternalUrl = "https://usr:token@code.rhodecode.com/internal"; | |
|
13 | 13 | # sources = { |
|
14 | 14 | # rhodecode-vcsserver = "/home/user/work/rhodecode-vcsserver"; |
|
15 | 15 | # rhodecode-enterprise-ce = "/home/user/work/rhodecode-enterprise-ce"; |
@@ -26,10 +26,18 b' args@' | |||
|
26 | 26 | }: |
|
27 | 27 | |
|
28 | 28 | let |
|
29 | # Use nixpkgs from args or import them. We use this indirect approach | |
|
30 | # through args to be able to use the name `pkgs` for our customized packages. | |
|
31 | # Otherwise we will end up with an infinite recursion. | |
|
32 | pkgs = args.pkgs or (import <nixpkgs> { }); | |
|
29 | pkgs_ = (import <nixpkgs> {}); | |
|
30 | in | |
|
31 | ||
|
32 | let | |
|
33 | pkgs = import <nixpkgs> { | |
|
34 | overlays = [ | |
|
35 | (import ./pkgs/overlays.nix) | |
|
36 | ]; | |
|
37 | inherit | |
|
38 | (pkgs_) | |
|
39 | system; | |
|
40 | }; | |
|
33 | 41 | |
|
34 | 42 | # Works with the new python-packages, still can fallback to the old |
|
35 | 43 | # variant. |
@@ -46,7 +54,7 b' let' | |||
|
46 | 54 | in |
|
47 | 55 | !builtins.elem (basename path) [ |
|
48 | 56 | ".git" ".hg" "__pycache__" ".eggs" ".idea" ".dev" |
|
49 | "bower_components" "node_modules" | |
|
57 | "node_modules" "node_binaries" | |
|
50 | 58 | "build" "data" "result" "tmp"] && |
|
51 | 59 | !builtins.elem ext ["egg-info" "pyc"] && |
|
52 | 60 | # TODO: johbo: This check is wrong, since "path" contains an absolute path, |
@@ -55,7 +63,11 b' let' | |||
|
55 | 63 | |
|
56 | 64 | sources = |
|
57 | 65 | let |
|
58 | inherit (pkgs.lib) all isString attrValues; | |
|
66 | inherit | |
|
67 | (pkgs.lib) | |
|
68 | all | |
|
69 | isString | |
|
70 | attrValues; | |
|
59 | 71 | sourcesConfig = pkgs.config.rc.sources or {}; |
|
60 | 72 | in |
|
61 | 73 | # Ensure that sources are configured as strings. Using a path |
@@ -66,18 +78,12 b' let' | |||
|
66 | 78 | version = builtins.readFile "${rhodecode-enterprise-ce-src}/rhodecode/VERSION"; |
|
67 | 79 | rhodecode-enterprise-ce-src = builtins.filterSource src-filter ./.; |
|
68 | 80 | |
|
69 | buildBowerComponents = pkgs.buildBowerComponents; | |
|
70 | 81 | nodeEnv = import ./pkgs/node-default.nix { |
|
71 |
inherit |
|
|
82 | inherit | |
|
83 | pkgs; | |
|
72 | 84 | }; |
|
73 | 85 | nodeDependencies = nodeEnv.shell.nodeDependencies; |
|
74 | 86 | |
|
75 | bowerComponents = buildBowerComponents { | |
|
76 | name = "enterprise-ce-${version}"; | |
|
77 | generated = ./pkgs/bower-packages.nix; | |
|
78 | src = rhodecode-enterprise-ce-src; | |
|
79 | }; | |
|
80 | ||
|
81 | 87 | rhodecode-testdata-src = sources.rhodecode-testdata or ( |
|
82 | 88 | pkgs.fetchhg { |
|
83 | 89 | url = "https://code.rhodecode.com/upstream/rc_testdata"; |
@@ -95,23 +101,22 b' let' | |||
|
95 | 101 | pythonLocalOverrides = self: super: { |
|
96 | 102 | rhodecode-enterprise-ce = |
|
97 | 103 | let |
|
98 |
linkNode |
|
|
104 | linkNodePackages = '' | |
|
99 | 105 | export RHODECODE_CE_PATH=${rhodecode-enterprise-ce-src} |
|
100 | 106 | |
|
101 | echo "[BEGIN]: Link node packages" | |
|
102 | rm -fr node_modules | |
|
103 | mkdir node_modules | |
|
107 | echo "[BEGIN]: Link node packages and binaries" | |
|
104 | 108 | # johbo: Linking individual packages allows us to run "npm install" |
|
105 | 109 | # inside of a shell to try things out. Re-entering the shell will |
|
106 | 110 | # restore a clean environment. |
|
111 | rm -fr node_modules | |
|
112 | mkdir node_modules | |
|
107 | 113 | ln -s ${nodeDependencies}/lib/node_modules/* node_modules/ |
|
108 | echo "[DONE]: Link node packages" | |
|
114 | export NODE_PATH=./node_modules | |
|
109 | 115 | |
|
110 | echo "[BEGIN]: Link bower packages" | |
|
111 | rm -fr bower_components | |
|
112 | mkdir bower_components | |
|
113 | ln -s ${bowerComponents}/bower_components/* bower_components/ | |
|
114 | echo "[DONE]: Link bower packages" | |
|
116 | rm -fr node_binaries | |
|
117 | mkdir node_binaries | |
|
118 | ln -s ${nodeDependencies}/bin/* node_binaries/ | |
|
119 | echo "[DONE ]: Link node packages and binaries" | |
|
115 | 120 | ''; |
|
116 | 121 | |
|
117 | 122 | releaseName = "RhodeCodeEnterpriseCE-${version}"; |
@@ -129,8 +134,7 b' let' | |||
|
129 | 134 | passthru = { |
|
130 | 135 | inherit |
|
131 | 136 | rhodecode-testdata |
|
132 | bowerComponents | |
|
133 | linkNodeAndBowerPackages | |
|
137 | linkNodePackages | |
|
134 | 138 | myPythonPackagesUnfix |
|
135 | 139 | pythonLocalOverrides |
|
136 | 140 | pythonCommunityOverrides; |
@@ -141,8 +145,6 b' let' | |||
|
141 | 145 | buildInputs = |
|
142 | 146 | attrs.buildInputs or [] ++ [ |
|
143 | 147 | rhodecode-testdata |
|
144 | pkgs.nodePackages.bower | |
|
145 | pkgs.nodePackages.grunt-cli | |
|
146 | 148 | ]; |
|
147 | 149 | |
|
148 | 150 | #NOTE: option to inject additional propagatedBuildInputs |
@@ -175,14 +177,28 b' let' | |||
|
175 | 177 | ''; |
|
176 | 178 | |
|
177 | 179 | preBuild = '' |
|
178 | ||
|
179 | echo "Building frontend assets" | |
|
180 | ${linkNodeAndBowerPackages} | |
|
181 | grunt | |
|
180 | echo "[BEGIN]: Building frontend assets" | |
|
181 | ${linkNodePackages} | |
|
182 | make web-build | |
|
182 | 183 | rm -fr node_modules |
|
184 | rm -fr node_binaries | |
|
185 | echo "[DONE ]: Building frontend assets" | |
|
183 | 186 | ''; |
|
184 | 187 | |
|
185 | 188 | postInstall = '' |
|
189 | # check required files | |
|
190 | STATIC_CHECK="/robots.txt /502.html | |
|
191 | /js/scripts.js /js/rhodecode-components.js | |
|
192 | /css/style.css /css/style-polymer.css" | |
|
193 | ||
|
194 | for file in $STATIC_CHECK; | |
|
195 | do | |
|
196 | if [ ! -f rhodecode/public/$file ]; then | |
|
197 | echo "Missing $file" | |
|
198 | exit 1 | |
|
199 | fi | |
|
200 | done | |
|
201 | ||
|
186 | 202 | echo "Writing enterprise-ce meta information for rccontrol to nix-support/rccontrol" |
|
187 | 203 | mkdir -p $out/nix-support/rccontrol |
|
188 | 204 | cp -v rhodecode/VERSION $out/nix-support/rccontrol/version |
@@ -192,22 +208,35 b' let' | |||
|
192 | 208 | cp configs/production.ini $out/etc |
|
193 | 209 | echo "[DONE]: saved enterprise-ce production.ini into $out/etc" |
|
194 | 210 | |
|
211 | cp -Rf rhodecode/config/rcextensions $out/etc/rcextensions.tmpl | |
|
212 | echo "[DONE ]: saved enterprise-ce rcextensions into $out/etc/rcextensions.tmpl" | |
|
213 | ||
|
195 | 214 | # python based programs need to be wrapped |
|
196 | 215 | mkdir -p $out/bin |
|
197 | # rhodecode-tools | |
|
198 | ln -s ${self.rhodecode-tools}/bin/rhodecode-* $out/bin/ | |
|
199 | 216 | |
|
200 | 217 | # required binaries from dependencies |
|
201 |
|
|
|
202 |
ln -s ${self. |
|
|
203 | ln -s ${self.gunicorn}/bin/gunicorn $out/bin/ | |
|
204 | ln -s ${self.supervisor}/bin/supervisor* $out/bin/ | |
|
218 | ln -s ${self.supervisor}/bin/supervisorctl $out/bin/ | |
|
219 | ln -s ${self.supervisor}/bin/supervisord $out/bin/ | |
|
205 | 220 | ln -s ${self.pastescript}/bin/paster $out/bin/ |
|
206 | 221 | ln -s ${self.channelstream}/bin/channelstream $out/bin/ |
|
207 | 222 | ln -s ${self.celery}/bin/celery $out/bin/ |
|
208 | echo "[DONE]: created symlinks into $out/bin" | |
|
223 | ln -s ${self.gunicorn}/bin/gunicorn $out/bin/ | |
|
224 | ln -s ${self.pyramid}/bin/prequest $out/bin/ | |
|
225 | ln -s ${self.pyramid}/bin/pserve $out/bin/ | |
|
209 | 226 | |
|
210 | for file in $out/bin/*; | |
|
227 | echo "[DONE ]: created symlinks into $out/bin" | |
|
228 | DEPS="$out/bin/supervisorctl \ | |
|
229 | $out/bin/supervisord \ | |
|
230 | $out/bin/paster \ | |
|
231 | $out/bin/channelstream \ | |
|
232 | $out/bin/celery \ | |
|
233 | $out/bin/gunicorn \ | |
|
234 | $out/bin/prequest \ | |
|
235 | $out/bin/pserve" | |
|
236 | ||
|
237 | # wrap only dependency scripts, they require to have full PYTHONPATH set | |
|
238 | # to be able to import all packages | |
|
239 | for file in $DEPS; | |
|
211 | 240 | do |
|
212 | 241 | wrapProgram $file \ |
|
213 | 242 | --prefix PATH : $PATH \ |
@@ -217,14 +246,16 b' let' | |||
|
217 | 246 | |
|
218 | 247 | echo "[DONE]: enterprise-ce binary wrapping" |
|
219 | 248 | |
|
220 | if [ ! -f rhodecode/public/js/scripts.js ]; then | |
|
221 | echo "Missing scripts.js" | |
|
222 | exit 1 | |
|
223 | fi | |
|
224 | if [ ! -f rhodecode/public/css/style.css ]; then | |
|
225 | echo "Missing style.css" | |
|
226 | exit 1 | |
|
227 | fi | |
|
249 | # rhodecode-tools don't need wrapping | |
|
250 | ln -s ${self.rhodecode-tools}/bin/rhodecode-* $out/bin/ | |
|
251 | ||
|
252 | # expose sources of CE | |
|
253 | ln -s $out $out/etc/rhodecode_enterprise_ce_source | |
|
254 | ||
|
255 | # expose static files folder | |
|
256 | cp -Rf $out/lib/${self.python.libPrefix}/site-packages/rhodecode/public/ $out/etc/static | |
|
257 | chmod 755 -R $out/etc/static | |
|
258 | ||
|
228 | 259 | ''; |
|
229 | 260 | }); |
|
230 | 261 | |
@@ -237,8 +268,13 b' let' | |||
|
237 | 268 | getAttr pythonPackages pkgs; |
|
238 | 269 | |
|
239 | 270 | pythonGeneratedPackages = import ./pkgs/python-packages.nix { |
|
240 |
inherit |
|
|
241 | inherit (pkgs) fetchurl fetchgit fetchhg; | |
|
271 | inherit | |
|
272 | pkgs; | |
|
273 | inherit | |
|
274 | (pkgs) | |
|
275 | fetchurl | |
|
276 | fetchgit | |
|
277 | fetchhg; | |
|
242 | 278 | }; |
|
243 | 279 | |
|
244 | 280 | pythonCommunityOverrides = import ./pkgs/python-packages-overrides.nix { |
@@ -162,7 +162,8 b' To add custom hooks to your instance, us' | |||
|
162 | 162 | |
|
163 | 163 | 1. Open :menuselection:`Admin --> Settings --> Hooks` |
|
164 | 164 | 2. Add your custom hook details, you can use a file path to specify custom |
|
165 |
hook scripts, for example: |
|
|
165 | hook scripts, for example: | |
|
166 | ``pretxnchangegroup.example`` with value ``python:/path/to/custom_hook.py:my_func_name`` | |
|
166 | 167 | 3. Select :guilabel:`Save` |
|
167 | 168 | |
|
168 | 169 | Also, see the |RC| Extensions section of the :ref:`rc-tools` guide. |RC| |
@@ -18,8 +18,8 b' Prerequisites' | |||
|
18 | 18 | .. tip:: |
|
19 | 19 | |
|
20 | 20 | We recommend using Wandisco repositories which provide latest SVN versions |
|
21 | for most platforms. Below is example how to add the wandisco repositories | |
|
22 | for Ubuntu. | |
|
21 | for most platforms. | |
|
22 | Here is an example how to add the Wandisco repositories for Ubuntu. | |
|
23 | 23 | |
|
24 | 24 | .. code-block:: bash |
|
25 | 25 | |
@@ -27,15 +27,28 b' Prerequisites' | |||
|
27 | 27 | $ sudo wget -q http://opensource.wandisco.com/wandisco-debian.gpg -O- | sudo apt-key add - |
|
28 | 28 | $ sudo apt-get update |
|
29 | 29 | |
|
30 | ||
|
31 | Using Ubuntu 14.04/16.04 Distribution as an example execute the following to | |
|
32 | install required components: | |
|
30 | Here is an example how to add the Wandisco repositories for Centos/Redhat. Using | |
|
31 | a yum config | |
|
33 | 32 | |
|
34 | 33 | .. code-block:: bash |
|
35 | 34 | |
|
36 | $ sudo apt-get install apache2 libapache2-mod-svn | |
|
35 | [wandisco-Git] | |
|
36 | name=CentOS-6 - Wandisco Git | |
|
37 | baseurl=http://opensource.wandisco.com/centos/6/git/$basearch/ | |
|
38 | enabled=1 | |
|
39 | gpgcheck=1 | |
|
40 | gpgkey=http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco | |
|
41 | ||
|
42 | ||
|
37 | 43 | |
|
38 | Once installed you need to enable ``dav_svn``: | |
|
44 | Example installation of required components for Ubuntu platform: | |
|
45 | ||
|
46 | .. code-block:: bash | |
|
47 | ||
|
48 | $ sudo apt-get install apache2 | |
|
49 | $ sudo apt-get install libapache2-mod-svn | |
|
50 | ||
|
51 | Once installed you need to enable ``dav_svn`` on Ubuntu: | |
|
39 | 52 | |
|
40 | 53 | .. code-block:: bash |
|
41 | 54 | |
@@ -44,6 +57,26 b' Once installed you need to enable ``dav_' | |||
|
44 | 57 | $ sudo a2enmod authn_anon |
|
45 | 58 | |
|
46 | 59 | |
|
60 | Example installation of required components for RedHat/CentOS platform: | |
|
61 | ||
|
62 | .. code-block:: bash | |
|
63 | ||
|
64 | $ sudo yum install httpd | |
|
65 | $ sudo yum install subversion mod_dav_svn | |
|
66 | ||
|
67 | ||
|
68 | Once installed you need to enable ``dav_svn`` on RedHat/CentOS: | |
|
69 | ||
|
70 | .. code-block:: bash | |
|
71 | ||
|
72 | sudo vi /etc/httpd/conf.modules.d/10-subversion.conf | |
|
73 | ## The file should read: | |
|
74 | ||
|
75 | LoadModule dav_svn_module modules/mod_dav_svn.so | |
|
76 | LoadModule headers_module modules/mod_headers.so | |
|
77 | LoadModule authn_anon_module modules/mod_authn_anon.so | |
|
78 | ||
|
79 | ||
|
47 | 80 | Configuring Apache Setup |
|
48 | 81 | ======================== |
|
49 | 82 |
@@ -13,48 +13,4 b' dependencies for Python and JavaScript w' | |||
|
13 | 13 | this section to generate the needed Nix derivations. |
|
14 | 14 | |
|
15 | 15 | |
|
16 | Python dependencies | |
|
17 | =================== | |
|
18 | ||
|
19 | We use the tool `pip2nix` to generate the Nix derivations for our Python | |
|
20 | dependencies. | |
|
21 | ||
|
22 | Generating the dependencies should be done with the following command: | |
|
23 | ||
|
24 | .. code:: shell | |
|
25 | ||
|
26 | pip2nix generate --license | |
|
27 | ||
|
28 | ||
|
29 | .. note:: | |
|
30 | ||
|
31 | License extraction support is still experimental, use the version from the | |
|
32 | following pull request: https://github.com/ktosiek/pip2nix/pull/30 | |
|
33 | ||
|
34 | ||
|
35 | ||
|
36 | Node dependencies | |
|
37 | ================= | |
|
38 | ||
|
39 | After adding new dependencies via ``npm install --save``, use `node2nix` to | |
|
40 | update the corresponding Nix derivations: | |
|
41 | ||
|
42 | .. code:: shell | |
|
43 | ||
|
44 | cd pkgs | |
|
45 | node2nix --input ../package.json \ | |
|
46 | -o node-packages.nix \ | |
|
47 | -e node-env.nix \ | |
|
48 | -c node-default.nix \ | |
|
49 | -d --flatten | |
|
50 | ||
|
51 | ||
|
52 | Bower dependencies | |
|
53 | ================== | |
|
54 | ||
|
55 | Frontend dependencies are managed based on `bower`, with `bower2nix` a tool | |
|
56 | exists which can generate the needed Nix derivations: | |
|
57 | ||
|
58 | .. code:: shell | |
|
59 | ||
|
60 | bower2nix bower.json pkgs/bower-packages.nix | |
|
16 | Please check pkgs/README.rst file for mor information on how to build the packages. |
@@ -14,12 +14,23 b' so to clarify what is meant each time, r' | |||
|
14 | 14 | between software components and can be used to trigger plugins, or their |
|
15 | 15 | extensions. |
|
16 | 16 | |
|
17 | .. toctree:: | |
|
17 | ||
|
18 | Hooks | |
|
19 | ----- | |
|
20 | ||
|
21 | Within |RCM| there are two types of supported hooks. | |
|
18 | 22 | |
|
19 | rcx | |
|
20 | install-ext | |
|
21 | config-ext | |
|
22 | extensions | |
|
23 | hooks | |
|
24 | full-blown-example | |
|
25 | int-slack | |
|
23 | * **Internal built-in hooks**: The internal |hg|, |git| or |svn| hooks are | |
|
24 | triggered by different VCS operations, like push, pull, | |
|
25 | or clone and are non-configurable, but you can add your own VCS hooks, | |
|
26 | see :ref:`custom-hooks`. | |
|
27 | * **Custom rcextensions hooks**: User defined hooks centre around the lifecycle of | |
|
28 | certain actions such are |repo| creation, user creation etc. The actions | |
|
29 | these hooks trigger can be rejected based on the API permissions of the | |
|
30 | user calling them. | |
|
31 | ||
|
32 | On instructions how to use the custom `rcextensions` | |
|
33 | see :ref:`integrations-rcextensions` section. | |
|
34 | ||
|
35 | ||
|
36 |
@@ -19,9 +19,7 b' Once configured you can check the settin' | |||
|
19 | 19 | ## Additionally these settings will be used by the RhodeCode mailing system ## |
|
20 | 20 | ################################################################################ |
|
21 | 21 | #email_to = admin@localhost |
|
22 | #error_email_from = paste_error@localhost | |
|
23 | 22 | #app_email_from = rhodecode-noreply@localhost |
|
24 | #error_message = | |
|
25 | 23 | #email_prefix = [RhodeCode] |
|
26 | 24 | |
|
27 | 25 | #smtp_server = mail.server.com |
@@ -30,5 +28,3 b' Once configured you can check the settin' | |||
|
30 | 28 | #smtp_port = |
|
31 | 29 | #smtp_use_tls = false |
|
32 | 30 | #smtp_use_ssl = true |
|
33 | ## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.) | |
|
34 | #smtp_auth = |
@@ -3,7 +3,7 b'' | |||
|
3 | 3 | Integrations |
|
4 | 4 | ------------ |
|
5 | 5 | |
|
6 |
|
|
|
6 | |RCE| supports integrations with external services for various events, | |
|
7 | 7 | such as commit pushes and pull requests. Multiple integrations of the same type |
|
8 | 8 | can be added at the same time; this is useful for posting different events to |
|
9 | 9 | different Slack channels, for example. |
@@ -11,18 +11,20 b' different Slack channels, for example.' | |||
|
11 | 11 | Supported integrations |
|
12 | 12 | ^^^^^^^^^^^^^^^^^^^^^^ |
|
13 | 13 | |
|
14 | ============================ ============ ===================================== | |
|
14 | ================================ ============ ======================================== | |
|
15 | 15 | Type/Name |RC| Edition Description |
|
16 | ============================ ============ ===================================== | |
|
17 |
:ref:`integrations- |
|
|
18 |
:ref:`integrations- |
|
|
19 | :ref:`integrations-webhook` |RCCEshort| POST events as `json` to a custom url | |
|
16 | ================================ ============ ======================================== | |
|
17 | :ref:`integrations-webhook` |RCCEshort| Trigger events as `json` to a custom url | |
|
18 | :ref:`integrations-slack` |RCCEshort| Integrate with https://slack.com/ | |
|
19 | :ref:`integrations-hipchat` |RCCEshort| Integrate with https://www.hipchat.com/ | |
|
20 | :ref:`integrations-email` |RCCEshort| Send repo push commits by email | |
|
20 | 21 | :ref:`integrations-ci` |RCCEshort| Trigger Builds for Common CI Systems |
|
21 | :ref:`integrations-email` |RCCEshort| Send repo push commits by email | |
|
22 | :ref:`integrations-rcextensions` |RCCEshort| Advanced low-level integration framework | |
|
23 | ||
|
22 | 24 | :ref:`integrations-jenkins` |RCEEshort| Trigger Builds for Jenkins CI System |
|
23 | 25 | :ref:`integrations-redmine` |RCEEshort| Close/Resolve/Reference Redmine issues |
|
24 | 26 | :ref:`integrations-jira` |RCEEshort| Close/Resolve/Reference JIRA issues |
|
25 | ============================ ============ ===================================== | |
|
27 | ================================ ============ ======================================== | |
|
26 | 28 | |
|
27 | 29 | .. _creating-integrations: |
|
28 | 30 | |
@@ -55,3 +57,4 b' See pages specific to each type of integ' | |||
|
55 | 57 | |
|
56 | 58 | ci |
|
57 | 59 | jenkins |
|
60 | integrations-rcextensions |
@@ -9,6 +9,7 b' Release Notes' | |||
|
9 | 9 | .. toctree:: |
|
10 | 10 | :maxdepth: 1 |
|
11 | 11 | |
|
12 | release-notes-4.14.0.rst | |
|
12 | 13 | release-notes-4.13.3.rst |
|
13 | 14 | release-notes-4.13.2.rst |
|
14 | 15 | release-notes-4.13.1.rst |
@@ -1,6 +1,6 b'' | |||
|
1 | 1 | .menuselection, .guilabel { |
|
2 | 2 | font-size: .90em; |
|
3 | font-family: "proximanovaregular", "Proxima Nova Regular", "Proxima Nova", sans-serif; | |
|
3 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; | |
|
4 | 4 | font-style: oblique; |
|
5 | 5 | } |
|
6 | 6 |
@@ -273,107 +273,8 b' Use this to create or update a |RCE| con' | |||
|
273 | 273 | rhodecode-extensions |
|
274 | 274 | -------------------- |
|
275 | 275 | |
|
276 | |RCT| adds additional mapping for :ref:`indexing-ref`, statistics, and adds | |
|
277 | additional code for push/pull/create/delete |repo| hooks. These hooks can be | |
|
278 | used to send signals to build-bots such as jenkins. Options: | |
|
279 | ||
|
280 | .. rst-class:: dl-horizontal | |
|
281 | ||
|
282 | \-c, - -config <config_file> | |
|
283 | Create a configuration file. The default file is created | |
|
284 | in ``~/.rhoderc`` | |
|
285 | ||
|
286 | \-h, - -help | |
|
287 | Show help messages. | |
|
288 | ||
|
289 | \-F, - -format {json,pretty} | |
|
290 | Set the formatted representation. | |
|
291 | ||
|
292 | \-I, - -install-dir <str> | |
|
293 | Set the location of the |RCE| installation. The default location is | |
|
294 | :file:`/home/{user}/.rccontrol/`. | |
|
295 | ||
|
296 | \ - -ini-file <str> | |
|
297 | Path to the :file:`rhodecode.ini` file for that instance. | |
|
298 | ||
|
299 | \ - -instance-name <instance-id> | |
|
300 | Set the instance name. | |
|
301 | ||
|
302 | \ - -plugins | |
|
303 | Add plugins to your |RCE| installation. See the | |
|
304 | :ref:`extensions-hooks-ref` section for more details. | |
|
305 | ||
|
306 | \ - -version | |
|
307 | Display your |RCT| version. | |
|
308 | ||
|
309 | ||
|
310 | Once installed, you will see a :file:`rcextensions` folder in the instance | |
|
311 | directory, for example :file:`home/{user}/.rccontrol/{instance-id}/rcextensions` | |
|
312 | ||
|
313 | To install ``rcextensions``, use the following example: | |
|
314 | ||
|
315 | .. code-block:: bash | |
|
316 | ||
|
317 | # install extensions on the given instance | |
|
318 | # If using virtualenv prior to RCE 350 | |
|
319 | (venv)$ rhodecode-extensions --instance-name=enterprise-1 \ | |
|
320 | --ini-file=rhodecode.ini | |
|
321 | Writen new extensions file to rcextensions | |
|
322 | ||
|
323 | # install extensions with additional plugins on the given instance | |
|
324 | (venv)$ rhodecode-extensions --instance-name=enterprise-1 \ | |
|
325 | --ini-file=rhodecode.ini --plugins | |
|
326 | Writen new extensions file to rcextensions | |
|
327 | ||
|
328 | # installing extensions from 350 onwards | |
|
329 | # as they are packaged with RCE | |
|
330 | $ .rccontrol/enterprise-4/profile/bin/rhodecode-extensions --plugins \ | |
|
331 | --instance-name=enterprise-4 --ini-file=rhodecode.ini | |
|
332 | ||
|
333 | Writen new extensions file to rcextensions | |
|
334 | ||
|
335 | See the new extensions inside this directory for more details about the | |
|
336 | additional hooks available, for example see the ``push_post.py`` file. | |
|
337 | ||
|
338 | .. code-block:: python | |
|
339 | ||
|
340 | import urllib | |
|
341 | import urllib2 | |
|
342 | ||
|
343 | def run(*args, **kwargs): | |
|
344 | """ | |
|
345 | Extra params | |
|
346 | ||
|
347 | :param URL: url to send the data to | |
|
348 | """ | |
|
349 | ||
|
350 | url = kwargs.pop('URL', None) | |
|
351 | if url: | |
|
352 | from rhodecode.lib.compat import json | |
|
353 | from rhodecode.model.db import Repository | |
|
354 | ||
|
355 | repo = Repository.get_by_repo_name(kwargs['repository']) | |
|
356 | changesets = [] | |
|
357 | vcs_repo = repo.scm_instance_no_cache() | |
|
358 | for r in kwargs['pushed_revs']: | |
|
359 | cs = vcs_repo.get_changeset(r) | |
|
360 | changesets.append(json.dumps(cs)) | |
|
361 | ||
|
362 | kwargs['pushed_revs'] = changesets | |
|
363 | headers = { | |
|
364 | 'User-Agent': 'RhodeCode-SCM web hook', | |
|
365 | 'Content-type': 'application/x-www-form-urlencoded; charset=UTF-8', | |
|
366 | 'Accept': 'text/javascript, text/html, application/xml, ' | |
|
367 | 'text/xml, */*', | |
|
368 | 'Accept-Encoding': 'gzip,deflate,sdch', | |
|
369 | } | |
|
370 | ||
|
371 | data = kwargs | |
|
372 | data = urllib.urlencode(data) | |
|
373 | req = urllib2.Request(url, data, headers) | |
|
374 | response = urllib2.urlopen(req) | |
|
375 | response.read() | |
|
376 | return 0 | |
|
276 | The `rcextensions` since version 4.14 are now shipped together with |RCE| please check | |
|
277 | the using :ref:`integrations-rcextensions` section. | |
|
377 | 278 | |
|
378 | 279 | |
|
379 | 280 | rhodecode-gist |
@@ -54,23 +54,13 b' packaged with |RCE| by default.' | |||
|
54 | 54 | |
|
55 | 55 | .. code-block:: bash |
|
56 | 56 | |
|
57 | $ .rccontrol/enterprise-4/profile/bin/rhodecode-extensions --plugins \ | |
|
58 | --instance-name=enterprise-4 --ini-file=rhodecode.ini | |
|
57 | $ .rccontrol/enterprise-4/profile/bin/rhodecode-api --instance-name=enterprise-4 get_ip [11:56:57 on 05/10/2018] | |
|
59 | 58 | |
|
60 | Writen new extensions file to rcextensions | |
|
61 | Copied hipchat_push_notify.py plugin to rcextensions | |
|
62 | Copied jira_pr_flow.py plugin to rcextensions | |
|
63 | Copied default_reviewers.py plugin to rcextensions | |
|
64 | Copied extract_commits.py plugin to rcextensions | |
|
65 | Copied extract_issues.py plugin to rcextensions | |
|
66 | Copied redmine_pr_flow.py plugin to rcextensions | |
|
67 | Copied extra_fields.py plugin to rcextensions | |
|
68 | Copied jira_smart_commits.py plugin to rcextensions | |
|
69 | Copied http_notify.py plugin to rcextensions | |
|
70 | Copied slack_push_notify.py plugin to rcextensions | |
|
71 | Copied slack_message.py plugin to rcextensions | |
|
72 | Copied extract_jira_issues.py plugin to rcextensions | |
|
73 | Copied extract_redmine_issues.py plugin to rcextensions | |
|
74 | Copied redmine_smart_commits.py plugin to rcextensions | |
|
75 | Copied send_mail.py plugin to rcextensions | |
|
76 | ||
|
59 | { | |
|
60 | "error": null, | |
|
61 | "id": 1000, | |
|
62 | "result": { | |
|
63 | "server_ip_addr": "1.2.3.4", | |
|
64 | "user_ips": [] | |
|
65 | } | |
|
66 | } |
@@ -8,28 +8,26 b'' | |||
|
8 | 8 | "src": "rhodecode/public/js/src", |
|
9 | 9 | "src_rc": "rhodecode/public/js/rhodecode", |
|
10 | 10 | "dest": "rhodecode/public/js", |
|
11 | "bower": "bower_components", | |
|
12 | 11 | "node_modules": "node_modules" |
|
13 | 12 | } |
|
14 | 13 | }, |
|
15 | 14 | "copy": { |
|
16 | 15 | "main": { |
|
16 | "files": [ | |
|
17 | { | |
|
17 | 18 | "expand": true, |
|
18 |
"cwd": " |
|
|
19 |
"src": "webcomponentsjs/ |
|
|
19 | "cwd": "node_modules/@webcomponents", | |
|
20 | "src": "webcomponentsjs/*.*", | |
|
20 | 21 | "dest": "<%= dirs.js.dest %>/vendors" |
|
22 | }, | |
|
23 | { | |
|
24 | "src": "<%= dirs.css.src %>/style-polymer.css", | |
|
25 | "dest": "<%= dirs.js.dest %>/src/components/style-polymer.css" | |
|
26 | } | |
|
27 | ] | |
|
21 | 28 | } |
|
22 | 29 | }, |
|
23 | 30 | "concat": { |
|
24 | "polymercss": { | |
|
25 | "src": [ | |
|
26 | "<%= dirs.js.src %>/components/root-styles-prefix.html", | |
|
27 | "<%= dirs.css.src %>/style-polymer.css", | |
|
28 | "<%= dirs.js.src %>/components/root-styles-suffix.html" | |
|
29 | ], | |
|
30 | "dest": "<%= dirs.js.dest %>/src/components/root-styles.gen.html", | |
|
31 | "nonull": true | |
|
32 | }, | |
|
33 | 31 | "dist": { |
|
34 | 32 | "src": [ |
|
35 | 33 | "<%= dirs.js.node_modules %>/jquery/dist/jquery.min.js", |
@@ -37,6 +35,10 b'' | |||
|
37 | 35 | "<%= dirs.js.node_modules %>/moment/min/moment.min.js", |
|
38 | 36 | "<%= dirs.js.node_modules %>/clipboard/dist/clipboard.min.js", |
|
39 | 37 | "<%= dirs.js.node_modules %>/favico.js/favico-0.3.10.min.js", |
|
38 | "<%= dirs.js.node_modules %>/sticky-sidebar/dist/sticky-sidebar.min.js", | |
|
39 | "<%= dirs.js.node_modules %>/sticky-sidebar/dist/jquery.sticky-sidebar.min.js", | |
|
40 | "<%= dirs.js.node_modules %>/waypoints/lib/noframework.waypoints.min.js", | |
|
41 | "<%= dirs.js.node_modules %>/waypoints/lib/jquery.waypoints.min.js", | |
|
40 | 42 | "<%= dirs.js.node_modules %>/appenlight-client/appenlight-client.min.js", |
|
41 | 43 | "<%= dirs.js.src %>/logging.js", |
|
42 | 44 | "<%= dirs.js.src %>/bootstrap.js", |
@@ -89,22 +91,13 b'' | |||
|
89 | 91 | "<%= dirs.js.src %>/rhodecode/tooltips.js", |
|
90 | 92 | "<%= dirs.js.src %>/rhodecode/users.js", |
|
91 | 93 | "<%= dirs.js.src %>/rhodecode/appenlight.js", |
|
92 | "<%= dirs.js.src %>/rhodecode.js" | |
|
94 | "<%= dirs.js.src %>/rhodecode.js", | |
|
95 | "<%= dirs.js.dest %>/rhodecode-components.js" | |
|
93 | 96 | ], |
|
94 | 97 | "dest": "<%= dirs.js.dest %>/scripts.js", |
|
95 | 98 | "nonull": true |
|
96 | 99 | } |
|
97 | 100 | }, |
|
98 | "crisper": { | |
|
99 | "dist": { | |
|
100 | "options": { | |
|
101 | "cleanup": false, | |
|
102 | "onlySplit": true | |
|
103 | }, | |
|
104 | "src": "<%= dirs.js.dest %>/rhodecode-components.html", | |
|
105 | "dest": "<%= dirs.js.dest %>/rhodecode-components.js" | |
|
106 | } | |
|
107 | }, | |
|
108 | 101 | "less": { |
|
109 | 102 | "development": { |
|
110 | 103 | "options": { |
@@ -152,8 +145,7 b'' | |||
|
152 | 145 | "less:development", |
|
153 | 146 | "less:components", |
|
154 | 147 | "concat:polymercss", |
|
155 |
" |
|
|
156 | "crisper", | |
|
148 | "webpack", | |
|
157 | 149 | "concat:dist" |
|
158 | 150 | ] |
|
159 | 151 | }, |
@@ -166,8 +158,7 b'' | |||
|
166 | 158 | "tasks": [ |
|
167 | 159 | "less:components", |
|
168 | 160 | "concat:polymercss", |
|
169 |
" |
|
|
170 | "crisper", | |
|
161 | "webpack", | |
|
171 | 162 | "concat:dist" |
|
172 | 163 | ] |
|
173 | 164 | } |
@@ -179,18 +170,5 b'' | |||
|
179 | 170 | "jshintrc": ".jshintrc" |
|
180 | 171 | } |
|
181 | 172 | } |
|
182 | }, | |
|
183 | "vulcanize": { | |
|
184 | "default": { | |
|
185 | "options": { | |
|
186 | "abspath": "", | |
|
187 | "inlineScripts": true, | |
|
188 | "inlineCss": true, | |
|
189 | "stripComments": true | |
|
190 | }, | |
|
191 | "files": { | |
|
192 | "<%= dirs.js.dest %>/rhodecode-components.html": "<%= dirs.js.src %>/components/shared-components.html" | |
|
193 | 173 |
|
|
194 | 174 | } |
|
195 | } | |
|
196 | } |
@@ -1,6 +1,6 b'' | |||
|
1 | 1 | { |
|
2 | 2 | "name": "rhodecode-enterprise", |
|
3 |
"version": " |
|
|
3 | "version": "2.0.0", | |
|
4 | 4 | "private": true, |
|
5 | 5 | "description" : "RhodeCode JS packaged", |
|
6 | 6 | "license": "SEE LICENSE IN LICENSE.txt", |
@@ -9,25 +9,50 b'' | |||
|
9 | 9 | "url" : "https://code.rhodecode.com/rhodecode-enterprise-ce" |
|
10 | 10 | }, |
|
11 | 11 | "devDependencies": { |
|
12 | "appenlight-client": "git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.1", | |
|
13 | "clipboard": "^2.0.1", | |
|
14 | "exports-loader": "^0.6.4", | |
|
15 | "favico.js": "^0.3.10", | |
|
12 | 16 | "grunt": "^0.4.5", |
|
17 | "grunt-cli": "^1.3.1", | |
|
18 | "grunt-contrib-concat": "^0.5.1", | |
|
13 | 19 | "grunt-contrib-copy": "^1.0.0", |
|
14 | "grunt-contrib-concat": "^0.5.1", | |
|
15 | 20 | "grunt-contrib-jshint": "^0.12.0", |
|
16 | 21 | "grunt-contrib-less": "^1.1.0", |
|
17 | 22 | "grunt-contrib-watch": "^0.6.1", |
|
18 | "crisper": "^2.1.1", | |
|
19 |
" |
|
|
20 | "grunt-crisper": "^1.0.1", | |
|
21 | "grunt-vulcanize": "^1.0.0", | |
|
22 | "node2nix": "^1.0.0", | |
|
23 | "grunt-webpack": "^3.1.3", | |
|
24 | "jquery": "1.11.3", | |
|
23 | 25 | "jshint": "^2.9.1-rc3", |
|
24 | "bower": "^1.8.4", | |
|
25 | "jquery": "1.11.3", | |
|
26 | "favico.js": "^0.3.10", | |
|
27 | "clipboard": "^2.0.1", | |
|
28 | "qrious": "^4.0.2", | |
|
29 | 26 | "moment": "^2.18.1", |
|
30 | 27 | "mousetrap": "^1.6.1", |
|
31 | "appenlight-client": "git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.1" | |
|
28 | "qrious": "^4.0.2", | |
|
29 | "sticky-sidebar": "3.3.1", | |
|
30 | "waypoints": "4.0.1", | |
|
31 | "webpack": "4.23.1", | |
|
32 | "webpack-cli": "3.1.2", | |
|
33 | "babel-core": "^6.26.3", | |
|
34 | "babel-loader": "^7.1.2", | |
|
35 | "babel-plugin-transform-object-rest-spread": "^6.26.0", | |
|
36 | "babel-preset-env": "^1.6.0", | |
|
37 | "copy-webpack-plugin": "^4.4.2", | |
|
38 | "css-loader": "^0.28.11", | |
|
39 | "html-loader": "^0.4.4", | |
|
40 | "html-webpack-plugin": "^3.2.0", | |
|
41 | "imports-loader": "^0.7.1", | |
|
42 | "polymer-webpack-loader": "^2.0.1", | |
|
43 | "style-loader": "^0.21.0", | |
|
44 | "webpack-uglify-js-plugin": "^1.1.9", | |
|
45 | "raw-loader": "1.0.0-beta.0", | |
|
46 | "ts-loader": "^1.3.3", | |
|
47 | "@webcomponents/webcomponentsjs": "^2.0.0", | |
|
48 | "@polymer/polymer": "^3.0.0", | |
|
49 | "@polymer/paper-button": "^3.0.0", | |
|
50 | "@polymer/paper-spinner": "^3.0.0", | |
|
51 | "@polymer/paper-tooltip": "^3.0.0", | |
|
52 | "@polymer/paper-toast": "^3.0.0", | |
|
53 | "@polymer/paper-toggle-button": "^3.0.0", | |
|
54 | "@polymer/iron-ajax": "^3.0.0", | |
|
55 | "@polymer/iron-autogrow-textarea": "^3.0.0", | |
|
56 | "@polymer/iron-a11y-keys": "^3.0.0" | |
|
32 | 57 | } |
|
33 | 58 | } |
@@ -27,24 +27,29 b' Python dependencies' | |||
|
27 | 27 | NodeJS dependencies |
|
28 | 28 | =================== |
|
29 | 29 | |
|
30 | Generate node-packages.nix file with all dependencies from NPM and package.json file | |
|
31 | This should be run before entering nix-shell. | |
|
32 | ||
|
33 | The sed at the end fixes a bug with http rewrite of re-generated packages | |
|
34 | ||
|
30 | 35 | .. code:: shell |
|
31 | 36 | |
|
32 | rm -rf node_modules | |
|
37 | rm -rf node_modules && | |
|
33 | 38 | nix-shell pkgs/shell-generate.nix --command " |
|
34 | 39 | node2nix --input package.json \ |
|
35 | 40 | -o pkgs/node-packages.nix \ |
|
36 | 41 | -e pkgs/node-env.nix \ |
|
37 | 42 | -c pkgs/node-default.nix \ |
|
38 |
-d --flatten --nodejs- |
|
|
43 | -d --flatten --nodejs-8 " && | |
|
44 | sed -i -e 's/http:\/\//https:\/\//g' pkgs/node-packages.nix | |
|
39 | 45 | |
|
40 | 46 | |
|
41 | ||
|
42 | Bower dependencies | |
|
43 | ================== | |
|
47 | Generate license data | |
|
48 | ===================== | |
|
44 | 49 | |
|
45 | 50 | .. code:: shell |
|
46 | 51 | |
|
47 | nix-shell pkgs/shell-generate.nix --command "bower2nix bower.json pkgs/bower-packages.nix" | |
|
52 | nix-build pkgs/license-generate.nix -o result-license && cat result-license/licenses.json | python -m json.tool > rhodecode/config/licenses.json | |
|
48 | 53 | |
|
49 | 54 | |
|
50 | 55 | .. Links |
@@ -2,9 +2,9 b'' | |||
|
2 | 2 | # |
|
3 | 3 | # Usage: |
|
4 | 4 | # |
|
5 |
# |
|
|
5 | # nix-build license.nix -o result-license | |
|
6 | 6 | # |
|
7 | # Afterwards ./result will contain the license information as JSON files. | |
|
7 | # Afterwards ./result-license will contain the license information as JSON files. | |
|
8 | 8 | # |
|
9 | 9 | # |
|
10 | 10 | # Overview |
@@ -19,7 +19,7 b'' | |||
|
19 | 19 | # dependencies. The results from step 1 are then limited to the ones which |
|
20 | 20 | # are in this list. |
|
21 | 21 | # |
|
22 | # The result is then available in ./result/license.json. | |
|
22 | # The result is then available in ./result-license/license.json. | |
|
23 | 23 | # |
|
24 | 24 | |
|
25 | 25 | |
@@ -32,20 +32,20 b' let' | |||
|
32 | 32 | # Enterprise as simple as possible, goal here is just to identify the runtime |
|
33 | 33 | # dependencies. Ideally we could avoid building Enterprise at all and somehow |
|
34 | 34 | # figure it out without calling into nix-store. |
|
35 | enterprise = import ./default.nix { | |
|
35 | enterprise = import ../default.nix { | |
|
36 | 36 | doCheck = false; |
|
37 | 37 | }; |
|
38 | 38 | |
|
39 | 39 | # For a given derivation, return the list of all dependencies |
|
40 | 40 | drvToDependencies = drv: nixpkgs.lib.flatten [ |
|
41 |
drv. |
|
|
42 |
drv.propagated |
|
|
41 | drv.buildInputs or [] | |
|
42 | drv.propagatedBuildInputs or [] | |
|
43 | 43 | ]; |
|
44 | 44 | |
|
45 | 45 | # Transform the given derivation into the meta information which we need in |
|
46 | 46 | # the resulting JSON files. |
|
47 | 47 | drvToMeta = drv: { |
|
48 |
name = drv.name or |
|
|
48 | name = drv.name or drv; | |
|
49 | 49 | license = if drv ? meta.license then drv.meta.license else "UNKNOWN"; |
|
50 | 50 | }; |
|
51 | 51 | |
@@ -70,10 +70,8 b' let' | |||
|
70 | 70 | rawStorePaths = nixpkgs.lib.removeSuffix "\n" ( |
|
71 | 71 | builtins.readFile srcPath); |
|
72 | 72 | storePaths = nixpkgs.lib.splitString "\n" rawStorePaths; |
|
73 | # TODO: johbo: Would be nice to use some sort of utility here to convert | |
|
74 | # the path to a derivation name. | |
|
75 | 73 | storePathPrefix = ( |
|
76 |
builtins.stringLength "/nix/store/ |
|
|
74 | builtins.stringLength "/nix/store/afafafafafafafafafafafafafafafaf-"); | |
|
77 | 75 | storePathToName = path: |
|
78 | 76 | builtins.substring storePathPrefix (builtins.stringLength path) path; |
|
79 | 77 | in (map storePathToName storePaths); |
@@ -147,6 +145,7 b' in rec {' | |||
|
147 | 145 | cat > build/licenses.json <<EOF |
|
148 | 146 | ${builtins.toJSON enterpriseRuntimeLicenses} |
|
149 | 147 | EOF |
|
148 | ||
|
150 | 149 | ''; |
|
151 | 150 | |
|
152 | 151 | installPhase = '' |
@@ -2,7 +2,7 b'' | |||
|
2 | 2 | |
|
3 | 3 | {pkgs ? import <nixpkgs> { |
|
4 | 4 | inherit system; |
|
5 |
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs- |
|
|
5 | }, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-8_x"}: | |
|
6 | 6 | |
|
7 | 7 | let |
|
8 | 8 | nodeEnv = import ./node-env.nix { |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file renamed from pkgs/patch_beaker/patch-beaker-lock-func-debug.diff to pkgs/patches/beaker/patch-beaker-lock-func-debug.diff |
|
1 | NO CONTENT: file renamed from pkgs/patch_beaker/patch-beaker-metadata-reuse.diff to pkgs/patches/beaker/patch-beaker-metadata-reuse.diff |
@@ -30,8 +30,8 b' self: super: {' | |||
|
30 | 30 | |
|
31 | 31 | "beaker" = super."beaker".override (attrs: { |
|
32 | 32 | patches = [ |
|
33 |
./patch |
|
|
34 |
./patch |
|
|
33 | ./patches/beaker/patch-beaker-lock-func-debug.diff | |
|
34 | ./patches/beaker/patch-beaker-metadata-reuse.diff | |
|
35 | 35 | ]; |
|
36 | 36 | }); |
|
37 | 37 | |
@@ -240,6 +240,12 b' self: super: {' | |||
|
240 | 240 | }; |
|
241 | 241 | }); |
|
242 | 242 | |
|
243 | "supervisor" = super."supervisor".override (attrs: { | |
|
244 | patches = [ | |
|
245 | ./patches/supervisor/patch-rlimits-old-kernel.diff | |
|
246 | ]; | |
|
247 | }); | |
|
248 | ||
|
243 | 249 | # Avoid that base packages screw up the build process |
|
244 | 250 | inherit (basePythonPackages) |
|
245 | 251 | setuptools; |
@@ -52,22 +52,22 b' self: super: {' | |||
|
52 | 52 | }; |
|
53 | 53 | }; |
|
54 | 54 | "atomicwrites" = super.buildPythonPackage { |
|
55 |
name = "atomicwrites-1.1 |
|
|
55 | name = "atomicwrites-1.2.1"; | |
|
56 | 56 | doCheck = false; |
|
57 | 57 | src = fetchurl { |
|
58 |
url = "https://files.pythonhosted.org/packages/a |
|
|
59 | sha256 = "11bm90fwm2avvf4f3ib8g925w7jr4m11vcsinn1bi6ns4bm32214"; | |
|
58 | url = "https://files.pythonhosted.org/packages/ac/ed/a311712ef6b4355035489f665e63e1a73f9eb371929e3c98e5efd451069e/atomicwrites-1.2.1.tar.gz"; | |
|
59 | sha256 = "1vmkbw9j0qammwxbxycrs39gvdg4lc2d4lk98kwf8ag2manyi6pc"; | |
|
60 | 60 | }; |
|
61 | 61 | meta = { |
|
62 | 62 | license = [ pkgs.lib.licenses.mit ]; |
|
63 | 63 | }; |
|
64 | 64 | }; |
|
65 | 65 | "attrs" = super.buildPythonPackage { |
|
66 |
name = "attrs-18. |
|
|
66 | name = "attrs-18.2.0"; | |
|
67 | 67 | doCheck = false; |
|
68 | 68 | src = fetchurl { |
|
69 |
url = "https://files.pythonhosted.org/packages/e4 |
|
|
70 | sha256 = "0yzqz8wv3w1srav5683a55v49i0szkm47dyrnkd56fqs8j8ypl70"; | |
|
69 | url = "https://files.pythonhosted.org/packages/0f/9e/26b1d194aab960063b266170e53c39f73ea0d0d3f5ce23313e0ec8ee9bdf/attrs-18.2.0.tar.gz"; | |
|
70 | sha256 = "0s9ydh058wmmf5v391pym877x4ahxg45dw6a0w4c7s5wgpigdjqh"; | |
|
71 | 71 | }; |
|
72 | 72 | meta = { |
|
73 | 73 | license = [ pkgs.lib.licenses.mit ]; |
@@ -160,17 +160,6 b' self: super: {' | |||
|
160 | 160 | license = [ pkgs.lib.licenses.asl20 ]; |
|
161 | 161 | }; |
|
162 | 162 | }; |
|
163 | "bottle" = super.buildPythonPackage { | |
|
164 | name = "bottle-0.12.13"; | |
|
165 | doCheck = false; | |
|
166 | src = fetchurl { | |
|
167 | url = "https://files.pythonhosted.org/packages/bd/99/04dc59ced52a8261ee0f965a8968717a255ea84a36013e527944dbf3468c/bottle-0.12.13.tar.gz"; | |
|
168 | sha256 = "0m9k2a7yxvggc4kw8fsvj381vgsvfcdshg5nzy6vwrxiw2p53drr"; | |
|
169 | }; | |
|
170 | meta = { | |
|
171 | license = [ pkgs.lib.licenses.mit ]; | |
|
172 | }; | |
|
173 | }; | |
|
174 | 163 | "bumpversion" = super.buildPythonPackage { |
|
175 | 164 | name = "bumpversion-0.5.3"; |
|
176 | 165 | doCheck = false; |
@@ -295,28 +284,14 b' self: super: {' | |||
|
295 | 284 | }; |
|
296 | 285 | }; |
|
297 | 286 | "coverage" = super.buildPythonPackage { |
|
298 |
name = "coverage- |
|
|
287 | name = "coverage-4.5.1"; | |
|
299 | 288 | doCheck = false; |
|
300 | 289 | src = fetchurl { |
|
301 |
url = "https://files.pythonhosted.org/packages/09 |
|
|
302 | sha256 = "0knlbq79g2ww6xzsyknj9rirrgrgc983dpa2d9nkdf31mb2a3bni"; | |
|
290 | url = "https://files.pythonhosted.org/packages/35/fe/e7df7289d717426093c68d156e0fd9117c8f4872b6588e8a8928a0f68424/coverage-4.5.1.tar.gz"; | |
|
291 | sha256 = "1wbrzpxka3xd4nmmkc6q0ir343d91kymwsm8pbmwa0d2a7q4ir2n"; | |
|
303 | 292 | }; |
|
304 | 293 | meta = { |
|
305 |
license = [ pkgs.lib.licenses. |
|
|
306 | }; | |
|
307 | }; | |
|
308 | "cprofilev" = super.buildPythonPackage { | |
|
309 | name = "cprofilev-1.0.7"; | |
|
310 | doCheck = false; | |
|
311 | propagatedBuildInputs = [ | |
|
312 | self."bottle" | |
|
313 | ]; | |
|
314 | src = fetchurl { | |
|
315 | url = "https://files.pythonhosted.org/packages/df/50/d8c1ada7d537c64b0f76453fa31dedb6af6e27b82fcf0331e5f71a4cf98b/CProfileV-1.0.7.tar.gz"; | |
|
316 | sha256 = "0xwszfhxgndpcjkpq89dix6vi02hj1gzvhr7r716hd1x3y5p94c7"; | |
|
317 | }; | |
|
318 | meta = { | |
|
319 | license = [ pkgs.lib.licenses.mit ]; | |
|
294 | license = [ pkgs.lib.licenses.asl20 ]; | |
|
320 | 295 | }; |
|
321 | 296 | }; |
|
322 | 297 | "cssselect" = super.buildPythonPackage { |
@@ -372,11 +347,11 b' self: super: {' | |||
|
372 | 347 | }; |
|
373 | 348 | }; |
|
374 | 349 | "dogpile.cache" = super.buildPythonPackage { |
|
375 |
name = "dogpile.cache-0.6. |
|
|
350 | name = "dogpile.cache-0.6.7"; | |
|
376 | 351 | doCheck = false; |
|
377 | 352 | src = fetchurl { |
|
378 |
url = "https://files.pythonhosted.org/packages/4 |
|
|
379 | sha256 = "1h8n1lxd4l2qvahfkiinljkqz7pww7w3sgag0j8j9ixbl2h4wk84"; | |
|
353 | url = "https://files.pythonhosted.org/packages/ee/bd/440da735a11c6087eed7cc8747fc4b995cbac2464168682f8ee1c8e43844/dogpile.cache-0.6.7.tar.gz"; | |
|
354 | sha256 = "1aw8rx8vhb75y7zc6gi67g21sw057jdx7i8m3jq7kf3nqavxx9zw"; | |
|
380 | 355 | }; |
|
381 | 356 | meta = { |
|
382 | 357 | license = [ pkgs.lib.licenses.bsdOriginal ]; |
@@ -515,14 +490,14 b' self: super: {' | |||
|
515 | 490 | }; |
|
516 | 491 | }; |
|
517 | 492 | "gevent" = super.buildPythonPackage { |
|
518 |
name = "gevent-1.3. |
|
|
493 | name = "gevent-1.3.6"; | |
|
519 | 494 | doCheck = false; |
|
520 | 495 | propagatedBuildInputs = [ |
|
521 | 496 | self."greenlet" |
|
522 | 497 | ]; |
|
523 | 498 | src = fetchurl { |
|
524 |
url = "https://files.pythonhosted.org/packages/ |
|
|
525 | sha256 = "1w3gydxirgd2f60c5yv579w4903ds9s4g3587ik4jby97hgqc5bz"; | |
|
499 | url = "https://files.pythonhosted.org/packages/49/13/aa4bb3640b5167fe58875d3d7e65390cdb14f9682a41a741a566bb560842/gevent-1.3.6.tar.gz"; | |
|
500 | sha256 = "1ih4k73dqz2zb561hda99vbanja3m6cdch3mgxxn1mla3qwkqhbv"; | |
|
526 | 501 | }; |
|
527 | 502 | meta = { |
|
528 | 503 | license = [ pkgs.lib.licenses.mit ]; |
@@ -550,23 +525,12 b' self: super: {' | |||
|
550 | 525 | license = [ { fullName = "GNU Lesser General Public License v3 or later (LGPLv3+)"; } { fullName = "LGPL"; } ]; |
|
551 | 526 | }; |
|
552 | 527 | }; |
|
553 |
"gr |
|
|
554 |
name = "gr |
|
|
528 | "greenlet" = super.buildPythonPackage { | |
|
529 | name = "greenlet-0.4.15"; | |
|
555 | 530 | doCheck = false; |
|
556 | 531 | src = fetchurl { |
|
557 | url = "https://files.pythonhosted.org/packages/2b/e6/71521bab8fb99833133f08f6ac0460e2f6b425a7f75ac4b02323c3c3b512/graphviz-0.9.zip"; | |
|
558 | sha256 = "14r9brj4r31b3qy1nnn34v3l4h0n39bqxg9sn2fz4p3pp5mglnl6"; | |
|
559 | }; | |
|
560 | meta = { | |
|
561 | license = [ pkgs.lib.licenses.mit ]; | |
|
562 | }; | |
|
563 | }; | |
|
564 | "greenlet" = super.buildPythonPackage { | |
|
565 | name = "greenlet-0.4.13"; | |
|
566 | doCheck = false; | |
|
567 | src = fetchurl { | |
|
568 | url = "https://files.pythonhosted.org/packages/13/de/ba92335e9e76040ca7274224942282a80d54f85e342a5e33c5277c7f87eb/greenlet-0.4.13.tar.gz"; | |
|
569 | sha256 = "1r412gfx25jrdiv444prmz5a8igrfabwnwqyr6b52ypq7ga87vqg"; | |
|
532 | url = "https://files.pythonhosted.org/packages/f8/e8/b30ae23b45f69aa3f024b46064c0ac8e5fcb4f22ace0dca8d6f9c8bbe5e7/greenlet-0.4.15.tar.gz"; | |
|
533 | sha256 = "1g4g1wwc472ds89zmqlpyan3fbnzpa8qm48z3z1y6mlk44z485ll"; | |
|
570 | 534 | }; |
|
571 | 535 | meta = { |
|
572 | 536 | license = [ pkgs.lib.licenses.mit ]; |
@@ -599,11 +563,11 b' self: super: {' | |||
|
599 | 563 | }; |
|
600 | 564 | }; |
|
601 | 565 | "hupper" = super.buildPythonPackage { |
|
602 | name = "hupper-1.3"; | |
|
566 | name = "hupper-1.3.1"; | |
|
603 | 567 | doCheck = false; |
|
604 | 568 | src = fetchurl { |
|
605 | url = "https://files.pythonhosted.org/packages/51/0c/96335b1f2f32245fb871eea5bb9773196505ddb71fad15190056a282df9e/hupper-1.3.tar.gz"; | |
|
606 | sha256 = "1pkyrm9c2crc32ps00k1ahnc5clj3pjwiarc7j0x8aykwih7ff10"; | |
|
569 | url = "https://files.pythonhosted.org/packages/cf/4b/467b826a84c8594b81f414b5ab6794e981951dac90ca40abaf9ea1cb36b0/hupper-1.3.1.tar.gz"; | |
|
570 | sha256 = "03mf13n6i4dd60wlb9m99ddl4m3lmly70cjp7f82vdkibfl1v6l9"; | |
|
607 | 571 | }; |
|
608 | 572 | meta = { |
|
609 | 573 | license = [ pkgs.lib.licenses.mit ]; |
@@ -850,11 +814,11 b' self: super: {' | |||
|
850 | 814 | }; |
|
851 | 815 | }; |
|
852 | 816 | "mistune" = super.buildPythonPackage { |
|
853 |
name = "mistune-0.8. |
|
|
817 | name = "mistune-0.8.4"; | |
|
854 | 818 | doCheck = false; |
|
855 | 819 | src = fetchurl { |
|
856 |
url = "https://files.pythonhosted.org/packages/ |
|
|
857 | sha256 = "06b662p6kf46wh2jsabaqhaq4bz1srh2zxkrnx4yg96azlxw645w"; | |
|
820 | url = "https://files.pythonhosted.org/packages/2d/a4/509f6e7783ddd35482feda27bc7f72e65b5e7dc910eca4ab2164daf9c577/mistune-0.8.4.tar.gz"; | |
|
821 | sha256 = "0vkmsh0x480rni51lhyvigfdf06b9247z868pk3bal1wnnfl58sr"; | |
|
858 | 822 | }; |
|
859 | 823 | meta = { |
|
860 | 824 | license = [ pkgs.lib.licenses.bsdOriginal ]; |
@@ -947,20 +911,6 b' self: super: {' | |||
|
947 | 911 | license = [ pkgs.lib.licenses.bsdOriginal ]; |
|
948 | 912 | }; |
|
949 | 913 | }; |
|
950 | "objgraph" = super.buildPythonPackage { | |
|
951 | name = "objgraph-3.1.1"; | |
|
952 | doCheck = false; | |
|
953 | propagatedBuildInputs = [ | |
|
954 | self."graphviz" | |
|
955 | ]; | |
|
956 | src = fetchurl { | |
|
957 | url = "https://files.pythonhosted.org/packages/be/58/9ca81a20cc837054e94866df1475d899caaa94f3732b8a46006858b015f7/objgraph-3.1.1.tar.gz"; | |
|
958 | sha256 = "17aq4cwainiwvj8x61j0hx45c313bkwza5fijnmmw8v8glyy2bcc"; | |
|
959 | }; | |
|
960 | meta = { | |
|
961 | license = [ pkgs.lib.licenses.mit ]; | |
|
962 | }; | |
|
963 | }; | |
|
964 | 914 | "packaging" = super.buildPythonPackage { |
|
965 | 915 | name = "packaging-15.2"; |
|
966 | 916 | doCheck = false; |
@@ -1025,15 +975,15 b' self: super: {' | |||
|
1025 | 975 | }; |
|
1026 | 976 | }; |
|
1027 | 977 | "pathlib2" = super.buildPythonPackage { |
|
1028 |
name = "pathlib2-2.3. |
|
|
978 | name = "pathlib2-2.3.2"; | |
|
1029 | 979 | doCheck = false; |
|
1030 | 980 | propagatedBuildInputs = [ |
|
1031 | 981 | self."six" |
|
1032 | 982 | self."scandir" |
|
1033 | 983 | ]; |
|
1034 | 984 | src = fetchurl { |
|
1035 |
url = "https://files.pythonhosted.org/packages/a |
|
|
1036 | sha256 = "1cx5gs2v9j2vnzmcrbq5l8fq2mwrr1h6pyf1sjdji2w1bavm09fk"; | |
|
985 | url = "https://files.pythonhosted.org/packages/db/a8/7d6439c1aec525ed70810abee5b7d7f3aa35347f59bc28343e8f62019aa2/pathlib2-2.3.2.tar.gz"; | |
|
986 | sha256 = "10yb0iv5x2hs631rcppkhbddx799d3h8pcwmkbh2a66ns3w71ccf"; | |
|
1037 | 987 | }; |
|
1038 | 988 | meta = { |
|
1039 | 989 | license = [ pkgs.lib.licenses.mit ]; |
@@ -1065,14 +1015,14 b' self: super: {' | |||
|
1065 | 1015 | }; |
|
1066 | 1016 | }; |
|
1067 | 1017 | "pickleshare" = super.buildPythonPackage { |
|
1068 |
name = "pickleshare-0.7. |
|
|
1018 | name = "pickleshare-0.7.5"; | |
|
1069 | 1019 | doCheck = false; |
|
1070 | 1020 | propagatedBuildInputs = [ |
|
1071 | 1021 | self."pathlib2" |
|
1072 | 1022 | ]; |
|
1073 | 1023 | src = fetchurl { |
|
1074 | url = "https://files.pythonhosted.org/packages/69/fe/dd137d84daa0fd13a709e448138e310d9ea93070620c9db5454e234af525/pickleshare-0.7.4.tar.gz"; | |
|
1075 | sha256 = "0yvk14dzxk7g6qpr7iw23vzqbsr0dh4ij4xynkhnzpfz4xr2bac4"; | |
|
1024 | url = "https://files.pythonhosted.org/packages/d8/b6/df3c1c9b616e9c0edbc4fbab6ddd09df9535849c64ba51fcb6531c32d4d8/pickleshare-0.7.5.tar.gz"; | |
|
1025 | sha256 = "1jmghg3c53yp1i8cm6pcrm280ayi8621rwyav9fac7awjr3kss47"; | |
|
1076 | 1026 | }; |
|
1077 | 1027 | meta = { |
|
1078 | 1028 | license = [ pkgs.lib.licenses.mit ]; |
@@ -1108,11 +1058,11 b' self: super: {' | |||
|
1108 | 1058 | }; |
|
1109 | 1059 | }; |
|
1110 | 1060 | "pluggy" = super.buildPythonPackage { |
|
1111 |
name = "pluggy-0. |
|
|
1061 | name = "pluggy-0.8.0"; | |
|
1112 | 1062 | doCheck = false; |
|
1113 | 1063 | src = fetchurl { |
|
1114 |
url = "https://files.pythonhosted.org/packages/11 |
|
|
1115 | sha256 = "1zqckndfn85l1cd8pndw212zg1bq9fkg1nnj32kp2mppppsyg2kz"; | |
|
1064 | url = "https://files.pythonhosted.org/packages/65/25/81d0de17cd00f8ca994a4e74e3c4baf7cd25072c0b831dad5c7d9d6138f8/pluggy-0.8.0.tar.gz"; | |
|
1065 | sha256 = "1580p47l2zqzsza8jcnw1h2wh3vvmygk6ly8bvi4w0g8j14sjys4"; | |
|
1116 | 1066 | }; |
|
1117 | 1067 | meta = { |
|
1118 | 1068 | license = [ pkgs.lib.licenses.mit ]; |
@@ -1134,22 +1084,22 b' self: super: {' | |||
|
1134 | 1084 | }; |
|
1135 | 1085 | }; |
|
1136 | 1086 | "psutil" = super.buildPythonPackage { |
|
1137 |
name = "psutil-5.4. |
|
|
1087 | name = "psutil-5.4.7"; | |
|
1138 | 1088 | doCheck = false; |
|
1139 | 1089 | src = fetchurl { |
|
1140 | url = "https://files.pythonhosted.org/packages/51/9e/0f8f5423ce28c9109807024f7bdde776ed0b1161de20b408875de7e030c3/psutil-5.4.6.tar.gz"; | |
|
1141 | sha256 = "1xmw4qi6hnrhw81xqzkvmsm9im7j2vkk4v26ycjwq2jczqsmlvk8"; | |
|
1090 | url = "https://files.pythonhosted.org/packages/7d/9a/1e93d41708f8ed2b564395edfa3389f0fd6d567597401c2e5e2775118d8b/psutil-5.4.7.tar.gz"; | |
|
1091 | sha256 = "0fsgmvzwbdbszkwfnqhib8jcxm4w6zyhvlxlcda0rfm5cyqj4qsv"; | |
|
1142 | 1092 | }; |
|
1143 | 1093 | meta = { |
|
1144 | 1094 | license = [ pkgs.lib.licenses.bsdOriginal ]; |
|
1145 | 1095 | }; |
|
1146 | 1096 | }; |
|
1147 | 1097 | "psycopg2" = super.buildPythonPackage { |
|
1148 |
name = "psycopg2-2.7. |
|
|
1098 | name = "psycopg2-2.7.5"; | |
|
1149 | 1099 | doCheck = false; |
|
1150 | 1100 | src = fetchurl { |
|
1151 |
url = "https://files.pythonhosted.org/packages/74 |
|
|
1152 | sha256 = "02b2yaf1hlwb91xkscbzmajpfj5z3d8yikzh5r48fs8gss8i3xcb"; | |
|
1101 | url = "https://files.pythonhosted.org/packages/b2/c1/7bf6c464e903ffc4f3f5907c389e5a4199666bf57f6cd6bf46c17912a1f9/psycopg2-2.7.5.tar.gz"; | |
|
1102 | sha256 = "17klx964gw8z0znl0raz3by8vdc7cq5gxj4pdcrfcina84nrdkzc"; | |
|
1153 | 1103 | }; |
|
1154 | 1104 | meta = { |
|
1155 | 1105 | license = [ pkgs.lib.licenses.zpl21 { fullName = "GNU Library or Lesser General Public License (LGPL)"; } { fullName = "LGPL with exceptions or ZPL"; } ]; |
@@ -1167,11 +1117,11 b' self: super: {' | |||
|
1167 | 1117 | }; |
|
1168 | 1118 | }; |
|
1169 | 1119 | "py" = super.buildPythonPackage { |
|
1170 |
name = "py-1. |
|
|
1120 | name = "py-1.6.0"; | |
|
1171 | 1121 | doCheck = false; |
|
1172 | 1122 | src = fetchurl { |
|
1173 | url = "https://files.pythonhosted.org/packages/f7/84/b4c6e84672c4ceb94f727f3da8344037b62cee960d80e999b1cd9b832d83/py-1.5.3.tar.gz"; | |
|
1174 | sha256 = "10gq2lckvgwlk9w6yzijhzkarx44hsaknd0ypa08wlnpjnsgmj99"; | |
|
1123 | url = "https://files.pythonhosted.org/packages/4f/38/5f427d1eedae73063ce4da680d2bae72014995f9fdeaa57809df61c968cd/py-1.6.0.tar.gz"; | |
|
1124 | sha256 = "1wcs3zv9wl5m5x7p16avqj2gsrviyb23yvc3pr330isqs0sh98q6"; | |
|
1175 | 1125 | }; |
|
1176 | 1126 | meta = { |
|
1177 | 1127 | license = [ pkgs.lib.licenses.mit ]; |
@@ -1393,6 +1343,22 b' self: super: {' | |||
|
1393 | 1343 | license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ]; |
|
1394 | 1344 | }; |
|
1395 | 1345 | }; |
|
1346 | "pyramid-mailer" = super.buildPythonPackage { | |
|
1347 | name = "pyramid-mailer-0.15.1"; | |
|
1348 | doCheck = false; | |
|
1349 | propagatedBuildInputs = [ | |
|
1350 | self."pyramid" | |
|
1351 | self."repoze.sendmail" | |
|
1352 | self."transaction" | |
|
1353 | ]; | |
|
1354 | src = fetchurl { | |
|
1355 | url = "https://files.pythonhosted.org/packages/a0/f2/6febf5459dff4d7e653314d575469ad2e11b9d2af2c3606360e1c67202f2/pyramid_mailer-0.15.1.tar.gz"; | |
|
1356 | sha256 = "16vg8jb203jgb7b0hd6wllfqvp542qh2ry1gjai2m6qpv5agy2pc"; | |
|
1357 | }; | |
|
1358 | meta = { | |
|
1359 | license = [ pkgs.lib.licenses.bsdOriginal ]; | |
|
1360 | }; | |
|
1361 | }; | |
|
1396 | 1362 | "pyramid-mako" = super.buildPythonPackage { |
|
1397 | 1363 | name = "pyramid-mako-1.0.2"; |
|
1398 | 1364 | doCheck = false; |
@@ -1420,7 +1386,7 b' self: super: {' | |||
|
1420 | 1386 | }; |
|
1421 | 1387 | }; |
|
1422 | 1388 | "pytest" = super.buildPythonPackage { |
|
1423 |
name = "pytest-3. |
|
|
1389 | name = "pytest-3.8.2"; | |
|
1424 | 1390 | doCheck = false; |
|
1425 | 1391 | propagatedBuildInputs = [ |
|
1426 | 1392 | self."py" |
@@ -1431,25 +1397,26 b' self: super: {' | |||
|
1431 | 1397 | self."atomicwrites" |
|
1432 | 1398 | self."pluggy" |
|
1433 | 1399 | self."funcsigs" |
|
1400 | self."pathlib2" | |
|
1434 | 1401 | ]; |
|
1435 | 1402 | src = fetchurl { |
|
1436 |
url = "https://files.pythonhosted.org/packages/ |
|
|
1437 | sha256 = "0bdfazvjjbxssqzyvkb3m2x2in7xv56ipr899l00s87k7815sm9r"; | |
|
1403 | url = "https://files.pythonhosted.org/packages/5f/d2/7f77f406ac505abda02ab4afb50d06ebf304f6ea42fca34f8f37529106b2/pytest-3.8.2.tar.gz"; | |
|
1404 | sha256 = "18nrwzn61kph2y6gxwfz9ms68rfvr9d4vcffsxng9p7jk9z18clk"; | |
|
1438 | 1405 | }; |
|
1439 | 1406 | meta = { |
|
1440 | 1407 | license = [ pkgs.lib.licenses.mit ]; |
|
1441 | 1408 | }; |
|
1442 | 1409 | }; |
|
1443 | 1410 | "pytest-cov" = super.buildPythonPackage { |
|
1444 |
name = "pytest-cov-2. |
|
|
1411 | name = "pytest-cov-2.6.0"; | |
|
1445 | 1412 | doCheck = false; |
|
1446 | 1413 | propagatedBuildInputs = [ |
|
1447 | 1414 | self."pytest" |
|
1448 | 1415 | self."coverage" |
|
1449 | 1416 | ]; |
|
1450 | 1417 | src = fetchurl { |
|
1451 |
url = "https://files.pythonhosted.org/packages/2 |
|
|
1452 | sha256 = "0bbfpwdh9k3636bxc88vz9fa7vf4akchgn513ql1vd0xy4n7bah3"; | |
|
1418 | url = "https://files.pythonhosted.org/packages/d9/e2/58f90a316fbd94dd50bf5c826a23f3f5d079fb3cc448c1e9f0e3c33a3d2a/pytest-cov-2.6.0.tar.gz"; | |
|
1419 | sha256 = "0qnpp9y3ygx4jk4pf5ad71fh2skbvnr6gl54m7rg5qysnx4g0q73"; | |
|
1453 | 1420 | }; |
|
1454 | 1421 | meta = { |
|
1455 | 1422 | license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.mit ]; |
@@ -1498,14 +1465,14 b' self: super: {' | |||
|
1498 | 1465 | }; |
|
1499 | 1466 | }; |
|
1500 | 1467 | "pytest-timeout" = super.buildPythonPackage { |
|
1501 |
name = "pytest-timeout-1.2 |
|
|
1468 | name = "pytest-timeout-1.3.2"; | |
|
1502 | 1469 | doCheck = false; |
|
1503 | 1470 | propagatedBuildInputs = [ |
|
1504 | 1471 | self."pytest" |
|
1505 | 1472 | ]; |
|
1506 | 1473 | src = fetchurl { |
|
1507 |
url = "https://files.pythonhosted.org/packages/ |
|
|
1508 | sha256 = "1kdp6qbh5v1168l99rba5yfzvy05gmzkmkhldgp36p9xcdjd5dv8"; | |
|
1474 | url = "https://files.pythonhosted.org/packages/8c/3e/1b6a319d12ae7baa3acb7c18ff2c8630a09471a0319d43535c683b4d03eb/pytest-timeout-1.3.2.tar.gz"; | |
|
1475 | sha256 = "09wnmzvnls2mnsdz7x3c3sk2zdp6jl4dryvyj5i8hqz16q2zq5qi"; | |
|
1509 | 1476 | }; |
|
1510 | 1477 | meta = { |
|
1511 | 1478 | license = [ pkgs.lib.licenses.mit { fullName = "DFSG approved"; } ]; |
@@ -1620,6 +1587,22 b' self: super: {' | |||
|
1620 | 1587 | license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ]; |
|
1621 | 1588 | }; |
|
1622 | 1589 | }; |
|
1590 | "repoze.sendmail" = super.buildPythonPackage { | |
|
1591 | name = "repoze.sendmail-4.4.1"; | |
|
1592 | doCheck = false; | |
|
1593 | propagatedBuildInputs = [ | |
|
1594 | self."setuptools" | |
|
1595 | self."zope.interface" | |
|
1596 | self."transaction" | |
|
1597 | ]; | |
|
1598 | src = fetchurl { | |
|
1599 | url = "https://files.pythonhosted.org/packages/12/4e/8ef1fd5c42765d712427b9c391419a77bd48877886d2cbc5e9f23c8cad9b/repoze.sendmail-4.4.1.tar.gz"; | |
|
1600 | sha256 = "096ln02jr2afk7ab9j2czxqv2ryqq7m86ah572nqplx52iws73ks"; | |
|
1601 | }; | |
|
1602 | meta = { | |
|
1603 | license = [ pkgs.lib.licenses.zpl21 ]; | |
|
1604 | }; | |
|
1605 | }; | |
|
1623 | 1606 | "requests" = super.buildPythonPackage { |
|
1624 | 1607 | name = "requests-2.9.1"; |
|
1625 | 1608 | doCheck = false; |
@@ -1632,7 +1615,7 b' self: super: {' | |||
|
1632 | 1615 | }; |
|
1633 | 1616 | }; |
|
1634 | 1617 | "rhodecode-enterprise-ce" = super.buildPythonPackage { |
|
1635 |
name = "rhodecode-enterprise-ce-4.1 |
|
|
1618 | name = "rhodecode-enterprise-ce-4.14.0"; | |
|
1636 | 1619 | buildInputs = [ |
|
1637 | 1620 | self."pytest" |
|
1638 | 1621 | self."py" |
@@ -1640,8 +1623,8 b' self: super: {' | |||
|
1640 | 1623 | self."pytest-sugar" |
|
1641 | 1624 | self."pytest-runner" |
|
1642 | 1625 | self."pytest-profiling" |
|
1626 | self."pytest-timeout" | |
|
1643 | 1627 | self."gprof2dot" |
|
1644 | self."pytest-timeout" | |
|
1645 | 1628 | self."mock" |
|
1646 | 1629 | self."webtest" |
|
1647 | 1630 | self."cov-core" |
@@ -1688,7 +1671,6 b' self: super: {' | |||
|
1688 | 1671 | self."mysql-python" |
|
1689 | 1672 | self."pymysql" |
|
1690 | 1673 | self."pyotp" |
|
1691 | self."objgraph" | |
|
1692 | 1674 | self."packaging" |
|
1693 | 1675 | self."paste" |
|
1694 | 1676 | self."pastedeploy" |
@@ -1709,6 +1691,7 b' self: super: {' | |||
|
1709 | 1691 | self."pyramid-jinja2" |
|
1710 | 1692 | self."pyramid-mako" |
|
1711 | 1693 | self."pyramid" |
|
1694 | self."pyramid-mailer" | |
|
1712 | 1695 | self."pysqlite" |
|
1713 | 1696 | self."python-dateutil" |
|
1714 | 1697 | self."python-ldap" |
@@ -1722,7 +1705,6 b' self: super: {' | |||
|
1722 | 1705 | self."repoze.lru" |
|
1723 | 1706 | self."requests" |
|
1724 | 1707 | self."routes" |
|
1725 | self."setproctitle" | |
|
1726 | 1708 | self."simplejson" |
|
1727 | 1709 | self."six" |
|
1728 | 1710 | self."sqlalchemy" |
@@ -1756,10 +1738,9 b' self: super: {' | |||
|
1756 | 1738 | self."greenlet" |
|
1757 | 1739 | self."gunicorn" |
|
1758 | 1740 | self."waitress" |
|
1741 | self."setproctitle" | |
|
1759 | 1742 | self."ipdb" |
|
1760 | 1743 | self."ipython" |
|
1761 | self."cprofilev" | |
|
1762 | self."bottle" | |
|
1763 | 1744 | self."rhodecode-tools" |
|
1764 | 1745 | self."appenlight-client" |
|
1765 | 1746 | self."pytest" |
@@ -1768,8 +1749,8 b' self: super: {' | |||
|
1768 | 1749 | self."pytest-sugar" |
|
1769 | 1750 | self."pytest-runner" |
|
1770 | 1751 | self."pytest-profiling" |
|
1752 | self."pytest-timeout" | |
|
1771 | 1753 | self."gprof2dot" |
|
1772 | self."pytest-timeout" | |
|
1773 | 1754 | self."mock" |
|
1774 | 1755 | self."webtest" |
|
1775 | 1756 | self."cov-core" |
@@ -1781,7 +1762,7 b' self: super: {' | |||
|
1781 | 1762 | }; |
|
1782 | 1763 | }; |
|
1783 | 1764 | "rhodecode-tools" = super.buildPythonPackage { |
|
1784 |
name = "rhodecode-tools-0.1 |
|
|
1765 | name = "rhodecode-tools-1.0.1"; | |
|
1785 | 1766 | doCheck = false; |
|
1786 | 1767 | propagatedBuildInputs = [ |
|
1787 | 1768 | self."click" |
@@ -1796,11 +1777,11 b' self: super: {' | |||
|
1796 | 1777 | self."whoosh" |
|
1797 | 1778 | ]; |
|
1798 | 1779 | src = fetchurl { |
|
1799 |
url = "https://code.rhodecode.com/rhodecode-tools-ce/archive/v0.1 |
|
|
1800 | sha256 = "00xcc2mj99lx9d0ksml0p2xrd00kf5ypwyigg58cc9j9bznx7mzr"; | |
|
1780 | url = "https://code.rhodecode.com/rhodecode-tools-ce/archive/v1.0.1.tar.gz?md5=ffb5d6bcb855305b93cfe23ad42e500b"; | |
|
1781 | sha256 = "0nr300s4sg685qs4wgbwlplwriawrwi6jq79z37frcnpyc89gpvm"; | |
|
1801 | 1782 | }; |
|
1802 | 1783 | meta = { |
|
1803 |
license = [ { fullName = "A |
|
|
1784 | license = [ { fullName = "Apache 2.0 and Proprietary"; } ]; | |
|
1804 | 1785 | }; |
|
1805 | 1786 | }; |
|
1806 | 1787 | "routes" = super.buildPythonPackage { |
@@ -1841,11 +1822,11 b' self: super: {' | |||
|
1841 | 1822 | }; |
|
1842 | 1823 | }; |
|
1843 | 1824 | "setuptools" = super.buildPythonPackage { |
|
1844 |
name = "setuptools-40. |
|
|
1825 | name = "setuptools-40.4.3"; | |
|
1845 | 1826 | doCheck = false; |
|
1846 | 1827 | src = fetchurl { |
|
1847 |
url = "https://files.pythonhosted.org/packages/ |
|
|
1848 | sha256 = "0w1blx5ajga5y15dci0mddk49cf2xpq0mp7rp7jrqr2diqk00ib6"; | |
|
1828 | url = "https://files.pythonhosted.org/packages/6e/9c/6a003320b00ef237f94aa74e4ad66c57a7618f6c79d67527136e2544b728/setuptools-40.4.3.zip"; | |
|
1829 | sha256 = "058v6zns4634n4al2nmmvp15j8nrgwn8wjrbdks47wk3vm05gg5c"; | |
|
1849 | 1830 | }; |
|
1850 | 1831 | meta = { |
|
1851 | 1832 | license = [ pkgs.lib.licenses.mit ]; |
@@ -1922,11 +1903,11 b' self: super: {' | |||
|
1922 | 1903 | }; |
|
1923 | 1904 | }; |
|
1924 | 1905 | "subprocess32" = super.buildPythonPackage { |
|
1925 |
name = "subprocess32-3.5. |
|
|
1906 | name = "subprocess32-3.5.2"; | |
|
1926 | 1907 | doCheck = false; |
|
1927 | 1908 | src = fetchurl { |
|
1928 |
url = "https://files.pythonhosted.org/packages/ |
|
|
1929 | sha256 = "0wgi3bfnssid1g6h0v803z3k1wjal6il16nr3r9c587cfzwfkv0q"; | |
|
1909 | url = "https://files.pythonhosted.org/packages/c3/5f/7117737fc7114061837a4f51670d863dd7f7f9c762a6546fa8a0dcfe61c8/subprocess32-3.5.2.tar.gz"; | |
|
1910 | sha256 = "11v62shwmdys48g7ncs3a8jwwnkcl8d4zcwy6dk73z1zy2f9hazb"; | |
|
1930 | 1911 | }; |
|
1931 | 1912 | meta = { |
|
1932 | 1913 | license = [ pkgs.lib.licenses.psfl ]; |
@@ -1969,11 +1950,11 b' self: super: {' | |||
|
1969 | 1950 | }; |
|
1970 | 1951 | }; |
|
1971 | 1952 | "testpath" = super.buildPythonPackage { |
|
1972 |
name = "testpath-0. |
|
|
1953 | name = "testpath-0.4.2"; | |
|
1973 | 1954 | doCheck = false; |
|
1974 | 1955 | src = fetchurl { |
|
1975 |
url = "https://files.pythonhosted.org/packages/ |
|
|
1976 | sha256 = "02bnmkvm6a8a1p5kcygylcd19v2s040qw3zp1n8ab3bqkj1kflqd"; | |
|
1956 | url = "https://files.pythonhosted.org/packages/06/30/9a7e917066d851d8b4117e85794b5f14516419ea714a8a2681ec6aa8a981/testpath-0.4.2.tar.gz"; | |
|
1957 | sha256 = "1y40hywscnnyb734pnzm55nd8r8kp1072bjxbil83gcd53cv755n"; | |
|
1977 | 1958 | }; |
|
1978 | 1959 | meta = { |
|
1979 | 1960 | license = [ ]; |
@@ -1996,6 +1977,20 b' self: super: {' | |||
|
1996 | 1977 | license = [ pkgs.lib.licenses.bsdOriginal ]; |
|
1997 | 1978 | }; |
|
1998 | 1979 | }; |
|
1980 | "transaction" = super.buildPythonPackage { | |
|
1981 | name = "transaction-2.4.0"; | |
|
1982 | doCheck = false; | |
|
1983 | propagatedBuildInputs = [ | |
|
1984 | self."zope.interface" | |
|
1985 | ]; | |
|
1986 | src = fetchurl { | |
|
1987 | url = "https://files.pythonhosted.org/packages/9d/7d/0e8af0d059e052b9dcf2bb5a08aad20ae3e238746bdd3f8701a60969b363/transaction-2.4.0.tar.gz"; | |
|
1988 | sha256 = "17wz1y524ca07vr03yddy8dv0gbscs06dbdywmllxv5rc725jq3j"; | |
|
1989 | }; | |
|
1990 | meta = { | |
|
1991 | license = [ pkgs.lib.licenses.zpl21 ]; | |
|
1992 | }; | |
|
1993 | }; | |
|
1999 | 1994 | "translationstring" = super.buildPythonPackage { |
|
2000 | 1995 | name = "translationstring-1.3"; |
|
2001 | 1996 | doCheck = false; |
@@ -23,9 +23,6 b' pkgs.stdenv.mkDerivation {' | |||
|
23 | 23 | pip2nix.pip2nix |
|
24 | 24 | pythonPackages.pip-tools |
|
25 | 25 | |
|
26 | # Allows to generate bower dependencies | |
|
27 | pkgs.nodePackages.bower2nix | |
|
28 | ||
|
29 | 26 | # Allows to generate node dependencies |
|
30 | 27 | pkgs.nodePackages.node2nix |
|
31 | 28 |
@@ -1,14 +1,12 b'' | |||
|
1 | 1 | # This file defines how to "build" for packaging. |
|
2 | 2 | |
|
3 | { pkgs ? import <nixpkgs> {} | |
|
4 | , doCheck ? false | |
|
3 | { doCheck ? false | |
|
5 | 4 | }: |
|
6 | 5 | |
|
7 | 6 | let |
|
8 | 7 | enterprise_ce = import ./default.nix { |
|
9 | 8 | inherit |
|
10 | doCheck | |
|
11 | pkgs; | |
|
9 | doCheck; | |
|
12 | 10 | |
|
13 | 11 | # disable checkPhase for build |
|
14 | 12 | checkPhase = '' |
@@ -4,8 +4,8 b' setuptools-scm==2.1.0' | |||
|
4 | 4 | amqp==2.3.1 |
|
5 | 5 | # not released authomatic that has updated some oauth providers |
|
6 | 6 | https://code.rhodecode.com/upstream/authomatic/archive/90a9ce60cc405ae8a2bf5c3713acd5d78579a04e.tar.gz?md5=3c68720a1322b25254009518d1ff6801#egg=authomatic==0.1.0.post1 |
|
7 |
atomicwrites==1. |
|
|
8 |
attrs==18. |
|
|
7 | atomicwrites==1.2.1 | |
|
8 | attrs==18.2.0 | |
|
9 | 9 | babel==1.3 |
|
10 | 10 | beaker==1.9.1 |
|
11 | 11 | celery==4.1.1 |
@@ -19,7 +19,7 b' cssselect==1.0.3' | |||
|
19 | 19 | decorator==4.1.2 |
|
20 | 20 | deform==2.0.5 |
|
21 | 21 | docutils==0.14.0 |
|
22 |
dogpile.cache==0.6. |
|
|
22 | dogpile.cache==0.6.7 | |
|
23 | 23 | dogpile.core==0.4.1 |
|
24 | 24 | ecdsa==0.13 |
|
25 | 25 | formencode==1.2.4 |
@@ -40,15 +40,14 b' msgpack-python==0.5.6' | |||
|
40 | 40 | mysql-python==1.2.5 |
|
41 | 41 | pymysql==0.8.1 |
|
42 | 42 | pyotp==2.2.6 |
|
43 | objgraph==3.1.1 | |
|
44 | 43 | packaging==15.2 |
|
45 | 44 | paste==2.0.3 |
|
46 | 45 | pastedeploy==1.5.2 |
|
47 | 46 | pastescript==2.0.2 |
|
48 |
pathlib2==2.3. |
|
|
47 | pathlib2==2.3.2 | |
|
49 | 48 | peppercorn==0.5 |
|
50 |
psutil==5.4. |
|
|
51 |
psycopg2==2.7. |
|
|
49 | psutil==5.4.7 | |
|
50 | psycopg2==2.7.5 | |
|
52 | 51 | py-bcrypt==0.4 |
|
53 | 52 | pycrypto==2.6.1 |
|
54 | 53 | pycurl==7.43.0.2 |
@@ -61,6 +60,7 b' pyramid-debugtoolbar==4.4.0' | |||
|
61 | 60 | pyramid-jinja2==2.7 |
|
62 | 61 | pyramid-mako==1.0.2 |
|
63 | 62 | pyramid==1.9.2 |
|
63 | pyramid_mailer==0.15.1 | |
|
64 | 64 | pysqlite==2.8.3 |
|
65 | 65 | python-dateutil |
|
66 | 66 | python-ldap==3.1.0 |
@@ -74,12 +74,11 b' redis==2.10.6' | |||
|
74 | 74 | repoze.lru==0.7 |
|
75 | 75 | requests==2.9.1 |
|
76 | 76 | routes==2.4.1 |
|
77 | setproctitle==1.1.10 | |
|
78 | 77 | simplejson==3.11.1 |
|
79 | 78 | six==1.11.0 |
|
80 | 79 | sqlalchemy==1.1.18 |
|
81 | 80 | sshpubkeys==2.2.0 |
|
82 |
subprocess32==3.5. |
|
|
81 | subprocess32==3.5.2 | |
|
83 | 82 | supervisor==3.3.4 |
|
84 | 83 | tempita==0.5.2 |
|
85 | 84 | translationstring==1.3 |
@@ -113,22 +112,24 b' invoke==0.13.0' | |||
|
113 | 112 | bumpversion==0.5.3 |
|
114 | 113 | |
|
115 | 114 | ## http servers |
|
116 |
gevent==1.3. |
|
|
117 |
greenlet==0.4.1 |
|
|
115 | gevent==1.3.6 | |
|
116 | greenlet==0.4.15 | |
|
118 | 117 | gunicorn==19.9.0 |
|
119 | 118 | waitress==1.1.0 |
|
119 | setproctitle==1.1.10 | |
|
120 | 120 | |
|
121 | 121 | ## debug |
|
122 | 122 | ipdb==0.11.0 |
|
123 | 123 | ipython==5.1.0 |
|
124 | cprofilev==1.0.7 | |
|
125 | bottle==0.12.13 | |
|
126 | 124 | |
|
127 | 125 | ## rhodecode-tools, special case |
|
128 |
https://code.rhodecode.com/rhodecode-tools-ce/archive/v0.1 |
|
|
126 | https://code.rhodecode.com/rhodecode-tools-ce/archive/v1.0.1.tar.gz?md5=ffb5d6bcb855305b93cfe23ad42e500b#egg=rhodecode-tools==1.0.1 | |
|
129 | 127 | |
|
130 | 128 | ## appenlight |
|
131 | 129 | appenlight-client==0.6.25 |
|
132 | 130 | |
|
133 | 131 | ## test related requirements |
|
134 | 132 | -r requirements_test.txt |
|
133 | ||
|
134 | ## uncomment to add the debug libraries | |
|
135 | #-r requirements_debug.txt |
@@ -1,14 +1,14 b'' | |||
|
1 | 1 | # test related requirements |
|
2 |
pytest==3. |
|
|
3 |
py==1. |
|
|
4 |
pytest-cov==2. |
|
|
2 | pytest==3.8.2 | |
|
3 | py==1.6.0 | |
|
4 | pytest-cov==2.6.0 | |
|
5 | 5 | pytest-sugar==0.9.1 |
|
6 | 6 | pytest-runner==4.2.0 |
|
7 | 7 | pytest-profiling==1.3.0 |
|
8 | pytest-timeout==1.3.2 | |
|
8 | 9 | gprof2dot==2017.9.19 |
|
9 | pytest-timeout==1.2.1 | |
|
10 | 10 | |
|
11 | 11 | mock==1.0.1 |
|
12 | 12 | webtest==2.0.29 |
|
13 | 13 | cov-core==1.15.0 |
|
14 |
coverage== |
|
|
14 | coverage==4.5.1 |
@@ -51,7 +51,7 b' PYRAMID_SETTINGS = {}' | |||
|
51 | 51 | EXTENSIONS = {} |
|
52 | 52 | |
|
53 | 53 | __version__ = ('.'.join((str(each) for each in VERSION[:3]))) |
|
54 |
__dbversion__ = 9 |
|
|
54 | __dbversion__ = 91 # defines current db version for migrations | |
|
55 | 55 | __platform__ = platform.system() |
|
56 | 56 | __license__ = 'AGPLv3, and Commercial License' |
|
57 | 57 | __author__ = 'RhodeCode GmbH' |
@@ -204,7 +204,7 b' def request_view(request):' | |||
|
204 | 204 | message='Request from IP:%s not allowed' % ( |
|
205 | 205 | request.rpc_ip_addr,)) |
|
206 | 206 | else: |
|
207 |
log.info('Access for IP:%s allowed' |
|
|
207 | log.info('Access for IP:%s allowed', request.rpc_ip_addr) | |
|
208 | 208 | |
|
209 | 209 | # register our auth-user |
|
210 | 210 | request.rpc_user = auth_u |
@@ -352,8 +352,7 b' def setup_request(request):' | |||
|
352 | 352 | request.rpc_params = json_body['args'] \ |
|
353 | 353 | if isinstance(json_body['args'], dict) else {} |
|
354 | 354 | |
|
355 | log.debug( | |
|
356 | 'method: %s, params: %s' % (request.rpc_method, request.rpc_params)) | |
|
355 | log.debug('method: %s, params: %s', request.rpc_method, request.rpc_params) | |
|
357 | 356 | except KeyError as e: |
|
358 | 357 | raise JSONRPCError('Incorrect JSON data. Missing %s' % e) |
|
359 | 358 |
@@ -20,7 +20,9 b'' | |||
|
20 | 20 | |
|
21 | 21 | |
|
22 | 22 | class JSONRPCBaseError(Exception): |
|
23 | pass | |
|
23 | def __init__(self, message='', *args): | |
|
24 | self.message = message | |
|
25 | super(JSONRPCBaseError, self).__init__(message, *args) | |
|
24 | 26 | |
|
25 | 27 | |
|
26 | 28 | class JSONRPCError(JSONRPCBaseError): |
@@ -31,7 +33,8 b' class JSONRPCValidationError(JSONRPCBase' | |||
|
31 | 33 | |
|
32 | 34 | def __init__(self, *args, **kwargs): |
|
33 | 35 | self.colander_exception = kwargs.pop('colander_exc') |
|
34 |
super(JSONRPCValidationError, self).__init__( |
|
|
36 | super(JSONRPCValidationError, self).__init__( | |
|
37 | message=self.colander_exception, *args) | |
|
35 | 38 | |
|
36 | 39 | |
|
37 | 40 | class JSONRPCForbidden(JSONRPCBaseError): |
@@ -65,7 +65,7 b' class TestCommentCommit(object):' | |||
|
65 | 65 | self, backend, status_change, message, commit_id, |
|
66 | 66 | no_notifications): |
|
67 | 67 | |
|
68 |
commit_id = backend.repo.scm_instance().get_c |
|
|
68 | commit_id = backend.repo.scm_instance().get_commit(commit_id).raw_id | |
|
69 | 69 | |
|
70 | 70 | id_, params = build_data( |
|
71 | 71 | self.apikey, 'comment_commit', repoid=backend.repo_name, |
@@ -74,7 +74,7 b' class TestCommentCommit(object):' | |||
|
74 | 74 | repo = backend.repo.scm_instance() |
|
75 | 75 | expected = { |
|
76 | 76 | 'msg': 'Commented on commit `%s` for repository `%s`' % ( |
|
77 |
repo.get_c |
|
|
77 | repo.get_commit().raw_id, backend.repo_name), | |
|
78 | 78 | 'status_change': status_change, |
|
79 | 79 | 'success': True |
|
80 | 80 | } |
@@ -66,6 +66,7 b' class TestCreatePullRequestApi(object):' | |||
|
66 | 66 | expected_message = "Created new pull request `{title}`".format( |
|
67 | 67 | title=data['title']) |
|
68 | 68 | result = response.json |
|
69 | assert result['error'] == None | |
|
69 | 70 | assert result['result']['msg'] == expected_message |
|
70 | 71 | pull_request_id = result['result']['pull_request_id'] |
|
71 | 72 | pull_request = PullRequestModel().get(pull_request_id) |
@@ -88,6 +89,7 b' class TestCreatePullRequestApi(object):' | |||
|
88 | 89 | expected_message = "Created new pull request `{title}`".format( |
|
89 | 90 | title=data['title']) |
|
90 | 91 | result = response.json |
|
92 | assert result['error'] == None | |
|
91 | 93 | assert result['result']['msg'] == expected_message |
|
92 | 94 | pull_request_id = result['result']['pull_request_id'] |
|
93 | 95 | pull_request = PullRequestModel().get(pull_request_id) |
@@ -127,6 +129,7 b' class TestCreatePullRequestApi(object):' | |||
|
127 | 129 | expected_message = "Created new pull request `{title}`".format( |
|
128 | 130 | title=data['title']) |
|
129 | 131 | result = response.json |
|
132 | assert result['error'] == None | |
|
130 | 133 | assert result['result']['msg'] == expected_message |
|
131 | 134 | pull_request_id = result['result']['pull_request_id'] |
|
132 | 135 | pull_request = PullRequestModel().get(pull_request_id) |
@@ -170,6 +173,7 b' class TestCreatePullRequestApi(object):' | |||
|
170 | 173 | expected_message = "Created new pull request `{title}`".format( |
|
171 | 174 | title=data['title']) |
|
172 | 175 | result = response.json |
|
176 | assert result['error'] == None | |
|
173 | 177 | assert result['result']['msg'] == expected_message |
|
174 | 178 | pull_request_id = result['result']['pull_request_id'] |
|
175 | 179 | pull_request = PullRequestModel().get(pull_request_id) |
@@ -19,7 +19,7 b'' | |||
|
19 | 19 | # and proprietary license terms, please see https://rhodecode.com/licenses/ |
|
20 | 20 | |
|
21 | 21 | import os |
|
22 | ||
|
22 | import mock | |
|
23 | 23 | import pytest |
|
24 | 24 | |
|
25 | 25 | from rhodecode.tests import TESTS_TMP_PATH |
@@ -29,6 +29,7 b' from rhodecode.api.tests.utils import (' | |||
|
29 | 29 | |
|
30 | 30 | @pytest.mark.usefixtures("testuser_api", "app") |
|
31 | 31 | class TestPull(object): |
|
32 | ||
|
32 | 33 | @pytest.mark.backends("git", "hg") |
|
33 | 34 | def test_api_pull(self, backend): |
|
34 | 35 | r = backend.create_repo() |
@@ -37,6 +38,7 b' class TestPull(object):' | |||
|
37 | 38 | r.clone_uri = clone_uri |
|
38 | 39 | |
|
39 | 40 | id_, params = build_data(self.apikey, 'pull', repoid=repo_name,) |
|
41 | with mock.patch('rhodecode.model.scm.url_validator'): | |
|
40 | 42 | response = api_call(self.app, params) |
|
41 | 43 | msg = 'Pulled from url `%s` on repo `%s`' % ( |
|
42 | 44 | clone_uri, repo_name) |
@@ -89,7 +89,6 b' class TestUpdatePullRequest(object):' | |||
|
89 | 89 | pr_util.update_source_repository(head='c') |
|
90 | 90 | repo = pull_request.source_repo.scm_instance() |
|
91 | 91 | commits = [x for x in repo.get_commits()] |
|
92 | print commits | |
|
93 | 92 | |
|
94 | 93 | added_commit_id = commits[-1].raw_id # c commit |
|
95 | 94 | common_commit_id = commits[1].raw_id # b commit is common ancestor |
@@ -26,7 +26,7 b' from rhodecode.tests import TEST_USER_AD' | |||
|
26 | 26 | from rhodecode.api.tests.utils import ( |
|
27 | 27 | build_data, api_call, assert_error, assert_ok, crash, jsonify) |
|
28 | 28 | from rhodecode.tests.fixture import Fixture |
|
29 |
from rhodecode.tests.plugin import |
|
|
29 | from rhodecode.tests.plugin import plain_http_host_only_stub | |
|
30 | 30 | |
|
31 | 31 | fixture = Fixture() |
|
32 | 32 | |
@@ -56,9 +56,15 b' class TestApiUpdateRepo(object):' | |||
|
56 | 56 | ({'clone_uri': ''}, |
|
57 | 57 | {'clone_uri': ''}), |
|
58 | 58 | |
|
59 | ({'clone_uri': 'http://example.com/repo_pull'}, | |
|
60 | {'clone_uri': 'http://example.com/repo_pull'}), | |
|
61 | ||
|
59 | 62 | ({'push_uri': ''}, |
|
60 | 63 | {'push_uri': ''}), |
|
61 | 64 | |
|
65 | ({'push_uri': 'http://example.com/repo_push'}, | |
|
66 | {'push_uri': 'http://example.com/repo_push'}), | |
|
67 | ||
|
62 | 68 | ({'landing_rev': 'rev:tip'}, |
|
63 | 69 | {'landing_rev': ['rev', 'tip']}), |
|
64 | 70 | |
@@ -74,7 +80,7 b' class TestApiUpdateRepo(object):' | |||
|
74 | 80 | ({'repo_name': 'new_repo_name'}, |
|
75 | 81 | { |
|
76 | 82 | 'repo_name': 'new_repo_name', |
|
77 | 'url': 'http://{}/new_repo_name'.format(http_host_only_stub()) | |
|
83 | 'url': 'http://{}/new_repo_name'.format(plain_http_host_only_stub()) | |
|
78 | 84 | }), |
|
79 | 85 | |
|
80 | 86 | ({'repo_name': 'test_group_for_update/{}'.format(UPDATE_REPO_NAME), |
@@ -82,7 +88,7 b' class TestApiUpdateRepo(object):' | |||
|
82 | 88 | { |
|
83 | 89 | 'repo_name': 'test_group_for_update/{}'.format(UPDATE_REPO_NAME), |
|
84 | 90 | 'url': 'http://{}/test_group_for_update/{}'.format( |
|
85 | http_host_only_stub(), UPDATE_REPO_NAME) | |
|
91 | plain_http_host_only_stub(), UPDATE_REPO_NAME) | |
|
86 | 92 | }), |
|
87 | 93 | ]) |
|
88 | 94 | def test_api_update_repo(self, updates, expected, backend): |
@@ -33,7 +33,7 b' from rhodecode.lib import audit_logger' | |||
|
33 | 33 | from rhodecode.lib import repo_maintenance |
|
34 | 34 | from rhodecode.lib.auth import HasPermissionAnyApi, HasUserGroupPermissionAnyApi |
|
35 | 35 | from rhodecode.lib.celerylib.utils import get_task_id |
|
36 | from rhodecode.lib.utils2 import str2bool, time_to_datetime | |
|
36 | from rhodecode.lib.utils2 import str2bool, time_to_datetime, safe_str | |
|
37 | 37 | from rhodecode.lib.ext_json import json |
|
38 | 38 | from rhodecode.lib.exceptions import StatusChangeOnClosedPullRequestError |
|
39 | 39 | from rhodecode.model.changeset_status import ChangesetStatusModel |
@@ -316,7 +316,7 b' def get_repo_changeset(request, apiuser,' | |||
|
316 | 316 | try: |
|
317 | 317 | cs = repo.get_commit(commit_id=revision, pre_load=pre_load) |
|
318 | 318 | except TypeError as e: |
|
319 |
raise JSONRPCError(e |
|
|
319 | raise JSONRPCError(safe_str(e)) | |
|
320 | 320 | _cs_json = cs.__json__() |
|
321 | 321 | _cs_json['diff'] = build_commit_data(cs, changes_details) |
|
322 | 322 | if changes_details == 'full': |
@@ -382,7 +382,7 b' def get_repo_changesets(request, apiuser' | |||
|
382 | 382 | commits = vcs_repo.get_commits( |
|
383 | 383 | start_id=start_rev, pre_load=pre_load) |
|
384 | 384 | except TypeError as e: |
|
385 |
raise JSONRPCError(e |
|
|
385 | raise JSONRPCError(safe_str(e)) | |
|
386 | 386 | except Exception: |
|
387 | 387 | log.exception('Fetching of commits failed') |
|
388 | 388 | raise JSONRPCError('Error occurred during commit fetching') |
@@ -1433,7 +1433,7 b' def comment_commit(' | |||
|
1433 | 1433 | commit_id = repo.scm_instance().get_commit(commit_id=commit_id).raw_id |
|
1434 | 1434 | except Exception as e: |
|
1435 | 1435 | log.exception('Failed to fetch commit') |
|
1436 |
raise JSONRPCError(e |
|
|
1436 | raise JSONRPCError(safe_str(e)) | |
|
1437 | 1437 | |
|
1438 | 1438 | if isinstance(userid, Optional): |
|
1439 | 1439 | userid = apiuser.user_id |
@@ -25,7 +25,8 b' import operator' | |||
|
25 | 25 | from pyramid.httpexceptions import HTTPFound, HTTPForbidden, HTTPBadRequest |
|
26 | 26 | |
|
27 | 27 | from rhodecode.lib import helpers as h, diffs |
|
28 | from rhodecode.lib.utils2 import StrictAttributeDict, safe_int, datetime_to_time | |
|
28 | from rhodecode.lib.utils2 import ( | |
|
29 | StrictAttributeDict, safe_int, datetime_to_time, safe_unicode) | |
|
29 | 30 | from rhodecode.lib.vcs.exceptions import RepositoryRequirementError |
|
30 | 31 | from rhodecode.model import repo |
|
31 | 32 | from rhodecode.model import repo_group |
@@ -61,12 +62,13 b' def add_route_with_slash(config,name, pa' | |||
|
61 | 62 | config.add_route(name + '_slash', pattern + '/', **kw) |
|
62 | 63 | |
|
63 | 64 | |
|
64 |
def add_route_requirements(route_path, requirements= |
|
|
65 | def add_route_requirements(route_path, requirements=None): | |
|
65 | 66 | """ |
|
66 | 67 | Adds regex requirements to pyramid routes using a mapping dict |
|
67 | 68 | e.g:: |
|
68 | 69 | add_route_requirements('{repo_name}/settings') |
|
69 | 70 | """ |
|
71 | requirements = requirements or URL_NAME_REQUIREMENTS | |
|
70 | 72 | for key, regex in requirements.items(): |
|
71 | 73 | route_path = route_path.replace('{%s}' % key, '{%s:%s}' % (key, regex)) |
|
72 | 74 | return route_path |
@@ -201,7 +203,7 b' class RepoAppView(BaseAppView):' | |||
|
201 | 203 | def _handle_missing_requirements(self, error): |
|
202 | 204 | log.error( |
|
203 | 205 | 'Requirements are missing for repository %s: %s', |
|
204 |
self.db_repo_name, error |
|
|
206 | self.db_repo_name, safe_unicode(error)) | |
|
205 | 207 | |
|
206 | 208 | def _get_local_tmpl_context(self, include_app_defaults=True): |
|
207 | 209 | _ = self.request.translate |
@@ -301,7 +303,8 b' class PathFilter(object):' | |||
|
301 | 303 | |
|
302 | 304 | def render_patchset_filtered(self, diffset, patchset, source_ref=None, target_ref=None): |
|
303 | 305 | filtered_patchset, has_hidden_changes = self.filter_patchset(patchset) |
|
304 | result = diffset.render_patchset(filtered_patchset, source_ref=source_ref, target_ref=target_ref) | |
|
306 | result = diffset.render_patchset( | |
|
307 | filtered_patchset, source_ref=source_ref, target_ref=target_ref) | |
|
305 | 308 | result.has_hidden_changes = has_hidden_changes |
|
306 | 309 | return result |
|
307 | 310 | |
@@ -505,6 +508,36 b' class RepoRoutePredicate(object):' | |||
|
505 | 508 | return False |
|
506 | 509 | |
|
507 | 510 | |
|
511 | class RepoForbidArchivedRoutePredicate(object): | |
|
512 | def __init__(self, val, config): | |
|
513 | self.val = val | |
|
514 | ||
|
515 | def text(self): | |
|
516 | return 'repo_forbid_archived = %s' % self.val | |
|
517 | ||
|
518 | phash = text | |
|
519 | ||
|
520 | def __call__(self, info, request): | |
|
521 | _ = request.translate | |
|
522 | rhodecode_db_repo = request.db_repo | |
|
523 | ||
|
524 | log.debug( | |
|
525 | '%s checking if archived flag for repo for %s', | |
|
526 | self.__class__.__name__, rhodecode_db_repo.repo_name) | |
|
527 | ||
|
528 | if rhodecode_db_repo.archived: | |
|
529 | log.warning('Current view is not supported for archived repo:%s', | |
|
530 | rhodecode_db_repo.repo_name) | |
|
531 | ||
|
532 | h.flash( | |
|
533 | h.literal(_('Action not supported for archived repository.')), | |
|
534 | category='warning') | |
|
535 | summary_url = request.route_path( | |
|
536 | 'repo_summary', repo_name=rhodecode_db_repo.repo_name) | |
|
537 | raise HTTPFound(summary_url) | |
|
538 | return True | |
|
539 | ||
|
540 | ||
|
508 | 541 | class RepoTypeRoutePredicate(object): |
|
509 | 542 | def __init__(self, val, config): |
|
510 | 543 | self.val = val or ['hg', 'git', 'svn'] |
@@ -530,13 +563,6 b' class RepoTypeRoutePredicate(object):' | |||
|
530 | 563 | else: |
|
531 | 564 | log.warning('Current view is not supported for repo type:%s', |
|
532 | 565 | rhodecode_db_repo.repo_type) |
|
533 | ||
|
534 | # h.flash(h.literal( | |
|
535 | # _('Action not supported for %s.' % rhodecode_repo.alias)), | |
|
536 | # category='warning') | |
|
537 | # return redirect( | |
|
538 | # route_path('repo_summary', repo_name=cls.rhodecode_db_repo.repo_name)) | |
|
539 | ||
|
540 | 566 | return False |
|
541 | 567 | |
|
542 | 568 | |
@@ -643,10 +669,12 b' def includeme(config):' | |||
|
643 | 669 | config.add_route_predicate( |
|
644 | 670 | 'repo_accepted_types', RepoTypeRoutePredicate) |
|
645 | 671 | config.add_route_predicate( |
|
672 | 'repo_forbid_when_archived', RepoForbidArchivedRoutePredicate) | |
|
673 | config.add_route_predicate( | |
|
646 | 674 | 'repo_group_route', RepoGroupRoutePredicate) |
|
647 | 675 | config.add_route_predicate( |
|
648 | 676 | 'user_group_route', UserGroupRoutePredicate) |
|
649 | 677 | config.add_route_predicate( |
|
650 | 678 | 'user_route_with_default', UserRouteWithDefaultPredicate) |
|
651 | 679 | config.add_route_predicate( |
|
652 | 'user_route', UserRoutePredicate) No newline at end of file | |
|
680 | 'user_route', UserRoutePredicate) |
@@ -488,14 +488,30 b' class TestLabsSettings(object):' | |||
|
488 | 488 | class TestOpenSourceLicenses(object): |
|
489 | 489 | |
|
490 | 490 | def test_records_are_displayed(self, autologin_user): |
|
491 |
sample_licenses = |
|
|
492 | "python2.7-pytest-2.7.1": { | |
|
493 |
" |
|
|
491 | sample_licenses = [ | |
|
492 | { | |
|
493 | "license": [ | |
|
494 | { | |
|
495 | "fullName": "BSD 4-clause \"Original\" or \"Old\" License", | |
|
496 | "shortName": "bsdOriginal", | |
|
497 | "spdxId": "BSD-4-Clause", | |
|
498 | "url": "http://spdx.org/licenses/BSD-4-Clause.html" | |
|
499 | } | |
|
500 | ], | |
|
501 | "name": "python2.7-coverage-3.7.1" | |
|
494 | 502 | }, |
|
495 | "python2.7-Markdown-2.6.2": { | |
|
496 | "BSD-3-Clause": "http://spdx.org/licenses/BSD-3-Clause" | |
|
503 | { | |
|
504 | "license": [ | |
|
505 | { | |
|
506 | "fullName": "MIT License", | |
|
507 | "shortName": "mit", | |
|
508 | "spdxId": "MIT", | |
|
509 | "url": "http://spdx.org/licenses/MIT.html" | |
|
497 | 510 | } |
|
498 | } | |
|
511 | ], | |
|
512 | "name": "python2.7-bootstrapped-pip-9.0.1" | |
|
513 | }, | |
|
514 | ] | |
|
499 | 515 | read_licenses_patch = mock.patch( |
|
500 | 516 | 'rhodecode.apps.admin.views.open_source_licenses.read_opensource_licenses', |
|
501 | 517 | return_value=sample_licenses) |
@@ -506,10 +522,9 b' class TestOpenSourceLicenses(object):' | |||
|
506 | 522 | assert_response = AssertResponse(response) |
|
507 | 523 | assert_response.element_contains( |
|
508 | 524 | '.panel-heading', 'Licenses of Third Party Packages') |
|
509 |
for |
|
|
510 |
response.mustcontain( |
|
|
511 | for license in sample_licenses[name]: | |
|
512 | assert_response.element_contains('.panel-body', license) | |
|
525 | for license_data in sample_licenses: | |
|
526 | response.mustcontain(license_data["license"][0]["spdxId"]) | |
|
527 | assert_response.element_contains('.panel-body', license_data["name"]) | |
|
513 | 528 | |
|
514 | 529 | def test_records_can_be_read(self, autologin_user): |
|
515 | 530 | response = self.app.get( |
@@ -35,7 +35,6 b' class OpenSourceLicensesAdminSettingsVie' | |||
|
35 | 35 | |
|
36 | 36 | def load_default_context(self): |
|
37 | 37 | c = self._get_local_tmpl_context() |
|
38 | ||
|
39 | 38 | return c |
|
40 | 39 | |
|
41 | 40 | @LoginRequired() |
@@ -47,7 +46,6 b' class OpenSourceLicensesAdminSettingsVie' | |||
|
47 | 46 | c = self.load_default_context() |
|
48 | 47 | c.active = 'open_source' |
|
49 | 48 | c.navlist = navigation_list(self.request) |
|
50 | items = sorted(read_opensource_licenses().items(), key=lambda t: t[0]) | |
|
51 | c.opensource_licenses = collections.OrderedDict(items) | |
|
52 | ||
|
49 | c.opensource_licenses = sorted( | |
|
50 | read_opensource_licenses(), key=lambda d: d["name"]) | |
|
53 | 51 | return self._get_template_context(c) |
@@ -26,6 +26,7 b' from pyramid.view import view_config' | |||
|
26 | 26 | |
|
27 | 27 | from rhodecode.apps._base import BaseAppView |
|
28 | 28 | from rhodecode.apps.admin.navigation import navigation_list |
|
29 | from rhodecode.lib import system_info | |
|
29 | 30 | from rhodecode.lib.auth import ( |
|
30 | 31 | LoginRequired, HasPermissionAllDecorator, CSRFRequired) |
|
31 | 32 | from rhodecode.lib.utils2 import safe_int, StrictAttributeDict |
@@ -71,6 +72,16 b' class AdminProcessManagementView(BaseApp' | |||
|
71 | 72 | |
|
72 | 73 | return proc_list |
|
73 | 74 | |
|
75 | def get_workers(self): | |
|
76 | workers = None | |
|
77 | try: | |
|
78 | rc_config = system_info.rhodecode_config().value['config'] | |
|
79 | workers = rc_config['server:main'].get('workers') | |
|
80 | except Exception: | |
|
81 | pass | |
|
82 | ||
|
83 | return workers or '?' | |
|
84 | ||
|
74 | 85 | @LoginRequired() |
|
75 | 86 | @HasPermissionAllDecorator('hg.admin') |
|
76 | 87 | @view_config( |
@@ -83,6 +94,7 b' class AdminProcessManagementView(BaseApp' | |||
|
83 | 94 | c.active = 'process_management' |
|
84 | 95 | c.navlist = navigation_list(self.request) |
|
85 | 96 | c.gunicorn_processes = self.get_processes() |
|
97 | c.gunicorn_workers = self.get_workers() | |
|
86 | 98 | return self._get_template_context(c) |
|
87 | 99 | |
|
88 | 100 | @LoginRequired() |
@@ -26,7 +26,7 b' from pyramid.httpexceptions import HTTPB' | |||
|
26 | 26 | |
|
27 | 27 | from rhodecode.apps._base import BaseAppView |
|
28 | 28 | from rhodecode.lib.channelstream import ( |
|
29 | channelstream_request, | |
|
29 | channelstream_request, get_channelstream_server_url, | |
|
30 | 30 | ChannelstreamConnectionException, |
|
31 | 31 | ChannelstreamPermissionException, |
|
32 | 32 | check_channel_permissions, |
@@ -56,8 +56,9 b' class ChannelstreamView(BaseAppView):' | |||
|
56 | 56 | @NotAnonymous() |
|
57 | 57 | @view_config(route_name='channelstream_connect', renderer='json_ext') |
|
58 | 58 | def connect(self): |
|
59 | """ handle authorization of users trying to connect """ | |
|
60 | ||
|
59 | 61 | self.load_default_context() |
|
60 | """ handle authorization of users trying to connect """ | |
|
61 | 62 | try: |
|
62 | 63 | json_body = self.request.json_body |
|
63 | 64 | except Exception: |
@@ -107,11 +108,14 b' class ChannelstreamView(BaseAppView):' | |||
|
107 | 108 | 'broadcast_presence_with_user_lists': True |
|
108 | 109 | } |
|
109 | 110 | # connect user to server |
|
111 | channelstream_url = get_channelstream_server_url( | |
|
112 | self.channelstream_config, '/connect') | |
|
110 | 113 | try: |
|
111 |
connect_result = channelstream_request( |
|
|
112 | payload, '/connect') | |
|
114 | connect_result = channelstream_request( | |
|
115 | self.channelstream_config, payload, '/connect') | |
|
113 | 116 | except ChannelstreamConnectionException: |
|
114 |
log.exception( |
|
|
117 | log.exception( | |
|
118 | 'Channelstream service at {} is down'.format(channelstream_url)) | |
|
115 | 119 | return HTTPBadGateway() |
|
116 | 120 | |
|
117 | 121 | connect_result['channels'] = channels |
@@ -153,17 +157,21 b' class ChannelstreamView(BaseAppView):' | |||
|
153 | 157 | 'store_history': True, |
|
154 | 158 | 'broadcast_presence_with_user_lists': True |
|
155 | 159 | } |
|
160 | ||
|
161 | channelstream_url = get_channelstream_server_url( | |
|
162 | self.channelstream_config, '/subscribe') | |
|
156 | 163 | try: |
|
157 | 164 | connect_result = channelstream_request( |
|
158 | 165 | self.channelstream_config, payload, '/subscribe') |
|
159 | 166 | except ChannelstreamConnectionException: |
|
160 |
log.exception( |
|
|
167 | log.exception( | |
|
168 | 'Channelstream service at {} is down'.format(channelstream_url)) | |
|
161 | 169 | return HTTPBadGateway() |
|
162 | 170 | # include_channel_info will limit history only to new channel |
|
163 | 171 | # to not overwrite histories on other channels in client |
|
164 | 172 | connect_result['channels_info'] = parse_channels_info( |
|
165 | 173 | connect_result['channels_info'], |
|
166 | 174 | include_channel_info=filtered_channels) |
|
167 |
update_history_from_logs( |
|
|
168 |
|
|
|
175 | update_history_from_logs( | |
|
176 | self.channelstream_config, filtered_channels, connect_result) | |
|
169 | 177 | return connect_result |
@@ -21,22 +21,31 b' from rhodecode.apps._base import ADMIN_P' | |||
|
21 | 21 | from rhodecode.lib.utils2 import str2bool |
|
22 | 22 | |
|
23 | 23 | |
|
24 | def debug_style_enabled(info, request): | |
|
24 | class DebugStylePredicate(object): | |
|
25 | def __init__(self, val, config): | |
|
26 | self.val = val | |
|
27 | ||
|
28 | def text(self): | |
|
29 | return 'debug style route = %s' % self.val | |
|
30 | ||
|
31 | phash = text | |
|
32 | ||
|
33 | def __call__(self, info, request): | |
|
25 | 34 | return str2bool(request.registry.settings.get('debug_style')) |
|
26 | 35 | |
|
27 | 36 | |
|
28 | 37 | def includeme(config): |
|
38 | config.add_route_predicate( | |
|
39 | 'debug_style', DebugStylePredicate) | |
|
40 | ||
|
29 | 41 | config.add_route( |
|
30 | 42 | name='debug_style_home', |
|
31 | 43 | pattern=ADMIN_PREFIX + '/debug_style', |
|
32 | custom_predicates=(debug_style_enabled,)) | |
|
44 | debug_style=True) | |
|
33 | 45 | config.add_route( |
|
34 | 46 | name='debug_style_template', |
|
35 | 47 | pattern=ADMIN_PREFIX + '/debug_style/t/{t_path}', |
|
36 | custom_predicates=(debug_style_enabled,)) | |
|
48 | debug_style=True) | |
|
37 | 49 | |
|
38 | 50 | # Scan module for configuration decorators. |
|
39 | 51 | config.scan('.views', ignore='.tests') |
|
40 | ||
|
41 | ||
|
42 |
@@ -405,8 +405,8 b' class GistView(BaseAppView):' | |||
|
405 | 405 | revision = self.request.GET.get('revision') |
|
406 | 406 | |
|
407 | 407 | if revision != last_rev.raw_id: |
|
408 | log.error('Last revision %s is different then submitted %s' | |
|
409 |
|
|
|
408 | log.error('Last revision %s is different then submitted %s', | |
|
409 | revision, last_rev) | |
|
410 | 410 | # our gist has newer version than we |
|
411 | 411 | success = False |
|
412 | 412 |
@@ -63,6 +63,10 b' def includeme(config):' | |||
|
63 | 63 | name='markup_preview', |
|
64 | 64 | pattern='/_markup_preview') |
|
65 | 65 | |
|
66 | config.add_route( | |
|
67 | name='store_user_session_value', | |
|
68 | pattern='/_store_session_attr') | |
|
69 | ||
|
66 | 70 | # register our static links via redirection mechanism |
|
67 | 71 | routing_links.connect_redirection_links(config) |
|
68 | 72 |
@@ -62,8 +62,7 b' class TestHomeController(TestController)' | |||
|
62 | 62 | rhodecode_version_hash = calculate_version_hash( |
|
63 | 63 | {'beaker.session.secret':'test-rc-uytcxaz'}) |
|
64 | 64 | response.mustcontain('style.css?ver={0}'.format(rhodecode_version_hash)) |
|
65 |
response.mustcontain(' |
|
|
66 | rhodecode_version_hash)) | |
|
65 | response.mustcontain('scripts.js?ver={0}'.format(rhodecode_version_hash)) | |
|
67 | 66 | |
|
68 | 67 | def test_index_contains_backend_specific_details(self, backend): |
|
69 | 68 | self.log_user() |
@@ -33,7 +33,7 b' from rhodecode.lib.index import searcher' | |||
|
33 | 33 | from rhodecode.lib.utils2 import safe_unicode, str2bool, safe_int |
|
34 | 34 | from rhodecode.lib.ext_json import json |
|
35 | 35 | from rhodecode.model.db import ( |
|
36 | func, or_, in_filter_generator, Repository, RepoGroup, User, UserGroup) | |
|
36 | func, true, or_, in_filter_generator, Repository, RepoGroup, User, UserGroup) | |
|
37 | 37 | from rhodecode.model.repo import RepoModel |
|
38 | 38 | from rhodecode.model.repo_group import RepoGroupModel |
|
39 | 39 | from rhodecode.model.scm import RepoGroupList, RepoList |
@@ -114,6 +114,7 b' class HomeView(BaseAppView):' | |||
|
114 | 114 | query = Repository.query()\ |
|
115 | 115 | .order_by(func.length(Repository.repo_name))\ |
|
116 | 116 | .order_by(Repository.repo_name)\ |
|
117 | .filter(Repository.archived.isnot(true()))\ | |
|
117 | 118 | .filter(or_( |
|
118 | 119 | # generate multiple IN to fix limitation problems |
|
119 | 120 | *in_filter_generator(Repository.repo_id, allowed_ids) |
@@ -444,3 +445,18 b' class HomeView(BaseAppView):' | |||
|
444 | 445 | if text: |
|
445 | 446 | return h.render(text, renderer=renderer, mentions=True) |
|
446 | 447 | return '' |
|
448 | ||
|
449 | @LoginRequired() | |
|
450 | @CSRFRequired() | |
|
451 | @view_config( | |
|
452 | route_name='store_user_session_value', request_method='POST', | |
|
453 | renderer='string', xhr=True) | |
|
454 | def store_user_session_attr(self): | |
|
455 | key = self.request.POST.get('key') | |
|
456 | val = self.request.POST.get('val') | |
|
457 | ||
|
458 | existing_value = self.request.session.get(key) | |
|
459 | if existing_value != val: | |
|
460 | self.request.session[key] = val | |
|
461 | ||
|
462 | return 'stored:{}'.format(key) |
@@ -93,16 +93,16 b' def get_came_from(request):' | |||
|
93 | 93 | allowed_schemes = ['http', 'https'] |
|
94 | 94 | default_came_from = h.route_path('home') |
|
95 | 95 | if parsed.scheme and parsed.scheme not in allowed_schemes: |
|
96 |
log.error('Suspicious URL scheme detected %s for url %s' |
|
|
97 |
|
|
|
96 | log.error('Suspicious URL scheme detected %s for url %s', | |
|
97 | parsed.scheme, parsed) | |
|
98 | 98 | came_from = default_came_from |
|
99 | 99 | elif parsed.netloc and request.host != parsed.netloc: |
|
100 | 100 | log.error('Suspicious NETLOC detected %s for url %s server url ' |
|
101 |
'is: %s' |
|
|
101 | 'is: %s', parsed.netloc, parsed, request.host) | |
|
102 | 102 | came_from = default_came_from |
|
103 | 103 | elif any(bad_str in parsed.path for bad_str in ('\r', '\n')): |
|
104 |
log.error('Header injection detected `%s` for url %s server url ' |
|
|
105 |
|
|
|
104 | log.error('Header injection detected `%s` for url %s server url ', | |
|
105 | parsed.path, parsed) | |
|
106 | 106 | came_from = default_came_from |
|
107 | 107 | |
|
108 | 108 | return came_from or default_came_from |
@@ -29,6 +29,8 b' from rhodecode.lib import helpers as h' | |||
|
29 | 29 | from rhodecode.lib import audit_logger |
|
30 | 30 | from rhodecode.lib.auth import ( |
|
31 | 31 | LoginRequired, HasRepoGroupPermissionAnyDecorator, CSRFRequired) |
|
32 | from rhodecode.lib.utils2 import safe_int | |
|
33 | from rhodecode.model.db import UserGroup | |
|
32 | 34 | from rhodecode.model.repo_group import RepoGroupModel |
|
33 | 35 | from rhodecode.model.forms import RepoGroupPermsForm |
|
34 | 36 | from rhodecode.model.meta import Session |
@@ -101,6 +103,11 b' class RepoGroupPermissionsView(RepoGroup' | |||
|
101 | 103 | for change in changes['added'] + changes['updated'] + changes['deleted']: |
|
102 | 104 | if change['type'] == 'user': |
|
103 | 105 | affected_user_ids.append(change['id']) |
|
106 | if change['type'] == 'user_group': | |
|
107 | user_group = UserGroup.get(safe_int(change['id'])) | |
|
108 | if user_group: | |
|
109 | group_members_ids = [x.user_id for x in user_group.members] | |
|
110 | affected_user_ids.extend(group_members_ids) | |
|
104 | 111 | |
|
105 | 112 | events.trigger(events.UserPermissionsChange(affected_user_ids)) |
|
106 | 113 |
@@ -231,11 +231,13 b' def includeme(config):' | |||
|
231 | 231 | config.add_route( |
|
232 | 232 | name='repo_fork_new', |
|
233 | 233 | pattern='/{repo_name:.*?[^/]}/fork', repo_route=True, |
|
234 | repo_forbid_when_archived=True, | |
|
234 | 235 | repo_accepted_types=['hg', 'git']) |
|
235 | 236 | |
|
236 | 237 | config.add_route( |
|
237 | 238 | name='repo_fork_create', |
|
238 | 239 | pattern='/{repo_name:.*?[^/]}/fork/create', repo_route=True, |
|
240 | repo_forbid_when_archived=True, | |
|
239 | 241 | repo_accepted_types=['hg', 'git']) |
|
240 | 242 | |
|
241 | 243 | config.add_route( |
@@ -276,27 +278,29 b' def includeme(config):' | |||
|
276 | 278 | config.add_route( |
|
277 | 279 | name='pullrequest_new', |
|
278 | 280 | pattern='/{repo_name:.*?[^/]}/pull-request/new', |
|
279 |
repo_route=True, repo_accepted_types=['hg', 'git'] |
|
|
281 | repo_route=True, repo_accepted_types=['hg', 'git'], | |
|
282 | repo_forbid_when_archived=True) | |
|
280 | 283 | |
|
281 | 284 | config.add_route( |
|
282 | 285 | name='pullrequest_create', |
|
283 | 286 | pattern='/{repo_name:.*?[^/]}/pull-request/create', |
|
284 |
repo_route=True, repo_accepted_types=['hg', 'git'] |
|
|
287 | repo_route=True, repo_accepted_types=['hg', 'git'], | |
|
288 | repo_forbid_when_archived=True) | |
|
285 | 289 | |
|
286 | 290 | config.add_route( |
|
287 | 291 | name='pullrequest_update', |
|
288 | 292 | pattern='/{repo_name:.*?[^/]}/pull-request/{pull_request_id:\d+}/update', |
|
289 | repo_route=True) | |
|
293 | repo_route=True, repo_forbid_when_archived=True) | |
|
290 | 294 | |
|
291 | 295 | config.add_route( |
|
292 | 296 | name='pullrequest_merge', |
|
293 | 297 | pattern='/{repo_name:.*?[^/]}/pull-request/{pull_request_id:\d+}/merge', |
|
294 | repo_route=True) | |
|
298 | repo_route=True, repo_forbid_when_archived=True) | |
|
295 | 299 | |
|
296 | 300 | config.add_route( |
|
297 | 301 | name='pullrequest_delete', |
|
298 | 302 | pattern='/{repo_name:.*?[^/]}/pull-request/{pull_request_id:\d+}/delete', |
|
299 | repo_route=True) | |
|
303 | repo_route=True, repo_forbid_when_archived=True) | |
|
300 | 304 | |
|
301 | 305 | config.add_route( |
|
302 | 306 | name='pullrequest_comment_create', |
@@ -319,6 +323,9 b' def includeme(config):' | |||
|
319 | 323 | name='edit_repo_advanced', |
|
320 | 324 | pattern='/{repo_name:.*?[^/]}/settings/advanced', repo_route=True) |
|
321 | 325 | config.add_route( |
|
326 | name='edit_repo_advanced_archive', | |
|
327 | pattern='/{repo_name:.*?[^/]}/settings/advanced/archive', repo_route=True) | |
|
328 | config.add_route( | |
|
322 | 329 | name='edit_repo_advanced_delete', |
|
323 | 330 | pattern='/{repo_name:.*?[^/]}/settings/advanced/delete', repo_route=True) |
|
324 | 331 | config.add_route( |
@@ -97,9 +97,10 b' class TestRepoCommitCommentsView(TestCon' | |||
|
97 | 97 | comment_id = ChangesetComment.query().first().comment_id |
|
98 | 98 | assert notification.type_ == Notification.TYPE_CHANGESET_COMMENT |
|
99 | 99 | |
|
100 | sbj = 'left {0} on commit `{1}` in the {2} repository'.format( | |
|
101 | comment_type, h.show_id(commit), backend.repo_name) | |
|
102 | assert sbj in notification.subject | |
|
100 | author = notification.created_by_user.username_and_name | |
|
101 | sbj = '{0} left a {1} on commit `{2}` in the {3} repository'.format( | |
|
102 | author, comment_type, h.show_id(commit), backend.repo_name) | |
|
103 | assert sbj == notification.subject | |
|
103 | 104 | |
|
104 | 105 | lnk = (u'/{0}/changeset/{1}#comment-{2}'.format( |
|
105 | 106 | backend.repo_name, commit_id, comment_id)) |
@@ -134,12 +135,18 b' class TestRepoCommitCommentsView(TestCon' | |||
|
134 | 135 | if backend.alias == 'svn': |
|
135 | 136 | response.mustcontain( |
|
136 | 137 | '''data-f-path="vcs/commands/summary.py" ''' |
|
137 |
'''id=" |
|
|
138 | '''data-anchor-id="c-300-ad05457a43f8"''' | |
|
138 | 139 | ) |
|
139 | else: | |
|
140 | if backend.alias == 'git': | |
|
140 | 141 | response.mustcontain( |
|
141 | 142 | '''data-f-path="vcs/backends/hg.py" ''' |
|
142 |
'''id=" |
|
|
143 | '''data-anchor-id="c-883e775e89ea-9c390eb52cd6"''' | |
|
144 | ) | |
|
145 | ||
|
146 | if backend.alias == 'hg': | |
|
147 | response.mustcontain( | |
|
148 | '''data-f-path="vcs/backends/hg.py" ''' | |
|
149 | '''data-anchor-id="c-e58d85a3973b-9c390eb52cd6"''' | |
|
143 | 150 | ) |
|
144 | 151 | |
|
145 | 152 | assert Notification.query().count() == 1 |
@@ -150,12 +157,12 b' class TestRepoCommitCommentsView(TestCon' | |||
|
150 | 157 | assert notification.type_ == Notification.TYPE_CHANGESET_COMMENT |
|
151 | 158 | |
|
152 | 159 | assert comment.revision == commit_id |
|
153 | sbj = 'left {comment_type} on commit `{commit}` ' \ | |
|
154 | '(file: `{f_path}`) in the {repo} repository'.format( | |
|
155 | commit=h.show_id(commit), | |
|
156 |
|
|
|
157 | comment_type=comment_type) | |
|
158 |
assert sbj |
|
|
160 | ||
|
161 | author = notification.created_by_user.username_and_name | |
|
162 | sbj = '{0} left a {1} on file `{2}` in commit `{3}` in the {4} repository'.format( | |
|
163 | author, comment_type, f_path, h.show_id(commit), backend.repo_name) | |
|
164 | ||
|
165 | assert sbj == notification.subject | |
|
159 | 166 | |
|
160 | 167 | lnk = (u'/{0}/changeset/{1}#comment-{2}'.format( |
|
161 | 168 | backend.repo_name, commit_id, comment.comment_id)) |
@@ -222,10 +229,10 b' class TestRepoCommitCommentsView(TestCon' | |||
|
222 | 229 | comment_id = ChangesetComment.query().first().comment_id |
|
223 | 230 | assert notification.type_ == Notification.TYPE_CHANGESET_COMMENT |
|
224 | 231 | |
|
225 | sbj = 'left note on commit `{0}` (status: Approved) ' \ | |
|
226 | 'in the {1} repository'.format( | |
|
227 | h.show_id(commit), backend.repo_name) | |
|
228 |
assert sbj |
|
|
232 | author = notification.created_by_user.username_and_name | |
|
233 | sbj = '[status: Approved] {0} left a note on commit `{1}` in the {2} repository'.format( | |
|
234 | author, h.show_id(commit), backend.repo_name) | |
|
235 | assert sbj == notification.subject | |
|
229 | 236 | |
|
230 | 237 | lnk = (u'/{0}/changeset/{1}#comment-{2}'.format( |
|
231 | 238 | backend.repo_name, commit_id, comment_id)) |
@@ -88,7 +88,7 b' class TestRepoCommitView(object):' | |||
|
88 | 88 | response.mustcontain('21 files changed: 943 inserted, 288 deleted') |
|
89 | 89 | |
|
90 | 90 | # files op files |
|
91 |
response.mustcontain('File no |
|
|
91 | response.mustcontain('File not present at commit: %s' % | |
|
92 | 92 | _shorten_commit_id(commit_id)) |
|
93 | 93 | |
|
94 | 94 | # svn uses a different filename |
@@ -133,7 +133,7 b' class TestRepoCommitView(object):' | |||
|
133 | 133 | response.mustcontain('21 files changed: 943 inserted, 288 deleted') |
|
134 | 134 | |
|
135 | 135 | # files op files |
|
136 |
response.mustcontain('File no |
|
|
136 | response.mustcontain('File not present at commit: %s' % | |
|
137 | 137 | _shorten_commit_id(commit_ids[1])) |
|
138 | 138 | response.mustcontain('Added docstrings to vcs.cli') # commit msg |
|
139 | 139 | response.mustcontain('Changed theme to ADC theme') # commit msg |
@@ -163,7 +163,7 b' class TestRepoCommitView(object):' | |||
|
163 | 163 | response.mustcontain(_shorten_commit_id(commit_ids[1])) |
|
164 | 164 | |
|
165 | 165 | # files op files |
|
166 |
response.mustcontain('File no |
|
|
166 | response.mustcontain('File not present at commit: %s' % | |
|
167 | 167 | _shorten_commit_id(commit_ids[1])) |
|
168 | 168 | |
|
169 | 169 | # svn is special |
@@ -293,26 +293,13 b' Added a symlink' | |||
|
293 | 293 | """ + diffs['svn'], |
|
294 | 294 | } |
|
295 | 295 | |
|
296 | def _check_diff_menus(self, response, right_menu=False,): | |
|
297 | # diff menus | |
|
298 |
for elem in ['Show |
|
|
299 | 'Raw Diff', 'Download Diff']: | |
|
296 | def _check_new_diff_menus(self, response, right_menu=False,): | |
|
297 | # individual file diff menus | |
|
298 | for elem in ['Show file before', 'Show file after']: | |
|
300 | 299 | response.mustcontain(elem) |
|
301 | 300 | |
|
302 | 301 | # right pane diff menus |
|
303 | 302 | if right_menu: |
|
304 |
for elem in [' |
|
|
305 |
' |
|
|
303 | for elem in ['Hide whitespace changes', 'Toggle Wide Mode diff', | |
|
304 | 'Show full context diff']: | |
|
306 | 305 | response.mustcontain(elem) |
|
307 | ||
|
308 | def _check_new_diff_menus(self, response, right_menu=False,): | |
|
309 | # diff menus | |
|
310 | for elem in ['Show file before', 'Show file after', | |
|
311 | 'Raw diff', 'Download diff']: | |
|
312 | response.mustcontain(elem) | |
|
313 | ||
|
314 | # right pane diff menus | |
|
315 | if right_menu: | |
|
316 | for elem in ['Ignore whitespace', 'Increase context', | |
|
317 | 'Hide comments']: | |
|
318 | response.mustcontain(elem) |
@@ -105,10 +105,8 b' class TestCompareView(object):' | |||
|
105 | 105 | response = self.app.get( |
|
106 | 106 | route_path('repo_compare', |
|
107 | 107 | repo_name=origin.repo_name, |
|
108 | source_ref_type="rev", | |
|
109 |
|
|
|
110 | target_ref_type="rev", | |
|
111 | target_ref=commit4.raw_id, | |
|
108 | source_ref_type="rev", source_ref=commit3.raw_id, | |
|
109 | target_ref_type="rev", target_ref=commit4.raw_id, | |
|
112 | 110 | params=dict(merge='1', target_repo=fork.repo_name) |
|
113 | 111 | )) |
|
114 | 112 | |
@@ -143,10 +141,8 b' class TestCompareView(object):' | |||
|
143 | 141 | response = self.app.get( |
|
144 | 142 | route_path('repo_compare', |
|
145 | 143 | repo_name=repo1.repo_name, |
|
146 | source_ref_type="branch", | |
|
147 |
|
|
|
148 | target_ref_type="branch", | |
|
149 | target_ref=commit_id1, | |
|
144 | source_ref_type="branch", source_ref=commit_id2, | |
|
145 | target_ref_type="branch", target_ref=commit_id1, | |
|
150 | 146 | params=dict(merge='1', target_repo=repo2.repo_name) |
|
151 | 147 | )) |
|
152 | 148 | |
@@ -156,9 +152,9 b' class TestCompareView(object):' | |||
|
156 | 152 | compare_page = ComparePage(response) |
|
157 | 153 | compare_page.contains_change_summary(1, 2, 0) |
|
158 | 154 | compare_page.contains_commits([commit1, commit2]) |
|
159 | compare_page.contains_file_links_and_anchors([ | |
|
160 | ('file1', 'a_c--826e8142e6ba'), | |
|
161 | ]) | |
|
155 | ||
|
156 | anchor = 'a_c-{}-826e8142e6ba'.format(commit0.short_id) | |
|
157 | compare_page.contains_file_links_and_anchors([('file1', anchor), ]) | |
|
162 | 158 | |
|
163 | 159 | # Swap is removed when comparing branches since it's a PR feature and |
|
164 | 160 | # it is then a preview mode |
@@ -200,10 +196,8 b' class TestCompareView(object):' | |||
|
200 | 196 | response = self.app.get( |
|
201 | 197 | route_path('repo_compare', |
|
202 | 198 | repo_name=repo1.repo_name, |
|
203 | source_ref_type="branch", | |
|
204 |
|
|
|
205 | target_ref_type="branch", | |
|
206 | target_ref=commit_id1, | |
|
199 | source_ref_type="branch", source_ref=commit_id2, | |
|
200 | target_ref_type="branch", target_ref=commit_id1, | |
|
207 | 201 | params=dict(merge='1', target_repo=repo2.repo_name), |
|
208 | 202 | )) |
|
209 | 203 | |
@@ -213,9 +207,8 b' class TestCompareView(object):' | |||
|
213 | 207 | compare_page = ComparePage(response) |
|
214 | 208 | compare_page.contains_change_summary(1, 2, 0) |
|
215 | 209 | compare_page.contains_commits([commit1, commit2]) |
|
216 | compare_page.contains_file_links_and_anchors([ | |
|
217 | ('file1', 'a_c--826e8142e6ba'), | |
|
218 | ]) | |
|
210 | anchor = 'a_c-{}-826e8142e6ba'.format(commit0.short_id) | |
|
211 | compare_page.contains_file_links_and_anchors([('file1', anchor), ]) | |
|
219 | 212 | |
|
220 | 213 | # Swap is removed when comparing branches since it's a PR feature and |
|
221 | 214 | # it is then a preview mode |
@@ -231,10 +224,8 b' class TestCompareView(object):' | |||
|
231 | 224 | response = self.app.get( |
|
232 | 225 | route_path('repo_compare', |
|
233 | 226 | repo_name=orig.repo_name, |
|
234 | source_ref_type="rev", | |
|
235 |
|
|
|
236 | target_ref_type="rev", | |
|
237 | target_ref="tip", | |
|
227 | source_ref_type="rev", source_ref="tip", | |
|
228 | target_ref_type="rev", target_ref="tip", | |
|
238 | 229 | params=dict(merge='1', target_repo=fork.repo_name), |
|
239 | 230 | ), |
|
240 | 231 | status=302) |
@@ -290,11 +281,9 b' class TestCompareView(object):' | |||
|
290 | 281 | response = self.app.get( |
|
291 | 282 | route_path('repo_compare', |
|
292 | 283 | repo_name=repo2.repo_name, |
|
293 | source_ref_type="rev", | |
|
294 | 284 | # parent of commit2, in target repo2 |
|
295 | source_ref=commit1.raw_id, | |
|
296 | target_ref_type="rev", | |
|
297 | target_ref=commit4.raw_id, | |
|
285 | source_ref_type="rev", source_ref=commit1.raw_id, | |
|
286 | target_ref_type="rev", target_ref=commit4.raw_id, | |
|
298 | 287 | params=dict(merge='1', target_repo=repo1.repo_name), |
|
299 | 288 | )) |
|
300 | 289 | response.mustcontain('%s@%s' % (repo2.repo_name, commit1.short_id)) |
@@ -304,9 +293,8 b' class TestCompareView(object):' | |||
|
304 | 293 | compare_page = ComparePage(response) |
|
305 | 294 | compare_page.contains_change_summary(1, 3, 0) |
|
306 | 295 | compare_page.contains_commits([commit2, commit3, commit4]) |
|
307 | compare_page.contains_file_links_and_anchors([ | |
|
308 | ('file1', 'a_c--826e8142e6ba'), | |
|
309 | ]) | |
|
296 | anchor = 'a_c-{}-826e8142e6ba'.format(commit1.short_id) | |
|
297 | compare_page.contains_file_links_and_anchors([('file1', anchor),]) | |
|
310 | 298 | |
|
311 | 299 | @pytest.mark.xfail_backends("svn") |
|
312 | 300 | def test_compare_cherry_pick_commits_from_top(self, backend): |
@@ -356,13 +344,10 b' class TestCompareView(object):' | |||
|
356 | 344 | response = self.app.get( |
|
357 | 345 | route_path('repo_compare', |
|
358 | 346 | repo_name=repo1.repo_name, |
|
359 | source_ref_type="rev", | |
|
360 | 347 | # parent of commit3, not in source repo2 |
|
361 | source_ref=commit2.raw_id, | |
|
362 | target_ref_type="rev", | |
|
363 | target_ref=commit5.raw_id, | |
|
364 | params=dict(merge='1'), | |
|
365 | )) | |
|
348 | source_ref_type="rev", source_ref=commit2.raw_id, | |
|
349 | target_ref_type="rev", target_ref=commit5.raw_id, | |
|
350 | params=dict(merge='1'),)) | |
|
366 | 351 | |
|
367 | 352 | response.mustcontain('%s@%s' % (repo1.repo_name, commit2.short_id)) |
|
368 | 353 | response.mustcontain('%s@%s' % (repo1.repo_name, commit5.short_id)) |
@@ -372,9 +357,8 b' class TestCompareView(object):' | |||
|
372 | 357 | compare_page.contains_commits([commit3, commit4, commit5]) |
|
373 | 358 | |
|
374 | 359 | # files |
|
375 | compare_page.contains_file_links_and_anchors([ | |
|
376 | ('file1', 'a_c--826e8142e6ba'), | |
|
377 | ]) | |
|
360 | anchor = 'a_c-{}-826e8142e6ba'.format(commit2.short_id) | |
|
361 | compare_page.contains_file_links_and_anchors([('file1', anchor),]) | |
|
378 | 362 | |
|
379 | 363 | @pytest.mark.xfail_backends("svn") |
|
380 | 364 | def test_compare_remote_branches(self, backend): |
@@ -382,15 +366,15 b' class TestCompareView(object):' | |||
|
382 | 366 | repo2 = backend.create_fork() |
|
383 | 367 | |
|
384 | 368 | commit_id1 = repo1.get_commit(commit_idx=3).raw_id |
|
369 | commit_id1_short = repo1.get_commit(commit_idx=3).short_id | |
|
385 | 370 | commit_id2 = repo1.get_commit(commit_idx=6).raw_id |
|
371 | commit_id2_short = repo1.get_commit(commit_idx=6).short_id | |
|
386 | 372 | |
|
387 | 373 | response = self.app.get( |
|
388 | 374 | route_path('repo_compare', |
|
389 | 375 | repo_name=repo1.repo_name, |
|
390 | source_ref_type="rev", | |
|
391 |
|
|
|
392 | target_ref_type="rev", | |
|
393 | target_ref=commit_id2, | |
|
376 | source_ref_type="rev", source_ref=commit_id1, | |
|
377 | target_ref_type="rev", target_ref=commit_id2, | |
|
394 | 378 | params=dict(merge='1', target_repo=repo2.repo_name), |
|
395 | 379 | )) |
|
396 | 380 | |
@@ -405,9 +389,9 b' class TestCompareView(object):' | |||
|
405 | 389 | |
|
406 | 390 | # files |
|
407 | 391 | compare_page.contains_file_links_and_anchors([ |
|
408 | ('vcs/backends/hg.py', 'a_c--9c390eb52cd6'), | |
|
409 | ('vcs/backends/__init__.py', 'a_c--41b41c1f2796'), | |
|
410 | ('vcs/backends/base.py', 'a_c--2f574d260608'), | |
|
392 | ('vcs/backends/hg.py', 'a_c-{}-9c390eb52cd6'.format(commit_id2_short)), | |
|
393 | ('vcs/backends/__init__.py', 'a_c-{}-41b41c1f2796'.format(commit_id1_short)), | |
|
394 | ('vcs/backends/base.py', 'a_c-{}-2f574d260608'.format(commit_id1_short)), | |
|
411 | 395 | ]) |
|
412 | 396 | |
|
413 | 397 | @pytest.mark.xfail_backends("svn") |
@@ -452,10 +436,8 b' class TestCompareView(object):' | |||
|
452 | 436 | response = self.app.get( |
|
453 | 437 | route_path('repo_compare', |
|
454 | 438 | repo_name=r2_name, |
|
455 | source_ref_type="branch", | |
|
456 |
|
|
|
457 | target_ref_type="branch", | |
|
458 | target_ref=commit_id2, | |
|
439 | source_ref_type="branch", source_ref=commit_id1, | |
|
440 | target_ref_type="branch", target_ref=commit_id2, | |
|
459 | 441 | params=dict(merge='1', target_repo=r1_name), |
|
460 | 442 | )) |
|
461 | 443 | |
@@ -473,10 +455,8 b' class TestCompareView(object):' | |||
|
473 | 455 | response = self.app.get( |
|
474 | 456 | route_path('repo_compare', |
|
475 | 457 | repo_name=r2_name, |
|
476 | source_ref_type="branch", | |
|
477 |
|
|
|
478 | target_ref_type="branch", | |
|
479 | target_ref=commit_id2, | |
|
458 | source_ref_type="branch", source_ref=commit_id1, | |
|
459 | target_ref_type="branch", target_ref=commit_id2, | |
|
480 | 460 | params=dict(merge='1', target_repo=r1_name), |
|
481 | 461 | )) |
|
482 | 462 | |
@@ -496,10 +476,8 b' class TestCompareView(object):' | |||
|
496 | 476 | response = self.app.get( |
|
497 | 477 | route_path('repo_compare', |
|
498 | 478 | repo_name=backend.repo_name, |
|
499 | source_ref_type="rev", | |
|
500 |
|
|
|
501 | target_ref_type="rev", | |
|
502 | target_ref=commit1.raw_id, | |
|
479 | source_ref_type="rev", source_ref=commit0.raw_id, | |
|
480 | target_ref_type="rev", target_ref=commit1.raw_id, | |
|
503 | 481 | params=dict(merge='1') |
|
504 | 482 | ), |
|
505 | 483 | extra_environ=xhr_header,) |
@@ -515,10 +493,8 b' class TestCompareView(object):' | |||
|
515 | 493 | response = self.app.get( |
|
516 | 494 | route_path('repo_compare', |
|
517 | 495 | repo_name=badrepo, |
|
518 | source_ref_type="rev", | |
|
519 |
|
|
|
520 | target_ref_type="rev", | |
|
521 | target_ref='tip', | |
|
496 | source_ref_type="rev", source_ref='tip', | |
|
497 | target_ref_type="rev", target_ref='tip', | |
|
522 | 498 | params=dict(merge='1', target_repo=repo.repo_name) |
|
523 | 499 | ), |
|
524 | 500 | status=404) |
@@ -530,10 +506,8 b' class TestCompareView(object):' | |||
|
530 | 506 | response = self.app.get( |
|
531 | 507 | route_path('repo_compare', |
|
532 | 508 | repo_name=repo.repo_name, |
|
533 | source_ref_type="rev", | |
|
534 |
|
|
|
535 | target_ref_type="rev", | |
|
536 | target_ref='tip', | |
|
509 | source_ref_type="rev", source_ref='tip', | |
|
510 | target_ref_type="rev", target_ref='tip', | |
|
537 | 511 | params=dict(merge='1', target_repo=badrepo), |
|
538 | 512 | ), |
|
539 | 513 | status=302) |
@@ -548,10 +522,8 b' class TestCompareView(object):' | |||
|
548 | 522 | response = self.app.get( |
|
549 | 523 | route_path('repo_compare', |
|
550 | 524 | repo_name=backend_stub.repo_name, |
|
551 | source_ref_type="rev", | |
|
552 |
|
|
|
553 | target_ref_type="rev", | |
|
554 | target_ref=commit1.raw_id, | |
|
525 | source_ref_type="rev", source_ref=commit0.raw_id, | |
|
526 | target_ref_type="rev", target_ref=commit1.raw_id, | |
|
555 | 527 | )) |
|
556 | 528 | |
|
557 | 529 | # outgoing commits between those commits |
@@ -576,10 +548,8 b' class TestCompareView(object):' | |||
|
576 | 548 | response = self.app.get( |
|
577 | 549 | route_path('repo_compare', |
|
578 | 550 | repo_name=orig.repo_name, |
|
579 | source_ref_type="rev", | |
|
580 |
|
|
|
581 | target_ref_type="rev", | |
|
582 | target_ref="tip", | |
|
551 | source_ref_type="rev", source_ref="tip", | |
|
552 | target_ref_type="rev", target_ref="tip", | |
|
583 | 553 | params=dict(merge='1', target_repo=fork.repo_name), |
|
584 | 554 | ), |
|
585 | 555 | status=302) |
@@ -648,7 +618,7 b' class ComparePage(AssertResponse):' | |||
|
648 | 618 | for filename, file_id in files: |
|
649 | 619 | self.contains_one_anchor(file_id) |
|
650 | 620 | diffblock = doc.cssselect('[data-f-path="%s"]' % filename) |
|
651 |
assert len(diffblock) == |
|
|
621 | assert len(diffblock) == 2 | |
|
652 | 622 | assert len(diffblock[0].cssselect('a[href="#%s"]' % file_id)) == 1 |
|
653 | 623 | |
|
654 | 624 | def contains_change_summary(self, files_changed, inserted, deleted): |
@@ -694,4 +664,3 b' class ComparePage(AssertResponse):' | |||
|
694 | 664 | def target_source_are_enabled(self): |
|
695 | 665 | response = self.response |
|
696 | 666 | response.mustcontain("var enable_fields = true;") |
|
697 |
@@ -47,10 +47,8 b' class TestCompareView(object):' | |||
|
47 | 47 | route_path( |
|
48 | 48 | 'repo_compare', |
|
49 | 49 | repo_name=backend.repo_name, |
|
50 | source_ref_type="tag", | |
|
51 |
|
|
|
52 | target_ref_type="tag", | |
|
53 | target_ref=tag2), | |
|
50 | source_ref_type="tag", source_ref=tag1, | |
|
51 | target_ref_type="tag", target_ref=tag2), | |
|
54 | 52 | status=200) |
|
55 | 53 | |
|
56 | 54 | response.mustcontain('%s@%s' % (backend.repo_name, tag1)) |
@@ -69,18 +67,28 b' class TestCompareView(object):' | |||
|
69 | 67 | compare_page.contains_commits(commits) |
|
70 | 68 | |
|
71 | 69 | # files diff |
|
70 | short_id = short_id_new = '' | |
|
71 | if backend.alias == 'git': | |
|
72 | short_id = '5a3a8fb00555' | |
|
73 | short_id_new = '0ba5f8a46600' | |
|
74 | if backend.alias == 'hg': | |
|
75 | short_id = '17544fbfcd33' | |
|
76 | short_id_new = 'a7e60bff65d5' | |
|
77 | ||
|
72 | 78 | compare_page.contains_file_links_and_anchors([ |
|
73 | ('docs/api/utils/index.rst', 'a_c--1c5cf9e91c12'), | |
|
74 | ('test_and_report.sh', 'a_c--e3305437df55'), | |
|
75 | ('.hgignore', 'a_c--c8e92ef85cd1'), | |
|
76 | ('.hgtags', 'a_c--6e08b694d687'), | |
|
77 | ('docs/api/index.rst', 'a_c--2c14b00f3393'), | |
|
78 | ('vcs/__init__.py', 'a_c--430ccbc82bdf'), | |
|
79 | ('vcs/backends/hg.py', 'a_c--9c390eb52cd6'), | |
|
80 |
('vcs/ |
|
|
81 | ('vcs/utils/annotate.py', 'a_c--7abc741b5052'), | |
|
82 |
('vcs/utils/ |
|
|
83 |
('vcs/utils/ |
|
|
79 | # modified | |
|
80 | ('docs/api/utils/index.rst', 'a_c-{}-1c5cf9e91c12'.format(short_id)), | |
|
81 | ('test_and_report.sh', 'a_c-{}-e3305437df55'.format(short_id)), | |
|
82 | # added | |
|
83 | ('.hgignore', 'a_c-{}-c8e92ef85cd1'.format(short_id_new)), | |
|
84 | ('.hgtags', 'a_c-{}-6e08b694d687'.format(short_id_new)), | |
|
85 | ('docs/api/index.rst', 'a_c-{}-2c14b00f3393'.format(short_id_new)), | |
|
86 | ('vcs/__init__.py', 'a_c-{}-430ccbc82bdf'.format(short_id_new)), | |
|
87 | ('vcs/backends/hg.py', 'a_c-{}-9c390eb52cd6'.format(short_id_new)), | |
|
88 | ('vcs/utils/__init__.py', 'a_c-{}-ebb592c595c0'.format(short_id_new)), | |
|
89 | ('vcs/utils/annotate.py', 'a_c-{}-7abc741b5052'.format(short_id_new)), | |
|
90 | ('vcs/utils/diffs.py', 'a_c-{}-2ef0ef106c56'.format(short_id_new)), | |
|
91 | ('vcs/utils/lazy.py', 'a_c-{}-3150cb87d4b7'.format(short_id_new)), | |
|
84 | 92 | ]) |
|
85 | 93 | |
|
86 | 94 | @pytest.mark.xfail_backends("svn", msg="Depends on branch and tag support") |
@@ -106,10 +114,8 b' class TestCompareView(object):' | |||
|
106 | 114 | route_path( |
|
107 | 115 | 'repo_compare', |
|
108 | 116 | repo_name=backend.repo_name, |
|
109 | source_ref_type='branch', | |
|
110 | source_ref=data['branch'], | |
|
111 | target_ref_type="tag", | |
|
112 | target_ref=data['tag'], | |
|
117 | source_ref_type='branch', source_ref=data['branch'], | |
|
118 | target_ref_type="tag", target_ref=data['tag'], | |
|
113 | 119 | )) |
|
114 | 120 | |
|
115 | 121 | response.mustcontain('%s@%s' % (backend.repo_name, data['branch'])) |
@@ -123,10 +129,8 b' class TestCompareView(object):' | |||
|
123 | 129 | route_path( |
|
124 | 130 | 'repo_compare', |
|
125 | 131 | repo_name=backend.repo_name, |
|
126 | source_ref_type="branch", | |
|
127 |
|
|
|
128 | target_ref_type="branch", | |
|
129 | target_ref=head_id, | |
|
132 | source_ref_type="branch", source_ref=head_id, | |
|
133 | target_ref_type="branch", target_ref=head_id, | |
|
130 | 134 | )) |
|
131 | 135 | |
|
132 | 136 | response.mustcontain('%s@%s' % (backend.repo_name, head_id)) |
@@ -138,16 +142,16 b' class TestCompareView(object):' | |||
|
138 | 142 | def test_compare_commits(self, backend): |
|
139 | 143 | repo = backend.repo |
|
140 | 144 | commit1 = repo.get_commit(commit_idx=0) |
|
145 | commit1_short_id = commit1.short_id | |
|
141 | 146 | commit2 = repo.get_commit(commit_idx=1) |
|
147 | commit2_short_id = commit2.short_id | |
|
142 | 148 | |
|
143 | 149 | response = self.app.get( |
|
144 | 150 | route_path( |
|
145 | 151 | 'repo_compare', |
|
146 | 152 | repo_name=backend.repo_name, |
|
147 | source_ref_type="rev", | |
|
148 |
|
|
|
149 | target_ref_type="rev", | |
|
150 | target_ref=commit2.raw_id, | |
|
153 | source_ref_type="rev", source_ref=commit1.raw_id, | |
|
154 | target_ref_type="rev", target_ref=commit2.raw_id, | |
|
151 | 155 | )) |
|
152 | 156 | response.mustcontain('%s@%s' % (backend.repo_name, commit1.raw_id)) |
|
153 | 157 | response.mustcontain('%s@%s' % (backend.repo_name, commit2.raw_id)) |
@@ -158,6 +162,6 b' class TestCompareView(object):' | |||
|
158 | 162 | |
|
159 | 163 | # outgoing commits between those commits |
|
160 | 164 | compare_page.contains_commits([commit2]) |
|
161 | compare_page.contains_file_links_and_anchors([ | |
|
162 | ('.hgignore', 'a_c--c8e92ef85cd1'), | |
|
163 | ]) | |
|
165 | anchor = 'a_c-{}-c8e92ef85cd1'.format(commit2_short_id) | |
|
166 | response.mustcontain(anchor) | |
|
167 | compare_page.contains_file_links_and_anchors([('.hgignore', anchor),]) |
@@ -303,6 +303,27 b' class TestRepoForkViewTests(TestControll' | |||
|
303 | 303 | assert response.json == {u'data': [], u'draw': None, |
|
304 | 304 | u'recordsFiltered': 0, u'recordsTotal': 0} |
|
305 | 305 | |
|
306 | @pytest.mark.parametrize('url_type', [ | |
|
307 | 'repo_fork_new', | |
|
308 | 'repo_fork_create' | |
|
309 | ]) | |
|
310 | def test_fork_is_forbidden_on_archived_repo(self, backend, xhr_header, user_util, url_type): | |
|
311 | user = user_util.create_user(password='qweqwe') | |
|
312 | self.log_user(user.username, 'qweqwe') | |
|
313 | ||
|
314 | # create a temporary repo | |
|
315 | source = user_util.create_repo(repo_type=backend.alias) | |
|
316 | repo_name = source.repo_name | |
|
317 | repo = Repository.get_by_repo_name(repo_name) | |
|
318 | repo.archived = True | |
|
319 | Session().commit() | |
|
320 | ||
|
321 | response = self.app.get( | |
|
322 | route_path(url_type, repo_name=repo_name), status=302) | |
|
323 | ||
|
324 | msg = 'Action not supported for archived repository.' | |
|
325 | assert_session_flash(response, msg) | |
|
326 | ||
|
306 | 327 | |
|
307 | 328 | class TestSVNFork(TestController): |
|
308 | 329 | @pytest.mark.parametrize('route_name', [ |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed | |
This diff has been collapsed as it changes many lines, (823 lines changed) Show them Hide them |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed, binary diff hidden |
|
1 | NO CONTENT: file was removed, binary diff hidden |
|
1 | NO CONTENT: file was removed, binary diff hidden |
|
1 | NO CONTENT: file was removed, binary diff hidden |
|
1 | NO CONTENT: file was removed, binary diff hidden |
|
1 | NO CONTENT: file was removed, binary diff hidden |
|
1 | NO CONTENT: file was removed, binary diff hidden |
|
1 | NO CONTENT: file was removed, binary diff hidden |
|
1 | NO CONTENT: file was removed, binary diff hidden |
|
1 | NO CONTENT: file was removed, binary diff hidden |
|
1 | NO CONTENT: file was removed, binary diff hidden |
|
1 | NO CONTENT: file was removed, binary diff hidden |
|
1 | NO CONTENT: file was removed, binary diff hidden |
|
1 | NO CONTENT: file was removed, binary diff hidden |
|
1 | NO CONTENT: file was removed, binary diff hidden |
|
1 | NO CONTENT: file was removed, binary diff hidden |
|
1 | NO CONTENT: file was removed, binary diff hidden |
|
1 | NO CONTENT: file was removed, binary diff hidden |
|
1 | NO CONTENT: file was removed, binary diff hidden |
|
1 | NO CONTENT: file was removed, binary diff hidden |
|
1 | NO CONTENT: file was removed, binary diff hidden |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
General Comments 0
You need to be logged in to leave comments.
Login now